ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NLP 에서의 embedding size
    머신러닝 및 딥러닝 2021. 1. 1. 15:20

    NLP에 대해서 "임베딩"이란 말을 많이 들었는데 "임베딩"이란 무엇일까?

     

    임베딩 : NLP에서 일반적으로 사람들이 쓰는 언어를 기계가 알아들을 수 있게 수치화(벡터화) 하는 것으로 단어나 문장을 벡터 공간에 끼워넣는다(embed)는 의미를 가지고 있다. 

     

    이렇게 했을 때 장점이 어떤 것이 있을까?

    1. 

        1.1 코사인 유사도와 같은 방법으로 가장 유사한 문장 또는 단어를 계산 하여 구할 수 있다. 

        1.2 t-SNE 차원 축소 기법으로 시각화가 가능하다.

    2. 단어들 사이의 의미/문법적 정보를 도출 할 수 있다. 

    • 단어나 문장 사이의 유사도를 계산 할 수 있다. 
      • 코사인 유사도와 가은 방법으로 가장 유사한 문장 또는 단어를 계산 하여 구할 수 있다.
      • t-SNE 차원 축소 기법으로 시각화가 가능하다.
    • 단어들 사이의 의미/문법적 정보를 도출 할 수 있다.
      • 벡터 간 연산으로 단어 사이 문법적 관계 도출을 할 수 있다. (ex king : man = ? : woman)
      • 해당 방식의 평가 방법으로는 word analogy test rk dlTek.
    • Transfer Learning
      • 다른 딥러닝 모델 입력값으로 사용할 수 있다.(BERT, GPT , etc)

    현재와 과거의 임베딩 비교

    과거 현재
    LSA(잠재 의미 분석)

    1. tf - idf 등의 행렬을 특이값 분해(SVD) 등을 통하여 차원을 축소

    2. corpus 통계량을 직접적으로 활용
    NN 기반 임베딩 기법
    단어 수준 임베딩 모델
    - NPLM, Word2Vec, Glove, FastText, Swivel
    문장 수준 임베딩 모델
    - ELMo, BERT, GPT
    - 단어 sequence 전체의 문맥적 의미 함축
    End-to-End 모델
    - seqence-to-sequence 모델
    Pretrain& Fine Tuning
    - Corpus 통해 임베딩을 만들어 의미, 문법적 맥락이 포함되게 한 뒤(pretrain), 모델 업데이트(fine-tuning)

     

    DownStream 과 Upstream 의 차이

    • DownStream 
      • 일반적인 NLP의 task들
      • ex. NER(품사 판별), Dialogue(대화생성)
    • Upstream
      • 임베딩을 pre-train 하는 작업
      • 임베딩의 품질이 좋아야 모델 자체의 성능이 좋아짐

     

    그렇다면 마지막으로 임베딩의 종류는 어떤 것들이 있을까?

     

    1. 행렬 분해 기반 방법
      1. 행렬을 쪼개는 방식 (Glove, CBOW, Swivel)
    2. 예측 기반 방법
      1. 특정 단어 예측(Word2Vec, BERT ,GPT)
    3. 토픽 기반 방법
      1. 문서가 내포하고 있는 주제를 추론 하는 방식(LDA)

    임베딩 예시

     

    위의 사진과 같이 현재 입력으로 "요즘 날씨가 ...." 와 "그러니 따듯하게 ...." 를 입력으로 넣었다. 

    그 다음 sentencepiece 방법으로 encoding 방식을 취했는데 이렇게 되면 해당 입력의 size 가 2,10 으로 되어 있는것을 볼 수 있다. 여기서 2는 입력으로 2개의 문장을 넣었으니까 2가 된것이고 10은 tokenize한게 각각 9개 10개 인데 pad_sequence를 통하여 입력의 길이를 10으로 맞춰주었다.

    이제 이것을 embedding_size 128로 바꾼 것을 보여주고 있다. 즉 하나의 token을 128개의 벡터로 바꾼것이다.

    '머신러닝 및 딥러닝' 카테고리의 다른 글

    nn.Module에서 super  (1) 2021.01.10
    np.zeros 와 np.zeros_like 의 차이  (0) 2021.01.06
    Beam Search  (0) 2020.12.22
    numpy의 rand와 randn의 차이  (0) 2020.08.09
    시계열 데이터란?  (0) 2020.08.08

    댓글