1. Character-Level Models
word embeddings可以由character embeddings組成,有以下好處:
- 生成未知詞的embeddings;
- 相似的單詞拼寫可以共享相似的embeddings;
- 能夠解決OOV問題(OOV=out of vocabulary,感覺第三點跟第一點有點像)
1.1. Purely character-level models
針對句子分類任務的純字符粒度的模型的應用案例是:使用深度卷積網絡來進行文本分類;
當然也可以用字符粒度的模型應用於機器翻譯中,能比詞粒度帶來更好的性能,但是速度慢很多,如下圖:
論文【Fully Character-Level Neural Machine Translation without Explicit Segmentation】使用多層的convolution, pooling與highway layer來解決這一問題,其中encoder的結構如下圖所示:
其中,highway network的結構如下圖所示(有點類似於殘差網絡):
decoder部分使用char-level GRU進行解碼。
2. Byte Pair Encoding
Byte Pair Encoding(BPE)是一種處理字符,對詞進行分割的方法。具體步驟如下:
- 先列出詞表中的所有單字符;
- 添加頻率最高的ngrams字符對,直到達到指定的字符數。
具體可以看一下以下的例子:
詞典中有四個詞(low, lower, newest, widest)以及對應的頻率,先列出詞典中出現的所有單字符Vocab(l,o,w,e,r,n,w,s,t,i,d),其次,添加頻率最高的字符對,比如(es,est)共出現9詞,因此Vocab(l,o,w,e,r,n,w,s,t,i,d,es,est),再次,(lo)字符對出現7次,繼續添加進詞表中,即Vocab(l,o,w,e,r,n,w,s,t,i,d,es,est,lo),以此類推,不斷添加頻率較高的字符對,直到達到指定個字符數停止。
谷歌的NMT模型用了BPE的變種,稱作wordpiece model,BPE中利用了n-gram count來更新詞彙庫,而wordpiece model中則用了一種貪心算法來最大化語言模型概率,即選取新的n-gram時都是選擇使得perplexity減少最多的ngram。
3. Hybrid NMT
Hybrid NMT的結構如下圖所示:
其中,主邏輯部分還是使用word level進行訓練,但當輸入遇到OOV之類的詞時,我們就建立一個char level的子結構,decoder時遇到的標記時,同樣建立一個char level的子結構,訓練過程是end2end的,不過損失函數是word部分與character level部分損失函數的加權疊加。
這部分改進的效果也是比較明顯的:
4. FastText embeddings
FastText embeddings的基本思路是將每個word表示成bag of character n-gram以及單詞本身的集合,例如對於where這個單詞和n=3的情況,它可以表示爲 <wh,whe,her,ere,re>, ,其中"<",">"爲代表單詞開始與結束的特殊標記。假設對於word w,其n-gram集合使用表示,每個n-gram的矢量表示爲,則每個單詞可以表示成其所有n-gram的矢量和的形式,而center word w 與context word c的分數就可表示成的形式,然後按照經典的word2vec算法訓練得到這些特徵向量。
這種方式既保持了word2vec計算速度快的優點,又解決了遇到training data中沒見過的oov word的表示問題。
參考:Stanford CS 224n lecture12
CS224N筆記(十二):Subword模型