[鏈接]()# 6.1 語言模型
語言模型(language model)是自然語言處理的重要技術。自然語言處理中最常見的數據是文本數據。我們可以把一段自然語言文本看作一段離散的時間序列。假設一段長度為`$ T $`的文本中的詞依次為`$ w_1, w_2, \ldots, w_T $`,那么在離散的時間序列中,`$ w_t $`(`$ 1 \leq t \leq T $`)可看作在時間步(time step)`$ t $`的輸出或標簽。給定一個長度為`$ T $`的詞的序列`$ w_1, w_2, \ldots, w_T $`,語言模型將計算該序列的概率:
```[tex]
P(w_1, w_2, \ldots, w_T).
```
語言模型可用于提升語音識別和機器翻譯的性能。例如,在語音識別中,給定一段“廚房里食油用完了”的語音,有可能會輸出“廚房里食油用完了”和“廚房里石油用完了”這兩個讀音完全一樣的文本序列。如果語言模型判斷出前者的概率大于后者的概率,我們就可以根據相同讀音的語音輸出“廚房里食油用完了”的文本序列。在機器翻譯中,如果對英文“you go first”逐詞翻譯成中文的話,可能得到“你走先”“你先走”等排列方式的文本序列。如果語言模型判斷出“你先走”的概率大于其他排列方式的文本序列的概率,我們就可以把“you go first”翻譯成“你先走”。
## 6.1.1 語言模型的計算
既然語言模型很有用,那該如何計算它呢?假設序列`$ w_1, w_2, \ldots, w_T $`中的每個詞是依次生成的,我們有
```[tex]
P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^T P(w_t \mid w_1, \ldots, w_{t-1}).
```
例如,一段含有4個詞的文本序列的概率
```[tex]
P(w_1, w_2, w_3, w_4) = P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_1, w_2) P(w_4 \mid w_1, w_2, w_3).
```
為了計算語言模型,我們需要計算詞的概率,以及一個詞在給定前幾個詞的情況下的條件概率,即語言模型參數。設訓練數據集為一個大型文本語料庫,如維基百科的所有條目。詞的概率可以通過該詞在訓練數據集中的相對詞頻來計算。例如,`$ P(w_1) $`可以計算為`$ w_1 $`在訓練數據集中的詞頻(詞出現的次數)與訓練數據集的總詞數之比。因此,根據條件概率定義,一個詞在給定前幾個詞的情況下的條件概率也可以通過訓練數據集中的相對詞頻計算。例如,`$ P(w_2 \mid w_1) $`可以計算為`$ w_1, w_2 $`兩詞相鄰的頻率與 `$ w_1 $`詞頻的比值,因為該比值即`$ P(w_1, w_2) $`與`$ P(w_1) $`之比;而`$ P(w_3 \mid w_1, w_2) $`同理可以計算為`$ w_1 $`、`$ w_2 $`和`$ w_3 $`三詞相鄰的頻率與`$ w_1 $`和 `$ w_2 $`兩詞相鄰的頻率的比值。以此類推。
## 6.1.2 $n$元語法
當序列長度增加時,計算和存儲多個詞共同出現的概率的復雜度會呈指數級增加。`$ n $`元語法通過馬爾可夫假設(雖然并不一定成立)簡化了語言模型的計算。這里的馬爾可夫假設是指一個詞的出現只與前面`$ n $`個詞相關,即`$ n $`階馬爾可夫鏈(Markov chain of order `$ n $`)。如果`$ n=1 $` ,那么有`$ P(w_3 \mid w_1, w_2) = P(w_3 \mid w_2) $`。如果基于`$ n-1 $`階馬爾可夫鏈,我們可以將語言模型改寫為
```[tex]
P(w_1, w_2, \ldots, w_T) \approx \prod_{t=1}^T P(w_t \mid w_{t-(n-1)}, \ldots, w_{t-1}) .
```
以上也叫`$ n $`元語法( `$ n $`-grams)。它是基于`$ n - 1 $`階馬爾可夫鏈的概率語言模型。當`$ n $`分別為1、2和3時,我們將其分別稱作一元語法(unigram)、二元語法(bigram)和三元語法(trigram)。例如,長度為4的序列 `$ w_1, w_2, w_3, w_4 $`在一元語法、二元語法和三元語法中的概率分別為
```[tex]
\begin{aligned}
P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2) P(w_3) P(w_4) ,\\
P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_2) P(w_4 \mid w_3) ,\\
P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_1, w_2) P(w_4 \mid w_2, w_3) .
\end{aligned}
```
當`$ n $`較小時,`$ n $`元語法往往并不準確。例如,在一元語法中,由三個詞組成的句子“你走先”和“你先走”的概率是一樣的。然而,當`$ n $`較大時,`$ n $ `元語法需要計算并存儲大量的詞頻和多詞相鄰頻率。
那么,有沒有方法在語言模型中更好地平衡以上這兩點呢?我們將在本章探究這樣的方法。
## 小結
* 語言模型是自然語言處理的重要技術。
* `$ N $`元語法是基于`$ n-1 $`階馬爾可夫鏈的概率語言模型,其中`$ n $`權衡了計算復雜度和模型準確性。
-----------
> 注:本節與原書此節完全相同,[原書傳送門](https://zh.d2l.ai/chapter_recurrent-neural-networks/lang-model.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 機器翻譯