语言模型
自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。
假设一段长度为TTT的文本中的词依次为w1,w2,…,wTw_1, w_2, \ldots, w_Tw1,w2,…,wT,那么在离散的时间序列中:
- wtw_twt(1≤t≤T1 \leq t \leq T1≤t≤T)可看作在时间步(time step)ttt的输出或标签。
给定一个长度为TTT的词的序列w1,w2,…,wTw_1, w_2, \ldots, w_Tw1,w2,…,wT,语言模型将计算该序列的概率:
P(w1,w2,…,wT)P(w_1, w_2, \ldots, w_T)P(w1,w2,…,wT)
语言模型可用于提升语音识别和机器翻译的性能。
语言模型的计算方式
假设序列w1,w2,…,wTw_1, w_2, \ldots, w_Tw1,w2,…,wT中的每个词是依次生成的,即有:
P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt−1).P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^T P(w_t \mid w_1, \ldots, w_{t-1}).P(w1,w2,…,wT)=t=1∏TP(wt∣w1,…,wt−1).
这表示所有的词出现的概率只与其前面有哪些词有关
例如,一段含有4个词的文本序列的概率为:
P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3).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(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3).
一个词在给定前几个词的情况下的条件概率就是语言模型参数
词的概率可以通过该词在训练数据集中的相对词频来计算,例如,P(w1)P(w_1)P(w1)可以计算为w1w_1w1在训练数据集中的词频(词出现的次数)与训练数据集的总词数之比。
根据条件概率定义,一个词在给定前几个词的情况下的条件概率也可以通过训练数据集中的相对词频计算。例如,P(w2∣w1)P(w_2 \mid w_1)P(w2∣w1)可以计算为w1,w2w_1, w_2w1,w2两词相邻的频率与w1w_1w1词频的比值,因为该比值即P(w1,w2)P(w_1, w_2)P(w1,w2)与P(w1)P(w_1)P(w1)之比。
nnn元语法
当序列长度增加时,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。nnn元语法通过马尔可夫假设(虽然并不一定成立)简化了语言模型的计算。
这里的马尔可夫假设是指一个词的出现只与前面nnn个词相关,即nnn阶马尔可夫链(Markov chain of order nnn)。
- 如果n=1n=1n=1,那么有P(w3∣w1,w2)=P(w3∣w2)P(w_3 \mid w_1, w_2) = P(w_3 \mid w_2)P(w3∣w1,w2)=P(w3∣w2)。
如果基于n−1n-1n−1阶马尔可夫链,我们可以将语言模型改写为:
P(w1,w2,…,wT)≈∏t=1TP(wt∣wt−(n−1),…,wt−1).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}) .P(w1,w2,…,wT)≈t=1∏TP(wt∣wt−(n−1),…,wt−1).
很容易理解:
- 当nnn较小时,nnn元语法往往不准确。
- 而当nnn较大时,nnn元语法需要计算并存储大量的词频和多词相邻频率,计算复杂度会很高。
最重要的工作是找到一个方法在语言模型中更好地平衡以上这两点,设置较为合适的nnn的取值