다시 이음

임베딩 (2) - Subword (segmentation) Embedding 본문

Pre_Onboarding by Wanted(자연어 처리)

임베딩 (2) - Subword (segmentation) Embedding

Taeho(Damon) 2022. 3. 8. 21:07

안녕하세요.

 

Subword (segmentation) Tokenizer 모델에 대해서 알아보려고 합니다.

 

 

Subword (segmentation) Tokenizer

 

Subword segmentation은 단어 기반 토크나이즈 방식이 갖는 OOV(Out Of Vocabulary) 문제를 해결하는 토크나이즈 방식입니다.

 

단어 보다 더 작은 단위인 “subword” 단위로 토큰을 분리하는데 이러한 방식은 신조어나 학습 코퍼스에 없던 새로운 단어도 사전에 있는 subword의 조합으로 표현할 수 있다는 장점이 있습니다.

 

뿐만 아니라 영어는 prefix, suffix가 의미를 가지고 있는 경우가 많습니다.

 

예를 들면, “fearless”란 단어는 “fear” + “less” subword로 이루어져 있는데 각각의 subword가 의미를 가지고 있습니다.

 

이렇게 subword tokenizer는 prefix 및 suffix의 의미를 살릴 수 있다는 장점이 있습니다. 

 

한국어 예시를 들어보겠습니다.

 

“킹받네"라는 말은 요즘 유행하는 신조어입니다. 보통 언어 모델은 대량의 코퍼스로 학습하기 때문에 과거 수집된 문서 위주로 학습될 가능성이 큽니다. 만약 단어 기반 토크나이즈를 사용하면 “킹받네"와 같은 단어는 사전에 없기 때문에 단어의 벡터 값을 얻을 수 없습니다 (OOV). 하지만 subword 토크나이저(Sentence-piece 사용)는 해당 단어를 ['킹', '##받', '##네'] 로 분리하기 때문에 subword의 조합으로 신조어를 표현할 수 있습니다. 

 

그러나 사전에 subword도 없는 경우에는 OOV를 피할 수는 없기에 OOV 비율이 줄어드는 효과를 본다는 것이 정확합니다.

 

 

BPE (Byte Pair Encoding)

 

BPE는 자연어 처리의 서브워드 분리 알고리즘 입니다.

 

글자(charcter) 단위에서 점차적으로 단어 집합(vocabulary)을 만들어 내는 Bottom up 방식의 접근을 사용합니다.

 

BPE는 다음의 프로세스를 n번 반복해 토크나이징을 합니다.


1. 문서의 모든 단어를 character 단위로 분리

2. 등장 빈도가 가장 높은 character pair(2쌍의 character)를 찾아 하나의 character로 병합


BPE은 기본적으로 연속적으로 가장 많이 등장한 글자의 쌍을 찾아서 하나의 글자로 병합하는 방식을 수행합니다.

https://wikidocs.net/22592

 

 

WordPiece

 

WordPiece Tokenizer은 BPE의 변형 알고리즘입니다. 해당 알고리즘은 BPE가 빈도수에 기반하여 가장 많이 등장한 쌍을 병합하는 것과는 달리, 병합되었을 때 코퍼스의 우도(Likelihood)를 가장 높이는 쌍을 병합합니다.

 

구글은 WordPiece 토크나이저 코드를 공개하지 않았습니다. 대신 HuggingFace Tokenizer 라이브러리에서 WordPiece 토크나이저 클래스를 공개했기 때문에 해당 클래스로 학습할 수 있습니다. 

 

 

SentencePiece

 

SentencePiece는 end-to-end 텍스트 토크나이저로 별도의 텍스트 전처리 작업을 할 필요 없이 텍스트를 입력값으로 받으면 사전에 지정된 vocab size만큼의 사전을 구축합니다.

 

BPE과 Unigram Language Model 알고리즘이 구현되어 있습니다. 

Unigram Language Model
유니그램 언어 모델 토크나이저는 각각의 서브워드들에 대해서 손실(loss)을 계산합니다. 여기서 서브 단어의 손실이라는 것은 해당 서브워드가 단어 집합에서 제거되었을 경우, 코퍼스의 우도(Likelihood)가 감소하는 정도를 말합니다. 이렇게 측정된 서브워드들을 손실의 정도로 정렬하여, 최악의 영향을 주는 10~20%의 토큰을 제거합니다. 이를 원하는 단어 집합의 크기에 도달할 때까지 반복합니다.

 

BERT 모델은 WordPiece Tokenizer를 사용했지만 해당 tokenizer 코드가 공개되지 않아 많은 모델들은 WordPiece 대신 SentencePiece를 사용하기도 합니다.

 

Must Read