Categories
不学无术

基于单词的统计翻译模型 IBM Model1

统计翻译模型的基本思想是对大量平行(parallel)语料进行统计分析。之前实习的时候有幸接触到一些简单的模型,而事实上这种简单的模型在大量数据训练的基础上,发挥还是挺不错的。
IBM的统计翻译模型从简单到繁琐,一共有Model1-Model5五个模型,全都是基于词的统计模型。
本文只对Model1作简单介绍,方便起见,文中以将法文(French)翻译为英文(English)为例。

噪声信道模型。机器翻译=翻译模型+语言模型

模型假定源语言中的(法语)句子是由目标语言(英语)经过含有噪声的信道编码后得到的。寻找最佳的英文翻译结果等同于寻找[latex]\arg\max_{e}p(e|f)[/latex]。
根据贝叶斯公式,容易得到[latex]\arg\max_{e}p(e|f)=\arg\max_{e}\frac{p(f|e)p(e)}{p(f)}[/latex],由于对于同一个法语单词来说,[latex]p(f)[/latex]是一定的,因此上式等同于[latex]\arg\max_{e}p(f|e)p(e)[/latex],其中

  • [latex]p(f|e)[/latex]称为翻译模型,即给定信号源,观察到信号的概率;
  • [latex]p(e)[/latex]称为语言模型,即信号源发生的概率;

机器翻译的任务就被拆解成这两个模型的任务了。本文只负责翻译模型:)

词对齐(Alignment)

Word Alignment
我们假设要翻译的法语句子包含m个单词,即[latex]F=f_1, f_2, …, f_m[/latex],翻译出来的英语句子包含l个单词,即[latex]E=e_1, e_2, …, e_l[/latex],那么之前提到的翻译概率[latex]p(F|E)=p(f_1,f_2,…,f_m|e_1,e_2,…,e_l, m)[/latex]其中包含了对句子长度服从这么个条件分布[latex]p(m|l)[/latex]的假设。
然而这个概率是很难直接建模的,于是一帮聪明的人想出来一个方案:引入词对齐(word alignment):[latex]p(F|E)=p(F,A|E)=p(f_1,f_2,…,f_m,a_1,a_2,…,a_m|e_1,e_2,…,e_l, m)[/latex],其中这个a就是词对齐,它是个隐变量,表示源语言(法语)中的某个单词是用目标语言(英语)翻译而来的。
具体可以看这个例子:

e = And the program has been implemented
     1   2     3     4   5       6
f = Le programme a ete mis en application
     1   2       3  4   5   6      7

这个例子中,[latex]l=6, m=7[/latex],一个理想的对齐方式如下:

Le => the
Programme => program
a => has
ate => been
mis => implemented
en => implemented
application => implemented

它对应的alignment标记可以表示为[latex]a_1,a_2,…,a_7=<2,3,4,5,6,6,6>[/latex]
此外在英文中还有加入个特殊的NULL单词,它表示法语中那些对于英语翻译“无用”的词。

IBM Model 1:翻译模型=对齐+词-词翻译

根据之前单词对齐的假设,我们可以把翻译任务进一步拆分成两部分:对齐和词到词的翻译,边际化参数A
[latex]p(F|E)=\sum_{A}p(F,A|E)=\sum_{A}p(A|E)p(F|E,A)[/latex]
第一部分是对齐,在Model 1中做了一个最简单的假设:每个对齐都是等概率发生的。所以[latex]p(a|e)=\prod_{i=1}^{m}\frac{1}{l+1}[/latex]。
第二部分是词-词翻译,也是整个模型的核心部分,这里当然不能再精简了,否则就没有了…
[latex]P(F|E,A)=\prod_{j=1}^{m}tr(f_j|e_{A_{j}})[/latex]
这里头的[latex]tr(.|.)[/latex]就是单词到单词的翻译概率,也就是模型要学习的东西。

模型训练:期望最大化(EM)

