【问题标题】:CRF++ Template File and Sentence SyntaxCRF++ 模板文件和句子语法
【发布时间】:2017-06-04 18:51:20
【问题描述】:

我正在尝试使用 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”之类的字符串上使用该模型时,该模型无法识别正确的标签,而是将“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 本身就有语法限制?或者我可以以某种方式修改模板文件或训练数据列以捕获/忽略产品字符串中单词的顺序?

【问题讨论】:

    标签: crf crf++


    【解决方案1】:

    首先,模板文件中的特征定义错误。

    所有功能模板都标识为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:CRF++模板文件的理解可以看https://youtu.be/GJHeTvDkIaE

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 2011-06-15
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 2018-11-22
      • 2018-12-06
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多