NLP中的二元语法

205 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

语言模型

语言模型是对语言现象的数学抽象,给定一个句子w,语言模型就是计算句子出现概率p(w)的模型。

句子数量无穷无尽无法枚举,一本书也不会有完全相同的两个句子,这意味每个句子的频次都是1,大部分句子在语料库之外,概率都为0,这种现象为数据稀疏

句子由单词构成,给定词表的话单词是优先的,把句子建模成单词列表w=w1w2w3...wkw=w_1w_2w_3...w_k,定义语言模型 p(w)=p(w1w2...wk)=p(w1w0)p(w2w0w1)...p(wk+1w0w1...wk)=t=1k+1p(wtw0w1...wt1)p(w)=p(w_1w_2...w_k)=p(w_1|w_0)*p(w_2|w_0w_1)*...*p(w_k+1|w_0w_1...w_k)=\prod_{t=1}^{k+1} p(w_t|w_0w_1...w_{t-1})

其中 w0=BOSw1=EOSw_0=BOS,w_1=EOS

问题:数据稀疏、计算代价大,例如"商品 和 服务"、"商品 和服 物美价廉"、"服务 和 货币"语料中,"商品 和 货币"计算出的概率为0

马尔科夫链与二元语法

马尔科夫假设简化语言模型:每个事件的发生概率只取决于前一个事件,这串时间构成的因果链被称为马尔科夫链,基于此假设 p(wtw0w1...wt1)=p(wtwt1)p(w_t|w_0w_1...w_{t-1})=p(w_t|w_{t-1})

由于每次计算只涉及两个单词的二元接续,该语言模型被称为二元语法模型 p(w)=p(w1w2...wk)=p(w1w0)p(w2w1)...p(wk+1wk)=t=1k+1p(wtwt1)p(w)=p(w_1w_2...w_k)=p(w_1|w_0)*p(w_2|w_1)*...*p(w_{k+1}|w_k)=\prod_{t=1}^{k+1} p(w_t|w_{t-1})

二元语法模型解决了数据稀疏问题,语料库外的新句子的概率非0。上述语料计算出"商品 和 货币"计算出的概率为1/6

N元语法

利用类似思路得到N元语法:每个单词的概率取决于该单词之前的n个模型 p(w)=t=1k+n1p(wtwtn+1...wt1)p(w)=\prod_{t=1}^{k+n-1} p(w_t|w_{t-n+1}...w_{t-1}),当n大于等于4时,数据稀疏和计算代价变得显著

数据稀疏与平滑策略

二元语法接续靠语料库也统计不到,例如“商品 货币”的频次为零

策略:使用低阶n元语法平滑高阶n元语法,使n元语法频次的折线平滑为曲线。我们不希望二元语法某些语句突然跌到零,因此使用一元语法的频次去平滑它。

最简单的一种是线性差值法,定义新的二元语法概率p(wtwt1)=λpML(wt)+(1+λ)1Np(w_t|w_{t-1})=\lambda p_{ML}(w_t)+(1+\lambda)\frac{1}{N},其中N是语料库总频次