NLP學習-Task 3: 子詞模型Subword Models

NLP學習

更新流程↓
Task 1: 簡介和詞向量Word Vectors
Task 2: 詞向量和詞義Word Senses
Task 3: 子詞模型Subword Models
Task 4: Contextual Word Embeddings
Task 5: 大作業
日本人綜藝感從昭和時代開始就這麼強了嗎?
今日份的舒適
常見餐桌禮儀


子詞模型Subword Models




0. 有關語言學(linguistics)的啓發

  • 語音學(Phonetics)是一種非常基本的理論,只要是正常人,有着相同的人體器官和相同的發聲結構,就會遵循着相同的發聲規則和原理。
  • 語音體系(Phonology)是有語義的聲音的合集,各國各文明的人都會制定自己的語音體系。
  • 音素(Phoneme)是語音中劃分出來的最小的語音單位,分爲元音和輔音。

  國際音標(由音素構成)按理來說可以表示所有的語音,但是會發現好多語音是沒有語義的,這時我們採取的辦法就是看音素的下一級(part of words)。

在這裏插入圖片描述

unfortunate代表沒有語義,需要找下一級

  同樣的思想我們可以用在深度學習上,如果我們在做翻譯任務(Neural Machine Translation,NMT)時發現一些沒有含義的單詞(也就是不在詞彙庫中的單詞),我們可以通過找比單詞更基本的成分來解決問題。
現實生活中做翻譯任務時我們確實需要處理很大的,很開放的詞彙(所以上述討論是有意義的):

  • 非常豐富的詞形
  • 音譯的單詞(例如人名)
  • 非正式的拼寫(Gooood=Good,u=you,r=are)

  在之前學習的word2vecGloVe是以單詞作爲最小基本單位的,這樣雖然能夠用詞向量表示詞庫中的單詞,但是若出現OOV(out-of-vocabulary)詞庫中沒有的單詞,而且對於單詞的一些詞法上的修飾(morphology)處理的也不是很好。
  所以利用比word更小的基本單位來建立模型能更好的解決這些問題。本節思考採用n-gram思想訓練Word Vector模型,也就是FastText




1. Word-Level Models(單詞級模型)

  以單詞最小基本單位的模型,例如word2vecGloVe

  • 優點:能夠較爲完美地用詞向量表示詞庫中的單詞
  • 缺點:會出現OOV(out-of-vocabulary)詞庫中沒有的單詞,例如“Gooooood”。且對於一些單詞詞法上的修飾(morphology)處理不是很好。



2. Character-Level Models(字符級模型)

  以字符Character最小基本單位的模型,通常針對字符級模型有兩種處理思路:

  1. 是把原有的詞向量分解處理。先生成character-embedding, 然後爲OOV生成word-embedding, 即使用character-embedding來組成word-embedding。
  2. 把連接的語言分解成字符。只生成character-embedding,不考慮word級別。

這兩種的方法共同的優缺點如下:

  優點

  1. 能夠解決 Word-level 所存在的 OOV 問題。
  2. 拼寫類似的單詞 具有類似的 embedding。

  缺點:

  1. 由於從單詞替換成字符導致處理的序列變長,速度變慢。
  2. 由於序列變長,數據變得稀疏,數據之間的聯繫的距離變大,不利於學習,訓練速度降低。

  爲了解決以上缺點問題,Jason Lee, Kyunghyun Cho, Thomas Hoffmann於2017年發表了論文Fully Character-Level Neural Machine Translation without Explicit Segmentation,提出了利用多層conv和pooling和 highway layer的方式來解決該問題來解決了這些問題。
在這裏插入圖片描述


該論文的思路如下所示:

  1. 輸入的字符首先需要經過Character embedding層,並被轉化爲character embeddings表示。
  2. 採用不同窗口大小的卷積覈對輸入字符的character embeddings表示進行卷積操作,論文中採用的窗口的大小分別爲 3、4、5 ,也就是說學習Character-level的3-gram、4-gram、5-gram。
  3. 對不同卷積層的卷積結果進行max-pooling操作,即捕獲其最顯著特徵生成segment embedding。
  4. segment embedding經過Highway Network(有些類似於Residual network,方便深層網絡中信息的流通,不過加入了一些控制信息流量的gate)。
  5. 輸出結果,再經過單層BiGRU,得到最終的encoder output。
  6. 之後,decoder再利用Attention機制以及character level GRU進行decode。

  通過這種方式不僅能夠解決Word-level所存在的OOV問題,而且能夠捕獲句子的3-gram、4-gram、5-gram信息,這個也是後期FastText的想法雛形。


3. Subword Models(子詞模型)

  這是介於Word-Level和Character-Level之間的Subword models,主要有兩種趨勢,一種是仍採用和Word-Level相同的結構,只不過採用更小的單元——Word pieces,名爲Byte Pair Encoding(BPE);另外一種是採用混合結構,Word和Character都有,名爲SentencePiece


 3.1. Byte Pair Encoding

  BPE是一種壓縮算法,是一種自下而上的算法。將單詞作爲單詞片段處理(Word pieces),以便於處理未出現單詞。在NMT任務中,先將訓練集單詞劃分成片段(利用BPE),然後將片段隨機賦值後放到RNNs或CNNs中訓練出片段的embedding,再將片段組合得出Word-embedding後,進行NMT工作。這樣如果在訓練集或者其他情況中,遇到生僻詞或者未登錄詞時,直接利用片段進行組合來進行NMT任務。

  1.首先將統計text中單詞,做成詞彙表(頻率-單詞),然後按照unigram進行分解。

