点击上方“视学算法”,选择加"星标"或“置顶”
重磅干货,第一时间送达
作者:阿广
公众号:视学算法
今天分享一篇发表在ACL2020上关于KGQA的文章《Improving Multi-hop Question Answering over Knowledge Graphs using Knowledge Base Embeddings》。
这篇文章简约到我都不敢相信能够发表在ACL上,相比与之前复杂的KGQA模型,这篇文章仅仅将KG和问题分别进行embedding,然后将KG和问题统一到同一个空间中,计算问题和答案实体的相似度,即可得到最终的答案。
看起来没啥,其实这篇文章的卖点是将额外的knowledge引入到了不完整的KG中,能够在KGQA任务的同时补全KG。
而引入额外knowledge的策略,是在执行不完整的KGQA下游任务的时候使用预训练之后的KG embedding。e.g.:TransE,TransH。
这篇文章同时也开源了代码:
https://github.com/malllabiisc/EmbedKGQA
由于工作需要,需要跑通这篇文章的代码,大概耗时了一天的时间踩了很多坑,最终终于在公司的服务器上把这篇EmbedKGQA给跑了起来。
下面说一下在公司的服务器(docker)上成功运行代码的步骤,已经遇到了那些坑。
首先将代码从github上clone下来,然后输入:
python3 main.py --mode train --relation_dim 200 --do_batch_norm 0 \
--gpu 2 --freeze 1 --batch_size 16 --validate_every 10 --hops webqsp_half --lr 0.00002 --entdrop 0.0 --reldrop 0.0 --scoredrop 0.0 \
--decay 1.0 --model ComplEx --patience 20 --ls 0.0 --l3_reg 0.001 --nb_epochs 200 --outfile half_fbwq
我一般喜欢从结果推问题,所以我基本都是先运行一下程序,看报哪些错,缺少哪些库,对于一些简单的问题,就安装相应的库或者使用anaconda初始化新环境来解决。
这其中包括一些pip库的安装,还有albert-base的下载,大概使用了两个小时,安装完成之后,程序能够正常运行,我以为大功告成了,但是等加载完数据之后,我发现将数据加载到GPU的时候,报错了,如下所示:
AssertionError:
The NVIDIA driver on your system is too old (found version 10000).
这很简单呀,要不升级CUDA,要不降低torch的版本。。。可是想象和现实是不一样的,很多事情都证明这一点,但是我还是抱着这是个很简单的心态去搞了一下,但是事实又沉重的给我了一拳。
while(我是一个追求理想的学术垃圾人):
if 阿广从cuda9 update to cuda 11:
服务器docker没有权限更换cuda版本,升级失败!
if 尝试下载cuda等多种策略:
失败
if 阿广将torch1.7降低到torch1.2:
future feature annotations is not defined
# 这是python版本的原因,只有python3.7才有这个函数,于是更换python版本
if python3.6--->3.7
ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/hadoop-
# 这是版本不匹配的原因,查阅很多资料,需要在/usr/lib64替换相应的库
# 但是苦逼的是,公司分配的docker没有权限更改/usr/lib64的权限
此代码很多函数用的torch1.7写的,所以还得使用torch1.7
经过了半天的爬坑,代码没能运行起来,但是我对安装python练得炉火纯青,总结出了在pc docker上快速安装不同python的秘籍:安装不同版本的anaconda即可获得对应的python版本,详细的可自行查阅。
在这儿给大家一个anaconda的版本大全:
https://repo.anaconda.com/archive/
经过多次试探,发现此代码只能运行于python3.7,torch1.7版本,这是确定的。将python版本安装到了3.7版本,将pytorch安装到了1.7版本,又一次验证了事实是沉重的,又出现了error:
ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/hadoop-aipnlp/anaconda3/envs/kbqa_zan/lib/python3.7/site-packages/scipy/_lib/_uarray/_uarray.cpython-37m-x86_64-linux-gnu.so)
这。。。要不弃坑吧?我还适合学计算机么,要不回家种地吧,等等等消极的情绪涌上心头,顿时打开虎牙看了一局lol比赛,在游戏中也印证了 菜就要被打。。。
一开始看到这个错误,搜到的资料都是让在/usr/lib64下更换一下某个库的软连接就ok,花了我好几块大洋从某宝上边买了csdn的库,然后上传的时候发现公司的服务器上没有权限更改此文件夹下的文件,我陷入了人生的死循环。
while(1):
if 放弃
前边浪费时间我玩游戏不香?
else:
我应该如何做?感觉陷入了循环
后来我发现我思考放弃还是坚持也是个循环,我觉得不行,不能浪费生命,坚持就是胜利。
于是我关掉电脑,躺在床上用手机搜了一些资料,不过惊奇的发现上边那个错误是由于site-packages 后边的库scipy库引起的,所以我执行了下边的操作:
pip unintall scipy
pip install scipy
卧槽!竟然解决了。于是大家遇到上边错误的时候,只需要卸载再安装出错的库即可,血的教训,拿走不谢。
点个在看 paper不断!