본문 바로가기
카테고리 없음

병렬 코퍼스(Corpus) 정렬 시키기(for NMT)

by 초보코딩러 2021. 8. 9.

1.Parallel Corpus?

English Korea
I love to go to school 나는 학교에 가는 것을 좋아한다.
i am d doctor 나는 의사 입니다.
  • 주요 수집 대상 : 뉴스, 기사, 드라마/영화 자막
  • 문서 단위의 matching은 어느정도 되어 있지만, 문장 단위는 되어 있지 않음 : 의역,생략 등으로 인해 문장 단위 매칭은 쉽지 않다.
  • NMT(기계 번역)에서 필요

2. Champllion(샴폴레옹) 프로그램

- 단어번역사전에 기반하여, 사전을 최대한 만족하는 문장 매칭을 찾아서 알려줌

  • Word Translation Dictionary(WTD)필요 (Facebook - MUSE Library)
  • ratio parameter의 역할 : source 언어의 character 당 target 언어의 character 비율
  •  

3. MUSE Library

: 두 언어의 코퍼스들을 가지고 단어 번역사전을 만들어주는 프로그램

  코퍼스 각각의 word embedding을 구한 후 서로 같아지도록 만든다.

 

https://github.com/facebookresearch/MUSE

 

example :  MUSE Result

: 한국어, 영어 각각의 코퍼스로 word embedding을 구현 후 서로 같아지도록 만든 결과

 

4. 병렬 코퍼스 정렬 Process

5. Increase Training Efficiency

Before : 서로 문장길이가 천차만별

After :  sequence 길이로 정렬 , 비슷한 길이의 문장들끼리 chunks, mini-batch shuffling

 

  • 미니배치의 형태 : (batch_size, length,|v|)   (문장수,단어수,단어벡터(one-hot vector의 size))
  • 원 핫 벡터는 인덱스만 저장하면 된다 : (batch_size, length,1) ->첫번째 단어의 인덱스 (size = 1)

6. 텍스트 코퍼스 미니배치 만들기 process

1) 코퍼스의 각 문장들을 길이에 따라 정렬

2) 각 token들을 사전을 활용하여 str -> index 맵핑

3) 미니배치 크기대로 chunking

4)각 미니배치 별 텐서 구성 및 padding

5)학습 시 미니배치 shuffling

 

이 프로세스를 알아서 해주는 라이브러리 TorchText

(pytorch DataLoader와 역할이 비슷)

 

7. WordNet

  • WordNet을 이용하면 단어의 다양한 의미들을 알 수있다.
  • korean WordNet -> 한국어로 된 wordnet도 존재한다.  (http://wordnet.kaist.ac.kr/)
  • 어휘 분류 사전에 의해 단어 간 거리를 구한 후 단어 유사도를 구할 수 있다.

7-1WornNet을 사용하면

장점 코퍼스, 학습이 필요 없음
단어의 계층적 구조를 파악할 수 있음
동의어 집함(synset)을 구할 수 있음
단어 간 유사도를 계산할 수 있음
단점 단어 사전을 대충 만들경우
특정 도메인에 특화된 수치를 계산하고싶음
신조어나 사전에 등록되지 않은 단어

8.딥러닝 이전의 단어 임베딩(word Feature Vectors : TFIDF, Context window)

TF-IDF

  • 텍스트 마이닝 분야에서 중요하게 사용되는 수치
  • 어떤 단어 w가 문서 d내에서 얼마나 중요한지 나타내는 수치
Tf(Term Frequency)  - 단어의 문서 내에 출현한 횟수
 - 숫자가 클수록 문서 내에서 중요한 단어
 - 하지만, 'the' 와 같은 단어도 TF값이 매우 클 것
IDF(inverse Document Frequency) - 그 단어가 출현한 문서 수의 역수(inverse)
- 값이 클수록 'the'와 같이 일반적으로 많이 쓰이는 단어(안 중요한 단어)
  • TF-IDF 수치를 벡터화하면 단어 간 유사도를 구할 수 있다.

Context Window

  • 가정: 의미가 비슷한 단어라면 함께 나타나는 단어들이 유사할 것
  • Context Window를 사용하여 windowing을 실행
  • 적절한 window 크기를 정하는 것이 중요
   나는 학교에 가는 것을  좋아한다.

TF-IDF Matrix / Context window

  • 장점 : Thesaurus 기반 방식에 비해 코퍼스 (or 도메인) 특화된 표현 가능
  • 한계점 :  여전히 sparse한 vector로 표현됨 : PCA를 통해 차원 축소를 하는 것도 방법

9.딥러닝 Word Embedding 1.Word2Vec_ Skip-gram(2013)

  • objective : 주변(context window)에 같은 단어가 나타나는 단어일 수록 비슷한 벡터 값을 가져야한다.
  • 문장의 문맥에 따라 embedding vector가 정해지는 것은 아니다.(context window의 사이즈에 따라 embedding의 성격이 바뀔수 있다.
  • Word2Vec 방식 2가지

     1) CBOW : 주변 단어들로 해당 단어를 예측하도록 딥러닝 학습

     2) Skip-gram  : 해당 단어로 주변 단어를 예측하도록 딥러닝 학습

  • 기본 개념 : 주변 단어를 예측하도록 하는 과정에서 적절한 단어의 임베딩(정보의 압축)을 할 수 있다.
  • 오토 인코더와 굉장히 비슷함 : y를 성공적으로 예측하기 위해 필요한 정보를 선택/압축

  • 요약 : Window가 한 칸씩 이동하면서 중심 단어의 주변 단어를 예측하기 위해 정보를 압축한 Word Embedding Vector를 학습한다.
  • 장점(2013년당시) 1)쉽다 2)비교적 정확한 벡터를 구할 수 있다.
  • 단점 : 느리다 , 저빈도 단어 ,Oov에 대한 학습이 어렵다.
  • -> FastText(2016)는 Subword를 이용해 이를 극복.

10. Glove(2014)

-> window가 코퍼스를 한번 싹 훑으면서 단어 별 Co-occurence Matrix를 생성하고 나면, 이를 이용해  한 번만 regresion 수행

출처 : https://www.linkedin.com/pulse/word2vec-co-occurrence-words-shamane-siriwardhana

 

Word2Vec-Co Occurrence Of Words.

Last time I ‘v mentioned the importance of embedding words that can give a numerical meaning. My special thanks to Richard Socher for his amazing content and slides.

www.linkedin.com

11. FastText(2016, Facebook)

skip-gram의 업그레이드 버전

  • 기존 Word2vec(skip-gram) : 저빈도 단어, OoV에 대한 학습이 어렵다.
  • FastText는 Skip-gram 구조를 활용하되, subword로 쪼개서 학습한다.
  • 1) 단어를 subword로 나누고
  • 2) skip-gram을 활용하여, 각 subword에 대한 embedding vector에 주변 단어의 context vector를 곱하여 더한다.
  • 3)이 값이 최대가 되도록 학습을 수행한다.

최종적으로 각 subword에 대한 embedding vector의 합이 word embedding vector가 된다.

단어의 subwords를 이용해 주변 단어를 예측

댓글