很显然,要学习到词-词翻译概率,就必须知道单词对齐;要学习单词对齐,就得知道翻译概率,这种鸡生蛋的问题就需要用EM来解。
定义一个参数[latex]\delta(k,i,j)[/latex]表示第k组平行预料(训练集中法文-英文句子)里的第i个法文词,第j个英文词。如果是上帝模式,那[latex]\delta(k,i,j)=1/0[/latex]分别表示这两个词之间应当/不应当对齐。然而目前无人能观测到这个隐变量,所以采用最大似然估计来估计这个东西,意思就是说翻译概率的大小决定了单词对齐的概率,即
[latex]\delta(k,i,j)=\frac{q(j|i,l_k,m_k)tr(f_i^{(k)}|e_j^{(k)})}{\sum_{j=0}^{l_k}q(j|i,l_k,m_k)tr(f_i^{(k)}|e_j^{(k)})}=\frac{tr(f_i^{(k)}|e_j^{(k)})}{\sum_{j=0}^{l_k}tr(f_i^{(k)}|e_j^{(k)})}[/latex]
注意上面这个式子是根据Model 1“句子中的对齐都是等概率”假定推导来的:[latex]q(j|i,l_k,m_k)=\frac{1}{l^{(k)}+1}[/latex]

算法

输入:训练集[latex](f^{(k)}, e^{(k)})[/latex]其中[latex]k=1,…,n[/latex],其中[latex]f^{(k)}=f_1^{(k)}…f_m^{(k)}, e^{(k)}=e_1^{(k)}…e_l^{(k)}[/latex]
初始化:初始化所有词-词翻译概率[latex]t(f|e)[/latex]
步骤:关键部分我用绿色的字注释了

  • for t=1…T
    • Set all counts [latex]c=0[/latex]
    • for [latex]k=1…N[/latex]
      • for [latex]i=1…m_k[/latex]
        • for [latex]j=1…l_k[/latex]
          • // word(i,j) in parallel corpus line k
          • [latex]\delta(k,i,j)=\frac{tr(f_i^{(k)}|e_j^{(k)}}{\sum_{j=0}^{l_k}tr(f_i^{(k)}|e_j^{(k)})}[/latex] //estimate alignment
          • [latex]c(e_j^{(k)},f_i^{(k)})+=\delta(k,i,j)[/latex] //update co-occurence count for word-word pair
          • [latex]c(e_j^{(k)})+=\delta(k,i,j)[/latex]
    • [latex]tr(f|e)=\frac{c(e,f)}{c(e)}[/latex] //update word-word pair translation probabilities

输出:[latex]tr(f|e)[/latex]
 

参考文献

  1. http://www.cs.columbia.edu/~mcollins/courses/nlp2011/notes/ibm12.pdf
  2. http://cpmarkchang.logdown.com/posts/245418-mt-ibm-model-1
  3. https://zh.wikipedia.org/wiki/%E7%BB%9F%E8%AE%A1%E6%9C%BA%E5%99%A8%E7%BF%BB%E8%AF%91
Categories
不学无术

Information Cell Mixture Models 语义细胞混合模型

语义细胞混合模型是用于表示模糊概念的一种模型,我个人的理解嘛,是一种介于k-means与GMM之间的一个模型。具体论文可以看

Tang, Yongchuan, and Jonathan Lawry. “Information cells and information cell mixture models for concept modelling.” Annals of Operations Research195.1 (2012): 311-323.

下面做一些简要介绍。

基本概念及假设

一个语义细胞混合模型(Information Cell Mixture Model, ICMM)是由一组语义细胞[latex]L_i[/latex]构成的,每个语义细胞使用三元组[latex]<P_i, d_i, \delta_i>[/latex]表示,这三个符号分别表示原型,距离函数以及密度函数。其中原型的概念类似于k-means中的聚类中心,而距离、密度刻画了这个聚类中心的“势力范围”。下图就是一个例子,这个ICMM里面有两个语义细胞。
%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-09-%e4%b8%8b%e5%8d%8810-48-58

ICMM的概率密度

假设一个ICMM由[latex]n[/latex]个语义细胞构成,则可以根据每个语义细胞自身的概率密度函数及这个细胞的权重来界定整个ICMM的密度函数如下
[latex]\delta_{ICMM}(X)=\sum_{i=1}^{n} \delta_i (X) Pr(L_i)[/latex]
而每个语义细胞自身的密度函数,由一个指定的距离函数(文中用欧氏距离)和一个概率密度函数(文中用高斯密度函数)一起界定,即
[latex]\delta_{L_i}(X) = \delta_{i}(d_i(X,P_i)) [/latex]表示到X与原型的”距离”密度,而[latex]\delta[/latex]是一个高斯密度函数[latex]\delta(\epsilon|c_i, \sigma_i)[/latex].
上面这堆都是密度函数,最后算出来是个距离(也可以称之为相似度)的密度,那如果要求真正点X到ICMM的“距离”,就需要求密度函数在[latex][d(X, P_i), +\infty)[/latex]范围的积分了。

目标函数

跟其他的生成模型类似,就是最大似然估计,目标函数也就变成了整个(对数)期望最大化了。
[latex]maximize J(ICMM) = ln \delta_{ICMM}(DB)=\sum_{k=1}^{N}(ln \delta_{ICMM}(X_k))[/latex]
[latex]= \sum_{k=1}^{N} ln (\sum_{i=1}^{n}(\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i))[/latex]
其中DB表示数据集,k是训练集的样本,i是第i个语义细胞。
但是上面这个对数似然函数很难优化,因此引入一个隐含变量[latex]z_{ik}\in {0,1} [/latex]并且有[latex]\sum_{i=1}^{n} z_{ik} = 1[/latex],它表示由某一个语义细胞“生成”了整个ICMM。

参数更新

语义细胞的概率分布更新

引入了隐变量,很容易想到用EM来更新参数… EM就是两个步骤:1.利用现有的参数去更新隐变量;2.利用隐变量来更新参数
在我们的问题中,用隐变量[latex]z_{ik}[/latex]的最大似然估计来更新,即[latex]q_{ik}=E(z_{ik}|ICMM) = \frac{\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i)}{\sum_{i=1}^{n}\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i)}[/latex]
这里的参数c, sigma, Pr, L全都是有hat的hypothesis值,鄙人不熟悉latex,没有加上。
然后,之前的那个目标函数就转变为了
[latex]Q(.)=\sum_{k=1}^{N}\sum_{i=1}^{n}q_{ik}ln(\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i))[/latex]
这是一个带有约束条件(Pr权重加起来=1)最优化目标函数,所以引入Lagrange乘子[latex]\lambda[/latex]来进行变换。变换后的目标函数求最值的问题,就可以转化为偏导数=0的问题了。

