如何制作CRF ++的模板文件?

时间:2014-08-25 01:23:10

标签: crf crf++

我是CRF ++的新手。我在教自己查看手册: http://crfpp.googlecode.com/svn/trunk/doc/index.html?source=navbar#templ

我不明白这意味着什么:

  

这是一个描述unigram功能的模板。当你给出一个

     

模板“U01:%x [0,1]”,CRF ++自动生成一组功能

     

函数(func1 ... funcN)如:

     

func1 = if(输出= B-NP和feature =“U01:DT”)返回1否则返回0

     

func2 = if(output = I-NP and feature =“U01:DT”)返回1否则返回0

     

func3 = if(output = O and feature =“U01:DT”)返回1否则返回0

     

.... funcXX = if(output = B-NP and feature =“U01:NN”)return 1 else return 0

     

funcXY = if(output = O and feature =“U01:NN”)返回1否则返回0.模板生成的要素函数数

     

等于(L * N),其中L是输出数

为什么Unigram功能有很多行,它们是什么意思?

2 个答案:

答案 0 :(得分:8)

在看了the documentation足够长的时间之后,我想我已经明白了。

以输入数据所在的文档为例:

He        PRP  B-NP
reckons   VBZ  B-VP
the       DT   B-NP 
current   JJ   I-NP 
account   NN   I-NP

并且有问题的要素模板(格式为%x[row, col],其中row相对于您当前的位置)%x[0,1]

当扩展%x[0,1]时,根据当前令牌,它可以扫描集合[PRP, VBZ, DT, JJ, NN]中的一个字符串(即第一列中唯一的一个字符串,其中最左边的列是第0列)。对于每个字符串,它创建一组表单的特征函数(查看输入数据的第3行):

func1 = if (output = B-NP and feature="U01:DT") return 1 else return 0
func2 = if (output = I-NP and feature="U01:DT") return 1 else return 0
func3 = if (output = O    and feature="U01:DT") return 1 else return 0
...

将特定字符串(上面代码中的DT)与每个输出类进行比较。

因此,如果输出类为[B-NP, I-NP, O],则扩展为要素函数的要素模板将如下所示:

# row 1 (He, PRP, B-NP)
func1 = if (output = B-NP and feature="U01:PRP") return 1 else return 0
func2 = if (output = I-NP and feature="U01:PRP") return 1 else return 0
func3 = if (output = O    and feature="U01:PRP") return 1 else return 0

# row 2 (Reckons, VBZ, B-VP)
func4 = if (output = B-NP and feature="U01:VBZ") return 1 else return 0
func5 = if (output = I-NP and feature="U01:VBZ") return 1 else return 0
func6 = if (output = O    and feature="U01:VBZ") return 1 else return 0

# Row 3 (the, DT, B-NP)
func7 = if (output = B-NP and feature="U01:DT") return 1 else return 0
func8 = if (output = I-NP and feature="U01:DT") return 1 else return 0
func9 = if (output = O    and feature="U01:DT") return 1 else return 0

# Row 4 (current, JJ, I-NP)
func10 = if (output = B-NP and feature="U01:JJ") return 1 else return 0
func11 = if (output = I-NP and feature="U01:JJ") return 1 else return 0
func12 = if (output = O    and feature="U01:JJ") return 1 else return 0

# Row 5 (account, NN, I-NP)
func13 = if (output = B-NP and feature="U01:NN") return 1 else return 0
func14 = if (output = I-NP and feature="U01:NN") return 1 else return 0
func15 = if (output = O    and feature="U01:NN") return 1 else return 0

关于文件提到的地方:

  

模板生成的要素函数数量为(L * N),其中L是输出类的数量,N是从给定模板扩展的唯一字符串数。

在这种情况下,L为3,N为5。

答案 1 :(得分:0)

对于特定模板%x [i,j],i表示偏移(行)到当前位置,j表示要使用的特征(列)。 鉴于数据:

He        PRP  B-NP

reckons   VBZ  B-VP

the       DT   B-NP

current   JJ   I-NP  << CURRENT TOKEN

account   NN   I-NP

%x [0,1]表示单词,当前单词的偏移量为0,其pos标签为JJ,输出标签为I-NP。

移动farword,%x [0,1] - &gt; pos tag = NN,输出标签= I-NP

每个特征函数指的是当前单词及其pos标记的一对可能值。

更新

我认为上述解释非常直接,条件是你能很好地理解CRF模型。

CRF Model Reference

CRF ++是Sha and Pereira (2003)

的复制品