ConvE,知识图谱嵌入(KGE)论文复现(Ubuntu 20.04)
ConvE,知識圖譜嵌入(KGE)論文復現(Ubuntu 20.04)
Paper:Convolutional 2D Knowledge Graph Embeddings
準備工作
GitHub地址,打開如下,下拉按照說明來復現模型
克隆項目到本地
操作步驟
一. 安裝與配置
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_core_web_sm
首先,手動下載需要的語言模型:點擊進入,如下圖所示,點擊 tag
使用 next 翻頁找到 en_core_web_sm-3.2.0 這個包,點進去:
選擇 en_core_web_sm-3.2.0.tar.gz 下載:
下載后,執行命令:pip install en_core_web_sm-3.2.0.tar.gz,如下圖所示
然后,對應下載合適的 spacy 版本, 我安裝的是3.2.0版本,在自己的 conda 虛擬環境中執行命令(我默認的清華源安裝,其他的應該也可以):
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()
再次執行以下命令,成功:
中間部分過程,截圖如下:
歷經最少 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_SIZEinput batch size for training (default: 128)--test-batch-size TEST_BATCH_SIZEinput 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_INTERVALhow many batches to wait before logging trainingstatus--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_DIMThe embedding dimension (1D). Default: 200--embedding-shape1 EMBEDDING_SHAPE1The first dimension of the reshaped 2D embedding. Thesecond dimension is infered. Default: 20--hidden-drop HIDDEN_DROPDropout for the hidden layer. Default: 0.3.--input-drop INPUT_DROPDropout for the input embeddings. Default: 0.2.--feat-drop FEAT_DROPDropout 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_THREADSHow many loader threads to use for the batch loaders.Default: 4--preprocess Preprocess the dataset. Needs to be executed onlyonce. Default: 4--resume Resume a model.--use-bias Use a bias in the convolutional layer. Default: True--label-smoothing LABEL_SMOOTHINGLabel smoothing value to use. Default: 0.1--hidden-size HIDDEN_SIZEThe side of the hidden layer. The required sizechanges with the size of the embeddings. Default: 9728(embedding size 200).注意事項:--preprocess 只執行一次就可以了。例如,第二步的命令執行時,已經帶上了這個參數,以后的訓練就不必再添加這個參數了:
--preprocess Preprocess the dataset. Needs to be executed onlyonce. Default: 4五. 關于論文復現
執行下列命令,選擇數據集替換 DATASET_NAME,其余使用默認值,可還原論文:
CUDA_VISIBLE_DEVICES=0 python main.py --data DATASET_NAME六. 論文復現中還可能遇到的問題
🕐 ModuleNotFoundError: No module named ‘sklearn’
原因:sklearn 和 scikit-learn 不一樣,這個報錯的 sklearn 是機器學習庫 scikit-learn 縮寫,安裝 sklearn 沒用:
解決辦法:執行以下命令
🕐 ModuleNotFoundError: No module named ‘bashmagic’/‘spodernet’
把 ConvE-master/src/bashmagic 下的 bashmagic 拷貝到 ConvE-master 目錄下
把 ConvE-master/src/spodernet下的 spodernet 拷貝到 ConvE-master 目錄下:
🕐 ModuleNotFoundError: No module named ‘past’
缺失這個包的話,安裝 future,而不是 past
pip install future其余的缺什么包,pip直接安裝即可
本文展示了 自己在復現 ConvE 模型可能遇到的問題及解決辦法,如有疑問,請參考 ConvE 文件夾下的readme.md文件或訪問文首的 Github 地址,歡迎評論區交流指正
七. 評論區回答更新(2022.4.27)
出現原因: 在 pip install -r requirements.txt 中出現問題
我重新去復現了下模型,也遇到同樣的錯誤:
按以下方法, 問題成功解決:
① 解決 9418 端口上未經身份驗證的 git 協議錯誤,執行如下命令,9418錯誤消失:
git config --global url."https://".insteadOf git://然后再執行 pip install -r requirements.txt,可能依舊無法訪問:
② 更換 pip 源:
在 pip.conf 中添加:
更新:
sudo apt-get update再去執行命令就好了:
—
八、2022.5.16 更新
由于工作需要再次用到 convE 模型,中間這段時間沒有改變和配置環境,但今天再次運行時卻報錯:
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED解決方案可參考博文:
《玄學錯誤:RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED 解決方案——cuDNN 卸載并重裝》
總結
以上是生活随笔為你收集整理的ConvE,知识图谱嵌入(KGE)论文复现(Ubuntu 20.04)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 太强了!!!GNN + PLM→CIKM
- 下一篇: json数组的遍历(获取属性名和属性值)