snorkel提取關係實驗一——英文新聞裏面提取配偶

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

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

1,安裝snorkel
1)環境搭建
創建conda環境:
conda create -n py2Env python=2.7 anaconda
運行conda環境:
source activate py2Env
關閉conda環境:
source deactivate
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)執行./run.sh,在下載下來所有代碼的根目錄下執行,即“/snorkel/snorkel-master”
4)打開網頁http://localhost:8888/tree#,新建一個python2的notebook
注意:如果這裏不使用notebook按照上述方法創建, 而是直接使用python執行,會報錯“cannot import name SnorkelSession”,
2,實例一:從新聞中提取配偶
1)預處理
1.1 創建SnorkelSession,加載語料,使用Spacy對語料進行簡單的處理,包括分句、分詞、命名實體識別;
%load_ext autoreload%autoreload 2%matplotlib inlineimport os# TO USE A DATABASE OTHER THAN SQLITE, USE THIS LINE# Note that this is necessary for parallel execution amongst other things...# os.environ['SNORKELDB'] = 'postgres:///snorkel-intro'from snorkel import SnorkelSessionsession = SnorkelSession()# Here, we just set how many documents we'll process for automatic testing- you can safely ignore this!n_docs = 500 if 'CI' in os.environ else 2591
#加載預料
from snorkel.parser import TSVDocPreprocessordoc_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 Spacyfrom snorkel.parser import CorpusParsercorpus_parser = CorpusParser(parser=Spacy())%time corpus_parser.apply(doc_preprocessor, count=n_docs)
#測試下數據庫中總共的文件數和拆分的語句數
from snorkel.models import Document, Sentenceprint("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 


未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章