基于DrQA的中文问答系统构建(一):DrQA安装
2017年,斯坦福大学和 Facebook人工智能研究所在 arXiv 发布了一个基于维基百科的开放域问题问答系统 DrQA。DrQA 是一个开放域的问答系统。向 DrQA 系统输入一段文本,然后提一个答案能在该文本中找到的问题,那么 DrQA 就能给出这个问题的答案。
DrQA模型主要分为两部分,第一部分Retriever和第二部分Reader,Retriever的作用是从众多文章中选择出可能包含答案的候选文章,而Reader则从候选文章中提取出问题的答案。我们的目标是借助DrQA模型的Reader部分,结合哈工大自然语言处理包LTP,实现中文问答系统。DrQA具体的原理可以见论文,本人在之后的博客也会简单介绍一下。
论文地址:https://arxiv.org/abs/1704.00051
开源地址:https://github.com/facebookresearch/DrQA
DrQA的安装比较费时,本人部署期间也遇到很多坑;接下来简单介绍一下安装的步骤(写的时间很多,可能描述不太清晰且有纰漏),如果有遇到问题的或者需要安装包的,非常欢迎留言讨论。
1.安装Python3.5(pyenv可选):DrQA需要Python3.5以上,Python3.5的安装就不再叙述,由于本人的环境原来就有Python2.6,为了不影响原来的环境,所以采用了pyenv进行版本管理,不过后来我发现了Anaconda非常非常好用,所以改用Anaconda,不过pyenv的安装使用也简单介绍下。
pyenv是一款特别好用的Python版本管理器,程序员可以建立不同的目录,在不同的目录里分别运行不同版本的Python, 使其和安装的包都互不影响。
github项目地址:https://github.com/yyuu/pyenv
pyenv-virtualenv,是pyenv的一个plugin(插件),可以用来创建基于不同Python版本的干净的虚拟环境。
github项目地址:https://github.com/yyuu/pyenv-virtualenv
(1)安装依赖包
yum -y install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite-devel bzip2-devel readline-devel mysql-devel gcc-devel python-devel
(2)安装pyenv(pyenv-virtualenv插件会自动安装
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
(3)设置环境变量
在~/.bash_profile环境变量配置加入下面三行
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
运行 exec "$SHELL"使配置生效,不行可尝试重启终端。
(4)安装Python3.5
pyenv install 3.5.0 开始自动安装Python。
安装以后使用pyenv versions 可查看安装的各个版本Python,采用pyenv local <version>切换Python版本。还可以采用pyenv-virtualenv,用 -pyenv virtualenv 版本号 虚拟环境名 命令创建纯净的不同版本的Python虚拟环境。
2.安装Anaconda(可选):
Anaconda:
Anaconda是一个用于科学计算的Python发行版,支持Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具。 个人感觉Anaconda非常好用,可以免去众多依赖包问题,强烈推荐使用。
从https://repo.continuum.io/archive/index.html上下载对应版本的Anaconda,
采用bash Anaconda3-5.2.0-Linux-x86_64.sh 进行安装
加入path echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc
使其生效 source ~/.bashrc(有时候重启终端也要执行,不然会import出错)
3.安装PyTorch
PyTorch一个基于Python的科学计算包,是DrQA的必备计算包。注意,DrQA官网上如此描述:DrQA requires Linux/OSX and Python 3.5 or higher. It also requires installing PyTorch (version 0.4.0 is not supported yet).,所以建议安装0.4以下的PyTorch,可以访问https://pytorch.org/ 根据自身相应的配置生成安装命令。
原先安装PyTorch遇到了很多坑,花了不少功夫才装好。但是在装了Anaconda后,仅需 conda install pytorch=0.3.0 -c soumith 即可自动安装PyTorch及依赖包。
4.安装DrQA
这部分在DrQA的github上有很详细的介绍。
(1)安装DrQA及依赖包
git clone https://github.com/facebookresearch/DrQA.git
cd DrQA
pip install -r requirements.txt
python setup.py develop
就会开始安装需要的各种包。
(2)安装tokenizer
tokenizer可以有两种选择,一种是斯坦福的CoreNLP,另外一种是Spacy。官网描述如下:
If you use the CoreNLPTokenizer or SpacyTokenizer you also need to download the Stanford CoreNLP jars and spaCy enmodel, respectively. If you use Stanford CoreNLP, have the jars in your java CLASSPATH
environment variable, or set the path programmatically with:
import drqa.tokenizers drqa.tokenizers.set_default('corenlp_classpath', '/your/corenlp/classpath/*')
DrQA默认的tokenizer为CoreNlp,可以使用如下命令下载
./install_corenlp.sh
安装好后可以选择自动添加到环境变量,但是我用DrQA自动的方式添加到环境变量是不正确的,建议还是按照官网的方法手动添加。
如有需要用spacy的可以采用python -m spacy download en。
(3)下载数据集,词向量等
bash ./download.sh
下载量比较大,我自己是下载好保存了一份,包括处理的简化了的数据集(用于代码调试),有需要的朋友可以留言。至于下载的都是些什么东西,将在下一篇博客介绍。
至此DrQA安装完成,可以按照官网的demo试跑一下。
Train
# prepare the data python prepro.py # train for 40 epochs with batchsize 32 python train.py -e 40 -bs 32
Predict
python interact.py
训练过程是非常漫长的,请耐心等待。
其他:idea或pycharm安装
DrQA的数据预处理和训练起来特别特别慢,实际训练我是在服务器上进行的,然而服务器上代码的修改不方便,因此我在自己的虚拟机上采用小规模的数据集进行代码调试,毕竟可视化界面方便的多,在代码调试好后才把工程迁移到服务器上跑。
最后,以上所有的安装包本人都有收集,如遇到下载太慢可留言索要。下一篇,将简单介绍下DrQA这个系统,如有时间会简述下DrQA原理。