开放开源 | DeepKE:基于深度学习的开源中文关系抽取工具
本文轉載自公眾號:浙大 KG。
作者:余海陽
機構:浙江大學
代碼地址: https://github.com/zjunlp/deepke
OpenKG 發布地址: http://openkg.cn/tool/deepke
?
一、系統簡介
關系抽取是知識圖譜構建的基本子任務之一,它主要面向非結構化的文本數據,抽取文本/句子中兩個或多個實體之間的語義關系,從而組成結構化的知識,用于信息抽取、問答系統和知識庫補全等任務中。基于傳統方法的關系抽取工作,依賴人工設計的特征及抽取特征的質量,有很大的局限性。而隨著深度學習在圖像、語音等領域取得的成功,許多關系抽取的研究工作也引入神經網絡以自動提取文本/句子中的特征,減少人工工作的同時,取得了非常好的效果。本系統基于深度學習,以統一的接口實現了目前主流的關系抽取模型。包括卷積神經網絡、循環神經網絡、注意力機制網絡、圖卷積神經網絡、膠囊神經網絡以及使用語言預訓練模型等在內的深度學習算法。后續仍將持續更新,添加如端到端實體關系聯合抽取等新模型。
?
二、主要算法簡介
1. 基于 CNN 的關系抽取模型
使用 CNN 抽取每個句子中最重要的特征,得到句子的特征向量表示,并用于最終的分類。模型首先通過預訓練或者隨機初始化的 embedding 將句子中的詞轉化為詞向量,同時使用句子中的實體詞及其上下文相對位置表征實體詞的位置向量;隨后通過 CNN 網絡抽取句子級別的特征,并使用池化方式得到壓縮后的特征向量表示。最后將特征向量輸入一個全連接的神經網絡層對句子所表述的關系進行分類。
2. 基于 RNN 的關系抽取模型
與使用 CNN 網絡抽取句子特征不同,本模型主要通過雙向 LSTM 網絡抽取句子的特征,并且加入 Attention 機制對輸出的特征向量施加權重,最終生成有偏向性的向量表示;同樣地,生成的向量輸入全連接的神經網絡層最終實現對關系的分類。
3、基于 PCNN 的遠程監督關系抽取模型
在關系抽取任務中引入遠程監督學習的方法,尤其是針對遠程監督中的標記噪聲問題,使用分段的 CNN(Piecewise CNN,簡寫為 PCNN)抽取句子特征向量表示的同時,考慮到同一個 Bag 中句子表達關系的不同重要性,引入了句子級別的Attention 機制。
句子特征向量表示: PCNN 與 CNN 模型抽取句子特征向量方法相同,組合詞和詞相對位置的 embedding 表示輸入 CNN 模型進行卷積。不同的是在池化部分,使用分段池化取代前面的最大值池化操作。分段池化根據句子中兩個實體的位置將句子分為三個片段,再分別進行池化操作,這樣能捕捉句子中的結構信息以及更加細粒度的特征。
4. 基于 Capsule 的關系抽取模型
模型首先通過預訓練的 embedding 將句子中的詞轉化為詞向量;隨后使用 BiLSTM 網絡得到粗粒度的句子特征表示,再將所得結果輸入到膠囊網絡,首先構建出 primary capsule,經由動態路由的方法得到與分類結果相匹配的輸出膠囊。膠囊的模長代表分類結果的概率大小。
5. 基于 Transformer 的關系抽取模型
模型使用 Transformer 的 encoder 部分編碼句子信息。使用 multi-head attention 模塊不斷的抽取句子中重要的特征,并且使用殘差網絡的疊加方法,將注意力層得到的輸出與輸入拼接到一起并正則化。如此方式可以堆疊多層,更好的抽取句子信息。最后將 Transformer 的結果接一層全連接層得到最終的分類效果。
?
6. 基于 GCN 的關系抽取模型
GCN 在圖像領域的成功應用證明了以節點為中心的局部信息聚合同樣可以有效的提取圖像信息。因此仿照在圖像領域的應用方式,將方法遷移到關系抽取中,利用句子的依賴解析樹構成圖卷積中的鄰接矩陣,以句子中的每個單詞為節點做圖卷積操作。如此就可以抽取句子信息,再經過池化層和全連接層即可做關系抽取的任務。
?
7. 基于 BERT 語言預訓練模型的關系抽取模型
BERT 的問世證明了語言預訓練模型對下游的 nlp 任務有很大的提升,可以幫助提升關系抽取的效果。簡單的使用 BERT 語言預訓練模型方式,將句子輸入到 BERT 后,得到的結果輸入到全連接層即可做關系抽取任務。實驗結果表明可以取得相當不錯的效果。
三、安裝與使用
1. 首先推薦使用 Anaconda,可以更方便的管理python虛擬環境。在 Anaconda官網下載安裝后,在終端輸入:conda info 檢查是否成功安裝 conda。
2. 新建python虛擬環境。終端輸入:conda create -n deepkeTest python=3.7,需要確認的命令時,輸入 y,直到虛擬環境安裝完成。此時終端中輸入conda activate deepkeTest,即可進入新建的虛擬環境。
3. 安裝python依賴包。終端輸入命令:pip install -r requirements.txt,即可開始安裝。若是安裝速度較慢,建議添加pip國內鏡像。具體方法為,終端輸入命令:vim ~/.pip/pip.conf 打開pip配置文件,如果找不到該文件就新建一個。打開文件后寫入如下內容:
[global]
index-url= https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
寫完保存之后,重新輸入依賴包安裝命令 pip install -r requirements.txt,即可大幅加快安裝速度。
4. 安裝完成后,即可開始使用本系統。終端輸入:python main.py 即可立刻開始運行系統,此時為默認配置效果。具體運行效果如下:
===== start preprocess data =====
load raw files...
load data/origin/train.csv
load data/origin/test.csv
verify whether need split words...
need word segment, use jieba to split sentence
build sentence vocab...
after trim, keep words [6615 / 18645] = 35.48%
Directory 'data/out' do not exist; creating...
save vocab in data/out/vocab.pkl
?
build train data...
build test data...
build relation data...
?
save train data in data/out/train.pkl
save test data in data/out/test.pkl
===== end preprocess data =====
?
load data in data/out/vocab.pkl
load data in data/out/train.pkl
load data in data/out/test.pkl
?
CNN(
? (embedding): Embedding(
??? (word_embed):Embedding(6615, 50, padding_idx=0)
??? (head_pos_embed):Embedding(102, 5, padding_idx=0)
??? (tail_pos_embed):Embedding(102, 5, padding_idx=0)
? )
? (mask_embed):Embedding(4, 3)
? (convs): ModuleList(
??? (0): Conv1d(60, 100,kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
??? (1): Conv1d(60, 100,kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
? )
? (fc1):Linear(in_features=600, out_features=100, bias=True)
? (fc2):Linear(in_features=100, out_features=10, bias=True)
? (dropout):Dropout(p=0.3, inplace=False)
)
==========? Starttraining? ==========
Train Epoch: 1 [640/4000 (16%)]??????? ? ?Loss:2.115848
Train Epoch: 1 [1280/4000 (32%)]??????? Loss: 1.695553
Train Epoch: 1 [1920/4000 (48%)]??????? Loss: 1.826675
Train Epoch: 1 [2560/4000 (63%)]??????? Loss: 1.423478
Train Epoch: 1 [3200/4000 (79%)]??????? Loss: 1.081029
Train Epoch: 1 [3840/4000 (95%)]??????? Loss: 0.764394
Train Epoch: 1 [4000/4000 (100%)]?????? Loss: 0.771318
?
macro metrics: [p:0.8403, r:0.7970, f1:0.7709]
micro metrics: [p:0.7970, r:0.7970, f1:0.7970]
?
......
?
5. 其他配置詳情見 deepke/config.py 文件。
?
?
參考文獻
[1] Zeng, D., Liu, K., Lai, S., Zhou, G., Zhao, J.: Relation classification via convolutional deep neural network. In: COLING. pp. 2335–2344.ACL (2014)
[2] Zhou, P., Shi, W., Tian, J., Qi, Z., Li, B., Hao, H., Xu, B.: Attention-based bidirectional long short-term memory networks for relation classification. In:ACL (2). The Association for Computer Linguistics (2016)
[3] i, G., Liu, K., He, S., Zhao, J.: Distant supervision for relation extraction with sentence-level attention and entity descriptions. In: AAAI. pp. 3060–3066. AAAI Press (2017)
[4] Zhang N, Deng S, Sun Z, et al. Attention-based capsule networks with dynamic routingfor relation extraction[J]. arXiv preprint arXiv:1812.11321, 2018.
[5] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.
[6] Zhang Y, Qi P, Manning C D, et al. Graph Convolution over Pruned Dependency Trees Improves Relation Extraction[C]. Empirical Methods in Natural Language Processing, 2018: 2205-2215.
[7] Shi P, Lin J. Simple BERT Models for Relation Extraction and Semantic Role Labeling[J]. arXiv preprint arXiv:1904.05255, 2019.
OpenKG
開放知識圖譜(簡稱 OpenKG)旨在促進中文知識圖譜數據的開放與互聯,促進知識圖譜和語義技術的普及和廣泛應用。
點擊閱讀原文,了解 DeepKE。
總結
以上是生活随笔為你收集整理的开放开源 | DeepKE:基于深度学习的开源中文关系抽取工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文浅尝 - 计算机工程 | 大规模企业
- 下一篇: 论文浅尝 | 神经符号推理综述(下)