글을 읽거나 쓸 때 단순한 문장에서는 한 단어가 한 문법적 역할을 담당하지만, 문장이 조금이라도 복잡해지면 여러 단어가 구를 이루어 한 가지 역할을 갖습니다. 예를 들어, ‘나는 오늘 맛있는 밥을 먹었어’ 라는 문장에서 목적어는 2개의 단어로 구성된 단어구, ‘맛있는 밥’ 입니다. NLP 작업 속에서도 동일하게 문장을 읽고 쓸 때, 여러 단어로 구성된 구문을 이해하고 활용할 줄 알아야합니다. 이때, 여러 단어를 하나의 구로 이해하는 것을 부분 구문 분석(shallow parsing) 또는 청크 나누기(chunking)이라고 합니다.
부분 구문 분석
부분 구문 분석은 여러 개의 형태소 혹은 단어가 구문적으로 하나의 구조에 포함된 경우, 단어들을 하나의 단위로 묶어주는 역할을 합니다. 즉 부분 구문 분석의 목적은 명사, 동사, 형용사 등의 다양한 문법 요소로 구성된 고차원의 단위를 다루는 것으로, 더 높은 수준의 모듈에서 쉽게 구문을 활용할 수 있도록 합니다. 명사구, 동사구 등의 다양한 구문을 분석해낼 수 있습니다.
영어처럼 많이 사용하는 언어에 대해서는 부분 구문 분석을 잘 처리할 수 있도록 사전 학습된 모델을 제공합니다. spaCy 패키지를 통해 부분 구문 분석을 진행할 수 있습니다. 아래 예시 코드에서는 ‘Do not count the eggs before they hatch’ 라는 문장에 대해 부분 구문 분석을 통해 명사구를 추출합니다.
import spacy
nlp = spacy.load('en')
doc = nlp(u"Do not count the eggs before they hatch")
for chunk in doc.noun_chunks:
print('{} - {}'.format(chunk, chunk.label_))
Python
복사
위 문장에서 단순히 명사 단위로 eggs, they 만 추출하는 것이 아니라, 구문적으로 함께 목적어를 구성하는 the eggs를 구 단위로 잘 추출해내는 것을 아래 출력 결과에서 볼 수 있습니다.
[output]
the eggs - NP
they - NP
Plain Text
복사
개체명
또 다른 유용한 부분 구문 분석 단위는 개체명(named entity)을 활용하는 것입니다. 앞서 2-5 단어 분류하기: 품사 태깅 에서 언급한 것 처럼 ‘Coca Cola’나 ‘Deep Daiv’와 같이 문법적으로는 함께 있는게 어색할 수 있으나, 고유명사로써 특정한 개체를 지칭할 때 널리 사용되는 단어구를 문장 속 명사구를 분석하는 단위로 활용할 수 있습니다.
John was born in Chicken, Alaska and studied at Cranberry Lemon University
-> John : 사람 이름
-> Chicken : 지명
-> Alaska : 지명
-> Cranberry Lemon University : 학교명
Plain Text
복사
이전 글 읽기