参考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/