Lexical Analysis
Lexical Analysis(어휘 분석) 이라함은 말 그대로 단어수준 토큰 수준으로 의미를 보존할 수 있는 최소한의 수준에서 분석을 하는 것을 의미한다. 어떠한 일정한 순서가 있는 characters 들의 조합을 tokens으로 변화하는 것을 의미한다. 이 tokens은 의미를 가지고 있는 character string이다. NLP에서는 morpheme(형태소)가 가장 기본적인 유닛이 되고, text mining에서는 단어 관점에서도 tokens을 사용하기도 한다.
process of lexical analysis
- Tokenizing
- Part-of-Speech (POS) tagging
- Additional analysis : NER, noun phrase recognition, Sentence split, Chunking, etc.
토큰화를 한 후 POS 를 tagging하고 필요하다면 객체명 인식, 명사구를 인식하는 등을 수행한다.
POS는 각각의 NNP, NNP, RB 등 각 단어에 해당하는 형태소를 파악해주는 것이고, 객체명 인식의 경우에는 Clinton은 사람이고 previously는 날짜를 지칭하는 객체, token이라는 것을 해주는 것이다. Co-reference에서는 문장 안에서 서로 다른 표현들이 같은 객체를 지칭하는가에 대한 것을 다룬다.
어휘 분석의 가장 첫 번째 단계는 문장 자체를 구분하는 것이다. 이 문장은 NLP관점에서는 굉장히 중요할수도 있지만, Text Mining의 topic modeling에서는 하나의 문서에서 토큰들의 집합을 가지고 vector화 시키기 때문에 문장이 크게 중요하지 않다. 문장을 구분할 때에 ".", "!", "?" 같은 경우에는 구분하기가 쉽지만 "MR.X", "3.14" 등과 같은 단어에서 "."은 문장을 구분하는 단위가 될 수 없기 때문에 이런 경우에 문장 구분에 어려움을 겪는다. 그리고 quote(인용) 부호를 통해서 문장안에 문장이 들어갈 수 있는 문제도 발생할 수 있다. 이런 문제를 해결하기 위해 분리된 문장들을 기준으로 학습을 시키는게 일반적인 과정이다.
Tokenization
tokenization은 말그대로 문서를 하나의 의미를 지니고 있는 가장 기본적인 유닛인 token으로 변환하는 것이다. 단어, 숫자, space tokens 등으로 변환할 수 있다. tokenization에는 MC-tokenizer, Scan-tokenizer 가 있다. 각 토큰화하는 오픈소스들을 상황에 맞게 사용해야한다. 숫자가 의미있는 값을 지닌다면 MC-tokenizer보단 Scan-tokenizer를 사용하는 것이 더 좋을 것이다. 이러한 자연어처리의 가장 기본적인 과정인 토큰화를 하는 과정 역시 쉽지 않다.(e.g. C++, Zzzz 같은경우)
Morphological Analysis
Morphological(형태소적, 문법적인) 에 변종들이 존재한다. 이러한 변종들을 관리하기 위해 Stemming과 Lemmatization을 사용한다. 예를 들어 car -> cars, give -> gives, gave, given 각 단어들의 의미를 해치지 않는 선에서 뿌리를 찾아가는 것인데 Stemming은 단어의 베이스 form을 찾는 것이고, Lemmatization은 품사를 보존하는 단어의 원형을 찾는 것이다.
Stemming
stemming은 정보추출관점에서 많이 사용되는 방법이고, rule-based 알고리즘을 통해서 구현이 가능하다. 대표적으로는 Porter stemmer가 있다. corpus에 존재하는 여러단어들의 base form을 찾는 것이라 단순하고 빠르다. 하지만 Rule base의 단점은 언어에 종속적일 수 있고, stemming을 했을 때 나오는 단어가 해당 언어에 존재하지 않는 경우도 발생한다. [ e.g computers -> comput ] 그리고 의미를 보존하고자는 하지만 base form을 찾는 방법으로 접근하기 때문에 서로 다른 단어가 하나의 단어로 form되는 경우가 발생할 수 있다. [ e.g. army, arm -> arm / stocks, stockings -> stock ]
Lemmatization
Lemmatization에서는 base form을 하나의 단어로 정의한다. 해당 단어들 중에서도 root form 의 단어이기 때문에 실질적으로 존재하는 단어를 기준으로 하기 때문에 stemming보단 적은 에러를 가지지만 stemming보다는 복잡한 알고리즘을 가지기 때문에 속도가 느리다. Semantic이 중요한 경우에는 Lemmatization을 사용한다.
Part-of-Speech(POS) Tagging
형태소를 분석하는 목적은 문장이 주어졌을 때, 각각의 단어 혹은 토큰들에 해당하는 POS tag를 찾아주는 단계다. 같은 토큰이어도 품사에 따라 POS tag가 달라질 수 있다. 상황에 맞게 앞뒤 문맥에 맞게 해당하는 단어들이 어떠한 품사를 가지고 있는지 판단하는 것이 POS tagging의 목적이다. 각 언어에는 Tagsets이 있는데 tagsets이 얼마만큼 잘 되어 있는가에 따라서 성능이 변한다. 한글 형태소 같은 경우에는 세종품사태그, KKMA 단일 태그 등이 있다. 같은 언어이지만 형태소 셋을 어떻게 하냐에 따라서 최종 결과물 역시 달라진다. 만약 서로 다른 domain의 data를 가지고 POS tagging을 하게 되면 성능이 저하된다.
Algorithms used in POS-Tagging
- Decision Tree
- Hidden Markov Model ( HMMs )
- Support Vector Machines ( SVM )
- Transformation-based Taggers ( e.g. the Brill Tagger )
POS 태깅을 하는 알고리즘은 다음과 같다.
Pointwise prediction : 각각의 단어들을 개별적으로 classifier에 의해서 형태소를 찾는 것이다. 일정한 시퀀스를 탐색한 후 가운데 존재하는 단어는 어떤 품사를 띄는지 하나하나씩 파악하는 과정이다.
Generative sequence models : pointwise처럼 문장의 일부를 입력으로 받는 것이 아니라 문장의 전체를 입력으로 받는다. HMM같은 경우에는 첫번째 단어에 대한 태그를 달고, 두 번째 단어에 대한 태그를 달고 순차적으로 태깅을 한다.
Discriminative sequence models : CRF 같은 경우에는 각각 해당하는 단어들에 토큰을 한 번에 일괄적으로 예측하는 모델이다.
최근에는 BERT, GPT 같은 Deep Learning 모델이 많이 나오고 있다.
'Deep Learning > Natural Language Processing' 카테고리의 다른 글
[NLP] Stemming and Lemmatization (0) | 2022.01.18 |
---|---|
[NLP] Tokenization (0) | 2022.01.18 |
[NLP] Transformer (0) | 2021.10.21 |
[NLP] INTRODUCTION (2) | 2021.06.26 |
[NLP] BERT (0) | 2021.06.26 |