오늘 처음 시작한 논문 읽기 스터디. 오늘 하는 줄 몰랐다가 슬랙에 올라온 글을 읽고 오늘인줄 알았다. 다행히 미리 읽는 것이 아니라 같이 읽는 것이라 부담을 버리고 참석했다. 논문 읽기 스터디에서는 Abstract와 Introduction만 읽었다. 앞 부분만 읽기 때문에 논문이 무엇을 말하고자 하는 것은 알지만 세부적인 내용을 알 수 없었다.
논문을 직접 읽어봐야 하지만 시간은 부족하고 논문을 읽는다고 내용을 정확히 파악할 수 있을지 의문이 들어 BPE에 대한 자료를 찾아 간단히 정리하고자 한다. 나머지 word2vec과 SentencePiece는 스터디 시간에 읽은 내용을 정리하였다.
word2vec은 단어 사이의 유사도(문법적/문맥적 유사도)를 계산할 수 있다.
예: vector("King") - vector("Man") + vector("Woman") = vector("Queen")
기계 번역을 할 때 단어 사전을 만들고 그 사전을 토대로 번역을 한다. 그러나 단어 사전에 없는 단어가 나오는 경우는 번역을 할 수 없다. 이런 상황을 OOV(Out-Of-Vocabulary) 문제라고 한다.
서브워드 분리(Subword segmentation) 작업은 단어를 더 작은 단위의 의미 있는 서브워드로(예: teacher = teach + er)로 분리하여 단어를 인코딩 및 임베딩하는 전처리 작업이며, 이 작업을 통해 OOV, 희귀 단어, 신조어 등의 문제를 완화시킬 수 있다.
BPE는 1994년에 제안된 데이터 압축 알고리즘이며, 자연어 처리의 서브워드 분리 알고리즘으로 응용되었다. BPE는 연속적으로 가장 많이 등장한 글자의 쌍을 찾아 하나의 글자로 병합한다.
정리하면 aaabdaaabac -> ZabdZabac -> ZYdZYac -> XdXac
# 훈련 데이터에 있는 단어와 등장 빈도수
low : 5, lower : 2, newest : 6, widest : 3\
# dictionary
l o w : 5, l o w e r : 2, n e w e s t : 6, w i d e s t : 3
# vocabulary
l, o, w, e, r, n, w, s, t, i, d
가장 빈도수가 높은 유니그램의 쌍을 하나의 유니그램으로 통합하는 과정을 몇 번 반복할지 사용자가 정한다. 총 10번 한다고 가정하고, 딕셔너리에 따르면 가장 높은 유니그램의 쌍은 (e, s)이다. (newest가 6번, widest가 3번 나왔으므로 (e, s)는 총 9번 나온 것)
# dictionary update!
l o w : 5,
l o w e r : 2,
n e w es t : 6,
w i d es t : 3
# vocabulary update!
l, o, w, e, r, n, w, s, t, i, d, es
2회차에는 빈도수가 9번으로 가장 높은 (es, t)를 쌍으로 est로 통합한다.
# dictionary update!
l o w : 5,
l o w e r : 2,
n e w est : 6,
w i d est : 3
# vocabulary update!
l, o, w, e, r, n, w, s, t, i, d, es, est
같은 방식으로 10회 반복하면 딕셔너리와 단어집합은 아래와 같다.
# dictionary update!
low : 5,
low e r : 2,
newest : 6,
widest : 3
# vocabulary update!
l, o, w, e, r, n, w, s, t, i, d, es, est, lo, low, ne, new, newest, wi, wid, widest
새로운 단어가 나오면 그 단어를 글자 단위로 분리하고 위의 단어 집합에서 매칭되는 단어들을 찾고 그 단어들을 인코딩한다.
코드 부분은 길어서 생략. 다음에 다시 보자!!
기존의 NMT 시스템은 통계학적 기계번역에서 사용되었던, Moses(언어 종속적인 pre- and postprocessor)를 사용한다. 하지만 이 방식은 NMT에서 효과적인지 증명되지 않은 언어 종속적인 방식을 사용하며, 유럽계 언어에 맞게 설계되었기 때문에 한국어, 일본어, 중국어 같은 non-segmented 언어에는 맞지 않는다. 또한 이 방식은 multilingual NMT 모델을 훈련시키기 어렵다는 단점이 있다.
그러나 센텐스피스는 사전 토큰화 작업 없이 단어 분리 토큰화를 수행하므로 언어에 종속되지 않는다. 센텐스피스는 BPE와 unigram이라는 2개의 서브워드 분리 알고리즘을 사용하여 말뭉치 그대로 집어 넣어 단어 분리 토큰화를 수행한다.