更新语义细胞的概率密度

没错,又是“退而求其次”。上面写的那个目标Q,展开来是有一个高斯分布函数项的(见原文公式9),这样对Q最优化又有难度了。作者退了一步,,因为高斯分布是个[0,1]的值,它的ln是负数,因此把这一项[latex]-ln(…)[/latex]去掉,相当于加上了一个负数值的[latex]-ln(…)[/latex].
假设这个精简版的优化目标函数叫U,显然就有[latex]U<=Q[/latex],相当于U就是个lower-bound
那如果能不断提高U的话,原有的目标函数也能得到优化。还是类似,求最值=偏导数为0,在本文中就是[latex]\frac{\partial U}{\partial c_i} = 0[/latex]以及[latex]\frac{\partial U}{\partial \sigma_i} = 0[/latex]
解出来是这么两坨:
%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-09-%e4%b8%8b%e5%8d%8811-48-39

参数更新算法

终于..可以更新参数了,具体算法如下

  1. 利用k-means算法找出k个语义细胞的原型,初始化每个语义细胞的权重[latex]Pr(L_i)=1/n[/latex];
  2. 计算训练集到当前原型的距离[latex]\epsilon_{ik}=d(X_k, P_i)[/latex],这里用的是欧氏距离;
  3. 初始化距离密度函数的参数%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-09-%e4%b8%8b%e5%8d%8811-52-42
  4. 计算第一轮的隐变量%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-09-%e4%b8%8b%e5%8d%8811-53-24
  5. 迭代更新(EM),直到目标函数J收敛
    1. 更新权重参数%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-09-%e4%b8%8b%e5%8d%8811-55-40
    2. 更新密度函数的两个参数%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-09-%e4%b8%8b%e5%8d%8811-56-24
    3. 利用更新后的参数,重新计算隐变量(的MLE)%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-09-%e4%b8%8b%e5%8d%8811-57-57
    4. 计算目标函数J

GMM与ICMM

GMM与ICMM长得比较像,我觉得ICMM算是GMM的一个简化版本。GMM求的是每个样例做高斯分布的参数,而ICMM事先就假定好了有k个“原型”,先做了一轮k-means固定下了原型,再来做密度函数的参数更新。假设有N个sample,GMM就相当于是k=N的ICMM。因此从计算复杂度上来说,ICMM比GMM简单,当然了ICMM能表示的模型复杂度还需要调参(k)才能进一步优化。