Language Model语言模型学习

应用场景

  • 判断一句话是否通顺(是不是人话)
  • 自动生成句子,诗句,作文,等
  • 单词纠错
  • 等等

种类

  • Unigram-Model
  • Bigram-Model
  • N-gram-Model

计算方式

Unigram-Model:
p ( w 1 , w 2 , w 3 … … , w n ) = p ( w 1 ) p ( w 2 ) p ( w 3 ) … … p ( w n ) p(w_1,w_2,w_3……,w_n)=p(w_1)p(w_2)p(w_3)……p(w_n) p(w1,w2,w3wn)=p(w1)p(w2)p(w3)p(wn)

Bigram-Model:
p ( w 1 , w 2 , w 3 , … … , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 2 ) … … p ( w n ∣ w n − 1 ) p(w_1,w_2,w_3,……,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_2)……p(w_n|w_{n-1}) p(w1,w2,w3,wn)=p(w1)p(w2w1)p(w3w2)p(wnwn1)

Trigram-Model: N=3 的 N-gram-Model
p ( w 1 , w 2 , w 3 , w 4 … … , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 w 2 ) p ( w 4 ∣ w 2 w 3 ) … … p ( w n ∣ w n − 1 w n − 2 ) p(w_1,w_2,w_3,w_4……,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1w_2)p(w_4|w_2w_3)……p(w_n|w_{n-1}w_{n-2}) p(w1,w2,w3,w4wn)=p(w1)p(w2w1)p(w3w1w2)p(w4w2w3)p(wnwn1wn2)

举例说明

需要的数据
S 1 = S_1= S1=“今天好吃的真晚饭”
S 2 = S_2= S2=“今天的晚饭真好吃”
分词:[‘今天’,‘好吃’,‘的’,‘真’,‘晚饭’]

每个分词计算出来的概率(语料库中单词出现的概率,通过训练数据计算):
p ( 今 天 ) = 0.53 p(今天)=0.53 p()=0.53
p ( 好 吃 ) = 0.28 p(好吃)=0.28 p()=0.28
p ( 今 天 ∣ 好 吃 ) = 0.08 p(今天|好吃)=0.08 p()=0.08
p ( 真 ∣ 好 吃 ) = 0.16 p(真|好吃)=0.16 p()=0.16
……等等

如果我们要计算上边两句话哪句更通顺:

Unigram-Model:

P S 1 = p ( 今 天 ) p ( 好 吃 ) p ( 的 ) p ( 真 ) p ( 晚 饭 ) P_{S_1}=p(今天)p(好吃)p(的)p(真)p(晚饭) PS1=p()p()p()p()p()
P S 2 = p ( 今 天 ) p ( 的 ) p ( 晚 饭 ) p ( 真 ) p ( 好 吃 ) P_{S_2}=p(今天)p(的)p(晚饭)p(真)p(好吃) PS2=p()p()p()p()p()

在两句话包含的词完全一样,只是顺序不同的情况下可以看出 P S 1 = P S 2 P_{S_1}=P_{S_2} PS1=PS2,Unigram-Model是无法计算出哪句更通顺的。

Bigram-Model:

P S 1 = p ( 今 天 ) p ( 好 吃 ∣ 今 天 ) p ( 的 ∣ 好 吃 ) p ( 晚 饭 ∣ 的 ) p ( ∣ 晚 饭 ) P_{S_1}=p(今天)p(好吃|今天)p(的|好吃)p(晚饭|的)p(|晚饭) PS1=p()p()p()p()p()
P S 2 = p ( 今 天 ) p ( 的 ∣ 今 天 ) p ( 晚 饭 ∣ 的 ) p ( 真 ∣ 晚 饭 ) p ( 好 吃 ∣ 真 ) P_{S_2}=p(今天)p(的|今天)p(晚饭|的)p(真|晚饭)p(好吃|真) PS2=p()p()p()p()p()

上边像 p ( 好 吃 ∣ 真 ) p(好吃|真) p()这样的概率怎么理解呢?
在概率中 p ( B ∣ A ) p(B|A) p(BA)的意思是:事件A发生的前提下,事件B发生的概率。
对于 p ( 好 吃 ∣ 真 ) p(好吃|真) p()可以理解为,“好吃”这个词前边的词是“真”的概率。

