CRF+0.58训练NE模型失败
The failure in using CRF+0.58 train NE Model
当我使用CRF++0.58建模NE时程序出现问题:
"reading training data:tagger.cpp(399) [feature_index_->buildFeatures(this)] 0.00s"
- 开发环境:
- 红帽 linux 6.5,gcc 5.0,CRF++0.58
- 书面特征模板:
- 模板
- 数据集:
- Boson_train.txt
- Boson_test.txt
- 第一列是words,第二列是pos,第三列是NER tagger
- 问题:
- 当我想训练 NER 模型时,我输入这句话 "crf_learn -f 3 -c 4.0 template Boson_train crf_model",我得到了
此通知,"reading training data:tagger.cpp(399) [feature_index_->buildFeatures(this)] 0.00s"。我不明白
C++ 语言,所以我无法解决问题。
- 我试过的方法:
- 1.change数据集的编码类型。我用notepad++把"utf-8 with no BOM"改成了"utf-8"。没用。
- 2.change'\t'到''的分隔符(space)。没用。
- 3.And 我认为模板可能是 wrong.So 我使用 crf++0.58/example/seg/template 进行测试。有效。但是这个模板
很简单,所以我用的是/example/JapaneseNE/template,和我的特征模板比较相似。它没有用。然后,我检查
JapaneseNE example 它运行良好。所以我很困惑。有没有人可以帮帮我。
模板
- 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]
- Boson_train
- 浙江ns B_product_name
- 在线b I_product_name
- 杭州 ns I_product_name
- 4米B_time
- 月米I_time
- 25米I_time
- 日米I_time
- 消息输出
- ( x 输出
- 记者n出
- x 输出
- x B_person_name
- 施宇翔nr I_person_name
- x 输出
- 通讯员 n B_person_name
- x 输出
- 方英nr B_person_name
- ) x 输出
- 毒贩n出
- 非常zg Out
- “x输出
- 时辰nr Out
- ” x 输出
- ,x输出
- 用p输出
- 微信 vn B_product_name
- 交易n Out
- 毒品n出
- 。 x输出
- 没v出
- 料想v出
- 警方n B_person_name
- 也d出
您的调试方向正确。问题确实出在您的模板文件上。
您的训练数据有 3 列(第 0 列:word
、第 1 列:pos-tag
和第 2 列:tag
)。
您不能将 tag
用作特征,但您的模板文件在许多特征定义中都引用了它(即第 2 列)(参见 U20 至 U29)。你的训练应该在 removing/correcting 这些之后起作用。
希望这对您有所帮助:)
您还可以查看这些视频教程,以更好地理解模板文件和使用 CRF++ 训练 NER:
当我使用CRF++0.58建模NE时程序出现问题:
"reading training data:tagger.cpp(399) [feature_index_->buildFeatures(this)] 0.00s"
- 开发环境:
- 红帽 linux 6.5,gcc 5.0,CRF++0.58
- 书面特征模板:
- 模板
- 数据集:
- Boson_train.txt
- Boson_test.txt
- 第一列是words,第二列是pos,第三列是NER tagger
- 问题:
- 当我想训练 NER 模型时,我输入这句话 "crf_learn -f 3 -c 4.0 template Boson_train crf_model",我得到了 此通知,"reading training data:tagger.cpp(399) [feature_index_->buildFeatures(this)] 0.00s"。我不明白 C++ 语言,所以我无法解决问题。
- 我试过的方法:
- 1.change数据集的编码类型。我用notepad++把"utf-8 with no BOM"改成了"utf-8"。没用。
- 2.change'\t'到''的分隔符(space)。没用。
- 3.And 我认为模板可能是 wrong.So 我使用 crf++0.58/example/seg/template 进行测试。有效。但是这个模板 很简单,所以我用的是/example/JapaneseNE/template,和我的特征模板比较相似。它没有用。然后,我检查 JapaneseNE example 它运行良好。所以我很困惑。有没有人可以帮帮我。
模板
- 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]
- Boson_train
- 浙江ns B_product_name
- 在线b I_product_name
- 杭州 ns I_product_name
- 4米B_time
- 月米I_time
- 25米I_time
- 日米I_time
- 消息输出
- ( x 输出
- 记者n出
- x 输出
- x B_person_name
- 施宇翔nr I_person_name
- x 输出
- 通讯员 n B_person_name
- x 输出
- 方英nr B_person_name
- ) x 输出
- 毒贩n出
- 非常zg Out
- “x输出
- 时辰nr Out
- ” x 输出
- ,x输出
- 用p输出
- 微信 vn B_product_name
- 交易n Out
- 毒品n出
- 。 x输出
- 没v出
- 料想v出
- 警方n B_person_name
- 也d出
您的调试方向正确。问题确实出在您的模板文件上。
您的训练数据有 3 列(第 0 列:word
、第 1 列:pos-tag
和第 2 列:tag
)。
您不能将 tag
用作特征,但您的模板文件在许多特征定义中都引用了它(即第 2 列)(参见 U20 至 U29)。你的训练应该在 removing/correcting 这些之后起作用。
希望这对您有所帮助:)
您还可以查看这些视频教程,以更好地理解模板文件和使用 CRF++ 训练 NER: