1. WPM
- BPE를 이용하여 만든 것
- 참고 논문: Google's Neural Machine Translation System:Bridging the Gap between Human and Machine Translation
2. BPE 개요
- byte pair encoding
- 각 단어에서 어근을 찾음: lower => low er
3. 원리
- 문자를 한글자씩 쪼개고 쪼갠 문자들에서 N-Gram으로 묶은다음 해당 문자들 중에 가장 빈도가 높은 것을 묶음 처리
- 몇번 반복하다보면 어근이 나옴
l o w e r, l o w e s t, n e w e r, w i d e r
=> lo w e r => low e r => low er
1) ngram 만드는 것(문자 쪼개기)
from collections import defaultdict # 키가 없을 때 에러가 없도록 하기 위함
def ngram(data, n=2):
result = defaultdict(int)
for term, freq in data.items():
tokens = term.split()
for i in range(len(tokens)-(n-1)):
result[" ".join(tokens[i:i+n])] += freq
return result
2) 입력된 키를 붙이기
import re
def mergeNgram(maxKey, data):
newData = dict()
for term, freq in data.items():
newKey = re.sub(maxKey, maxKey.replace(" ", ""), term)
newData[newKey] = freq
return newData
3) 데이터로 실행
data = {
splitTerm("lower"):5,
splitTerm("lowest"):2,
splitTerm("newer"):6,
splitTerm("wider"):3
}
for _ in range(5):
bigram = ngram(data)
maxKey = max(bigram, key=bigram.get)
data = mergeNgram(maxKey, data)
print(data)
'데이터 분석가 역량' 카테고리의 다른 글
day 13 ] pos (0) | 2019.05.16 |
---|---|
day 12 ] 불용어 (0) | 2019.05.16 |
day 11 ] N-Gram (0) | 2019.05.15 |
day 11 ] 형태소 분석 (0) | 2019.05.15 |
day 10 ] 형태소 분석 심화 (0) | 2019.05.14 |