Open Zessay opened 5 years ago
嗯,十分感谢你提的意见。写这个项目主要是想实践一下序列标注常用的方法,代码中有一些细节确实不够完善,可读性也还有提高的空间,有时间我会改良一下的!
@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 见解很独到,我最近也在尝试改大佬的代码
所以真实场景下,在训练模型完成后,目的就是要对无标签数据打标签,最终完成实体识别等下游任务
首先非常佩服大佬能写出这些代码,对我来说,光是理解就需要花费很长的时间,整个看下来也还是有很多不理解的地方,需要时间慢慢消化。不过,在读代码的过程中也有几点思考,想跟repo主交流一下。
关于HMM和BiLSTM-CRF测试函数的问题,repo主写的接口函数test需要提供word2id和tag2id的参数;个人觉得如果是用训练好的模型对未标注序列进行测试的时候,也就是说迁移到一个新的环境的时候,这两个参数是很难提供的;个人想法是将word2id和tag2id这两个参数直接在init中提供,这样train和test函数就都不需要再提供这个参数了,便于迁移。
BiLSTM-Model中的test函数还需要提供tag_lists参数,这在作者的测试环境来说是可行的,因为测试集也是有标注的,只是为了检验得到的效果;但是在对真正无标注序列进行预测的时候是无法提供的,而该函数也没有考虑tag_lists无法提供的情况;相应的sort_by_lengths函数和preprocess_data_for_lstmcrf函数也要做一下简单的修改。
以上仅是个人的一些想法,希望能和作者交流一下,再次感谢你的代码!