단어 임베딩
- 단어의 의미를 어떻게 나타낼 것인가?
- 글자의 나열?
- One-hot encoding?
- 좋은 표현 방식 : 단어 간 관계를 잘 표현할 수 있어야 한다.
- 단어의 의미
- 어근(lemma)(ex)명사, 동사, 형용사...), 의미(sense)
- 동의어(Synonyms)
- 문맥상 같은 의미를 갖는 단어들
- 동의어라 해서 항상 그 단어로 대체할 수 있는 것은 아니다. ex) big / large
- 유사성(Similarity)
- 유사한 의미를 가진 단어들 (동의어는 아님)
- 연관성(Relatedness)
- 단어들은 의미 유사성 외 다양한 방식으로 연관될 수 있다.
- Semantic filed
- 특정한 주제(topic)이나 영역(domain)을 공유하는 단어들
- ex)
hospitals (surgeon, scalpel, nurse, anaesthetic, hospital
restaurants (waiter, menu, plate, food, menu, chef)
houses (door, roof, kitchen, family, bed)
- ex)
- 특정한 주제(topic)이나 영역(domain)을 공유하는 단어들
- Semantic frame
- 특정 행위에 참여하는 주체들의 역할에 관한 단어들
- ex)
상거래라는 행위에 참여하는 주체들 : buy, sell, pay 등
- ex)
- 특정 행위에 참여하는 주체들의 역할에 관한 단어들
- 벡터로 의미 표현하기
- The meaning of a word is its use in the language - Ludwig Wittgenstein
- 단어들은 주변 환경(주변 단어들 분포)에 의해 의미가 결정됨 -> 두 단어의 주변 단어들 분포가 동일하다면 그 두 단어는 유사어라 할 수 있음
- 따라서 단어 의미를 분포적 유사성(distributional similarity)을 사용해 표현하고자 한다.
- 벡터를 사용해 분포적 유사성 표현
- 벡터공간 내 비슷한 단어들은 가까이 있다.
- 이렇게 벡터로 표현된 단어를 임베딩(embedding)이라고 부른다. 보통 밀집벡터인 경우를 임베딩이라 부른다.
- 최근 NLP 방법들은 모두 임베딩을 사용해 단어 의미 표현
- 임베딩을 사용하지 않는 경우
- 각 속성은 한 단어 존재 유무
- 학습데이터와 테스트 데이터에 동일 단어가 나타나지 않으면 예측 결과가 안 좋음
- 임베딩을 사용하는 경우
- 각 속성은 단어 임베딩 벡터
- 테스트 데이터에 새로운 단어가 나타나도 학습데이터 내 존재하는 유사 데이터를 통해 학습한 내용이 유효함
- 임베딩을 사용하지 않는 경우
- 임베딩 종류
- 단어 빈도수를 활용한 벡터
- Team-document 행렬
- 각 문서는 단어들 벡터로 표현됨(vector space model)
- word-word 행렬 (term-context 행렬)
- 주변 단어들 빈도를 벡터로 표현
- Cosine을 사용해 벡터 유사도를 계산할 수 있다.
벡터 유사도 계산 예시
- 이의 문제점
- 자주 나타나는 단어들(ex) the, it, they)은 의미 구별에 도움이 되지 않음. 이런 단어들의 부작용을 최소화하기 위해 나타난 것이 바로 TF-IDF
- Team-document 행렬
- 희소 벡터(sparse vector)
- tf-idf
- 문서 d내의 단어 t의 새로운 가중치 값 계산
- Team Frequency (tf)
- tf_(t,d) = count(t, d)
- tf_(t,d) = log_10(count(t,d)+1) (smoothing)
- count(t,d)가 0인 경우 음의 무한대가 나올 수 있기 때문에 이를 방지하기 위하여 1을 더한다.
- Document Frequency (df)
- df_t : 단어 t를 포함하는 문서들 개수
- Inverse document frequency (idf)
- idf_t = log_10(N/df_t)
- N은 전체 문서 개수
- tf-idf vector 특징
- 길다 (|V| = 20,000 ~ 50,000) - 모든 단어를 다 커버해야 하기 때문에
- 희소성 (sparse, 대부분 원소가 0)
- k개만큼의 output을 낼 때 O(k|V|)개만큼의 학습 파라미터 필요 - 굉장히 많은 파라미터가 필요하다.
- 문서 d내의 단어 t의 새로운 가중치 값 계산
- Vector propagation (검색 엔진을 위한 질의어, 문서 표현)
- tf-idf
- 밀집 벡터(dense vector)
- 특징
- 짧다 (50 ~ 1,000)
- 밀집성 (dense, 대부분 원소가 0이 아님)
- 더 적은 개수 학습 파라미터를 수반 - O(kd)
- 더 나은 일반화 능력
- 일반화 능력을 너무 강조하게 되면 Over generalization 문제가 생길 수 있음. 단어 사이 조금 있는 차이를 너무 무시하게 될 수도 있음.
- 동의어, 유사어 더 잘 표현
- Word2vec
- 단어 w가 주어졌을 때 단어 c가 주변에 나타날 확률을 학습
- 우리 관심은 이 예측 모델 최종 예측값이 아닌 이 모델 내 단어 w의 가중치 벡터.
- self-supervision
- 이 모델을 학습하기 위한 목표값은 이미 데이터내 존재함.
- 사람이 수동으로 레이블을 생성할 필요가 없음
- CBOW 모델과 Skip-gram 모델이 있다.
- Skip-gram
- 한 단어가 주어졌을 때 그 주변 단어를 예측할 확률을 최대화하는 것이 목표
- 파라미터를 명시화해 우도함수로 표현하면 다음과 같음
- 파라미터 Θ={W, C}는 두개 임베딩 행렬 W와 C를 포함한다. W를 목표(또는 입력) 임베딩 행렬, C를 상황(또는 출력) 임베딩 행렬이라 부름.
- 둘의 shape은 똑같음.
- 단어 개수가 50,000개라면 50,000개의 d차원 벡터가 있는 것이다.
- 하나의 목표 단어 w와 상황 단어 c가 주어졌을 때 다음과 같은 확률모델을 가정한다.
w에 해당하는 임베딩 벡터를 v_w, c에 해당하는 임베딩 벡터를 u_c라고 한다. - x_w를 단어 w에 대한 one-hot 벡터라 하면 v_w와 u_c는 다음과 같이 정의 됨.
- 둘의 shape은 똑같음.
- 이 모델 문제점은 확률모델의 분모 계산량이 많다. (|V|d와 비례)
- 해결책
- Noise-contrastive estimation(Nce) : Normalization constant(위 식 분모)를 하나의 파라미터로 학습한다. 이진 분류 문제에 해당하는 새로운 목표함수를 최적화시킨다. 이렇게 해서 얻어지는 파라미터들이 원래 likelihood 최적해를 근사한다는 것이 증명된다.
- 이를 좀 더 단순화시키면 negative sampling이 된다.
- Word2vec은 negative sampling을 사용.
- 해결책
- 한 단어가 주어졌을 때 그 주변 단어를 예측할 확률을 최대화하는 것이 목표
- Glove
- 특징
- 단어 빈도수를 활용한 벡터
Noise-Contrastive Estimation
- 참고 논문
- Noise-Contrastive Estimation of Unnormalized Statistical Models, with Applications to Natural Image Statistics (JMLR)
- A fast and simple algorithm for training neural probabilistic language models (ICML)
- context h -> 다음 단어 w 예측
- 핵심 아이디어
- 고차원 multi-class classification -> binary classfication으로 전환
- P^h_Θ(w) 분모를 파라미터화, 데이터로부터 학습
- 두 가지 분포
- P^h_d(w) : h가 주어졌을 때 w의 확률 분포 (주변 단어가 나타날 확률)
- 이 확률을 근사시키는 모델을 만드는 것이 궁극적 목표
- 1개의 샘플 추출 -> POS(positive set) -> C_1(class 1)
- P_n(w) : context h와 상관없는 단어들 확률 분포 (n은 noise)
- k개 샘플 추출 -> NEG(negative set) -> C_2(class 2)
- P^h_d(w) : h가 주어졌을 때 w의 확률 분포 (주변 단어가 나타날 확률)
Negative Sampling
- 목표함수
- 신경망 구조는 그대로임
- Normalization constant 계산할 필요 없음
- Gradient 계산이 단순화됨
'AI > KDT 인공지능' 카테고리의 다른 글
[08/05] Visual Recognition : Object Detection, Faster RCNN (0) | 2021.08.05 |
---|---|
[08/04] Visual Recognition : 물체인식, 전이학습기반 커스텀 영상인식, 영상기반 이물질 검출 (3) | 2021.08.04 |
[07/29] NLP : 문서분류 (0) | 2021.07.29 |
[07/28] NLP : 언어 모델 (0) | 2021.07.28 |
[07/27] NLP : 텍스트 전처리 (0) | 2021.07.28 |