luopeixiang / named_entity_recognition

中文命名实体识别(包括多种模型:HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于代码的几点思考

Zessay opened this issue · comments

首先非常佩服大佬能写出这些代码,对我来说,光是理解就需要花费很长的时间,整个看下来也还是有很多不理解的地方,需要时间慢慢消化。不过,在读代码的过程中也有几点思考,想跟repo主交流一下。

  1. 关于HMM和BiLSTM-CRF测试函数的问题,repo主写的接口函数test需要提供word2id和tag2id的参数;个人觉得如果是用训练好的模型对未标注序列进行测试的时候,也就是说迁移到一个新的环境的时候,这两个参数是很难提供的;个人想法是将word2id和tag2id这两个参数直接在__init__中提供,这样train和test函数就都不需要再提供这个参数了,便于迁移。

  2. BiLSTM-Model中的test函数还需要提供tag_lists参数,这在作者的测试环境来说是可行的,因为测试集也是有标注的,只是为了检验得到的效果;但是在对真正无标注序列进行预测的时候是无法提供的,而该函数也没有考虑tag_lists无法提供的情况;相应的sort_by_lengths函数和preprocess_data_for_lstmcrf函数也要做一下简单的修改。

以上仅是个人的一些想法,希望能和作者交流一下,再次感谢你的代码!

嗯,十分感谢你提的意见。写这个项目主要是想实践一下序列标注常用的方法,代码中有一些细节确实不够完善,可读性也还有提高的空间,有时间我会改良一下的!

@Zessay
您好,关于下面代码中:https://github.com/luopeixiang/named_entity_recognition/blob/master/evaluate.py

line69,保存的不是最优模型吧~
想和您讨论一下

@Zessay
您好,关于下面代码中:https://github.com/luopeixiang/named_entity_recognition/blob/master/evaluate.py

line69,保存的不是最优模型吧~
想和您讨论一下

作者是直接用pickle保存的整个model对象,在测试标注的时候直接调用self.best_model.test即使用最优模型了,参考bilstm_crf.py 146-147行:
batch_tagids = self.best_model.test( tensorized_sents, lengths, tag2id)

@Zessay
见解很独到,我最近也在尝试改大佬的代码

所以真实场景下,在训练模型完成后,目的就是要对无标签数据打标签,最终完成实体识别等下游任务