NPLM (Neural Probabilisitic Languague Model)은
기존의 통계 기반 언어 모델의 단점을 어느정도 극복시킨 모델이다.
그렇다면, 기존의 통계기반 언어 모델은 무엇인가?
앞서, 언어 모델이란 단어 시퀀스(순서) 에 확률을 부여하는 모델이다.
흐름을 설명해 보겠다.
1. 만약 '영원히 기억될 최고의' 라는 표현 다음에 '명작이다' 라는 단어가 나타날 확률 을 구해보자
이는 최대우도추정법으로 유도 가능하다.
최대우도추정법에 대한 설명은 내 블로그 NLP 카테고리를 보면 이해가 가능하다.
여기서 우리는 최대우도추정법을 이용해 '영원히' ,'기억될' ,'최고의' 라는 변수만을 이용해 본래 변수인
'명작이다'라는 변수까지 추정해 볼 수 있다는 것이다.
하지만, 문제가 생긴다. 통계기반 언어 모델은 한번도 보지 못한 단어 순서로 이루어진 문장에는
확률을 0으로 부여한다.
(이유 : 특정 순서의 문장이 나타날 경우/전체 문장 경우 를 할때 분자가 0이 되므로)
2. 이런 문제를 일부 해결하기 위해 우리는 전체 단어 시퀀스 등장확률을 적은 단어 시퀀스의 등장 확률로
근사 한다. 이것은 '한 상태의 확률은 그 직전 상태에만 의존한다' 는 마코프 가정에 기반했다.
이제 우리는 '영원히 기억될 최고의' 다음에 '명작이다'가 나올 확률을
=> '최고의' 다음에 '명작이다'가 나올 확률로 근사할 수 있다.
기존의 '영원히 기억될 최고의 명작이다'가 나올 확률은
=> ('영원히'뒤에 '기억될'이 올 확률) X ('기억될' 뒤에 '최고의' 가 올 확률)
X ('최고의' 뒤에 '명작이다' 가 올 확률) 이다.
하지만 근사를 통해 하나의 확률만 취함으로 인해 확률이 많이 높아졌다. (확률 높이는게 목적)
하지만 그래도 문제가 있다. 학습 데이터에 한 번도 등장하지 않은 n-gram (단어들) 이 존재할 때
그 단어의 옳음 확률을 0으로 판단한다(아까와 똑같은 이유로 분자가 0이 됨)
여기에 back-off 와 smoothing 기법이 문제를 완화 시켜 주지만 이것만으로는 부족하다.
+ back-off : 기존에는 문장에 있는 전체 단어가 모두 배운적이 있어야지만 옳은 문장이였지만
배운적이 있는 단어 몇 개가 포함되어 있기만 하면 그 문장이 옳은 문장이다라는 확률을 일정 부여
+ smoothing : 배운적이 없는 단어 순서로 이루어진 문장에도 옳은 문장이다라는 확률을 일정 부여
(모든 등장 빈도에 k를 더하는 것이기 떄문에 Add-k smoothing 이라고도 부름)
이에 요슈아 벤지오 연구팀이 제안한 기법(Benigo et al.2003)
https://www.jmlr.org/papers/volume3/tmp/bengio03a.pdf
이 등장했다.
이들은 기존의 문제를 다음과 같이 정리했다.
1. back-off와 smoothing 만으로는 완전하지 않다.
2. 문장의 장기 의존성(long-term dependency)을 포착해내기 어렵다
(= 문장에 포함된 단어가 너무 많아질수록 등장확률이 0인 문장들이 기하급수적으로 증가)
3. 단어/문장 간 유사도 계산 불가
다음은 NPLM 구조 그림이다.
논문 내 NPLM 구조 그림
이는 딥러닝 학습을 이해하고 있다면 쉽게 이해 가능하다. 딥러닝 학습에 대한 이해는 다음 링크에서 가능하다.
맨 아래에 있는 w들이 단어를 순서대로 입력받는 곳이고,
=> 입력은 원-핫 벡터로 받기 때문에 의미를 부여해주기 위해 랜덤 C 행렬을 곱해준다 (이는 내적과 같다.)
=> 이후 출력을 받은 다음에 우리는 '출력'을 '순서대로 입력받은 단어 뒤에 나올 단어'로 만들기 위해
역전파 방식을 통해 학습을 한다.
요약하면 NPLM은 '순서를 고려하는 단어 몇 개' 를 입력받아 '그 뒤에 오는 단어'를 예측하도록 학습을 해놓은다.
학습 이후에는 우리는 '순서를 고려하는 단어 몇 개' 와 '그 뒤에 오는 단어' 는 서로 연관이 있다고 말할 수 있다.
또한, 우리는 '순서를 고려하는 단어 몇 개' 들에 해당하는 단어들은 서로 연관이 있다고도 볼 수 있다.
=> 이에 해당하는 단어들은 C행렬이 학습을 통해 변함에 따라
벡터 공간에 같은 방향으로 점점 맞추어 진다. (gradient descent 사용됨)
이제 우리는 이 정보를 이용해 단어들을 벡터 공간에 표현 (= 단어 임베딩) 을 할 수 있다.
'Tensorflow 2 NLP(자연어처리) > 단어 임베딩' 카테고리의 다른 글
[3-6] Glove란? (0) | 2021.11.13 |
---|---|
[3-5] Matrix Factorization이란? (0) | 2021.11.13 |
[3-4] 잠재 의미 분석(LSA,Latent Semantic Analysis) 이란? (0) | 2021.11.13 |
[3-3] FastText란? (0) | 2021.11.13 |
[3-2] Word2Vec란? (0) | 2021.11.12 |