医疗知识图谱项目笔记(四)
for _ in range(9, 15)
_你可以当它是一个变量,但一般习惯不用这个变量。这个循环的作用是循环6次(9,10,11,12,13,14)
语言模型:是计算一个字符串是句子的概率的模型。
1.基于专家系统的语言模型
缺点:没有一种固定的规则可以归纳所有语言。如“真笑skr人”“雨女无瓜”就不能期待用专家系统来解决。
2.统计语言模型
P(s) = P(w1,w2,......,wn) = P(w1)P(w2|w1)P(w3|w1,w2).........P(wn|w1,w2,.......,wn-1)
求解方法:用词语在语料中的频率来作为概率的估算值。
P(wi)= count(wi)/N P(wi|wi-1) = P(wi, wi-1)/P(wi-1)= count(wi|wi-1)/count(wi-1)
缺点:
P(张三很帅) = P(张三)*P(很|张三)*P(帅|张三,很)
P(张很帅很帅) = P(张很帅)*P(很|张很帅)*P(帅|张很帅,很)
若语料中只出现了“张三很帅”而没有出现“张很帅很帅”,那么 P(张很帅)*P(很|张很帅)*P(帅|张很帅,很)=0,但是,这只是语料库没有无限大,这句话是有可能出现的,概率不应该为零。
发现问题:
句子越长,语料中出现这句话的概率就越低,按照公式计算就为0(这与现实相违背),所以我们应该找到一种方式,给与它合理的一个概率。
解决方法:
平滑处理,就是给那些从来没有在语料中出现过的词或词组一个比较小的概率。
如Laplace smoothing(拉普拉斯平滑):每个词在原来出现次数的基础上加1
会导致有的概率变大(从零变到非零),有的概率变小(概率被稀释)
如:
A:0 P(A) = 0/1000 = 0 -----> P(A) = 1/ 1003 = 0.001
B: 990 P(B) = 990/1000 = 0.99 -----> P(B) = 991/1003 = 0.988
C:10 P(C) = 10/1000 = 0.01 -----> P(C) = 11/1003 = 0.011
拉普拉斯平滑后仍存在的问题:
解决了有些词频过低的问题,但是没有解决有些句子出现频率低的问题。
P(张三很帅) = P(张三)*P(很|张三)*P(帅|张三,很)
P(张三很桌子) = P(张三) * P(很|张三) * P(桌子|张三,很)
若语句中只有“张三很美”而没有以上两句话,那么“张三很帅”和“张三很桌子”的概率就是相等的(这不合理,明显“很帅”比“很桌子”出现的频率高)
问题:
1.参数空间过大
我们的最终目的就是训练得到模型,本质上就是的到模型参数。P(wi) P(wi|w1,w2,.....wi-1)
设有句子中有V个词,则:
P(w) ---->V个参数
P(wi|wi-1) ---->V^2个参数
P(wi|wi-1,wi-2)----->V^3个参数
若设句子长度为L,则参数空间为:V+V^2+.....+V^L (L为句子长度)
举个例子:1000个词,最大句子长度20,1000^20这个数太大太大了,不能忍受
2.数据稀疏严重
很多参数值为0(其实和参数空间过大是一个问题
解决这些问题:马尔科夫假设
下一个词的出现仅依赖于前面一个词或n个词
unigram(1-gram):不依赖 (V)
bigram(2-gram):依赖之前一个词 (V+V^2)
trigram(3-gram):依赖前面两个词 (V+V^2+V^3)
k-gram :依赖前面k-1个词 (V+V^2+V^3+....+V^k)
--------------------------------------------------------------------------------------------------------------------------------------
如何对比模型的好坏?
语言模型评价指标:困惑度(Perlexity)
(语言模型本质上是一个多分类问题,每一个词预测下一个词都有很多种结果)
P(S) = P(w1,w2,......,wn) = P(w1)P(w2|w1).....P(wn|w1,w2,...,wn-1)
困惑度: PP(S) =(P(w1,w2,......,wn))^(-1/n)
困惑度越小越好,P(S)越大,对S就越“不困惑”,困惑度就越小
爬虫---->数据处理:拿到数据----->分析数据结构------->总结模板--------->生成结果