9

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

而且我不明白这是什么意思:

这是一个描述一元特征的模板。当你给一个

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

函数(func1 ... funcN),例如:

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

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

funcXY = if (output = O and feature="U01:NN") return 1 else return 0. 模板生成的特征函数个数

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

为什么 Unigram 特征有很多行,它们是什么意思?

4

2 回答 2

9

在看了足够长的文档之后,我想我明白了。

以文档中输入数据的示例为例:

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。

于 2015-05-13T11:48:24.293 回答
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。

移动远字,%x[0, 1] -> pos tag = NN, output tag = I-NP

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

更新:

我认为上面的解释非常简单,前提是你很好地理解了 CRF 模型。

CRF 模型参考

CRF++ 是对Sha 和 Pereira (2003)的复制

于 2014-12-04T07:04:08.453 回答