当有充足合适,并且符合我们日常语言的的语料库时,对比 p ( 好 吃 ∣ 真 ) p(好吃|真) p() p ( 好 吃 ∣ 今 天 ) p(好吃|今天) p()两种概率一定是 p ( 好 吃 ∣ 真 ) p(好吃|真) p()更大的。
像这样计算每个组合的概率的乘积后,可以得出 P S 1 < P S 2 P_{S_1}<P_{S_2} PS1<PS2,也就是第二句话更通顺,它的通顺度是 P S 2 P_{S_2} PS2

Trigram-Model:

P S 1 = p ( 今 天 ) p ( 好 吃 ∣ 今 天 ) p ( 的 ∣ 今 天 好 吃 ) p ( 晚 饭 ∣ 好 吃 的 ) p ( ∣ 的 晚 饭 ) P_{S_1}=p(今天)p(好吃|今天)p(的|今天好吃)p(晚饭|好吃的)p(|的晚饭) PS1=p()p()p()p()p()
P S 2 = p ( 今 天 ) p ( 的 ∣ 今 天 ) p ( 晚 饭 ∣ 今 天 的 ) p ( 真 ∣ 的 晚 饭 ) p ( 好 吃 ∣ 晚 饭 真 ) P_{S_2}=p(今天)p(的|今天)p(晚饭|今天的)p(真|的晚饭)p(好吃|晚饭真) PS2=p()p()p()p()p()

和Bigram-Model的区别是N-gram-Model要考虑前方更多的词与当前词相连的概率。

如果我们要根据词库生成一句话:

Unigram-Model:
假设词库里只有[‘今天’,‘好吃’,‘的’,‘真’,‘晚饭’] 五个词,
从中随机选词组成句子,最后的结果应该都一样,无法保证语序正确
P S 1 = p ( 今 天 ) p ( 好 吃 ) p ( 的 ) p ( 真 ) p ( 晚 饭 ) P_{S_1}=p(今天)p(好吃)p(的)p(真)p(晚饭) PS1=p()p()p()p()p()

Bigram-Model:
假设词库里只有[‘今天’,‘好吃’,‘的’,‘真’,‘晚饭’] 五个词
Bigram-Model是要考虑前后文的,因此有个上下文概率矩阵,如下:

今天好吃晚饭#END
#START0.40.20.150.220.130.01
今天00.110.450.250.130.2
好吃0.100.30.20.10.55
0.10.200.10.50.02
0.320.560.2300.10.02
晚饭0.20.1.0220.6200.2

(表格中的数据都是编的)

大致逻辑:

如果要生成一句话可以先把#START(起始位标识符)取出来,然后找到最大的 p ( X ∣ # S T A R T ) p(X|\#START) p(X#START)或相对大的一个,
p ( 今 天 ∣ # S T A R T ) = 0.4 p(今天|\#START)=0.4 p(#START)=0.4在表中是最大的,可以理解为,以“今天”这个词作为开头相对其他词更合适。

然后可以去看 p ( X ∣ 今 天 ) p(X|今天) p(X)的概率,找出“今天”这个词后边跟哪个词概率更大,或相对较大。可以看出 p ( 的 ∣ 今 天 ) = 0.45 p(的|今天)=0.45 p()=0.45还可以,所以可以选定“的”放在今天的后边,这样就得到了“今天的”这个字符串。
后边也是以此推类,找出 p ( X ∣ 的 ) p(X|的) p(X)的合适概率 p ( 晚 饭 ∣ 的 ) p(晚饭|的) p()

……省略相同步骤

最后寻找 p ( X ∣ 好 吃 ) p(X|好吃) p(X)时遇到了 p ( # E N D ∣ 好 吃 ) p(\#END|好吃) p(#END)说明好吃后面为#END(结束位标识符)概率最大,说明这句话就结束了。最后能得到句子“今天的晚饭真好吃”。

如果词库够丰富,用随机的方式取值,选通顺度相对高的词,也可以造出其他符合人类语感句子。

N-gram-Model:

比如N=3的Trigram-Model相对于Bigram-Model,Trigram-Model是三个词之间的先后关系概率,道理是一样的。但是感觉N太多可能会过拟合,生产句子“创意”会下降。

##ps
学习中,如有问题感谢指正,欢迎交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值