语言模型的自适应
问题:
- 在训练语言模型时所采用的语料往往来自多种不同的领域,这些综合性语料难以反映不同领域之间在语言使用规律上的差异,而语言模型恰恰对于训练文本的类型、主题和风格等都十分敏感;
- n 元语言模型的独立性假设的前提是一个文本中的当前词出现的概率只与它前面相邻的 n-1 个词相关,但这种假设在很多情况下是明显不成立的。
基于缓存的语言模型 (Cache-based LM)
该方法针对的问题是:在文本中刚刚出现过的一些词在后边的句子中再次出现的可能性往往较大,比标准的 n-gram 模型预测的概率要大。针对这种现象, cache-based自适应方法的基本思路是:语言模型通过 n-gram 的线性插值求得:
p
^
(
w
i
∣
w
1
i
−
1
)
=
λ
p
^
C
a
c
h
e
(
w
i
∣
w
1
i
−
1
)
+
(
1
−
λ
)
p
^
n
−
g
r
a
m
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
\hat p(w_i|w_1^{i - 1}) = \lambda \hat p_{Cache}(w_i|w_1^{i - 1}) + (1 - \lambda)\hat p_{n-gram}(w_i|w_{i - n + 1}^{i - 1})
p^(wi∣w1i−1)=λp^Cache(wi∣w1i−1)+(1−λ)p^n−gram(wi∣wi−n+1i−1)
插值系数
λ
\lambda
λ可以通过EM算法求得,通常的处理方法是:在缓存中保留前面的 K个单词,每个词的概率(缓存概率)用其在缓存中出现的相对频率计算得出:
p
^
C
a
c
h
e
(
w
i
∣
w
1
i
−
1
)
=
1
K
∑
j
=
i
−
K
i
−
1
I
{
w
j
=
w
i
}
\hat p_{Cache}(w_i|w_1^{i - 1}) = \frac1K\sum_{j = i - K}^{i - 1}I_{\{w_j = w_i\}}
p^Cache(wi∣w1i−1)=K1j=i−K∑i−1I{wj=wi}
其中
I
ε
I_\varepsilon
Iε为指示器函数(indicator function),如果
ε
\varepsilon
ε表示的情况出现,则
I
ε
=
1
I_\varepsilon = 1
Iε=1,否则
I
ε
=
0
I_\varepsilon = 0
Iε=0。这种方法的缺陷是,缓存中一个词的重要性独立于该词与当前词的距离。P. R.Clarkson等人(1997) 的研究表明,缓存中每个词对当前词的影响随着与该词距离的增大呈指数级衰减,因此,
p
^
C
a
c
h
e
(
w
i
∣
w
1
i
−
1
)
=
β
∑
j
=
i
i
−
1
I
{
w
j
=
w
i
}
e
−
α
(
i
−
j
)
\hat p_{Cache}(w_i|w_1^{i - 1}) = \beta\sum_{j = i}^{i - 1}I_{\{w_j = w_i\}}e^{-\alpha(i - j)}
p^Cache(wi∣w1i−1)=βj=i∑i−1I{wj=wi}e−α(i−j)
其中
α
\alpha
α为衰减率,
β
\beta
β为归一化常数
基于混合方法的语言模型
该方法针对的问题是:由于大规模训练语料本身是异源的(heterogenous),来自不同领域的语料无论在主题 (topic)方面,还是在风格(style)方面,或者两者都有一定的差异,而测试语料一般是同源的(homogeneous),因此,为了获得最佳性能,语言模型必须适应各种不同类型的语料对其性能的影响。
处理方法是:将语言模型划分成
n
n
n 个子模型
M
1
,
M
2
,
⋯
,
M
n
M_1, M_2, \cdots, M_n
M1,M2,⋯,Mn,整个语言模型的概率通过下面的线性插值公式计算得到:
p
^
(
w
i
∣
w
1
i
−
1
)
=
∑
j
=
1
n
λ
j
p
^
M
j
(
w
i
∣
w
1
i
−
1
)
\hat p(w_i|w_1^{i - 1}) = \sum_{j = 1}^n\lambda_j\hat p_{M_j}(w_i|w_1^{i - 1})
p^(wi∣w1i−1)=j=1∑nλjp^Mj(wi∣w1i−1)
其中
0
≤
λ
j
≤
1
,
∑
j
=
1
n
λ
j
=
1
,
λ
0 \leq \lambda_j \leq 1,\sum_{j = 1}^n\lambda_j = 1,\lambda
0≤λj≤1,∑j=1nλj=1,λ值可以通过EM算法计算出来,方法总结如下:
- 对训练语料按来源、主题或类型等聚类(设为n类);
- 在模型运行时识别测试语料的主题或主题的集合;
- 确定适当的训练语料子集,并利用这些语料建立特定的语言模型;
- 利用针对各个语料子集的特定语言模型和线性插值获得整个语言模型。
EM迭代计算插值系数 λ \lambda λ
- 对于n个类,随机初始化插值系数 λ \lambda λ;
- 根据公式 p ^ ( w i ∣ w 1 i − 1 ) = ∑ j = 1 n λ j p ^ M j ( w i ∣ w 1 i − 1 ) \hat p(w_i|w_1^{i - 1}) = \sum_{j = 1}^n\lambda_j\hat p_{M_j}(w_i|w_1^{i - 1}) p^(wi∣w1i−1)=∑j=1nλjp^Mj(wi∣w1i−1)计算新的概率和期望
- 第r 次迭代, 第 j 个语言模型在第i (i ≤n)类上的系数:
λ i j r = λ i j r − 1 p i j ( w ∣ h ) ∑ i = 1 n λ i j r − 1 p i j ( w ∣ h ) \lambda_{ij}^r = \frac{\lambda_{ij}^{r - 1}p_{ij}(w|h)}{\sum_{i = 1}^{n}\lambda_{ij}^{r - 1}p_{ij}(w|h)} λijr=∑i=1nλijr−1pij(w∣h)λijr−1pij(w∣h)
其中 h h h为历史 - 不断迭代,重复第2,3步直至收敛
基于最大熵的语言模型
基本思想:通过结合不同信息源的信息构建一个语言模型。每个信息源提供一组关于模型参数的约束条件,在所有满足约束的模型中,选择熵最大的模型。
语言模型应用举例
汉语分词问题
方法描述:设对于待切分的句子
S
=
z
1
z
2
⋯
z
m
,
W
=
w
1
w
2
⋯
w
k
,
W
^
≈
a
r
g
m
a
x
W
p
(
W
)
S = z_1z_2\cdots z_m,W = w_1w_2\cdots w_k,\hat W \approx \mathop{arg\ max}\limits_{W}p(W)
S=z1z2⋯zm,W=w1w2⋯wk,W^≈Warg maxp(W)
汉语词汇分成如下几类:
- 分词词典中规定的词;
- 由词法规则派生出来的词或短语,如:干干净净、非党员、副部长、全面性、检查员、看不出、克服 了、走出来 、洗个澡 …
- 与数字相关的实体,如:日期、时间、货币、百分数、温度、长度、面积、重量、电话号码、邮件地址等;
- 专用名词,如 :人名、地名、组织机构名
进一步约定,把一个可能的词序列 W W W 转换成词类序列 C = c 1 c 2 ⋯ c N C = c_1c_2\cdots c_N C=c1c2⋯cN,即:
- 专有名词:人名PN、地名LN、机构名ON分别作为一类;
- 实体名词中的日期 dat、时间tim、百分数per、货币mon 等作为一类;
- 对词法派生词MW和词表词LW,每个词单独作为一类。
这样对于“3月14日下午3点比尔盖茨在北京发表讲话,决定从 今年起微软亚洲研究院将大规模招收研发人员,其 中,80%将从中国科学院大学所培养的应届博士或 硕士毕业生中选拔,年薪不低于3万美元。”的分词序列变为类序列“dat/ tim/ PN/ 在/ LN/ 发表/ 讲话/ ,/ 决定/ 从/ tim/ 起/ ON/ 将/ 大/ 规模/ 招收/ 研发/ 人员/ ,/ 其中/ ,/ per/ 将/ 从/ 中国/ 科学院/ 大学/ 所/ 培 养/ 的/ 应届/ 博士/ 或/ 硕士/ 毕业生/ 中/ 选拔/ ,/ 年薪/ 不/ 低于/ mon/ 。”
那么
C
^
=
a
r
g
m
a
x
C
p
(
C
∣
S
)
=
a
r
g
m
a
x
C
p
(
C
)
×
p
(
S
∣
C
)
\hat C = \mathop{arg\ max}\limits_Cp(C|S) = \mathop{arg\ max}\limits_Cp(C)\times p(S|C)
C^=Carg maxp(C∣S)=Carg maxp(C)×p(S∣C),其中
P
(
C
)
P(C)
P(C)语言模型,假设采用三元语法:
p
(
C
)
=
p
(
c
1
)
×
p
(
c
2
∣
c
1
)
∏
i
=
3
N
p
(
c
i
∣
c
i
−
2
c
i
−
1
)
p
(
c
i
∣
c
i
−
2
c
i
−
1
)
=
c
o
u
n
t
(
c
i
−
2
c
i
−
1
c
i
)
c
o
u
n
t
(
c
i
−
2
c
i
−
1
)
p(C) = p(c_1)\times p(c_2|c_1)\prod_{i = 3}^Np(c_i|c_{i - 2}c_{i - 1}) \\ p(c_i|c_{i - 2}c_{i - 1}) = \frac{count(c_{i - 2}c_{i - 1}c_i)}{count(c_{i - 2}c_{i - 1})}
p(C)=p(c1)×p(c2∣c1)i=3∏Np(ci∣ci−2ci−1)p(ci∣ci−2ci−1)=count(ci−2ci−1)count(ci−2ci−1ci)
P
(
S
∣
C
)
P(S|C)
P(S∣C)是生成模型,可近似为:
p
(
S
∣
C
)
≈
∏
i
=
1
N
p
(
s
i
∣
c
i
)
p(S|C) \approx \prod_{i = 1}^Np(s_i|c_i)
p(S∣C)≈i=1∏Np(si∣ci)
也就是说词类
c
i
c_i
ci生成汉字串
s
i
s_i
si的概率只和自身有关,和上下文无关
模型的训练由以下三步组成:
(1) 在词表和派生词表的基础上,用一个基本的分词工具切分训练语料,专有名词通过一个专门模块标注,实体名词通过相应的规则和有限状态自动机标注,由此产生一个带词类别标记的初始语料;
(2) 用带词类别标记的初始语料,采用最大似然估计方法估计语言模型的概率参数;
(3) 用得到的模型对训练语料重新切分和标注,得到新的训练语料;
(4) 重复(2)(3)步,直到系统的性能不再有明显的变化为止。
分词与词性标注一体化方法
假设句子
S
S
S是由单词串组成:
W
=
w
1
w
2
⋯
w
n
,
n
≥
1
W = w_1w_2\cdots w_n,n\geq 1
W=w1w2⋯wn,n≥1
单词
w
i
w_i
wi的词性标注为
t
i
t_i
ti,即句子
S
S
S相应的词性标注符号序列可表达为:
T
=
t
1
t
2
⋯
t
n
T = t_1t_2\cdots t_n
T=t1t2⋯tn
那么,分词与词性标注的任务就是要在
S
S
S 所对应的各种切分和标注形式中,寻找
T
T
T 和
W
W
W 的联合概率
p
(
W
,
T
)
p(W, T)
p(W,T)为最优的词切分和标注组合。
- 基于词性的三元统计模型 :
p ( W , T ) = p ( W ∣ T ) × p ( T ) ≈ ∏ i = 1 n p ( w i ∣ t i ) × p ( t i ∣ t i − 1 , t t i − 2 ) p(W,T) = p(W|T)\times p(T)\approx \prod_{i = 1}^n p(w_i|t_i)\times p(t_i|t_{i - 1},t_{ti - 2}) p(W,T)=p(W∣T)×p(T)≈i=1∏np(wi∣ti)×p(ti∣ti−1,tti−2)
其中 P ( W ∣ T ) P(W|T) P(W∣T)称为生成模型, p ( w i ∣ t i ) p(w_i|t_i) p(wi∣ti)表示在整个标注语料中,在词性 t i t_i ti的条件下,单词 w i w_i wi出现的概率, P ( T ) P(T) P(T)为基于词性的语言模型,采用三元文法,当 i = 1 i = 1 i=1时,取 p ( t 1 ) p(t_1) p(t1),当 i = 2 i = 2 i=2时,取 p ( t 2 ∣ t 1 ) p(t_2|t_1) p(t2∣t1) - 基于单词的三元统计模型 :
p ( W , T ) = p ( T ∣ W ) × p ( W ) ≈ ∏ i = 1 n p ( t i ∣ w i ) × p ( w i ∣ w i − 1 , w i − 2 ) p(W,T) = p(T|W)\times p(W) \approx \prod_{i = 1}^n p(t_i|w_i)\times p(w_i|w_{i - 1},w_{i - 2}) p(W,T)=p(T∣W)×p(W)≈i=1∏np(ti∣wi)×p(wi∣wi−1,wi−2)
其中 p ( t i ∣ w i ) p(t_i|w_i) p(ti∣wi)反映的是每个词对应词性符号的概率, p ( w i ∣ w i − 1 , w i − 2 ) p(w_i|w_{i - 1},w_{i - 2}) p(wi∣wi−1,wi−2)是普通的三元语言模型,当 i = 1 i = 1 i=1时,取 p ( w 1 ) p(w_1) p(w1),当 i = 2 i = 2 i=2时,取 p ( w 2 ∣ w 1 ) p(w_2|w_1) p(w2∣w1) - 分词与词性标注一体化模型 :
p ∗ ( W , T ) = α ∏ i = 1 n p ( w i ∣ t i ) × p ( t i ∣ t i − 1 , t t i − 2 ) + β ∏ i = 1 n p ( t i ∣ w i ) × p ( w i ∣ w i − 1 , w i − 2 ) p^*(W,T) = \alpha \prod_{i = 1}^n p(w_i|t_i)\times p(t_i|t_{i - 1},t_{ti - 2}) + \beta \prod_{i = 1}^n p(t_i|w_i)\times p(w_i|w_{i - 1},w_{i - 2}) p∗(W,T)=αi=1∏np(wi∣ti)×p(ti∣ti−1,tti−2)+βi=1∏np(ti∣wi)×p(wi∣wi−1,wi−2)
这种综合模型的指导思想是希望通过调整参数 α \alpha α和 β \beta β的值来确定两个子模型在整个分词与词性标注过程中所发挥作用的比重,从而获得分词与词性标注的整体最优。