我正在尝试使用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 it“解析为其正确的输出标签。然而,当我在诸如"panasonic monitor digital 17 on“之类的字符串上使用该型号时,该型号无法识别正确的标签,而是将”digital“和”monitor“的标签更改为如下所示:
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固有的语法限制?或者,我是否可以通过某种方式修改模板文件或训练数据列,以捕获/忽略产品字符串中单词的排序?
发布于 2017-05-09 01:33:51
首先,模板文件中的特征定义是错误的。
所有要素模板都标识为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++模板文件。
https://stackoverflow.com/questions/41752524
复制相似问题