整个论文模型的任务是多任务学习,需要识别出一个句子中的实体、实体标签、实体关系、事件和角色。为了简化流程我就以实体为例介绍。
模型流程为:给定一个句子,通过ident模型识别出其中的实体,把实体建模为因子图,接下来对于抽取出来的实体,利用bert对其编码获得bert_output,将编码后的结果送入一个ffn得到实体标签的分数记为entity_type_score。(其中包括一元,二元,三元分数不过这个不重要,应该不在你的考虑范围)。利用这些实体标签得分/关系标签得分/事件得分来计算消息出因子图message(公式原文给出)。最后利用message来使用MFVI更新近似后验Q。(都是线性的变化)
希望完成的任务就是把最后更新近似后验分布的算法改为SVI,并且无需给出所有任务的实现,只需实现实体标签的svi部分。(预估不会超过100行)
给出一个函数,在函数内部进行svi推断,更新模型参数(应该只有获得实体标签分数的ffn需要更新,其余都是线性变化),返回近似后验分布。
这个函数的输入随意,输出的话尽量和原代码里mfvi函数的输出一样。
虽然代码很长,你只需要看model里面的ONEIE类的score和mfvi函数就应该可以了,其余流程都是死的。
Github网站:JZXXX/CRFIE (github.com)
除了上面的代码,还需要去huggingface上下一个bert。数据集github也给出了。然后后再config里面配置一下就行。