0

当我使用 CRF++0.58 对 NE 进行建模时,程序出现问题:

“读取训练数据:tagger.cpp(399) [feature_index_->buildFeatures(this)] 0.00s”

  1. 开发环境:
    • 红帽 linux 6.5,gcc 5.0,CRF++0.58
  2. 书面特征模板:
    • 模板
  3. 数据集:
    • Boson_train.txt
    • Boson_test.txt
    • 第一列是words,第二列是pos,第三列是NER tagger
  4. 问题:
    • 当我想训练 NER 模型时,我输入这句话“crf_learn -f 3 -c 4.0 template Boson_train crf_model”,然后我收到了这个通知,“正在读取训练数据:tagger.cpp(399) [feature_index_->buildFeatures(this )] 0.00 秒"。我不懂 C++ 语言,所以我无法解决问题。
  5. 我尝试的方法:
    • 1.更改数据集的编码类型。我使用记事本++将“没有BOM的utf-8”更改为“utf-8”。它没有用。
    • 2.将分隔符从'\t'更改为''(空格)。它没有用。
    • 3.我认为模板可能是错误的。所以我使用 crf++0.58/example/seg/template 进行测试。有效。但是这个模板很简单,所以我使用 /example/JapaneseNE/template 与我的功能模板更相似。它没有用。然后,我检查了 JapaneseNE 示例,它运行良好。所以我很困惑。有没有人可以帮助我。
  6. 模板

    • U00:%x[-2,0]
    • U01:%x[-1,0]
    • U02:%x[0,0]
    • U03:%x[1,0]
    • U04:%x[2,0]
    • U05:%x[-2,0]/%x[-1,0]/%x[0,0]
    • U06:%x[-1,0]/%x[0,0]/%x[1,0]
    • U07:%x[0,0]/%x[1,0]/%x[2,0]
    • U08:%x[-1,0]/%x[0,0]
    • U09:%x[0,0]/%x[1,0]

    • U10:%x[-2,1]/%x[0,1]

    • U11:%x[-2,1]/%x[1,1]
    • U11:%x[-1,1]/%x[0,1]
    • U12:%x[0,0]/%x[0,1]
    • U13:%x[0,1]/%x[1,1]
    • U14:%x[0,1]/%x[2,1]
    • U15:%x[-1,0]/%x[0,1]
    • U16:%x[-1,0]/%x[-1,1]
    • U17:%x[1,0]/%x[1,1]
    • U18:%x[1,0]/%x[1,1]
    • U19:%x[2,0]/%x[2,1]

    • U20:%x[-1,2]

    • U21:%x[-2,2]
    • U22:%x[0,1]/%x[-1,2]
    • U23:%x[0,1]/%x[-2,2]
    • U24:%x[0,0]/%x[-1,2]
    • U25:%x[0,0]/%x[-2,2]
    • U26:%x[-1,2]/%x[-2,2]/%x[0,1]
    • U27:%x[-2,2]/%x[0,1]/%x[1,1]
    • U28:%x[-1,1]/%x[-1,2]/%x[0,1]
    • U29:%x[-1,2]/%x[0,0]/%x[0,1]
  7. 玻色子火车
    • 浙江ns B_product_name
    • 在线 b I_product_name
    • 杭州 ns I_product_name
    • 4 m B_time
    • 月 m I_time
    • 25 m I_time
    • 日 m I_time
    • 讯 ng Out
    • ( x 出
    • 记者 n Out
    • x 输出
    • x B_person_name
    • 施宇翔 nr I_person_name
    • x 输出
    • 通讯员 n B_person_name
    • x 输出
    • 方英 nr B_person_name
    • ) x 出
    • 毒贩n出
    • 很zg出
    • “ x 出
    • 现象 nr 输出
    • ” x 出
    • , x 出
    • 用 p 出
    • 微信vn B_product_name
    • 交易n输出
    • 排气口
    • 。 x 输出
    • 没 v 出
    • 料想v出
    • 警方 n B_person_name
    • 也d出
4

1 回答 1

0

您正在朝着正确的方向进行调试。问题确实出在您的模板文件上。

您的训练数据有 3 列(第 0 列:word、第 1 列:pos-tag和第 2 列:)tag

您不能使用tagas 功能,但您的模板文件在许多功能定义(参见 U20 到 U29)中都引用了它(即第 2 列)。在删除/纠正这些之后,您的培训应该会起作用。

希望这可以帮助 :)

您还可以查看这些视频教程,以更好地理解模板文件和使用 CRF++ 训练 NER:

1) https://youtu.be/GJHeTvDkIaE

2) https://youtu.be/Ur5umC4BwN4

于 2017-05-08T17:21:13.453 回答