BrikerMan / Kashgari

Kashgari is a production-level NLP Transfer learning framework built on top of tf.keras for text-labeling and text-classification, includes Word2Vec, BERT, and GPT2 Language Embedding.
http://kashgari.readthedocs.io/
Apache License 2.0
2.39k stars 441 forks source link

[Question] 做NER的准确率低,尤其是关于人名的识别 #99

Closed wjjwsl closed 5 years ago

wjjwsl commented 5 years ago

我选择了版本0.2.1,epoch是100,最后evaluate的结果如下: precision recall f1-score support

  LOC     0.6957    0.6741    0.6847      2384
  PER     0.7946    0.6193    0.6961      1337
  ORG     0.6848    0.5945    0.6365      1571

micro avg 0.7144 0.6366 0.6733 5292 macro avg 0.7174 0.6366 0.6733 5292 但是我发现它基本无法识别人名,而且某些语句我用最新版本train出来的model可以正确识别,它却识别不了。例如: model3.predict(list('国家主席的名字是习近平')) ['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'] 请问这是因为人民日报那个训练集太小了么?corpus里面有其他可以做中文命名实体识别的库么?多谢!

BrikerMan commented 5 years ago

可能人民日报的语料太老了,不适合近期的人名。。。 目前 NER 数据集只有这个,如果你有别的开源数据集可以试试。

BrikerMan commented 5 years ago

可以试试这个数据集 https://github.com/buppt/ChineseNER/tree/master/data/boson

wjjwsl commented 5 years ago

嗯,我还找到了微软亚研院MSRA的命名实体识别语料:https://github.com/supercoderhawk/DeepNLP/blob/master/corpus/msr_ner_training.utf8 不过格式不一样还要再调整~_~

BrikerMan commented 5 years ago

@wjjwsl 0.2.4 版本按照 BERT 论文,修改为使用最后四个隐藏层的输出作为特征,目前效果好于之前版本,可以尝试一下。

JiaweiSheng commented 5 years ago

你好,我这边用BERT做NER,直接fit训练的时候loss变成负的了,请问这种情况正常吗?数据格式类似于这种: ['风', '范', '股', '份', '前', '任', '董', '事', '因', '内', '幕', '交', '易', '受', '到', '证', '监', '会', '处', '罚'] ['B-15', 'I-15', 'I-15', 'I-15', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']

BrikerMan commented 5 years ago

你好,我这边用BERT做NER,直接fit训练的时候loss变成负的了,请问这种情况正常吗?数据格式类似于这种: ['风', '范', '股', '份', '前', '任', '董', '事', '因', '内', '幕', '交', '易', '受', '到', '证', '监', '会', '处', '罚'] ['B-15', 'I-15', 'I-15', 'I-15', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']

数据没问题,这个问题我也遇到了,是我用 CRF 层的问题。但不影响结果,所以暂时忽略即可。 可以参考:https://github.com/keras-team/keras-contrib/issues/253

wjjwsl commented 5 years ago

我试了0.2.4的版本,效果好了非常多!感谢 @BrikerMan

captain2017 commented 5 years ago

你好,我这边用BERT做NER,直接fit训练的时候loss变成负的了,请问这种情况正常吗?数据格式类似于这种: ['风', '范', '股', '份', '前', '任', '董', '事', '因', '内', '幕', '交', '易', '受', '到', '证', '监', '会', '处', '罚'] ['B-15', 'I-15', 'I-15', 'I-15', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'] 请问一下这个这么做到的,我好像修改不了B-B-LOC,B-ORG

stephen-nju commented 4 years ago

你好,我这边用BERT做NER,直接fit训练的时候loss变成负的了,请问这种情况正常吗?数据格式类似于这种: ['风', '范', '股', '份', '前', '任', '董', '事', '因', '内', '幕', '交', '易', '受', '到', '证', '监', '会', '处', '罚'] ['B-15', 'I-15', 'I-15', 'I-15', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']

数据没问题,这个问题我也遇到了,是我用 CRF 层的问题。但不影响结果,所以暂时忽略即可。 可以参考:keras-team/keras-contrib#253 请问下主要是什么原因