단어 임베딩

 

  • 단어의 의미를 어떻게 나타낼 것인가?
    • 글자의 나열?
    • 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)
    • Semantic frame
      • 특정 행위에 참여하는 주체들의 역할에 관한 단어들
        • ex)
          상거래라는 행위에 참여하는 주체들 : buy, sell, pay 등
  • 벡터로 의미 표현하기
    • 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
    • 희소 벡터(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|)개만큼의 학습 파라미터 필요 - 굉장히 많은 파라미터가 필요하다.
      • Vector propagation (검색 엔진을 위한 질의어, 문서 표현)
    • 밀집 벡터(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는 다음과 같이 정의 됨.
          • 이 모델 문제점은 확률모델의 분모 계산량이 많다. (|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)

Negative Sampling

 

  • 목표함수
    • 신경망 구조는 그대로임
    • Normalization constant 계산할 필요 없음
    • Gradient 계산이 단순화됨

+ Recent posts