본문 바로가기

Study/딥러닝 텐서플로 교과서 - 길벗

[Book] 10. 자연어 처리를 위한 임베딩

 

개요

  • 책을 보고 공부한 내용을 정리합니다.

딥러닝 텐서플로 교과서

  • 저자 서지영님 
  • 길벗 출판사

코드 출처

https://github.com/gilbutITbook/080263

 

GitHub - gilbutITbook/080263

Contribute to gilbutITbook/080263 development by creating an account on GitHub.

github.com


10. 자연어 처리를 위한 임베딩

  • 사람이 사용하는 언어(자연어)를 컴퓨터가 이해할 수 있는 언어(숫자) 형태인 벡터(vector)로 변환한 결과 혹은 과정
  • 종류 : [ 희소 표현 기반 임베딩, 횟수 기반 임베딩, 예측 기반 임베딩, 횟수/예측 기반 임베딩]

10.1.1 희소 표현 기반 임베딩(spare representation)

  • 대부분의 값이 0으로 채워져 있는 경우
  • 대표적으로 원-핫 인코딩

원- 핫 인코딩

  • 죽어진 텍스트를 숫자(벡터)로 변환
  • 단어 N개를 각각 N차원의 벡터로 표현

단점

 

1. 원-핫 벡터들은 하나의 요소만 1 값을 갖고 나머지는 모두 0인 희소 벡터(sparse vector)를 갖는다

  • 두 단어에 대한 벡터의 내적(inner product)을 구해 보면 0 값을 갖게 되므로 직교를 이룸
  • 즉, 단어 끼리 관계성 없이 서로 독립적(independent)인 관계를 가짐    

2. 차원의 저주(curse of dimensionality) 문제 발생

  • 단어 하나 표현하는데 말뭉치에 있는 단어 수만큼 차원이 존재해 복잡함

10.1.2 횟수 기반 임베딩

  • 단어가 출현한 빈도를 고려하는 방법
  • 대표적으로 카운터 벡터와 TF-IDF

카운터 벡터

  • 문서 집합에서 단어를 토큰으로 생성하고 각 단어의 출현 빈도수를 이용하여 인코딩
  • 토크 나이징과 벡터화가 동시에 가능
  • CountVectorizer() 사용  (사이킷런)

    1. 문서를 토큰 리스트로 변환
    2. 각 문서에서 토큰 출현 빈도 체크
    3. 인코딩하고 벡터로 변환

TF-IDF (Term Frequency-Inverse Document Frequency)

  • 정보 검색론(information Retrieval, IR)에서 가중치 구할 때 사용
  • TF(Term Frequency)는 문서 내에서 특정 단어가 출현한 빈도
  • IDF(Inverse Document Frequency, 역면서 빈도)를 이해하려면 DF(문서 빈도)을 알아야 함
  • DF는 한 단어가 전체 문서에서 얼마나 공통적으로 많이 등장하는지를 나타낸 값
  • 특정 단어가 모든 문서에 등장하는 일반적인 단어라면, TF-IDF 가중치를 낮추어 줄 필요가 있음
  • 따라서 DF 값이 클수록 TF_IDF의 가중치 값을 낮추기 위해 DF값에 역수를 취하는데 이 값이 IDF
  • 특정 단어가 발생하는 빈도가 0이라면 분모가 0이 되는데 이를 방지하고자 분모에 1을 더해주는 것을 스무딩이라고 함

10.1.3 예측 기반 임베딩

  • 어떤 단어가 나올지를 예측하면서 단어를 벡터로 만드는 방식
  • 대표적으로 Word2 Vec

워드 투 벡터

  • 신경망 알고리즘
  • 특정 단어의 동의어를 찾을 수 있음
  • 과정 
  • 1. 일정한 크기의 윈도로 분할된 텍스트를 신경망 입력으로 사용
  • 2. 모든 분할된 텍스트는 한 상의 대상 단어와 콘텍스트로 네트워크에 공급

CBOW (Continuous Bag Of Words)

  • 단어를 여러 개 나열한 후 이와 관련된 단어를 추정하는 방식

SKIP-Gram

  • - CBOW 방식과 반대로 특정한 단어에서 문맥이 될 수 있는 단어를 예측

패스트 텍스트(FastText)

  • 워드 투 벡터의 단점을 보완하고자 페이스북에서 개발
  • 기존 워드 투 벡터의 방식은 분산 표현을 이용하여 단어의 분산 분포가 유사한 단어들에 비슷한 벡터 값을 할당하여 표현
  • 따라서 사전에 없는 단어에 대해서는 벡터 값을 얻을 수 없음
  • 패스트 텍스트는 개발된 단어 표현 방법을 사용해 단점을 보안함
  • 방법은 아래와 같음

1. 사전에 단어에 벡터 값을 부여하는 방법

  • 각 단어를 n-gram으로 표현
  • 예를 들어 n을 3으로 설정하면 아래와 같이 임베딩
  • 학습이 완료된 후 데이터셋의 모든 단어를 n-gram에 대해 임베딩
  • 따라서 사전에 없는 단어가 등장한다면 n-gram으로 분리된 부분 단어와 유사도 계산하여 의미 유추

2. 자주 사용되지 않는 단어에 학습 안정성을 확보하는 방법

  • 워드 투 벡터는 단어의 출현 빈도가 적으면 임베딩의 정확도 낮음
  • 패스트 텍스트는 등장 빈도수가 적더라도, n-gram으로 임베딩 하고 때문에 참고할 수 있는 경우의 수가 많음

10.1.4 횟수/예측 기반 임베딩

  • 대표적으로 글로브가 있음

글로브 (GloVe, Global Vectors for Word Representation)

  • 횟수 기반의 (LSA, Latent Semantic Analysis, 잠재 의미 분석)과 예측 기반의 워드 투 벡터 단점을 보완하기 위한 모델
  • 단어에 대한 글로벌 동시 발생 확률 정보를 포함하는 단어 임베딩 방법