단어 임베딩
단어의 의미를 어떻게 나타낼 것인가?
- 글자의 나열?
- one-hot encoding?
- 좋은 표현방식: 단어간의 관계를 잘 표현할 수 있어야 함
단어의 의미
- 어근(lemma),의미(sense)
마우스는 쥐라는 뜻과 컴퓨터 주변기기 마우스가 있음.
복수형이나 단수형이나 모두 같은 어근임.
동의어(Synonyms)
- 문맥상 같은 의미를 가지는 단어들
- 동의어라고 해서 항상 그 단어로 대체할 수 있는 것은 아니다.
H2O/water
- 유사한 의미를 가지는 단어들(동의어는 아닌)
car/bicycle
- 수작업으로 평가한 단어들의 유사도
연관성(Relatedness)
- 단어들은 의미의 유사성 외에도 다양한 방식으로 연관될 수 있다.
- Semantic field
- Semantic frame
Semantic field
- 특정한 주제나 영역(domain)을 공유하는 단어들
Semantic frame
- 특정행위에 참여하는 주체들의 역할에 관한 단어들
- 상거래라는 행위에 참여하는 주체들:buy,sell,pay 등의 단어는 같은 semantic frame을 공유하고 있고, 그런 면에서 관련된 단어라고 말할 수 있다.
벡터로 의미 표현하기
- 단어들은 주변의 환경(주변의 단어들의 분포)에 의해 의미가 결정된다.
- 만약, 두 단어 A와 B가 거의 동일한 주변 단어들의 분포를 가지고 있다면 그 두 단어는 유사어이다.
- 따라서 단어의 의미를 분포적 유사성(distribution similarity)을 사용해 표현하고자 한다.
- 벡터공간 내에서 비슷한 단어들은 가까이있다.
- 이렇게 벡터로 표현된 단어를 임베딩이라고 부른다. 보통은 밀집벡터인 경우를 임베딩이라고 부른다.
- 최근 NLP 방법들은 모두 임베딩을 사용해서 단어의 의미를 표현한다.
Dense(밀집) 하다는 것은 원소의 대부분이 0이 아닌것 sparse 벡터는 반대로 원소 대부분이 0인것
- 임베딩을 사용하지 않는 경우
- 각 속성은 한 단어의 존재 유무
- 학습데이터와 테스트데이터에 동일한 단어가 나타나지 않으면 예측결과가 좋지 못함.
- 임베딩을 사용하는 경우
- 각 속성은 단어임베딩 벡터
- 테스트데이터에 새로운 단어가 나타나도 학습데이터에 존재하는 유사한 단어를 통해 학습한 내용이 유효하다.
임베딩의 종류
- 희소벡터(sparse vector)
- tf-idf
- Vector propagation
- 밀집벡터(dense vector)
Term-document 행렬
- 각 문서는 단어들의 벡터로 표현된다(vector space model)
Word-word 행렬(term-context 행렬)
벡터의 유사도 계산하기
두 벡터의 각도를 통해 유사성을 판단할 수 있음
각도가 작으면 작을수록 유사함
cosine을 통해 구함.
TF-IDF
- 단어의 빈도수를 그대로 사용할 때의 문제점
- 자주나타나는 단어들("the","it","they")은 의미를 구별하는데 도움이 되지 않는다.
- 어떻게 하면 이런 단어들의 부작용을 최소화할 수 있을까?
- tf-idf
- 다음과 같이 문서 d내의 단어t의 새로운 가중치 값을 계산한다.
wt,d=tft,d×idft
Word2vec
- 주어진 단어 w를 인접한 단어들의 빈도수로 나타내는 대신, 주변 단어를 예측하는 분류기를 학습하면 어떨까?
- 단어w가 주어졌을 때 단어c가 주변에 나타날 확률은?
- 우리의 관심은 이 예측모델의 최종예측값이 아니라 이 모델 내 단어 w의 가중치 벡터이다.
- self-supervision
- 이 모델을 학습하기 위한 목표값은 이미 데이터 내에 존재한다.
- 사람이 수동으로 레이블을 생성할 필요가없다.