NLP(Natural Language Procssing)의 이해
먼저 자연어 (Natural Language) 란 무엇일까? 자연어란 컴퓨터에서 사용하는 프로그램 작성 언어 (기계어)와 구분하여 우리가 일상 생활에서 사용하는 언어이다.
자연어 처리 (NLP, Natural Language Processing) |
컴퓨터를 이용해서 사람의 자연어를 분석하고 처리하는 기술 | |
자연어 이해 (NLU, Natural Language Understanding) |
사람이 이해하는 자연어를 컴퓨터가 이해할 수 있는 언어으로 바꾸는 과정 | |
자연어 생성 (NLG, Natural Language Generation) |
컴퓨터에서 사용하는 언어를 사람이 이해할수 있는 자연어로 바꾸는 과정 |
NLP에는 NLU(Natural Language Understanding, 자연어 이해) 와 NLG (Natural Language Generation, 자연어 생성)으로 구분할 수 있다. NLU는 사람이 이해하는 자연어를 컴퓨터가 이해할 수 있는 값으로 바꾸는 과정을 의미하며, NLG(자연어 생성)은 컴퓨터가 이해할 수 있는 값을 사람이 이해하도록 자연어로 바꾸는 과정을 의미한다
NLP와 임베딩
임베딩이란
기계의 자연어 이해와 생성은 연산(computation)이나 처리(processing)의 영역이다
자연어 처리 분야에서 임베딩이란 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 일련의 과정을 전체를 의미한다. 단어나 문장 각각을 벡터로 변환해 벡터 공간(vector space)으로 끼워 넣는다 (embed)는 의미에서 임베딩이라는 이름이 붙었다.
임베딩 기법의 역사와 종류
1. 통계 기반에서 뉴럴 네트워크 기반으로
초기 임베딩 기법은 대부분 말뭉치의 통계량을 직접적으로 활용하는 경향이 있었다. 대표적인 기법이 잠재 의미 분석 (LDA: Latent Semantic Analysis)이다. 잠재 의미 분석이란 단어 사용 빈도 등 말뭉치의 통계량 정보가 들어 있는 커다란 행렬에 특이값 분해 (singular Value Decomposition) 등 수학적 기법을 적용해 행렬에 속한 벡터들의 차원을 축소하는 방법을 말한다.
잠재 의미 분석 수행 대상 행렬은 여러 종류가 있을 수 있으며, TF-IDF, WCM, 점별 상호 정보량 행렬 등이 바로 그것이다
최근에는 뉴럴 네트워크 기반의 임베딩 기법들이 주목 받고 있다. Neural Probabilistic Language Model 이 발표된 이후, 뉴럴 네트워크 기반 모델들은 이전 단어들이 주어졌을 때 다음 단어가 뭐가 될지 예측하거나 문장 내 일부분에 구멍을 뚫어 놓고 해당 단어가 무엇인지 맞추는 과정에서 학습이 된다.
- 전통적인 통계적 기계번역 (SMT: Statistical machine translation) : 간단하게 기술적인 차이를 설명하자면 NMT 는 입력 문장의 일부인 단어, 구를 번역한 후 어순등을 재조합하여 번역결과를 보여주는 SMT와는 다르게 문장 전체의 정보를 한번에 분석하는 개념이라고 한다.
- encoder 역할을 하는 many to one 모델과 decoder 역할을 하는 one to many 모델이 합쳐진 모델이다
- encoder에서 가변 입력을 하나의 벡터로 변환한 후, 해당 벡터를 가진 출력을 변환하는 것이다.
- input이 들어오면 이전의 hidden layer와 함께 가중치의 행렬곱을 계산하고, 특정 함수식에 넣는다 그리고 사용하는 RNN의 구조에 맞게 FC layer를 추가해서 출력값을 구하고 정의한 loss 함수로 loss를 정의 이후로는 backpropagation을 진행하여 최적의 w를 찾으려고 노력하겠다
2. 단어 수준에서 문장 수준으로
2017년 이전의 임베딩 기법들은 대개 단어 수준의 모델이다. NPLM, Word2Vec, Glove, FastText, Swivel 등이 여기에 속한다. 단어 임베딩 기법들은 각각의 벡터에 해당 단어의 문맥적 의미를 함축한다. 하지만 단어 수준 임베딩 기법의 단점은 동음이의어 (homonym)를 분간하기 어렵다는 점이다. 단어의 형태가 같다면 동일한 단어로 보고, 모든 문맥 정보를 해당 단어 벡터에 투영하기 때문이다.
2018년 초 ELMO가 발표된 이후 문장 수준 임베딩 기법들이 주목을 받았다. BERT나 GPT 등이 바로 여기에 속한다. 문장 수준 임베딩 기법은 개별 단어가 아닌 단어 시퀀스 (sequence) 전체의 문맥적 의미를 함추하기 때문에 단어 임베딩 기법보다 전이 학습 효과가 좋은 것으로 알려져 있다.
* 동음이의어 (한국어에는 “배” 먹는 배(pear), 신체부위의 배 (belly), 교통수단의 배 (ship) 등 다양한 의미를 지는 동음이의어다
3. 롤 > 엔드투엔드 > 프리트레인/파인튜닝
90년대 까지의 자연어 처리 모델 대부분은 사람이 피처(feature)를 직접 뽑았다. 피처(feature)란 모델의 입력값을 가리킨다. 한국어 문장의 구문 분석 (parsing)하는 모델을 만든다고 하자. 이때 피처 추출은 언어학적인 지식을 활용한다. 한국어에서는 명사 앞에 관형사가 올 수 있고 조사가 명사 뒤에 오는 경향이 있으므로 이러한 규칙을 모델에 알려준다. 아울러 동사(어간)는 부사가 그 앞에 오고 어미가 그 뒤에 나타나므로 이 또한 규칙으로 정의한다.
00년대 중반 이후 자연어 처리 분야에서도 딥러닝 모델이 주목받기 시작했다. 딥러닝 모델은 입력과 출력 사이의 관계를 잘 근사하기 때문에 사람이 모델에 규칙을 굳이 직접 알려주지 않아도 된다. 데이터를 통째로 모델에 넣고 입출력 사이의 관계를 사람의 개입 없이 모델 스스로 처음부터 끝까지 이해하도록 유도한다. 이런 기법을 엔드투엔드 모델이라고 부른다. (seq2seq)
18년 ELMO 모델 이후 엔드투엔드 방식에서 벗어나 프리트레인과 파인 튜닝 방식으로 발전하고 있다. 우선 대규모 말뭉치로 임베딩을 만든다 (프리트레인). 이 임베딩에는 말뭉치의 의미적, 문법적 맥락이 포함돼 있다. 이후 임베딩을 입력으로 하는 새로운 딥러닝 모델을 만들고 우리가 풀고 싶은 구체적 문제에 맞는 소규모 데이터 맞게 임베딩을 포함한 모델 전체를 업데이트 한다. (ELmo, GPT, BERT)
우리가 풀고 싶은 자연어 처리의 구체적 문제들을 다운스트림 태스크(downStream task)라고 한다. 예컨대 품사 판별 (part of speech tagging), 개체명 인식 (named entity recognition), 의미역 분석 (semantic role labeling) 등이 있다. 이에 대비되는 개념이 업스트림 태스크이다. 다운스트림 태스크에 앞서 해결해야할 과제라는 뜻이다. 단어/문장 임베딩 프리트레인하는 작업이 바로 업스트림 태스크에 해당한다
Language Model
Language Modeling 을 수행하는 시스템
단어의 시퀀스(문장)에 대해서 얼마나 자연스러운 문장인지, 주어진 단어의 시퀀스에 대해 다음에 나타날 단어가 어떤 것인지의 확률을 이용해 예측하는 모델이며, 기계 번역, 음성인식, 자동완성 등에 활용 된다
언어 모델을 만드는 방법은 크게 통계를 이용한 방법과 인공 신경망을 이용한 방법으로 구분할 수 있다.
최근에는 통계를 이용한 방법보다는 인공 신경망을 이용한 방법이 더 좋은 성능을 보여주고 있다. 최근 핫한 자연어 처리의 기술이 GPT. BERT 또한 인공 신경망 언어 모델이 개념을 활용하여 만들어졌다.
언어 모델 (Language Model) 이란?
언어 모델은 단어 시퀀스에 확률을 할당(assign)하는 일을 하는 모델이다. 언어 모델은 가장 자연스러운 단어 시퀀스를 찾아 내는 모델이다. 단어 시퀀스 확률을 할당하게 하기 위해서 가장 보편적으로 사용되는 방법은 언어 모델이 이전 단어들이 주어졌을 때 다음 단어를 예측하도록 하는 것이다.
다른 유형의 언어 모델로는 주어진 양쪽의 단어들로부터 가운데 비어 있는 단어를 예측하는 언어 모델이 있다. 이는 문장의 가운데에 있는 단어를 비워 놓고 양쪽의 문맥을 통해서 빈 칸의 단어인지 맞추는 고등학교 시험 시험의 빈칸 추론 문제와 비슷하다.
언어 모델에 ~ing를 붙인 언어 모델링(Language Modeling)은 주어진 단어들로 부터 아직 모르는 단어를 예측하는 작업을 말한다. 즉, 언어 모델이 이전 단어들로부터 다음 단어를 예측하는 일은 언어 모델링이다.
자연어 처리로 유명한 스탠포드 대학교에서는 언어 모델을 문법(grammar)라고 비유하기도 한다. 언어 모델이 단어들의 조합이 얼마나 적절한지 또는 해당 문장이 얼마나 적합한지를 알려주는 일을 하는 것이 마치 문법이 하는 일 같기 때문이다.
언어 모델은 단어 시퀀스에 확률을 할당하는 모델이다. 그리고 단어 시퀀스에 확률을 할당하기 위해서 가장 보편적으로 사용하는 방법은 이전 단어들이 주어졌을 때, 다음 단어를 예측하도록 하는 것이다. 자연어 처리에서 단어 시퀀스의 확률 할당하여 보다 적절한 문장을 판단하며, 이렇게 단어 시퀀스의 확률을 할당하기 위해서는 이전 단어들이 주어졌을 때, 다음을 예측하는 것이다
Language Model은 예측 모델
N-gram Language Models
: N-gram 언어 모델은 여전히 카운터에 기반한 통계적 접근을 사용하고 있으므로 SLM의 일종이다. 다만 앞서 배운 언어 모델과 달리 이전에 등장한 모든 단어를 고려하는 것이 아니라 일부 단어만 고려하는 접근 방법을 사용한다. 그리고 이때 일부 단어를 몇 개 보느냐를 결정하는데 이것이 n-gram에서의 n이 가지는 의미이다.
N-gram Language Models의 문제점
Sparsity problems : n이 커질수록 안좋아지며, 일반적으로 n < 5 로 설정함
Storage Problems : n이 커지거나 corpus 가 증가하면 모델의 크기가 증가함
CBOW (Continuous Bag of Words)
: Word2Vec의 학습 방식에는 CBOW와 Skip-Gram 두 방식이 있다. CBOW는 주변에 있는 입력으로 중간에 있는 단어들을 예측하는 방법이다. 반대로 Skip-Gram은 중간에 있는 단어 들을 입력으로 주변 단어들을 예측하는 방법이다.
* 단어를 벡터로 만드는 또 다른 방법으로는 페이스북에서 개발한 Fast text가 있다. Word2vec 이후에 나온 것이기 때문에 word2vec의 확장이라고 볼 수 있다. word2vec과 fasttext의 가장 큰 차이점이라고 하면, word2vec는 단어를 쪼개질 수 없는 단위로 생각한다면, fastext는 하나의 단어 안에도 여러 단어들이 존재하는 것으로 간주, 내부 단어 즉 서브워드 (subword)를 고려하여 학습
문장표현 (Sentence Representation)의 의미 ; 어떤 과제를 풀기에 적합하고 숫자로 나타낸 문장의 표현
언어 모델의 평가 방법 (Evaluation Metric)
펄플렉서티 (Perplexity)는 영어에서 헷갈리는과 유사한 의미를 가지고 있는 perplexed을 사용한다. 그러니깐 여기서 PPL은 헷갈리는 정도로 이용하면 된다. 즉, PPL은 수치가 낮을 수록 언어 모델의 성능이 좋다는 것을 의미한다
NLP의 분류 방법
행렬 분해 기반 방법
행렬 분해 (factorization) 기반 방법은 말뭉치 정보가 들어 있는 원래 행렬을 두 개 이상의 작은 행렬로 쪼개는 방식의 임베딩 기법을 가리킨다. 분해한 이후에 둘 중 하나의 행렬만 쓰거나 둘을 더하거나 (sum) 이어 붙여 (concatenate) 임베딩으로 사용한다 (Glove, Swivel)
예측 기반 방법
이 방법은 어떤 단어 주변에 특정 단어가 나타날지 예측하거나, 이전 단어들이 주어졌을 때 다음 단어가 무엇일지 예측하거나, 문장 내 일부 단어를 지우고 해당 단어가 무엇일지 맞추는 과정에서 학습하는 방법이다. 뉴럴 네트워크 방법들이 예측 기반 방법에 속하며 , Word2Vec, FastText, Bert, ELMO, GPT 등이 예측 기반 임베딩이다.
토픽 기반 방법
주어진 문서에 잠재된 주제 (latent topic)를 추론 (inference)하는 방식으로 이멥딩 수행하는 기법도 있다. 잠재 디리클레 할당(Latent Dirichlet Allocation) 이 대표적임, LDA 같은 모델은 학습이 완료되면 각 문서가 어떤 주제 분포 (topic distribution)을 갖는지확률 벡터 형태로 반환하기 때문에 임베딩 기법의 일종으로 이해할 수 있다.
* 토픽 모델링 (Topic Modeling) 이란 ?
: 단어 또는 말뭉치 (corpus)로부터 숨겨진 주제를 찾고 키워드별로 주제를 묶어 주는 비지도 학습 및 알고리즘이다. 이러한 토픽 모델링 접근법은 다양하다. 대표적인 기법으로 Latent Dirichlet Allocation (LDA)이 있으며, 사람들의 관심사와 관련된 토픽이 무엇인지 찾아낼 수 있도록 하는 접근법이다. LDA는 문서에 대한 확률 분포를 가정한다는 점에서 나이브 베이즈 분류와 비슷하며 이론적으로 베이즈 추론에서 발전 시켰다
NLP의 구분
내용 | 어떤 단어가 많이 쓰였는가 | 단어가 어떤 순서로 쓰였는가 | 어떤 단어가 같이 쓰였는가 |
구분 | 백오브 워즈 가정 BoW(Bag of Words) |
언어 모델 | 분포 가정 Distributional hypothesis |
통계량 | TF-IDF | PMI (Pointwise Mutual Information) |
|
모델 | Deep Averaging Network | ELMo, GPT | Word2Vec |
어떤 단어가 많이 쓰였는가?
수학에서 백이란 중복 원소를 허용한 집합을 의미한다. 자연어 처리분야에서 BoW란 단어의 등장 순서에 관계없이 문서 내 단어의 등장 빈도를 임베딩으로 쓰는 기법을 말한다. BoW는 문장을 단어들로 나누고 이들을 중복 집합에 넣어 임베딩으로 활용하는 것이라고 보면된다.
단어-문서 행렬 (Term-Document Matrix)를 따르며, BoW 임베딩은 간단한 아이디어 정보 검색 (information Retrieval 분야에서 여전히 많이 쓰이고 있다. 사용자의 질의 query에 가장 적절한 문서를 보여줄 때 질의를 BoW 임베딩으로 변환하고 질의와 검색 대상 문서 임베딩 간 코사인 유사도를 구해 유사도가 가장 높은 문서를 사용자에게 노출한다
단어가 어떤 순서로 쓰였는가?
언어 모델이란 단어 시퀀스에 확률을 부여하는 모델이다. 단어의 등장 순서를 무시하는 BoW와 달리 언어 모델은 시퀀스 정보를 명시적으로 학습한다. 잘 학습된 언어 모델이 있다면 어떤 무장이 그럴듯한지(확률 값이 높은지), 주어진 단어 시퀀스 다음에 무엇이 오는게 자연스러운지 알 수 있다
어떤 단어가 같이 쓰였는가 ?
백오브 워즈 가정에서는 어떤 단어가 (많이) 쓰였는지 정보를 중시한다. 저자의 의도는 단어 사용 여부나 그 빈도에서 드러난다고 보기 때문이다. 단어의 순서 정보는 무시한다. 백오브워즈 가정에서 가장 많이 사용하는 통계량은 TF-IDF이며 백오브 가정의 딥러닝 버전은 Deep Averaging Network이다.
단어의 등장 순서를 무시하는 백오브워즈 가정의 대척점에는 언어 모델이 있다. 언어 모델은 단어의 등장 순서를 학습해 주어진 단어 시퀀스가 얼마나 자연스러운지 확률을 부여한다. ELMo, GPT 등과 같은 뉴럴 네트워크 기반의 언어 모델이 여기에 해당
분포 가정 (distributional Hypothesis)에서는 문장에서 어떤 단어가 같이 쓰였는지가 주요하게 따진다. 단어의 의미는 그 주변 문맥(context)를 통해 유추해볼 수 있다고 보는 것이다. 분포가정의 대포 통계량은 점별 상호량 (PMI, Pointwise Mutual Information)이며 대포 모델은 Word2Vec 이다
참고 자료
1. 한국어 임베딩 (Sentence Embeddings Using Korean Corpora)
'Machine-Learning > NLP (Natural Language Processing)' 카테고리의 다른 글
[NLP] Transformer-Overview (0) | 2022.10.11 |
---|---|
[NLP] Seq2Seq (0) | 2022.10.04 |
[NLP] LSTM /GRU (0) | 2022.09.29 |
[NLP] RNN (Recurrent Netural Network) (0) | 2022.09.29 |
[NLP] 셀프 어텐션의 작동 원리 (0) | 2022.09.26 |
댓글