知识表示学习神器OpenKE:快速获取KG表示
?PaperWeekly 原創(chuàng) ·?作者|西南交一枝花
單位|西南交通大學CCIT實驗室博士生
研究方向|NLP、時空數(shù)據(jù)挖掘
導讀
最近使用到清華大學 NLP 組開發(fā)的知識圖譜表示工具 OpenKE,論文發(fā)表在 EMNLP 2018《OpenKE: An Open Toolkit for Knowledge Embedding》。對于簡單的圖譜表示需求,可以快速實現(xiàn)。
Github地址:
https://github.com/thunlp/OpenKE
項目主頁:
http://139.129.163.161//
概述
知識圖譜表示任務具體指將實體、關(guān)系嵌入到連續(xù)低維空間表示,如圖一所示,可類比于詞的向量化表示。常用的知識表示算法如 TransE, TransH 等,OpenKE 共集成了八種知識表示方法,具體如下圖二所示:
▲ 圖一、知識表示圖示
▲?圖二、八種知識表示方法
以 TransE 為例,對知識表示做簡單介紹。TransE 屬于平移模型的一種,主要思想是將實體和關(guān)系映射至同一低維空間。具體操作為,給定三元組 <h, r, t>,將關(guān)系 r 看作頭實體 h 到尾實體 t 的平移向量,由此可得到 ,進而使用最大間隔衡量誤差。訓練時,通過采樣構(gòu)建負樣本進行優(yōu)化。
——參考《知識圖譜與深度學習》
除了集成上述八種知識表示算法之外,該工作對三個大規(guī)模知識圖譜做了預訓練,可以通過 python 或 C++ 加載使用。
▲ 圖三、WIKI&freebase&XLORE預訓練
python #Python?codes?to?read?the?binary?files. import?numpy?as?np vec?=?np.memmap(filename?,?dtype='float32',?mode='r')C++ //C(C++)?codes?to?read?the?binary?files. #include?<cstring> #include?<cstdio> #include?<cstdlib> #include?<sys/mman.h> #include?<fcntl.h> #include?<unistd.h> #include?<sys/stat.h>struct?stat?statbuf; int?fd; float*?vec;int?main()?{if(stat(filename,?&statbuf)!=-1)?{fd?=?open("relation2vec.bin",?O_RDONLY);vec?=?(float*)mmap(NULL,?statbuf.st_size,?PROT_READ,?MAP_PRIVATE,?fd,?0);?}return?0; }值得注意的是,這里所介紹的知識圖譜表示方法都是基于靜態(tài)知識圖譜。相較于靜態(tài)知識圖譜,動態(tài)知識圖譜會隨著時間演化發(fā)生變化,具體表現(xiàn)在本體概念和實例三元組。
需求測試
筆者最近需要獲取 POI 及 POI 之間關(guān)系的表示,通過觀察官方文檔示例,輸入數(shù)據(jù)按如下形式組織。
1. 數(shù)據(jù)輸入:entity2id.txt, relation2id.txt, train2id.txt.
格式說明:entity2id.txt 和 relation2id.txt
#?relation2id.txt?第一行為關(guān)系總數(shù),每行之間以制表符(\t)分隔 2 belong_to?0 locate_at?1train2id.txt,特別注意三元組不要有重復,影響參數(shù)大小,產(chǎn)生意外錯誤。
#?train2id.txt?第一行為三元組總數(shù),每一行以制表符分隔, 2 3325??782??1 3425??712??02.?源碼下載?直接下載文首給出的 Github 鏈接,為 pytorch 版本。
官方 API 文檔中給出的訓練樣例與 Github 現(xiàn)在版本不同,無需參考。
3. 開始訓練
import?openke from?openke.config?import?Trainer,?Tester from?openke.module.model?import?TransE from?openke.module.loss?import?MarginLoss from?openke.module.strategy?import?NegativeSampling from?openke.data?import?TrainDataLoader,?TestDataLoader#?dataloader?for?training train_dataloader?=?TrainDataLoader(in_path?=?"三個輸入文件的路徑",?nbatches?=?100,threads?=?8,?sampling_mode?=?"normal",?bern_flag?=?1,?filter_flag?=?1,?neg_ent?=?25,neg_rel?=?0)#?dataloader?for?test test_dataloader?=?TestDataLoader("測試數(shù)據(jù)路徑",?"link")#?define?the?model transe?=?TransE(ent_tot?=?train_dataloader.get_ent_tot(),rel_tot?=?train_dataloader.get_rel_tot(),dim?=?200,?p_norm?=?1,?norm_flag?=?True)#?define?the?loss?function model?=?NegativeSampling(model?=?transe,?loss?=?MarginLoss(margin?=?5.0),batch_size?=?train_dataloader.get_batch_size() )#?train?the?model trainer?=?Trainer(model?=?model,?data_loader?=?train_dataloader,?train_times?=?1000,?alpha?=?1.0,?use_gpu?=?True) trainer.run() transe.save_checkpoint('./checkpoint/transe.ckpt') transe.save_parameters('./embed.vec')?#?保存嵌入向量#?test?the?model transe.load_checkpoint('./checkpoint/transe.ckpt') tester?=?Tester(model?=?transe,?data_loader?=?test_dataloader,?use_gpu?=?True) tester.run_link_prediction(type_constrain?=?False)訓練完成之后,得到一個 embed.vec 文件,通過 json 加載使用。樣式為:
{"ent_embeddings.weight":[[],[]],?"rel_embeddings.weight":[[],[]]}其中,下標對應實體 ID 和關(guān)系 ID,可在后續(xù)任務中使用。
總結(jié)
通常情況下,不會有只獲得知識表示的需求,常與后續(xù)任務一起完成,如知識圖譜補全、鏈路預測等。筆者本次的需求不需要構(gòu)建端到端的結(jié)構(gòu),可以先獲得知識表示,再進行后續(xù)處理。所以調(diào)研了現(xiàn)有的知識表示庫,發(fā)現(xiàn) openKE 使用方便,能夠較好地支撐需求。
該工具支持的知識表示方法論文列表如下所示:
A Three-Way Model for Collective Learning on Multi-Relational Data. Nickel et al. Proceedings of ICML 2011.
Translating Embeddings for Modeling Multi-relational Data. Bordes et al. Proceedings of NIPS 2013.
Knowledge Graph Embedding by Translating on Hyperplanes. Wang et al. Proceedings of AAAI, 2014.
Learning Entity and Relation Embeddings for Knowledge Graph Completion. Lin et al. Proceedings of AAAI, 2015.
Knowledge Graph Embedding via Dynamic Mapping Matrix. Ji et al. Proceedings of ACL 2015.
Embedding Entities and Relations for Learning and Inference in Knowledge Bases. Yang et al. Proceedings of ICLR 2015.
Holographic Embeddings of Knowledge Graphs. Nickel et al. Proceedings of AAAI 2016.
Knowledge Graph Completion with Adaptive Sparse Transfer Matrix. Ji et al. Proceedings of AAAI 2016.
Complex Embeddings for Simple Link Prediction. Trouillon et al. Proceedings of ICML 2016.
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學習心得或技術(shù)干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創(chuàng)作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發(fā),請在投稿時提醒并附上所有已發(fā)布鏈接?
? PaperWeekly 默認每篇文章都是首發(fā),均會添加“原創(chuàng)”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發(fā)送?
? 請留下即時聯(lián)系方式(微信或手機),以便我們在編輯發(fā)布時和作者溝通
????
現(xiàn)在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結(jié)
以上是生活随笔為你收集整理的知识表示学习神器OpenKE:快速获取KG表示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 碳酸饮料为什么?
- 下一篇: 融侨半岛为什么叫香弥山?