ConvLab-2 安裝與執行常見錯誤解決方法
記錄 Windows 環境中安裝 ConvLab-2 時遇到的錯誤以及其解決方法
ConvLab-2 是一個 open source 的機器人對話 Framework,其中包含了 NLU、DST、POL 與 NLG 四個模組組成,算是完整的把機器人對話所需要的功能都建立在一起,而且可以直接使用別人訓練好的資料模組在不同模組內,對於建立一個對話系統相對是快速且簡單許多。
ConvLab2 也有發表paper 在 arxiv 上,寫得也算是簡單易懂,建議把整篇看完再來架設系統,對於系統上的一些邏輯會比較清楚。
在 ConvLab 的git 上也有完整的說明該如何架設此系統,並附上一些範例檔給大家參考。然而,裝過系統的人應該都知道,事情怎麼這麼順利都不會遇到錯誤,對吧 =.=
依據其 setup.py 內的要求,ConvLab-2 需要依賴到的 libs 有下面這麼多,要說安裝時都不會遇到問題也很難了 !!
'nltk>=3.4',
'tqdm>=4.30',
'checksumdir>=1.1',
'dataclasses',
'visdom',
'Pillow',
'future',
'torch',
'numpy>=1.15.0',
'scipy',
'scikit-learn==0.20.3',
'pytorch-pretrained-bert>=0.6.1',
'transformers>=2.3.0',
'tensorflow==1.14',
'tensorboard>=1.14.0',
'tensorboardX==1.7',
'tokenizers>=0.8.0',
'allennlp==0.9.0',
'requests',
'simplejson',
'spacy',
'unidecode',
'jieba',
'embeddings',
'quadprog',
'pyyaml'
這裡記錄一下安裝時遇到的錯誤以及其解決方法。作業系統是 Windows 環境 (因為 Windows 環境安裝時問題比較多啊 XD)。
1. Python 版本
需安裝 python 3.7.6 版即可,因為過了 3.8 後 tensflow-1.x 並不支援
2. Tensorflow 版本不符 / 未安裝
建議安裝 tensorflow-1.14 版,若安裝超過 2.0 版會造成 libs 相依問題。
pip3 install --user --upgrade tensorflow==1.14
3. 各種套件衝突
3.1 torch
出現狀況:ERROR: Failed building wheel for torch
解決辦法:至 torch 網站選擇 1.5 版安裝,勿使用 1.6 版以上。使用以下指令安裝
pip install torch==1.5.0+cpu torchvision==0.6.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
3.2 allenalp
出現狀況:無法安裝 allennlp==0.9.0 時
解決辦法:當 Python 版本超過 3.8 時則無法安裝 allennlp==0.9.0 版,Python 3.7.x 版才能。
3.3 Microsoft Visual C++ 14.0
如果是在 windows 環境安裝套件,這個問題應該都會遇到,也有許多文章討論了這個問題。
出現狀況:error: Microsoft Visual C++ 14.0 is required
解決辦法:安裝 Microsoft Visual C++ 14.0。由於現在 Microsoft Visual Studio 已經發展到 19版,但由於需求空間太大,所以還是建議安裝舊版。下載 Microsoft Build Tools 2015 Update 3 並安裝即可。step-by-step 的解決方式可以參考這一篇教學:
Microsoft Visual Studio 舊版下載處:
執行
除了安裝時可能會出錯,在執行時也有可能會有錯誤,可能的問題與解決方法可參考下方做法:
1. Missing key(s)
出現狀況:Missing key(s) in state_dict: “bert.embeddings.position_ids”
RuntimeError: Error(s) in loading state_dict for JointBERT:
Missing key(s) in state_dict: “bert.embeddings.position_ids”.
解決辦法:將 model.load_state_dict(torch.load(os.path.join(output_dir, ‘pytorch_model.bin’), DEVICE)) 改成
model.load_state_dict(torch.load(os.path.join(output_dir, 'pytorch_model.bin'), DEVICE), strict=False)
2. en_core_web_sm
出現狀況:跟 spacy 相關的一個資料集 en_core_web_sm,在安裝 spacy 時或執行時可能會缺少此資料。
解決辦法:可使用以下指令安裝
python -m spacy download en_core_web_sm