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'两列。

Intro_Tutorial_1.ipynb

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

生成训练样本:将原始样本分为训练集(样本最多)、开发集、测试集;同时将一句话中出现多于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/

猜你喜欢

转载自blog.csdn.net/whatwho_518/article/details/79540186