CRF ++模板文件和句子语法

时间:2017-01-19 22:02:00

标签: crf crf++

我正在尝试使用CRF ++将产品字符串解析为各种属性类,以便我可以执行类似于this question的产品匹配。

然而,当我遇到一个问题时,当培训文件中尚未显示产品字符串中单词的顺序时,CRF无法准确预测标签。

举个例子,我只是使用一个词袋模板文件:

#Unigrams
U00:%x[-1,0]
U00:%x[0,0]
U00:%x[1,0]

#Bigrams
B

我运行crf_learn,包括以下示例训练数据:

panasonic  NOUN  B-BRAND
digital  ADJ  B-PRODUCT
monitor  NOUN  I-PRODUCT
17  #  B-SIZE
inch  #  I-SIZE

使用此训练数据时,模型会正确地将测试字符串“panasonic digital monitor 17 inch”解析为正确的输出标记。但是,当我在字符串上使用模型时,例如“panasonic monitor digital 17 inch”,模型无法识别正确的标记,而是将“数字”和“监视”的标记更改为以下内容:

panasonic  NOUN  B-BRAND
monitor  NOUN  B-PRODUCT
digital  ADJ  I-PRODUCT
17  #  B-SIZE
inch  #  I-SIZE

然而,我需要的是:

panasonic  NOUN  B-BRAND
monitor  NOUN  I-PRODUCT
digital  ADJ  B-PRODUCT
17  #  B-SIZE
inch  #  I-SIZE

这是我的模板文件的问题,还是CRF固有的语法限制?或者我可以以某种方式修改模板文件或训练数据列以捕获/忽略产品字符串中单词的排序吗?

1 个答案:

答案 0 :(得分:0)

首先,模板文件中的功能定义是错误的。

所有要素模板都标识为U00。这意味着基本上只有1个功能,而不是3个。

其次,我认为您应该尝试更多功能模板,例如:

#context of 3 words
U00:%x[-1,0]
U01:%x[0,0]
U02:%x[1,0]

#for POS Tag
U03:%x[0,1]

希望这有助于提高绩效:)

PS:您可以看到https://youtu.be/GJHeTvDkIaE了解CRF ++模板文件。