5  l o w
2  l o w e r
6  n e w e s t
3  w i d e s t

詞彙表:l, o, w, e, r, n, w, s, t, i, d

  2.尋找頻率最大的片段(字符),進行組合,將組合片段加入詞彙表。

5  l o w
2  l o w e r
6  n e w es t
3  w i d es t

詞彙表:l, o, w, e, r, n, w, s, t, i, d, es

  3.繼續重複上述操作,直到達到設定的閾值
+詞彙數+操作數\Rightarrow操作數是唯一的超參數

5  l o w
2  l o w e r
6  n e w est
3  w i d est

詞彙表:l, o, w, e, r, n, w, s, t, i, d, es,est

\Downarrow

5  lo w
2  lo w e r
6  n e w est
3  w i d est

詞彙表:l, o, w, e, r, n, w, s, t, i, d, es,est,lo

  以此類推,直到詞彙庫大小達到我們所設定的目標。這個例子中詞彙量較小,對於詞彙量很大的實際情況,我們就可以通過BPE逐步建造一個較小的基於subword unit的詞彙庫來表示所有的詞彙。

  BPE僅使用一個字符頻率來訓練合併操作。頻繁的子字符串將在早期連接,從而使常用單詞作爲唯一的符號保留下來(如the and 等)。由罕見字符組合組成的單詞將被分割成更小的單元,例如,子字符串或字符。因此,只有在固定的詞彙量很小的情況下(通常是16k到32k),對一個句子進行編碼所需要的符號數量不會顯著增加,這是高效解碼的一個重要特徵。


 3.2. SentencePiece Model

  sentencepiece model將詞間的空白也當成一種標記,可以直接處理sentence,而不需要將其pre-tokenize成單詞。
  算法過程:

  拆分句子中有兩個變量,一個爲詞表和句子的切分序列。EM算法,句子的切分序列爲隱變量。
  開始時,隨機初始化一個詞表和隨機切分一下句子。

  1. 固定詞表,求一個句子困惑度最低的切分序列。
  2. 根據這個切分序列求固定詞表,剔除一個詞,然後計算困惑度,最後對困惑度設定一個閾值,篩選一些對語料集影響較大的詞。

  具體困惑度推導可以通過語言模型中困惑度(perplexity)的推導進行了解。




4. Hybrid Character and Word-Level Models

  這是一個非常出色的框架,主要是在單詞級別進行翻譯,但是在有需要的時候可以很方便的使用字符級別的輸入。核心思想:大部分時候都使用Word-Level的模型來做translate,只有在遇到rare or unseen的Words的時候纔會使用Character-Level的模型協助。這種做法產生了非常好的效果。

  其網絡結構圖如下:在這裏插入圖片描述
  可以看到輸入未知的單詞時,採用Character-Level進行編碼,輸出< unk >時也採用Character-Level級的進行解碼。同時訓練跟beam-search也時要同時對兩個結構進行。

  該模型還同時對Word-Level和Character-Level進行了beam search操作,並且對隱藏層進行了初始化操作。
在這裏插入圖片描述
  對於句子中的 “cute”,其屬於 OOV 詞彙,爲了解決該問題,我們需要構建一個Character-Level表示,但在 decode 過程中遇到 OOV 的特殊符號表示 時,需要採用Character-Level的 decode 進行 解碼。

  該訓練過程是end2end的,不過損失函數是Word部分與Character-Level部分損失函數的加權疊加。




5. Chars for word embeddings

  在前面,我們已經介紹和比較了Word-Level和Character-Level的優缺點,並根據其特點,提出一種介於Word-Level和Character-Level之間的Model——Subword Model。
那麼,我們可不可以採取類似於上面的subword的思路來產生更好的Word embedding呢?FAIR的[FastText]((https://arxiv.org/pdf/1607.04606.pdf or https://fasttext.cc))就是利用subword將word2vec擴充,有效的構建embedding。


 5.1. FastText

  fastText是一個快速文本分類算法,與基於神經網絡的分類算法相比的優點:

  1. fastText在保持高精度的情況下加快了訓練速度和測試速度
  2. fastText不需要預訓練好的詞向量,fastText會自己訓練詞向量

  例如,對於單詞“< where >”,以及n=3。則集合可以表示爲< wh,whe,her,ere,re >,其中<>代表單詞的開始與結束。
  對於每個單詞ww ,其對應n-gram集合用GwG_w 表示,每個n-gram的矢量表示爲zg\vec{z_g},則每個單詞可以表示成其所有n-gram的矢量和的形式。
  中心詞ww 與上下文單詞cc 間的相似度可表示爲s(w,c)=gGwzgTvcs(w,c)=\sum_{g\in G_w} {} \vec{z_g}^T\vec{v_c}  於是就可以使用原有的word2vec算法來訓練得到對應單詞的embedding。其保證了算法速度快的同時,又解決了OOV的問題。




6. 參考鏈接

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