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
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를 이용해 주변 단어를 예측
댓글