关系抽取

改垃圾代码改都改不出来心情不好就想着把以前的东西拿出来开源了。格式还没好好整理。。心情有点烦躁。。。

以前做过一个关系抽取的东西,说是关系抽取其实本质上就是一个命名实体识别的任务,这种任务本质上属于关系抽取的串联抽取方法那一个大类,就是关系和实体一起抽取。另一个大类是联合关系抽取,这个等我把代买弄完了再更新。以前一大堆人用CRF模型做这种关系抽取,现在加了深度学习了就变成LSTM-CRF,BiLSTM-CRF,CNN-LSTM-CRF,当然还有因为出现了位置向量这一神器以后出现了PCNN-CRF,都蛮好的。现在命名实体做的好的也是后面的几个方法,当然如果特征选的好用CRF做也完全没问题。可是用CRF工具包做并不能感受到快乐。

首先说一下命名实体任务。CRF 常规做法可参照CRF++工具包,主要构建特征模板,这里不再赘述。LSTM原理也不说了,都烂大街了,LSTM+CRF也随便XX一下就有了,也不多说了。说一下真正要跑的时候需要注意的东西: 首先是格式,命名实体格式如图,以人名实体为例:

李 0 B

小 1 I

明 2 E

的 3 O

爸 4 O

爸 5 O

是 6 O

李 7 B

刚 8 E

这里第一列为字元素(英文为单词),第二列为特征,这里用的词序列号,(虽然没什么卵用)最后一列为标注,常见方法BIEO方式,还有BIO方式等,用什么方式取决于最后评分标准是怎么样的,要记住CRF方法放在LSTM上面的目的就是为了解决标注的连贯性问题,就是说以BIEO为例,B后仅可能出现I,E,不可能出现O。 特征的话一般看词,字的特征,比如是不是数字啊,时间词啊。。Blabla。。。

如果这个改一改:

李 0 B

小 1 I

明 2 E

的 3 O

爸 4 B-R

爸 5 E-R

是 6 O

李 7 B

刚 8 E

这里B-R 表示为关系的开始。然后巧妙的就变成了关系抽取,构成三元组<李小明,父子,李刚>。。。当然这种方法做人工标注可以做成瓜皮。。。然而F值也就70多80吧(还是看数据坑不坑)而且遇到不在一个句子里的就异常尴尬了,所以其实感觉不喜欢这种关系抽取方法。当然机制的学者还发明了许多其他方法,就不说了。因而个人还是更偏向用联合的方法抽取,(当然代码还没有写出来,写出来第一时间弄上来) 这里还可以改一改:

李小明 0 E

的 1 O

爸爸 2 R

是 3 O

李刚 4 E

这样就可以基于词特征了,然后特征里还能够添加入句法结构信息等等,也是一个辅助方法。然后这里也就可以像英文那样用CNN处理单词了,个人实验了一下感觉虽然能有微妙提升但是有点尴尬。。不会特别明显。当然18年的一个分词和字一起融合做ner的方法(Lattice LSTM)实在的骚气,感觉可以想想办法再改改??

代码是从之前一个github改装的。。找不到了。。。非常抱歉。。。数据就不提供了,反正弄成这个样子跑就行了,注意load_data里有个’\n\n’,这玩意要视情况改成’\r\n\r\n’。。。Config文件目前不保证能适应全部修改

Github:https://github.com/DDigimon/RelationEx

转载于:https://my.oschina.net/DDigimon/blog/2998984

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值