ConvE,知识图谱嵌入(KGE)论文复现(Ubuntu 20.04)
Paper:Convolutional 2D Knowledge Graph Embeddings
准备工作
GitHub地址,打开如下,下拉按照说明来复现模型 克隆项目到本地:
git clone git@github.com:TimDettmers/ConvE.git
操作步骤
一. 安装与配置
1. Install PyTorch using Anaconda.
参照我的两篇博文:
1. WIN 11 安装 Ubuntu 20.04 (双系统)(2022.02.28) 2. Ubuntu 20.04 系统下(子系统)深度学习环境配置(Pytorch + GPU)
对于anaconda的安装,可以参考如下博文中安装anaconda3和环境变量部分的内容,其他不要多看,因为我的环境是双系统下的Ubuntu系统,而不是在虚拟机中进行的:
VMware 中 Ubuntu 20.04 安装 和 Pytorch 1.10.2 环境配置(2022.02.10)
2. Install the requirements pip install -r requirements.txt
执行以下命令:
cd ConvE
pip install -r requirements.txt
出现错误,执行以下命令,大家根据自己情况而定:
pip install --upgrade pip
pip install PyHamcrest
pip install --upgrade pip
再转头来执行命令:pip install -r requirements.txt ,显示安装成功,图太长,截最后一部分:
3. Download the default English model used by spaCy, which is installed in the previous step python -m spacy download en
到spacy的GitHub地址,手动下载需要的语言模型:点击进入,如下图所示,点击tag 点击next,选中如下文件下载 执行命令:pip install en_core_web_sm-3.2.0.tar.gz 安装成功:
4. Run the preprocessing script for WN18RR, FB15k-237, YAGO3-10, UMLS, Kinship, and Nations: sh preprocess.sh
执行以下命令:
cd ConvE
sh preprocess.sh
二. 在FB15k-237数据集上跑ConvE模型
执行以下命令:
CUDA_VISIBLE_DEVICES=0 python main.py --model conve --data FB15k-237 \
--input-drop 0.2 --hidden-drop 0.3 --feat-drop 0.2 \
--lr 0.003 --preprocess
报错: 原因:
从Spacy V3.0开始,该导入模块的方式已被弃用,因此要使用spacy 模型,需要更改代码
解决:
import spacy 替换为from spacy.lang.en import English nlp=spacy.load('en') 替换为nlp = English()
再次执行以下命令,成功:
CUDA_VISIBLE_DEVICES=0 python main.py --model conve --data FB15k-237 \
--input-drop 0.2 --hidden-drop 0.3 --feat-drop 0.2 \
--lr 0.003 --preprocess
中间部分过程,截图如下: 历经最少12小时吧,结果如下:
三. 在其它数据集上跑ConvE及其它两个模型
CUDA_VISIBLE_DEVICES=0 python main.py --model conve --data FB15k-237 \
--input-drop 0.2 --hidden-drop 0.3 --feat-drop 0.2 \
--lr 0.003 --preprocess
改变 --data 后的 FB15k-237 为下列数据集的任何一个:
WN18RR
YAGO3-10
umls
kinship
nations
改变 --model 后的 conve 为下列数据集的任何一个:
distmult
complex
四. 参数使用和注意事项
关于知识图谱的链接预测任务,在训练时的可选参数及含义:
-h, --help show this help message and exit
--batch-size BATCH_SIZE
input batch size for training (default: 128)
--test-batch-size TEST_BATCH_SIZE
input batch size for testing/validation (default: 128)
--epochs EPOCHS number of epochs to train (default: 1000)
--lr LR learning rate (default: 0.003)
--seed S random seed (default: 17)
--log-interval LOG_INTERVAL
how many batches to wait before logging training
status
--data DATA Dataset to use: {FB15k-237, YAGO3-10, WN18RR, umls,
nations, kinship}, default: FB15k-237
--l2 L2 Weight decay value to use in the optimizer. Default:
0.0
--model MODEL Choose from: {conve, distmult, complex}
--embedding-dim EMBEDDING_DIM
The embedding dimension (1D). Default: 200
--embedding-shape1 EMBEDDING_SHAPE1
The first dimension of the reshaped 2D embedding. The
second dimension is infered. Default: 20
--hidden-drop HIDDEN_DROP
Dropout for the hidden layer. Default: 0.3.
--input-drop INPUT_DROP
Dropout for the input embeddings. Default: 0.2.
--feat-drop FEAT_DROP
Dropout for the convolutional features. Default: 0.2.
--lr-decay LR_DECAY Decay the learning rate by this factor every epoch.
Default: 0.995
--loader-threads LOADER_THREADS
How many loader threads to use for the batch loaders.
Default: 4
--preprocess Preprocess the dataset. Needs to be executed only
once. Default: 4
--resume Resume a model.
--use-bias Use a bias in the convolutional layer. Default: True
--label-smoothing LABEL_SMOOTHING
Label smoothing value to use. Default: 0.1
--hidden-size HIDDEN_SIZE
The side of the hidden layer. The required size
changes with the size of the embeddings. Default: 9728
(embedding size 200).
注意事项:--preprocess 只执行一次就可以了。例如,第二步的命令执行时,已经带上了这个参数,以后的训练就不必再添加这个参数了:
--preprocess Preprocess the dataset. Needs to be executed only
once. Default: 4
五. 关于论文复现
执行下列命令,选择数据集替换DATASET_NAME ,其余使用默认值,即可还原论文:
CUDA_VISIBLE_DEVICES=0 python main.py --data DATASET_NAME
本文展示了 ConvE 模型的复现方法并解决了可能遇到的问题,如有疑问,请参考 ConvE 文件夹下的readme.md 文件或访问文首的Github地址,欢迎评论区交流或联系个人QQ:743337163
|