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)
    





반복: 1

 

'데이터 분석가 역량' 카테고리의 다른 글

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

+ Recent posts