技术动态 | 清华大学开源OpenKE:知识表示学习平台
本文轉(zhuǎn)載自公眾號機器之心,選自 THUNLP。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
清華大學(xué)自然語言處理實驗室近日發(fā)布了 OpenKE 平臺,整合了 TransE、TransH、TransR、TransD、RESCAL、DistMult、HolE、ComplEx 等算法的統(tǒng)一接口高效實現(xiàn),以及面向 WikiData 和 Freebase 預(yù)訓(xùn)練知識表示模型。該項目旨在為開發(fā)者與研究人員提供便利。
-
項目鏈接:http://openke.thunlp.org
-
GitHub:https://github.com/thunlp/OpenKE
OpenKE 是一個開源的知識表示學(xué)習(xí)平臺,由 THUNLP 基于 TensorFlow 工具包開發(fā)。在 OpenKE 中,我們提供了快速和穩(wěn)定的工具包,包括最流行的知識表示學(xué)習(xí)(knowledge representation learning,KRL)方法。該框架具有容易拓展和便于設(shè)計新的知識表示學(xué)習(xí)模型的特點。
該框架有如下特征:
-
擁有配置多種訓(xùn)練環(huán)境和經(jīng)典模型的簡易接口;
-
對高性能 GPU 訓(xùn)練進行加速和內(nèi)存優(yōu)化;
-
高效輕量級的 C++實現(xiàn),用于快速部署和多線程加速;
-
現(xiàn)有大規(guī)模知識圖譜的預(yù)訓(xùn)練嵌入,可用于多種相關(guān)任務(wù);
-
長期維護以修復(fù) bug,滿足新需求。
基準(zhǔn)測試
一些數(shù)據(jù)集如 FB15K、FB13、WN18 和 WN11 通常用于知識表示學(xué)習(xí)的基準(zhǔn)測試。我們以 FB15K 和為 WN18 為例介紹我們的框架的輸入文件的格式。
數(shù)據(jù)集有以下五種格式:
-
train.txt:訓(xùn)練文件,每行以 (e1, e2, rel) 格式書寫,第一行是三元組的數(shù)量;
-
valid.txt:驗證文件,和 train.txt 格式一樣;
-
test.txt:測試文件,和 train.txt 格式一樣;
-
entity.txt:所有的實體和對應(yīng)的 id,每行一個實體及其 id;
-
relation2id.txt:所有的關(guān)系和對應(yīng)的 id,每行一個關(guān)系及其 id。
還可以從以下地址下載原始數(shù)據(jù):
FB15K、WN18:https://everest.hds.utc.fr/doku.php?id=en:transe
相關(guān)論文:Translating Embeddings for Modeling Multi-relational Data(2013)
FB13、WN11:http://cs.stanford.edu/~danqi/data/nips13-dataset.tar.bz2
相關(guān)論文:Reasoning With Neural Tensor Networks for Knowledge Base Completion
工具包
我們提供了多個知識表示學(xué)習(xí)的工具包,包括以下四個資源庫:
OpenKE
這是一個基于 TensorFlow 的知識表示學(xué)習(xí)(KRL)的高效實現(xiàn)。我們使用 C++實現(xiàn)了一些基礎(chǔ)操作,如數(shù)據(jù)預(yù)處理和負采樣。每一個特定的模型都用 TensorFlow 和 Python 接口實現(xiàn),因此能方便地在 GPU 上運行模型。
OpenKE 提供了訓(xùn)練和測試多種 KRL 模型的簡易接口,無需在冗余數(shù)據(jù)處理和內(nèi)存控制上花費太多功夫。OpenKE 實現(xiàn)了一些經(jīng)典和高效的模型用于支持知識表示學(xué)習(xí),這些模型包括:
-
TransE
http://papers.nips.cc/paper/5071-translating-embeddings-for-modeling-multi-relational-data.pdf
-
TransH
https://www.aaai.org/ocs/index.php/AAAI/AAAI14/paper/viewFile/8531/8546
-
TransR
https://www.aaai.org/ocs/index.php/AAAI/AAAI15/paper/viewFile/9571/9523/
-
TransD
http://anthology.aclweb.org/P/P15/P15-1067.pdf
-
RESCAL
http://www.icml-2011.org/papers/438_icmlpaper.pdf
-
DistMult
https://arxiv.org/pdf/1412.6575.pdf
-
HolE
https://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/viewFile/12484/11828
-
ComplEx
http://proceedings.mlr.press/v48/trouillon16.pdf
我們提供了訓(xùn)練這些模型的教程:http://openke.thunlp.org/index/documentation。
此外,我們還使用一些簡單的例子展示了如何基于 OpenKE 構(gòu)建一個新模型。
Github 鏈接:https://github.com/thunlp/OpenKE
KB2E
KB2E 是一些知識嵌入模型的早期實現(xiàn),我們之前的研究中使用了很多資源。這些代碼將被逐漸納入新框架 OpenKE。這是一個基礎(chǔ)且穩(wěn)定的知識圖譜嵌入工具包,包括 TransE、TransH、TransR 和 PTransE。該工具包的實現(xiàn)遵循模型的原始文件設(shè)置,使其在研究實驗中保持穩(wěn)定。
GitHub 鏈接:https://github.com/thunlp/KB2E
Fast-TransX
這是 TransE 及其擴展模型用于知識表示學(xué)習(xí)的高效輕量級實現(xiàn),包括 TransH、TransR、TransD、TranSparse 和 PTransE。整個框架的底層設(shè)計為實現(xiàn)加速作出改變,且該框架支持多線程訓(xùn)練。Fast-TransX 旨在使用 OpenKE 框架實現(xiàn)快速、簡單的部署。
GitHub 鏈接:https://github.com/thunlp/Fast-TransX
TensorFlow-TransX
OpenKE 基于 TensorFlow 的簡易版,包括 TransE、TransH、TransR 和 TransD。與 Fast-TransX 類似,TensorFlow-TransX 旨在避免使用 OpenKE 框架產(chǎn)生的復(fù)雜封裝。
GitHub 鏈接:https://github.com/thunlp/TensorFlow-TransX
預(yù)訓(xùn)練嵌入
現(xiàn)有大規(guī)模知識圖譜使用 OpenKE 對嵌入進行預(yù)訓(xùn)練(目前都通過 TransE 進行訓(xùn)練。必要時會介紹更多模型)。
知識圖譜和嵌入包括以下五個文件:
-
實體的嵌入:知識圖譜中每個實體的嵌入。數(shù)據(jù)是二進制格式,每一行有一個嵌入。每一行用大量連續(xù)浮點表示這一行的嵌入。
-
關(guān)系嵌入:知識圖譜中每一個關(guān)系的嵌入。數(shù)據(jù)是二進制格式,每一行有一個嵌入。每一行用大量連續(xù)浮點表示這一行的嵌入。
-
Triple2id:知識圖譜的知識三元組與對應(yīng)序列號之間的映射。每一行有一個三元組和序列號,二者用一個 tab 隔開。
-
Entity2id:知識圖譜的實體與對應(yīng)序列號之間的映射。每一行有一個實體和序列號,二者用一個 tab 隔開。
-
Relation2id:知識圖譜的關(guān)系與對應(yīng)序列號之間的映射。每一行有一個關(guān)系和序列號,二者用一個 tab 隔開。
文件描述和下載鏈接:
Wikidata:http://openke.thunlp.org/download/wikidata
Freebase:http://openke.thunlp.org/download/freebase
如何閱讀二進制文件:
-
Python
#Python codes to read the binary files.
import numpy as np
vec = np.memmap(filename , dtype='float32', mode='r')
-
C/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;
}
本文為機器之心編譯,轉(zhuǎn)載請聯(lián)系機器之心公眾號獲得授權(quán)。
OpenKG.CN
中文開放知識圖譜(簡稱OpenKG.CN)旨在促進中文知識圖譜數(shù)據(jù)的開放與互聯(lián),促進知識圖譜和語義技術(shù)的普及和廣泛應(yīng)用。
點擊閱讀原文,進入 OpenKG 博客。
總結(jié)
以上是生活随笔為你收集整理的技术动态 | 清华大学开源OpenKE:知识表示学习平台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 课程 | 《知识图谱》第二期重磅来袭!
- 下一篇: 论文浅尝 |「知识表示学习」专题论文推荐