nlp中的传统语言模型与神经语言模型

总有一些专有名词听上去“很屌”,了解了其概念后,便觉得:“哦,原来是这么简单的小知识点”。语言模型就是这样一个名词,作为nlp基础组件之一,在诸多的上层应用中都有重要应用。

简言之,语言模型就是给一个句子(词序列)分配一个概率。这个概率表示这句话“合理程度”。举个例子:

你儿子在我手上,快点把钱叫出来。 prob=0.80
# 这样一个句子,非常“通顺”,就得到一个很高的概率值。
特朗普在厕所里摆满了多个艺员。 prob=0.20
# 这样一个句子,非常“怪异”,也可能是有别字、语病的,就得到一个很低的概率值。

把语言模型(词序列-->概率)写成公式,就得到了
P(w_1,.....,w_n)=P(w_1)*P(w_2|w_1)*P(w_3|w_1,w_2)*......*P(w_n|w_1,...,w_{n-1}).
上述公式使用了链式法则,即当前第n个词用哪一个,完全取决于前n-1个词。有了上面的公式,我们就可以基于训练语料,计算一个句子的概率值了。这里面有一个问题,每一个词都取决于前n-1个词,这使得计算复杂度猛增。为了简化,采用了Markov-Assumption,即当前要选择的词仅仅依赖于前一个词。有的同学可能会说,对于文本序列,每个当前词仅取决于前一个词,这样会不会过于简单?是的,太简单了,所以传统的语言模型往往采用了k阶Markov-Assumption,k=3,4,5,写成公式:
P(w_1,.....,w_n)=\prod_{i=1}^{n}P(w_i|w_{i-k},...,w_{i-1}).

很自然的,我们就可以通过对语料的统计,得出一个句子的概率。
传统的语言模型也是这么做的,假设\#(w_i,...,w_j)表示词序列w_i,...,w_j在语料中出现的次数。那么,对于一个词“word”,运用公式就可以得到:
P(w_{i+1}|w_{i-k},...,w_{i})=\frac{\#(w_{i-k},...,w_{i+1})}{\#(w_{i-k},...,w_{i})}
然后对计算得到的多个P(w_{i+1}|w_{i-k},...,w_{i-1})连乘,就得到了句子的概率。

这里有个问题,即分母的\#(w_{i-k},...,w_{i})等于0,怎么办?
有两种处理方法,1. 平滑技术 2. back-off,又出现了两个看起来很“屌”的词汇,其原理其实非常简单。

  1. 平滑技术
    既然分母有可能等于0,那我们就加一个常数,不让其等于0,比如在分母处+1,这就是所谓的平滑。如下所示:
    P(w_{i+1}|w_{i-k},...,w_{i})=\frac{\#(w_{i-k},...,w_{i+1})}{\#(w_{i-k},...,w_{i})+1}
    平滑的技术有很多种,大多论文集中在1990-2000年之间,就不详细介绍了。最常见的叫做\alpha平滑,即
    P(w_{i+1}|w_{i-k},...,w_{i})=\frac{\#(w_{i-k},...,w_{i+1}+\alpha)}{\#(w_{i-k},...,w_{i})++\alpha |V|}
    其中,|V|是词表大小,\alpha是(0,1]之间的常数。

  2. back-off
    退一步海阔天空,这可能就是back-off的由来吧,既然\#(w_{i-k},...,w_{i})为0
    ,那就想办法估计一个值出来。这里我们直接给出最佳的“非神经网络语言模型”中使用到的办法,如下所示,看起来很复杂,其实原理很简单。
    p _ { } \left( w _ { i+1 } | w _ { i - k},...,w_i \right) =\lambda_{w_{i-k},...,w_{i+1}} \frac { \# \left( w _ { i - k},...,w_{i+1} \right) } { \# \left( w_{ i - k },..., w_i \right) } +(1-\lambda_{w_{i-k},...,w_i} )p _ { } \left( w _ { i+1 } | w _ { i - (k - 1)} ,..., w_i \right)
    \#(w_{i-k},...,w_{i})为0,则我们使用后一项估计,最后一项是用k-1元gram去估计k元ngram的值。

平滑和back-off的变种很多,详见这篇论文:An Empirical Study of Smoothing Techniques for Language Modeling
非神经网络的最佳语言模型如下:
p _ { } \left( w _ { i+1 } | w _ { i - k },...,w_i \right) = \frac { \# \left( w _ { i - k},...,w_{i+1} \right) - D \left( \# \left( w _ { i - k },...,w_{i+1} \right) \right) } { \# \left( w _ { i - k },..., w_{i-1} \right) } + \gamma \left( w _ { i - k} ,...,w_{i } \right) p _ { } \left( w_{ i+1 } | w _ { i - (k - 1)} ,..., w_i \right)

语言模型的评价--perplexity 困惑度
语言模型的变种有很多,如何评价语言模型的好坏呢?
公式如下:
2 ^ { - \sum _ { x } p ( x ) \log _ { 2 } p ( x ) }
其中, p(x)=p _ { } \left( w _ { i+1 } | w _ { i - k },...,w_i \right)
困惑度值(1,+\infty), 就是说一个词序列越不合理,其困惑度越大,即让你越困惑。。。这里有个疑问,为什么用上述公式,其本质是什么,留给大家思考。

传统语言模型的缺点是什么?

  1. 平滑技术 or back-off,这类方法属于人工设计规则,设计规则纷繁复杂,哪一种适合什么样的语料,难有定论。困惑度可以用于评价各种规则,但困惑度本身并不是一个完美的评价方法。
  2. 词表为V的n-gram数目是|V|^n,如果n每增加1,要计算的n-gram至少会倍增。
  3. 基于极大似然估计的语言模型缺少对上下文的泛化,比较“死板”。比如,原语料中出现白汽车、黑汽车,而没有黄汽车,该语言模型就会影响对黄汽车的概率估计。当然,某些具体的nlp应用中,这种“死板”反而是一种优势,这种语言模型的灵活性低,但能够降低了recall,提升precision。举个例子,比如,原语料中出现了黑马、白马,这时出现蓝马的概率就很低。而对于灵活的语言模型,很有可能蓝马的概率也偏高。

neural language model 神经语言模型

基于神经网络的语言模型能解决上述三个问题,其模型的数学表达式,简写如下:
p _ { } \left( w _ { i+1 } | w _ { i - k },...,w_i \right)=softmax(hW^2+b^2)
以k元文法为例,前k-1个词作为特征,softmax预测最后一个词。词表|V|可能很大,比如1000000,这时可以使用heiraichle softmax,能够有效提升效果、节省预测时间。当然,还有一种NEC方法,通过一系列的二分类问题替换交叉熵目标函数。

实例总结

在机器翻译任务中,传统的语言模型和神经语言模型同时使用,会提升翻译质量,模型之间似乎在互相补充。综上所述,神经语言模型的泛化能力更好,传统方法泛化能力差。红马、蓝马的例子中,我们看到泛化能力好,也不一定是优点。在合适的场景下,选择适合的语言模型就ok了。在开发文本纠错的应用过程中,我们采用了传统的语言模型,因为神经语言模型的泛化能力过强,会带来错别字大量误判,反而降低了系统的表现。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容