我正在尝试使用 CRF++ 将产品字符串解析为各种属性类,以便我可以执行类似于此问题的产品匹配。
然而,我遇到的一个问题是,当产品字符串中的单词顺序尚未在训练文件中看到时,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”之类的字符串上使用该模型时,该模型无法识别正确的标签,而是将“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 本身就受语法限制?或者我可以以某种方式修改模板文件或训练数据列以捕获/忽略产品字符串中单词的顺序?