12강에서는 Subword Models에 대해서 다룬다. 이전의 언어모델에서는 형태론을 통해서 각 단어를 띄어쓰기 기반으로 분류해 단어에 대해 분석을 진행했다. 하지만 합성어의 경우 띄어쓰기가 존재하는 합성어도 있고 아닌 경우도 있으며, 띄어쓰기가 없는 언어도 존재하기 때문에 문제에 직면하게 된다. 모든 단어를 커버할 수 없기 때문에 단어기반이 아닌 Character 기반의 모델이 등장했다.
Character level 모델은 Unknown word도 파악이 가능하며, Conneted Language 분석은 당연히 가능하며, Character n-gram으로 의미를 추출하는 경우로 주로 사용된다.
Byte Pair Encoding (BPE)
수부지 피부 고민이라는 단어를 예측하려면 '수부지'라는 단어는 <UNK> token이기 때문에 0으로 embedding하게 되고, 다음과 같은 값을 출력할 수 있다.( [0, 2, 3]이 아니라 [0, 3, 2] ) 해당 방식으로 계속 embedding하게 되면 기계번역에서 open-vocabulary problem이 발생할 수 있다.( 차원이 계속 커지는) multi-task learning의 경우 도메인을 커버하려면 단어 크기가 계속 커져야하는데 그런 부분에서 문제가 발생할 수 있다.
- Copying Mechanism
<UNK> token을 source sentence로부터 attentiong에 가장 많이 가중치 된 단어로 바꾼다. 이런 copy 기법은 한정된 task에서만 쓰일 수 있다는 단점이 있다. 이 문제를 극복하기 위해 subword 기법이 등장했다.
- Subword Unit
BERT에서 쓰이는 Word pieces와 Character 단위로 쪼개 분석을 진행한다. Word pieces의 대표적인 예로는 Byte Pair Encoding(BPE)가 있다.
BPE는 segments 단위로 count를 하게 된다. 처음에는 character 단위로 bi-grams으로 실시하게 되며, 가장 많이 발생한 bi-grams에 대해서 두개를 합친 단어를 vocab에 추가하게 된다. 위 과정을 반복하며 frequency가 가장 높은 단어를 vocab에 추가하게 된다. vocab의 크기를 정해놓았다고 하면 위 과정이 반복되면서 vocab 크기만큼 채워지면 iteration을 중단하게 된다. BERT의 vocat size 는 30K.
Word piece
wordPece model는 단어 안에서 tokenize를 진행하는 방법이다. Character 단위로 Pre-segmentation을 한 후 BPE를 적용한다. Transformer, ELMo, BERT, GPT-2 의 경우 Word piece를 사용했다.
BERT에서는 Common words를 먼저 vocab에 넣어주고 시작을 한다. (at, Fairfax, 1910s . etc...) 그 후 다른 단어들을 wordpiece로부터 구성한다. 접두사의 경우 그대로 적어주고 다른 단어들은 ##+piece 형태로 적어주게 된다. (e.g. hypatia = h ##yp ##ati ##a) 그 후 word vector로 바꾸어준다.
SentencePiece
SentencePiece는 2018년 google에서 발표한 방법론이다. 중국어와 같이 띄어쓰기가 없는 단어의 경우 단어 단위로 구분할 수 없기 때문에 text단위로 사용한다. 공백이 있을 경우 공백 토큰(_)을 생성해 따로 지정한다. SentencePiece의 경우 bi-grams 형식이 아니라 co-occurrence matrix를 만들어 빈도가 가장 높은 단어를 vocab에 추가하게 된다.
단, 각각의 단어들에 대해서는 독립이라는 가정이 있어야 한다.
$P(x) = \underset{i=1}{\overset{M}{\prod}}p(x_i), \forall i\ x_i \in \mathcal{V}, \underset{x\in \mathcal{V}}{\Sigma}p(x) = 1$
$x^* = \underset{x\in S(X)}{argmax} P(x)$
'Deep Learning > CS224N' 카테고리의 다른 글
[CS224N] ELMo, ULMfit (0) | 2021.09.26 |
---|---|
[CS224N] ConvNets for NLP (0) | 2021.09.06 |
[CS224N] Machine Translation (MT), Attention (0) | 2021.09.03 |
[CS224N] Language Model (n-gram, NNLM, RNN) (0) | 2021.09.01 |
[CS224N] Parsing (0) | 2021.08.31 |