【CS224n】Lecture 12: Information from parts of words: Subword Models

1. Character-Level Models

word embeddings可以由character embeddings組成,有以下好處:

  1. 生成未知詞的embeddings;
  2. 相似的單詞拼寫可以共享相似的embeddings;
  3. 能夠解決OOV問題(OOV=out of vocabulary,感覺第三點跟第一點有點像)

1.1. Purely character-level models

針對句子分類任務的純字符粒度的模型的應用案例是:使用深度卷積網絡來進行文本分類;
當然也可以用字符粒度的模型應用於機器翻譯中,能比詞粒度帶來更好的性能,但是速度慢很多,如下圖:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qbGl0Gw6-1589725488494)(evernotecid://331CA178-4507-4573-914C-34BF843F1D8C/appyinxiangcom/26093810/ENResource/p178)]
論文【Fully Character-Level Neural Machine Translation without Explicit Segmentation】使用多層的convolution, pooling與highway layer來解決這一問題,其中encoder的結構如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6beOvxYB-1589725488497)(evernotecid://331CA178-4507-4573-914C-34BF843F1D8C/appyinxiangcom/26093810/ENResource/p181)]
其中,highway network的結構如下圖所示(有點類似於殘差網絡):
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-lv5tMhgx-1589725488498)(evernotecid://331CA178-4507-4573-914C-34BF843F1D8C/appyinxiangcom/26093810/ENResource/p182)]
decoder部分使用char-level GRU進行解碼。

2. Byte Pair Encoding

Byte Pair Encoding(BPE)是一種處理字符,對詞進行分割的方法。具體步驟如下:

  1. 先列出詞表中的所有單字符;
  2. 添加頻率最高的ngrams字符對,直到達到指定的字符數。
    具體可以看一下以下的例子:
    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dCuKdK06-1589725488500)(evernotecid://331CA178-4507-4573-914C-34BF843F1D8C/appyinxiangcom/26093810/ENResource/p180)]
    詞典中有四個詞(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的結構如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RlrmjcVp-1589725488501)(evernotecid://331CA178-4507-4573-914C-34BF843F1D8C/appyinxiangcom/26093810/ENResource/p183)]
其中,主邏輯部分還是使用word level進行訓練,但當輸入遇到OOV之類的詞時,我們就建立一個char level的子結構,decoder時遇到的標記時,同樣建立一個char level的子結構,訓練過程是end2end的,不過損失函數是word部分與character level部分損失函數的加權疊加。
這部分改進的效果也是比較明顯的:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7Ez8XA6I-1589725488503)(evernotecid://331CA178-4507-4573-914C-34BF843F1D8C/appyinxiangcom/26093810/ENResource/p184)]

4. FastText embeddings

FastText embeddings的基本思路是將每個word表示成bag of character n-gram以及單詞本身的集合,例如對於where這個單詞和n=3的情況,它可以表示爲 <wh,whe,her,ere,re>, ,其中"<",">"爲代表單詞開始與結束的特殊標記。假設對於word w,其n-gram集合使用GWG_W表示,每個n-gram的矢量表示爲zgz_g,則每個單詞可以表示成其所有n-gram的矢量和的形式,而center word w 與context word c的分數就可表示成s(w,c)=gGwzgTvcs(w,c)=\sum_{g\in G_w}z_g^Tv_c的形式,然後按照經典的word2vec算法訓練得到這些特徵向量。
這種方式既保持了word2vec計算速度快的優點,又解決了遇到training data中沒見過的oov word的表示問題。
參考:Stanford CS 224n lecture12
CS224N筆記(十二):Subword模型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章