什么是Seq2Seq问题呢?简单来说,就是输入是一个序列,输出也是一个序列。输入和输出的序列可以相等,也可以不相等。在本文中,可以先假设输入输出序列相等。
这里用了一个通俗易懂的例子来解释HMM模型,POS tagging,词性标注。
PN表示专有名词Proper Noun
V表示动词
D 定冠词
N名词
通常情况下,我们要生成1个句子,可以分为2个步骤。
一、根据语法设计好一个词性序列
二、根据字典中的词汇填充生成一个句子。
举例子来说,
图片表示,开始start后面接的词为PN的概率是0.4,接动词V的概率是0.1,接定冠词D的概率是0.5。依次类推。这样,第一步构思的词性顺序为 PN V D N的概率则为0.4x0.8x0.25x0.95x0.1。
类似地,在词性结构已经是PN V D N的第一步的基础上,生成的句子为 John saw the saw的概率为0.2x0.17x0.63x0.17。
那怎么计算第2步的概率呢?
计算方法如上图所示,其中y表示词性,x表示单词。我们是根据词汇x来求目标词性y,目标词性y是隐含的变量,这也是HMM中隐的由来。
现在问题只在于说如何计算。其实很简单,可以直接根据训练数据将这些概率统计出来。
如上图所示,词性 s ′ s' s′接在词性 s s s后面的概率为训练数据中词性s后面出现词性 s ′ s' s′的次数除以词性s出现的总次数。
词性s的单词为特定单词t的概率则为训练数据中所有单词为t且词性属于s的次数除以词性s出现的总次数。
通过对训练数据中的相关词汇和词性进行统计,便可计算出相应的概率。
上述可知,假设有 ∣ S ∣ |S| ∣S∣个词性,序列长度为L。那么该序列的词性可能存在 ∣ S ∣ L |S|^{L} ∣S∣L种答案。计算复杂度很高。而Vertibi算法则是专门解决该问题而衍生出的优化算法。
概括来说,HMM可分为上述3个步骤。
举个例子来说,假如训练数据中, y l − 1 y_{l-1} yl−1为名词N,后面接动词V的概率为0.9,接定冠词D的概率为0.1。而在给定词性为动词V的条件下,该单词为单词a的概率为0.5,为单词c的概率为0.5。在给定词性为D的条件下,为单词a的概率为1。
现在我们假设出现了该种场景,第一个单词为N,后一个单词为a,求后一个单词的词性预测。
这个例子比较简单,可以直接穷举出来。假如该单词词性 y l = D y_{l}=D yl=D,那么概率p=0.11=0.1。
假如该单词词性 y l = V y_{l}=V yl=V,p=0.90.5=0.45。因此,答案应该为V。
这个答案V看上去是没有问题的,但是假设我们的训练数据是上述这种情况,完全满足Transition probability 和Emission probability情况。我们预测的最佳答案是N-V-a。
但是,我们的训练数据中原本就出现了N-D-a这种样本。HMM模型所给的答案是训练数据中从未见过的情况,因为其概率最大。这种情况我们认为HMM预测的更好还是原数据更好呢?
答案显然是原数据中出现的样本最好。由此引申出HMM模型的缺陷问题:可能会预测出训练数据中从未出现过的结果。在训练数据为小样本数据集时其实时有一定好处的,因为这样泛化能力更强。
要想解决HMM的缺陷,有2种解决思路,一是使用更为复杂的模型,而是使用条件随机场CRF。
我们首先给出CRF的模型,先不纠结如何来的,后续会一一证明。
P ( y ∣ x ) = P ( x , y ) ∑ y ′ P ( x , y ′ ) P(y|x)=\frac{P(x,y)}{\sum_{y'}P(x,y')} P(y∣x)=∑y′P(x,y′)P(x,y)
可根据前面的HMM部分推到得出。字面意思也很好理解,词性为y,词汇为x的组合概率除以词汇为x,词性为所有可能的y的概率之和,便可得到在给定词汇x的情况下词性为y的概率。
CRF从模型上咋一看,和HMM简直时两个东西。但实际上,只是表达形式不同,建模的思想还是很接近的。
上面公式为HMM模型种的概率推导,取log后可将相乘的形式方便地转化为相加的形式。我们将上面公式种相加的4项一一拆解开。
首先看最后一项,s代表词性,t代表词汇。公式所想表达的含义为,在一个序列长度为l
的句子中,在给定每个词性为y的情况下词汇为x的的概率取对数之和等于给定词性s情况下取词汇t的概率对数之和乘以出现的次数。
上面的公式还是很复杂的,必须结合这个例子来看下。结合例子就很容易看懂上述的公式。
依此类推,另外3个表达式可以同样进行表示。
最后,便从这里推导出了CRF的模型表达式。
这里注意,我们在训练时并不会对w进行范围限制。log函数取值范围为负无穷到正无穷。我们这里CRF模型最后用的并不是等号,而是正比符号。
我们可以一步一步分解一下 ϕ ( x , y ) \phi(x,y) ϕ(x,y),看下其中的结构组成到底时什么。可分解为2部分,第一部分时关于tags和words之间的关系。第二部分是关于tags之间的关系。
第一部分对应的为 N s , t ( x , y ) N_{s,t}(x,y) Ns,t(x,y)。
第二部分则对应于 N s t a r t , s ( x , y ) , N s , s ′ ( x , y ) , N s , e n d ( x , y ) N_{start,s}(x,y),N_{s,s'}(x,y),N_{s,end}(x,y) Nstart,s(x,y),Ns,s′(x,y),Ns,end(x,y)。