snorkel提取关系实验一——英文新闻里面提取配偶

参考https://github.com/HazyResearch/snorkel

代码地址:https://github.com/HazyResearch/snorkel/blob/master/tutorials/intro/Intro_Tutorial_1.ipynb

snorkel路径:

https://hazyresearch.github.io/snorkel/

pytorch入门:

https://blog.csdn.net/whatwho_518/article/details/89702919

1,安装snorkel

首先,下载snorkel在github上的发布版本(大于0.7.0),然后在下载的snorkel文件夹的根目录执行如下操作。

1)环境搭建

创建conda环境:

conda create -n py2Env python=2.7 anaconda

运行conda环境:

source activate py2Env

2)安装依赖的组件

安装numba:

conda install numba

安装依赖组件(相关依赖组件在python-package-requirement.txt中):

pip install --requirement python-package-requirement.txt

开启ipywidgets:

jupyter nbextension enable --py widgetsnbextension --sys-prefix

注意jupyter和notebook版本:

  • jupyter: 4.1
  • jupyter notebook: 4.2

3)在下载下来所有代码的根目录下执行,即“/snorkel/snorkel-master”目录下 执行./run.sh,

4)打开网页http://localhost:8888/tree#,新建一个python2的notebook

 

注意:如果这里不使用notebook按照上述方法创建, 而是直接使用python执行,会报错“cannot import name SnorkelSession”,

 

2,实例一:从新闻中提取配偶——英文

1)预处理

1.1 创建SnorkelSession,加载语料,使用Spacy对语料进行简单的处理,包括分句、分词、命名实体识别;

第一步:加载预料 articles.tsv

from snorkel.parser import TSVDocPreprocessor 

doc_preprocessor = TSVDocPreprocessor('data/articles.tsv', max_docs=n_docs)

#注意:因为整个文件夹下载下来/articles.tsv的路径在tutorials/intro/data/articles.tsv

#面,所以需要把intro路径下所有文件拷贝到根目录下。

第二步:使用spacy作为CorpusParser,对输入语料进行分词

from snorkel.parser.spacy_parser import Spacy

from snorkel.parser import CorpusParser

corpus_parser = CorpusParser(parser=Spacy())

%time corpus_parser.apply(doc_preprocessor, count=n_docs)

第三步:测试加载语料articles.tsv总的语句数,和Spacy分句后的语句数

from snorkel.models import Document, Sentence

print("Documents:", session.query(Document).count())

print("Sentences:", session.query(Sentence).count())

1.2 生成候选实体对(三元组)。

先定义候选schema:Spouse = candidate_subclass('Spouse', ['person1', 'person2']),有一个叫做Spouse的表,里面有'person1'和 'person2'两列。

 

定义抽取器:句子中有人名的都当作候选对;

生成训练样本:将原始样本分为训练集(样本最多)、开发集、测试集;同时将一句话中出现多于5个人的语句删除。

1.3 加载 gold labels 

加载部分已标记样本用来后续评价模型的质量。

2)生成有噪的训练数据集并对其进行建模。

2.1 使用一个有标记的数据作为开发集 gold label

2.2 生成标记函数,简称为LFs

LFs使用启发式规则(模版)和弱监督方法(外部标记数据)来对候选实体对进行标记。

将编写好的所有标记函数放在LFs中

实验:编写一个简单的LF函数来对候选配偶对进行试验

2.3 应用LFs对候选实体对进行标记

使用LFs对候选的实体进行标记

3)训练一个抽取模型

使用2.3标记的样本和所有训练集的样本来训练 Bi-LSTM模型,将训练好的Bi-LSTM模型作为最终的关系提取模型

3,snorkel资料

Snorkel API全部接口地址:http://snorkel.readthedocs.io/en/master/

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eva_Hua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值