在看了足够长的文档之后,我想我明白了。
以文档中输入数据的示例为例:
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。