# Word Embedding
: 앞서 Tokenization을 통해 corpus를 token단위로 분리하였다면 이제는 나눠진 token을 컴퓨터가 인식할 수 있도록 벡터로 바꾸어야 한다. 이는 여러가지 Word Embedding 방법을 통해 구현한다.
1. 시소러스 ( 유의어 사전 )
: 인력을 동원하여 동의어, 유의어를 그룹 별로 분류한 사전으로 NLP에서는 '상위와 하위', '전체와 부분' 등의 더 세세한 관계까지 정의한다.
ex ) car = auto, automobile, machine, motorcar
object ∋ motor vehicle ∋ car, go-kart, truck
단어들의 관계를 그래프로 표현하여 단어 사이의 연결을 정의하기 때문에 단어의 유사도를 계산할 수 있다 ( 단어의 의미를 간접적으로 파악 가능 ). 이를 통해 컴퓨터가 token을 인식할 수 있다.
유명한 시소러스로는 WordNet 이 있고, 단점으로는 인건비가 많이 들며, 시대 변화에 유연하게 대처하기 어렵고, 단어의 미묘한 차이를 표현할 수가 없다.
2. Label Encoding
: 단어가 등장한 index에 알맞도록 값을 표현하는 방법이다. 딥러닝 모델의 모든 연산은 사칙연산을 기본으로 하지만, 여기서 사용되는 숫자의 의미가 일반적으로 통용되는 숫자의 의미와는 다르다.
ex ) 나는 / 지금 / 배가 / 고프다 -> 0 / 1 / 2 / 3으로 Label Encoding했을 경우 1단어 + 2단어가 3단어를 의미하는 것이 X
3. One-hot-Encoding
: 단어 사전의 크기가 v일 때, 길이가 v인 벡터를 생성한다. 이때 해당하는 index의 값만 1의 값을 갖는 벡터로 표현한다.
- 대부분의 값이 0이기 때문에 매우 sparse하다. => 메모리 낭비, 차원의 저주 문제
- 단어의 의미가 정확하게 파악되는 벡터로 표현하기 때문에 단어가 분산표현된다는 특징을 지닌다.
- 단어 자체에는 의미가 없고 맥락이 의미를 형성하게 된다. ( 주변 단어에 의해 의미가 형성된다. )
4. 동시 발생 행렬
: 문장에서 특정 단어 주변에 단어가 몇 번이나 등장하는지를 세서 집계하는 방법이다.
ex ) You say goodbye and I say hello.
you | say | goodbye | and | I | hello | . | |
you | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
say | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
goodbye | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
and | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
I | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
hello | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
. | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
실제로 관계가 없더라도 주변에 많이 등장한다면 관련성이 높다고 표현하는 방식이다.
5. 상호정보량 ( PMI )
: 어느 한 단어의 발생 확률이 높을 경우 분모가 커지기 때문에, 많이 등장한다는 이유로 관련성이 높게 표현되는 문제를 완화하기 위한 방법이다. 이 때 동시 발생횟수가 0이면 log_2{0} = −∞ 이기 때문에 양의 상호정보량인 PPMI를 사용한다.
𝑃𝑃𝑀𝐼 𝑥, 𝑦 = max(0, 𝑃𝑀𝐼 𝑥, 𝑦 )
6. TF-IDF ( Term Frequency - Inverse Document Frequency )
: 문서에 있는 token의 등장 횟수를 세어 표현하는 방식으로 주머니에 token을 모아 놓고 단어를 뽑아 문서를 표현한다고 해서 Bag of Word(BoW)라고도 부른다. token에 대해 BoW 형태로 만든 TDM(Term-Document Matrix)을 모델링에 사용한다.
* 단어 빈도 ( Term Frequency )
: 문서에 등장한 단어의 빈도를 의미한다. a, an, the 등과 같이 일반적으로 자주 사용되는 단어로 인해 빈도가 낮은 단어에 악영향을 끼친다.
* 역문서 빈도 ( IDF : Inverse Document Frequency )
: 해당 token이 등장하는 문서의 비율의 역수를 의미한다. ( 많은 문서에 포함되었을 수록 0에 가까운 수 )
TF * IDF로 값을 구해주고, 단어가 많이 등장했을 수록 작은 값을 곱하기 때문에 자주 사용되는 단어가 항상 큰 값을 가지는 문제를 완화한다.
7. Word2Vector
: 기존에 사용하던 방법들이 sparse하다는 단점을 지니는 점을 극복한 방법으로 비슷한 token은 비슷한 위치의 벡터로 표현하고 관계를 연산으로 설명할 수 있다.
ex ) Queen - Woman + Man = King , Seoul - Korea + USA = Washington
기준 token(target)과 양 옆의 token(context)을 포함한 윈도우가 이동하면서 token(context)과 기준 token(target) 간의 관계를 학습
* CBOW
: Context token의 벡터로 변환해 더한 후 Taret token을 맞추는 과정을 학습
* Skip-Gram
: Target token을 벡터로 변환한 후 Context token을 맞추는 과정을 학습
- 활성화 함수가 존재하지 않고 One-hot-vector와 가중치의 행렬곱으로 계산한다.
- CBOW의 경우 모든 input의 가중치를 공유한다.
- One-hot Vector와 곱하기 때문에 해당 단어의 행을 읽어오는 것과 동일하다.
이후 softmax 계층을 통해 각 단어의 확률을 구한다.
* 개선 방법
: Vocabulary의 크기가 크다면 계산량과 모델이 매우 커진다. 따라서 이때 다중분류 문제를 이진분류 문제로 대체한다면 ( softmax -> sigmoid ) ( Yes / No 문제로의 변환 ) 계산량과 모델의 크기를 줄일 수 있다. 이 때 target 단어는 네거티브 샘플링을 통해 추출한다. 네거티브 샘플링이란 단어별 출현 횟수를 바탕으로 확률 분포를 구해 단어를 샘플링한 후 손실 값을 모두 합하는 방법이다. 출현 확률이 낮은 단어를 고려하기 위해 확률분포에 0.75를 제곱해준다.
구분 | 통계 기반 기법 | 추론 기반 기법 |
학습 기법 | 1회 학습 ( 배치 학습 ) | 미니배치 학습 |
분산 표현 성격 | 단어의 유사성 | 단어의 유사성 + 복잡한 관계 |
새 단어 갱신 | 처음부터 다시 학습 | 현재 가중치를 초기값으로 재학습 |
- 추론 기반 기법이 통계 기반 기법보다 더 우수한 것이 아니다.
- 통계 기반 기법과 추론 기반 기법은 서로 연관성이 존재한다.
ex ) Skip-gram과 네거티브 샘플링을 이용한 모델은 동시발생 행렬에 특수한 행렬 분해를 적용한 것과 동일하다.
- 추론 기반 기법과 통계 기반 기법을 합친 GloVe 기법도 존재한다. ( 말뭉치 전체의 통계 정보를 손실함수에 도입하여 미니배치 학습을 진행 )
'딥러닝(Deep Learning) > D&A Deep Session' 카테고리의 다른 글
[D&A Deep Session] 8차시 - 13. RNN, LSTM (0) | 2022.05.16 |
---|---|
[D&A Deep Session] 7차시 - 11. Tokenization (0) | 2022.05.11 |
[D&A Deep Session] 6차시 - 10. ResNet (0) | 2022.05.04 |
댓글