我已经阅读了与this question相关联的论文。我一半得到它。有人可以帮我弄清楚如何实现它吗?
我假设某些启发式生成了这些功能。以POS-tagger为例;也许查看培训数据会显示'bird'
在所有情况下都标有NOUN
,因此功能f1(z_(n-1),z_n,X,n)
会生成为
(if x_n = 'bird' and z_n = NOUN then 1 else 0)
其中X
是输入向量,Z
是输出向量。在对权重进行训练期间,我们发现此f1
从未被违反,因此相应的权重\1
(lambda的\
)在训练后最终会变为正数且相对较大。猜测功能和培训似乎都具有挑战性,但其他方面也很简单。
我迷失了将模型应用于未标记数据的方法。使用一些任意标签初始化输出向量,然后更改标签,使它们增加所有\ * f
的总和?
对此的任何帮助将不胜感激。
答案 0 :(得分:3)
我不完全确定我是否理解正确但是,在输出端,每个向量都使用开始和结束符号进行扩充。
您对某些启发式生成的要素函数也是正确的。通常启发式是采取所有可能的组合。在您的示例中,每对(word,tag)都会有一个功能函数,从而产生大量功能。制定此类功能的常用方法是使用功能模板。
在评估模型时,您不关心标准化,因此您正在寻找能够为您提供最大分子项的序列。通常使用维特比算法来执行此操作,除非是非常大的标签集 - 或者在您的示例中是大量可能的标签 - 在这种情况下使用近似值。
CRF上的维特比与HMM非常相似。从序列的开头开始计算以手头的单词结尾的最大概率,即所有前辈的每个单词的最大值,或者只有一个前任,即START符号。在下一步中,您将迭代所有标签,这对于预测的第二个元素即z_2是可能的。非标准化概率的最大值可以从前趋节点的值,即在第一步中计算的值和模型计算得出。特别是,您结合了前任的潜力,过渡到相关节点和节点本身,并找到所有前辈的最大值。是的,因为功能函数不限制对源端的依赖,您可以从中获取任何信息。
当你到达终点时,你会走回去确定如何达到最大值。
如需进一步阅读,我推荐Rahul Gupta的报告。
答案 1 :(得分:1)
对于表示简单单词序列的线性CRF,您可以使用Viterbi algorithm(正如muckl已经提到的那样)。
对于其他拓扑,您需要找到其他算法。
对于许多拓扑来说,精确推断是难以处理的,并且可以使用近似推理算法,例如基于树的重新参数化。