18 Thu

[AI 스쿨 1기] 10주차 DAY 4

NLP : 단어 임베딩 I

단어의 의미를 어떻게 나타낼 것인가?

  • 글자의 나열

  • One hot encoding

  • 좋은 표현방식 : 단어관의 관계를 잘 표현할 수 있어야함

단어의 의미

  • 어근(lemma)

  • 의미(sense)

  • ex) mouse

    • 컴퓨터 장치

  • ex) mouse, mice

    • 하나의 어근을 가지고있음

  • 컴퓨터에서 사용하기 쉬운 형태가 아님

동의어

  • 동의어가 되기 위해서는 사전적으로 같은 의미

  • 문장 속에 단어를 다른 단어로 대체 했을 때 의미가 달라지지않고 자연스럽다면 동의어

  • 그렇지만 항상 그 단어로 대체할 수 있는 것은 아니다

  • ex) H2O - water

유사성

  • 유사한 의미를 가짐

  • ex) car - bicycle, cow - horse

  • 기계적으로 유사도를 비교하는 것은 쉽지 않음

연관성

  • 단어들은 의미의 유사성 외에도 다양한 방식으로 연관될 수 있음

  • Semantic Field

    • 특정한 주제나 영역을 공유하는 단어들

    • ex) hospital : surgeon, scalpel, nurse

    • ex) restaurants : waiter, menu, plate

  • Semantic Frame

    • 특정 행위에 참여하는 주체들의 역할에 관한 단어들

    • ex) 상거래 행위에 참여하는 주체들 : buy, sell, pay

벡터로 의미 표현하기

  • 단어들은 주변의 환경에 의해 의미가 결정된다

    • 주변의 환경 : 주변의 단어들의 분포

  • 만약 A와 B가 동일한 주변 단어들의 분포를 가지고 있다면 두 단어는 유사어이다.

  • 단어의 의미를 분포적 유사성을 사용해 표현하고자 한다.

  • 벡터로 표현된 단어를 임베딩이라고 부른다. 보통은 밀집벡터인 경우를 임베딩이라고 부른다.

    • 밀집되었다는 뜻은 값이 0이 아니라는 것

    • 반대로 희소벡터는 대부분의 벡터가 0이란 뜻

  • 최근 NLP 방법들은 모두 임베딩을 사용해서 단어의 의미를 표현한다.

왜 임베딩을 사용하는가?

  • 임베딩을 사용하지 않는 경우

    • 각 속성은 한 단어의 존재 유무

    • 학습데이터와 테스트데이터에 동일한 단어가 나타나지 않으면 예측 결과가 좋지 못함

  • 임베딩을 사용하는 경우

    • 각 속성은 단어임베딩 벡터

    • 단어의 존재유무보다 벡터의 속성이 중요하다

    • 학습 데이터

      • GOOD : [0.9, 0.1, -0.5]

      • NICE : [1.1, 0.9, 1.2]

      • 첫번째 벡터의 값이 둘 다 높다 = > 좋다라는 클래스 C1과 관련이 있을 가능성이 높음

    • 테스트 데이터

      • TERRIFIC : [0.95, -0.2, 0.1]

      • 학습 데이터에는 한번도 나타나지 않은 단어일 경우, 이 단어의 의미가 긍정적인지 부정적인지는 알 수 없지만 임베딩으로 학습하는 경우에는 C1의 값이 1에 가까우므로 좋은 의미라는 것을 알 수 있음

임베딩의 종류

  • 희소벡터

    • tf-idf

    • Vector propagation : 검색엔진을 위한 질의어, 문서 표현

  • 밀집벡터

    • Word2vec : 학습이 간편함

    • Glove

NLP : 단어 임베딩 II

Term-document 행렬

  • 각 문서는 단어들의 벡터로 표현된다

벡터의 유사도 계산하기

TF-IDF

  • 단어의 빈도수를 그대로 사용할 때의 문제점

    • the, it, they등의 단어들은 의미를 구별하는데 도움이 되지 않는다

  • tf-idf

    • 기존 빈도수만을 구하는 방법에서 보정을 하는 방법

    • 문서 d내에 단어 t의 새로운 가중치 값을 계산한다

  • 문서에 나오는 단어의 빈도수

  • 근데 이것을 그대로 사용하기보다는 로그값을 적용해서 정규화(값이 너무 크게 올라가는 것을 방지)

  • +1은 무한대로 올라가는 것을 방지

  • df_t = 단어 t를 포함하는 문서들의 개수

  • idf_t = df_t 의 역수

tf-idf vector

  • 길다 : 20,000 ~ 50,000

  • 희소성 (대부분의 원소가 0)

Word2vec, Glove

  • 짧다 : 50 ~ 1,000

  • 밀집성 (대부분의 원소가 0이 아님)

Dense Vectors

  • dense가 선호되는 이유

    • 더 적은 개수의 학습 파라미터 수반

    • 더 나은 일반화 능력

    • 동의어와 유사어를 더 잘 표현

NLP : 단어 임베딩 III

Word2vec

  • 주어진 단어 w를 인접한 단어들의 빈도수로 나타내는 대신, 주변 단어를 예측하는 분류기를 학습하자!

    • 단어 w가 주어졌을 때 단어 c가 주변에 나타날 확률은?

  • 목표는 모델의 최종예측값이 아니라 모델 내 단어 w의 가중치벡터

  • Self-supervision

    • 이 모델을 학습하기 위한 목표값은 이미 데이터내에 존재

    • 사람이 수동으로 레이블을 생성할 필요가 없음

Skip-Gram

  • 한 단어가 주어졌을 때 그 주변 단어를 예측할 확률을 최대화하는 모델

  • 다음과 같은 확률모델을 가정한다

  • 문제점은 분모 계산량이 많다

  • 해결책

    • Noise-constrastive estimation : Normalization constant를 하나의 파라미터로 학습한다. 이진 분류 문제에 해당하는 새로운 목표함수를 최적화 시킨다. 이렇게 해서 얻어지는 파라미터들이 원래 likelihood의 최적해를 근사한다는 것이 증명된다.

    • 이것을 조금 더 단순화시키면 negative sampling이 된다.

    • Word2vec은 negative sampling을 사용한다.

NLP : 단어 임베딩 IV

Word2vec 학습과정 요약

  • |V| 개의 d차원 임베딩을 랜덤하게 초기화

  • 주변 단어들의 쌍을 positive example로 생성

  • 빈도수에 의해 추출된 단어들의 쌍을 negative example로 생성

  • 위 데이터를 사용해 분류기 학습

  • 학습된 임베딩 w가 최종결과물

Last updated

Was this helpful?