语言模型就是对一句话,判断它的概率,也就是它存在的合理性
n-gram分为传统n-gram模型,神经网络n-gram模型
传统n-gram(即统计n-gram)
一句话的概率就是它所有单词的联合概率
p
(
s
)
=
p
(
w
1
,
w
2
,
.
.
.
,
w
m
)
p(s)=p(w_1,w_2,...,w_m)
p(s)=p(w1,w2,...,wm),m为句子中的单词数量,
根据链式概率,则:
p
(
s
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
1
,
w
2
)
,
.
.
.
,
p
(
w
m
∣
w
1
,
w
2
,
.
.
.
,
w
m
−
1
)
)
p(s)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2),...,p(w_m|w_1,w_2,...,w_{m-1}))
p(s)=p(w1)p(w2∣w1)p(w3∣w1,w2),...,p(wm∣w1,w2,...,wm−1)),这个概率公式特别长,所以
根据马尔可夫链的性质,也就是一个单词的概率只与它前边的n个单词有关,此时
p
(
s
)
=
∑
t
=
1
m
(
p
(
w
t
)
∣
p
(
w
t
−
n
,
w
t
−
n
+
1
,
.
.
.
,
w
t
−
1
)
)
)
p(s)=\sum_{t=1}^{m}(p(w_t)|p(w_{t-n},w_{t-n+1},...,w_{t-1})))
p(s)=∑t=1m(p(wt)∣p(wt−n,wt−n+1,...,wt−1)))。
那具体怎么做呢,给出一个例子:
该例子来自于n-gram(知乎)
神经网络n-gram
一共3层,forward为:
输入层为n个word的词向量,经过linear产生hidden层,再经过softmax产生输出层,output为语料库中所有单词的预测概率
参数更新还是神经网络的bp,因为有产生的预测y和实际的y,根据损失函数:交叉熵可以更新参数