# 10.4 子詞嵌入(fastText)
英語單詞通常有其內部結構和形成方式。例如,我們可以從“dog”“dogs”和“dogcatcher”的字面上推測它們的關系。這些詞都有同一個詞根“dog”,但使用不同的后綴來改變詞的含義。而且,這個關聯可以推廣至其他詞匯。例如,“dog”和“dogs”的關系如同“cat”和“cats”的關系,“boy”和“boyfriend”的關系如同“girl”和“girlfriend”的關系。這一特點并非為英語所獨有。在法語和西班牙語中,很多動詞根據場景不同有40多種不同的形態,而在芬蘭語中,一個名詞可能有15種以上的形態。事實上,構詞學(morphology)作為語言學的一個重要分支,研究的正是詞的內部結構和形成方式。
在word2vec中,我們并沒有直接利用構詞學中的信息。無論是在跳字模型還是連續詞袋模型中,我們都將形態不同的單詞用不同的向量來表示。例如,“dog”和“dogs”分別用兩個不同的向量表示,而模型中并未直接表達這兩個向量之間的關系。鑒于此,fastText提出了子詞嵌入(subword embedding)的方法,從而試圖將構詞信息引入word2vec中的跳字模型 [1]。
在fastText中,每個中心詞被表示成子詞的集合。下面我們用單詞“where”作為例子來了解子詞是如何產生的。首先,我們在單詞的首尾分別添加特殊字符“<”和“>”以區分作為前后綴的子詞。然后,將單詞當成一個由字符構成的序列來提取`$ n $`元語法。例如,當`$ n = 3 $`時,我們得到所有長度為3的子詞:“<wh>”“whe”“her”“ere”“<re>”以及特殊子詞“<where>”。
在fastText中,對于一個詞`$ w $`,我們將它所有長度在`$ 3 \sim 6 $`的子詞和特殊子詞的并集記為`$ \mathcal{G}_w $`。那么詞典則是所有詞的子詞集合的并集。假設詞典中子詞`$ g $`的向量為`$ \boldsymbol{z}_ g $`,那么跳字模型中詞`$ w $`的作為中心詞的向量`$ \boldsymbol{v}_w $`則表示成
```[tex]
\boldsymbol{v}_w = \sum_{g\in\mathcal{G}_w} \boldsymbol{z}_g.
```
fastText的其余部分同跳字模型一致,不在此重復。可以看到,與跳字模型相比,fastText中詞典規模更大,造成模型參數更多,同時一個詞的向量需要對所有子詞向量求和,繼而導致計算復雜度更高。但與此同時,較生僻的復雜單詞,甚至是詞典中沒有的單詞,可能會從同它結構類似的其他詞那里獲取更好的詞向量表示。
## 小結
* fastText提出了子詞嵌入方法。它在word2vec中的跳字模型的基礎上,將中心詞向量表示成單詞的子詞向量之和。
* 子詞嵌入利用構詞上的規律,通常可以提升生僻詞表示的質量。
## 參考文獻
[1] Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2016). Enriching word vectors with subword information. arXiv preprint arXiv:1607.04606.
-----------
> 注:本節與原書完全相同,[原書傳送門](https://zh.d2l.ai/chapter_natural-language-processing/fasttext.html)
- Home
- Introduce
- 1.深度學習簡介
- 深度學習簡介
- 2.預備知識
- 2.1環境配置
- 2.2數據操作
- 2.3自動求梯度
- 3.深度學習基礎
- 3.1 線性回歸
- 3.2 線性回歸的從零開始實現
- 3.3 線性回歸的簡潔實現
- 3.4 softmax回歸
- 3.5 圖像分類數據集(Fashion-MINST)
- 3.6 softmax回歸的從零開始實現
- 3.7 softmax回歸的簡潔實現
- 3.8 多層感知機
- 3.9 多層感知機的從零開始實現
- 3.10 多層感知機的簡潔實現
- 3.11 模型選擇、反向傳播和計算圖
- 3.12 權重衰減
- 3.13 丟棄法
- 3.14 正向傳播、反向傳播和計算圖
- 3.15 數值穩定性和模型初始化
- 3.16 實戰kaggle比賽:房價預測
- 4 深度學習計算
- 4.1 模型構造
- 4.2 模型參數的訪問、初始化和共享
- 4.3 模型參數的延后初始化
- 4.4 自定義層
- 4.5 讀取和存儲
- 4.6 GPU計算
- 5 卷積神經網絡
- 5.1 二維卷積層
- 5.2 填充和步幅
- 5.3 多輸入通道和多輸出通道
- 5.4 池化層
- 5.5 卷積神經網絡(LeNet)
- 5.6 深度卷積神經網絡(AlexNet)
- 5.7 使用重復元素的網絡(VGG)
- 5.8 網絡中的網絡(NiN)
- 5.9 含并行連結的網絡(GoogLeNet)
- 5.10 批量歸一化
- 5.11 殘差網絡(ResNet)
- 5.12 稠密連接網絡(DenseNet)
- 6 循環神經網絡
- 6.1 語言模型
- 6.2 循環神經網絡
- 6.3 語言模型數據集(周杰倫專輯歌詞)
- 6.4 循環神經網絡的從零開始實現
- 6.5 循環神經網絡的簡單實現
- 6.6 通過時間反向傳播
- 6.7 門控循環單元(GRU)
- 6.8 長短期記憶(LSTM)
- 6.9 深度循環神經網絡
- 6.10 雙向循環神經網絡
- 7 優化算法
- 7.1 優化與深度學習
- 7.2 梯度下降和隨機梯度下降
- 7.3 小批量隨機梯度下降
- 7.4 動量法
- 7.5 AdaGrad算法
- 7.6 RMSProp算法
- 7.7 AdaDelta
- 7.8 Adam算法
- 8 計算性能
- 8.1 命令式和符號式混合編程
- 8.2 異步計算
- 8.3 自動并行計算
- 8.4 多GPU計算
- 9 計算機視覺
- 9.1 圖像增廣
- 9.2 微調
- 9.3 目標檢測和邊界框
- 9.4 錨框
- 10 自然語言處理
- 10.1 詞嵌入(word2vec)
- 10.2 近似訓練
- 10.3 word2vec實現
- 10.4 子詞嵌入(fastText)
- 10.5 全局向量的詞嵌入(Glove)
- 10.6 求近義詞和類比詞
- 10.7 文本情感分類:使用循環神經網絡
- 10.8 文本情感分類:使用卷積網絡
- 10.9 編碼器--解碼器(seq2seq)
- 10.10 束搜索
- 10.11 注意力機制
- 10.12 機器翻譯