Natural Language Processing(NLP)
- 사람이 이해하는 자연어를 컴퓨터가 이해할 수 있는 값들로 변환하는 과정, 혹은 그 반대 과정
- Natural language Generation(NLG), Natural Language Understanding(NLU)
NLP가 어려운 이유
- 수많은 단어, 다양한 형태 : 100만개 이상의 단어, 시제, 단수, 복수...
- 의미의 모호성
- 표현의 다양성
processing
tokenization
normalization
- De-capitalization : 대문자를 소문자로
- stop words 제거
- stemming/Lemmatization
- 최소 등장 빈도
Vocabulary
- 단어 <-> One-Hot Vector 간의 매칭 역할
- Tokenizing -> Normalization -> Making vocab
Subword segmentation
- 하나의 단어는 각각의 뜻을 가진 subword들의 조합이다
- 하나의 단어 -> subwords 분리 & 각각을 임베딩
- Out-Of-vocabulary(OOV) 문제 해결(희귀 단어, 신조어 등)
- Stop words 제거 및 stemming/Lemmatization을 안해도됨
- Subword tokenizer
- Bype Pair Enconding
- 단어를 문자 단위로 쪼갠 뒤 빈도수가 가장 높은 쌍을 하나씩 통합하는 과정을 n번 반복
- Wordpiece
- BPE의 변형
- 가장 많이 등장한 쌍을 병합하는 것이 아닌, 병합되었을 때 전체 데이터의 Likelihood를 가장 높이는 쌍을 병합
- SentencePiece
- 영여는 모든 단어가 띄어쓰기로 구분되어 있지만 한국어, 중국어처럼 단어가 구분되어 있지 않는 경우도 있다
- 사전 토큰화 작업 없이 토크나이즈 수행
Basic language Model
Language model(LM)
- 문장의 등장 확률을 계산하는 모델
- 기본 가정 : 문장은 단어들의 시퀀스
- 모델 : 단어 시퀀스의 등장확률 계산 -> 문장의 등장확률
- 모델 -> 대량의 데이터 -> 단어 등장패턴(확률 분포)학습
N-gram Language Model
- 기초적인 통계기반 모델
- 모델 가정
- 문장의 등장 확률은 단어 등장의 결합확률이다
- 단어 등장의 결합확률은 이전에 등장한 n개 단어들에 대한 조건부 확률이다.
Naive Bayes Language Model
- 대표적인 통계기반 언어 모델
- N-gram 모델도 여전히 Out-of-sample Problem 존재
- 모델 가정
- 문장의 등장 확률은 단어 등장의 결합확률이다
- 단어 등장은 다른 단어들의 등장에 대해 독립적이다
- 통계기반 방법론의 문제점
- Out-of-sample problem에 취약
- 단어 등장빈도 카운팅 -> 단어의 표현이 이산적
Distributed Word Representation
Meaning to Vector
- 단어의 의미를 저차원의 벡터로 표현하는 것
- 단어 간 수학적 연산을 통해 의미적 연산이 가능
- 가정 : 벡터 공간 상 비슷한 위치의 단어는 비슷한 의미를 가진다
- 용도 : 언어모델의 인풋
- Context-Free/Contextual
Contxt-Free Word Representation
- Word2Vec, GloVe, Fasttext
- NNLM의 Word Embedding 개념을 발전시킴
- 벡터가 단어의 의미를 잘 표현할 수 있도록 특화된 Embedding Task 제안
- 대규모의 텍스트 데이터로 word embedding 사전학습 & 베포 -> word embedding의 시대
- RNN, CNN 계열 모델과 함께 쓰였음
- Contextual Word Representation을 사용하는 Transformer, ELMO, BERT 등장 이전까지
Word2Vec
- word Embedding 방법론으로써 NNLM의 문제점
- 이전 단어만 참고, 주변 단어를 모두 참고하지 못함
- 계산량 많아지면 많은 데이터로 학습이 어렵다
- 가정 : 문장 내 특정 단어는 주변 단어들과 의미적 유사성을 갖을 것이다.
- 두 가지 방법
- CBOW : 주변 단어로 중심단어 예측
- Skip-gram : 중심단어로 주변단어 예측
Revurrent Neural network(RNN)
- 입력과 출력을 시퀀스 단위로 처리하는 딥러닝 모델
- 입력 시퀀스의 길이가 자유롭다 -> Language Model에 적합(MLP는 고정 길이만 가능)
- 가정
- 문장에는 관측되지 않는 정보(문맥)가 있어 관측가능한 정보(단어)와 서로 영향을 주고 받을 것이다
- 특정 시점의 정보는 이전 시점들의 영향을 받을 것이다.
Long Short-Term Memory(LSTM)
- RNN의 문제점
- 하나의 벡터(hidden state)에 이전 문맥의 모든 정보를 담아야함
- 시퀀스의 길이가 길어지면 정보량이 많아진다 -> 수용력의 부족 -> 오래된 정보를 기억하지 않음
- 시퀀스 길이가 길어지면 예전 시점의 gradient는 감소 -> 오래된 정보에 대한 Dependency 학습 불가 -> Long-Term Dependency Problem
- LSTM의 구조
- State: 이전까지의 정보
1) Cell State: 전체 문맥
2) Hidden State : 직전 시점의 출력
- Gate : 정보를 걸러내는 필터
1) Forget Gate : 무엇을 잊을까?
2) Input Gate : 무엇을 기억할까?
3) Output Gate : 무엇을 출력할까?
Seq2Seq
- input sequence -> output sequence
- 길이가 다른 인풋과 아웃풋을 매핑할 수 있ㅇ음
- NLG Task에 주로 사용
RNN Based Seq2seq
- LSTM 또는 GRU 사용
- 디코더의 작동 원리
- 인코더의 Context와 문장의 시작을 알리는 토큰 입력 -> 첫 단어 예측
- 직전 시점의 hidden state와 예측 단어 입력 -> 다음 단어 예측
- 문장의 끝을 나타내는 토큰 예측시까지 디코딩 반복
Teacher forcing
- Training 시, 이전 단어의 예측이 틀렸다면 어떻게 할 것인가?
- 디코더의 Input으로 이전 스텝의 Predicted word가 아닌 Target word(정답)을 넣어주는 학습 방식
- 현재 스텝의 예측이 이전 스텝의 예측에 의존하지 않도록 함
Beam Search
- inference시, 가장 그럴듯한 문장을 어떻게 찾아낼 것인가?
- 매 스텝마다 가장 노은 확률을 갖는 단어를 Greedy하게 선택?
- Beam search : 매 스텝마다 가장 높은 누적확률을 갖는 k 개의 단어를 선택 -> 등장까지 탐색