문장은 단순한 단어의 나열이 아니라, 계층적 구조를 가지고 있다.
이 구조는 구성소(constituent) 단위로 쪼갤 수 있으며,
각 구성소는 다시 더 작은 단위로 나눌 수 있는 트리 구조(tree structure)로 표현할 수 있습니다.
이러한 구조는 구문 분석(Constituency Parsing)을 통해 명확하게 드러남..
트리그릴때 internal node 는 품사나 태그를..
리프 노드에는 단어를..
계층적인 것을 확인할수있음
문장이 주어졌을때 구성소들간에 관계. 이해를 하기 위해서 구문분석을 한다…
이 트리를 머신이 자동으로 그리게 하고 싶다.. -> 그러면 룰(rule)이 필요함
어떤 룰을 참고해서 트리를 그리게 하고 싶은 거임..
그 룰들의 집합체 → context - free grammars
구문분석을 위한 문법
phrase-structure grammar 도 같은 의미
CFG → 머신이 룰을 찾게 하게끔 문법을 제공함
rule 안에 rule을 만들어서 계층적으로 구성해놓을 수 있다..
구 안에
head 냐 dependent냐… 로 구분해놓을 수 있다
명사구가 있다면?
head → woman, conference : 주체
dependent → 꾸며주는 말, 의존
헤드냐 dependent이냐…로 단어별로 구분할수있다..
dependent 중에서도
예시:
단어 하나 차이로도 전체 구조 달라질 수 있음
→ 문장을 더 정확하게 이해할 수 있는 단서 제공함
Time flies like an arrow.
문장은 겉보기엔 단순하지만, 다양한 구조적 해석 가능함
→ CFG로 어떻게 분석되는지 보는 게 포인트임
해당 문장을 분석하기 위해 사용된 생성 규칙들:
S → NP VP
NP → N | DET N
VP → V NP | VP PP | V
PP → P NP
P → like
V → flies | like
N → time | fruit | flies | arrow | banana
DET → a | an
CFG만 있으면 가능한 구조 여러 개 생성됨 → 문장 해석 다르게 가능
➡️ 정상적인 해석
➡️ flies는 동사, like는 전치사
➡️ 비정상적 해석 같지만 CFG 상으론 가능함
➡️ CFG는 문맥 모름, 단어 의미 구별 못 함
S = np + vp 로 시작
np 가 어떤 것으로 분리될수있을까?
np = n 으로 확장, vp 도 3개 중에.. 하나 고르기.. 이런식으로 쭉쭉..
구문분석을 완벽하게 했다고 하더라도 사람이 이해하거나 그럴싸한 문장을 만들수있다라거나 그런 문장이다라는 건 아니다..
CFG는 트리 구조만 만들 수 있음
어떤 해석이 더 자연스러운지는 사람이 판단해야 함
CFG는 모호성(ambiguity)을 처리하지 못함 → 가능한 구조 다 만들어냄
규칙을 추가한다면??
center embedding이 반복적으로 계속 구성되어있다면 (관계절 안에 관계절 안에 …)
→ 사람이 이해하기 되게 어려운 문장임에도 불구하고
→ 머신이 구문분석을 해낼 수 잇음
→ 그렇다고 이게 사람이 이해할만한 문장이라고… 볼 수 없음..
CFGs are unable to capture
bounded recursion (e.g., embedding only one relative clause)
제한된 recursion 이 있는 겨우(한번)
구문분석은 하는데, 중첩 임베딩이 있다고 인식(구문분석은 하지만 이게 사람이 이해할수없다라는 것을 알 수 없음, 이런 복잡함을 인지하지 못함)을 하지 않음
Top-Down 방식
Bottom-Up 방식
구성소가 아니라 단어들의 관계찾기. 그중에서 의존관계 찾기
문장에서 단어들이 어떻게 서로 의미적으로 연결되는지를 나타내는 방법
문장을 구성하는 단어들은 단순히 나열된 것이 아니라
의존 관계(dependency relation)로 연결되어 있음
head와 dependent를 알아내는게 목적
dependent의 type에 따라서 어떤 의존관계인지..
Subject, Direct object, Indirect object인지 같은 문법적 특성에 따라서 dependency를 찾는다..
head를 기준으로 dependent를 찾기 -> 헤드가 subject 라면 -> 주어를 dependent가 서술해주는구나...
대표적인 Relation Types
"어떤 단어가 어떤 단어를 설명하는지"를 명확히 연결
근데 이 3개말고 더 많음
-> dependency treebank (미리 정의해놓은 tagset) -> stanford,, ... ,, Universal dependencies.
universal dependencies 를 제일 많이 씀
구체적인 의존관계 candidate set을 사람들이 많이 쓴다.
큰 카테고리 2개로 나눌 수 있음
문장에서 주어(subject)에 대해 설명하는 부분, 즉 **술어(predicate)**와 관련된 관계들을 말함
이건 문장의 핵심 구성요소들 사이의 관계임
문장의 중심 동사와 연결되는 중요한 부분들임(형용사, 부사, 전치사 등)
단어가 다른 단어를 꾸며줄 때 사용하는 관계들
문장의 부가적인 정보를 주는 역할을 함
이런 것들은 필수 요소는 아니지만, 문장을 풍부하게 만드는 보조 정보들
이렇게 하면 머신러닝 모델이 문장을 이해하거나 생성할 때
→ 중요한 정보와 옵션 정보를 구별해서 더 똑똑하게 작동 가능함
내가 마스크를 선호했다..
Core Arguments of Clausal Predicates
Non-Core Dependents of Clausal Predicates
...
core만 잘 찾기..
기능적 범주 (Head 기준) | 명사 관련 요소 (Nominals) | 절 관련 요소 (Clauses) | 수식어 관련 요소 (Modifier Words) | 기능어 (Function Words) |
---|---|---|---|---|
절의 핵심 성분 (Core Arguments of Clausal Predicates) | nsubj (명사 주어)obj (목적어)iobj (간접 목적어) | csubj (절 주어)ccomp (절 목적어)xcomp (보어절) | ||
절의 비핵심 성분 (Non-Core Dependents of Clausal Predicates) | obl (부사어/전치사구)vocative (호격)expl (형식 주어)dislocated (이탈어순) | advcl (부사절) | advmod (부사 수식)discourse (담화 요소) | aux (조동사)cop (연결동사)mark (접속사) |
명사의 수식 요소 (Dependents of Nominals) | nmod (전치사구 수식)appos (동격)nummod (수사 수식) | acl (관계절 등) | amod (형용사 수식) | det (한정사)case (전치사 등) |
shift reduce parsing -> stack 을 이용
stack을 이용해서 dependency parsing 하는 과정을 아는 것이 중요
결국 transition operator 를 각 단계별로 골라서 shift or reduce 를 하고 그 word간 관계에 따라서 Dependency Relation 을 정의해주는 것..
head
가 된다 → Right-Archead
가 된다 → Left-Arc일단그러면 shift 먼저.
그러고 나면 세가지 opertaion 다 가능
이후에 shift 수행 -> the 스택에 추가
또 shift
마지막 shift 해주면 버퍼가 비었음
이제는 shift 못함 (버퍼가 비어있어서) -> Left right arc 만 가능
그럼 최종적으로 stack 에는 Root 만남음
final state
그러면 releation 기반으로 화살표 그려줄 수 있음
root -> book -> me, book
book -> flight -> morning, the
이 결과에다가 dependency labeling 까지하면 더 ... 정확한 의미 해석이 가능한 구조..