在Wikipedia上用BERT构建QA系统(一)

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

Wikipedia上用BERT构建QA系统

                    一个使用PyTorch和Hugging Face基于IRQA系统的代码详解

                                        2020519日•24分钟阅读

        你决定建立一个QA系统。


        你想从一些简单和通用的东西开始,所以你计划用维基百科作为回答问题的资料库,从而使系统具有开放性。你想使用手头计算资源所允许的最好的NLP(你很幸运,能够访问GPU),所以你要专注于现在流行的完善、华丽的Transformer模型。

听起来你在建立一个基于IR的QA系统。在上一篇文章中,我们介绍了这些系统的总体设计,通常需要两个主要组件:从一个大型集合中选择n个最相关文档的文档检索器(搜索引擎);以及一个文档阅读器,它处理这些候选文档以寻找明确的答案。

image.png

        这次我们要构造它!这篇文章充斥着贯穿整个流程的代码。我们还将重点介绍和阐释一些强大的资源,包括现成的模型和库,您可以使用它们来快速实现自己的QA系统。我们将介绍所有必要的步骤,包括:


                安装库和设置环境

        

                基于SQuAD 数据集训练Transformer模型

        

                理解Hugging Face的run_squad.py训练脚本和输出

        

                将完整的维基百科文章作为问题的上下文传递


      在本文的最后,我们将拥有一个基于IR的QA系统,BERT作为文档阅读器,Wikipedia的搜索引擎作为文档检索器,这是一个有趣的玩具模型,可以揭示潜在的真实用例。


      本文最初是在Jupyter Notebook上开发的,多亏了fastpages,转换成了博客文章。对于交互式环境,请单击上面的“在Colab中打开”按钮,尽管这样,由于Colab的系统限制,此notebook中的某些单元格可能无法完全执行。如果是这样的话,我们会注意的,但别担心——你仍然可以玩所有有趣的东西。


        我们开始吧!


设置虚拟环境

     

        虚拟环境总是最佳实践,我们在我们的主机上使用venv。对于这个项目,我们将使用PyTorch,它处理深层可微分学习的繁重工作。如果你有一个GPU,你会想要一个包含CUDA支持的Pythorch版本,尽管本文中的大多数部分在没有它的情况下都可以正常工作。查看Pythorch的快速安装指南,以确定适合您的GPU和操作系统的最佳版本。我们还将使用Transformers libarary,它提供了所有流行的Transformer架构(如BERT)的容易使用的实现。最后,我们需要wikipedia库来方便地访问和解析wikipedia页面。


        您可以在命令行中使用以下命令重新创建我们的env(支持CUDA 9.2,但要为您的计算机选择适当的版本):

image.png

注意:我们的GPU机器支持旧版本的CUDA9.2——我们正在着手更新),因此我们需要使用旧版本的Pythorch来获得必要的CUDA支持。我们将使用的训练脚本需要一些特定的包。PyTorch的较新版本包含这些包;但是,较旧版本不包含。如果必须使用旧版本的PyTorch,则可能需要安装TensorboardX(请参见下面的隐藏代码单元格)。

image.png

对的,如果使用Colab,你可以运行下面的单元格。

image.png

Hugging Face Transformers

我是Pythorch的新手,甚至Hugging FaceHF更陌生,但我很快成为一个忠实使用者Hugging Face Transformers提供了最先进的通用架构,用于理解自然语言和自然语言生成。他们有几十个预先训练过的模型,使用超过100种语言,你可以直接使用。所有这些模型都具有PyTorchTensorflow 2.0之间的深度互操作性,这意味着您可以将模型从TF2.0移到PyTorch,然后再使用一两行代码返回结果!

如果你是Hugging Face新手,我们强烈建议通过HF快速启动指南以及他们优秀的Transformer Notebooks(我们使用了!),我们不会在本文讨论这些材料。我们将使用autocrasses,它几乎可以作为任何基本Transformer类的包装器。

用于QATransformer模型微调

为了给QA训练一个Hugging Face的 Transformer,我们需要

        选择特定的模型架构,

        一个QA数据集,以及

        训练脚本。

有了这三样东西,我们就可以完成微调过程了。

1选择模型

并不是每一个Transformer架构都能理所当然地完成问答任务。例如,GPT不做QA;类似的,BERT也不做机器翻译。HF识别以下类型:

        BERT

        distilBERT

        ALBERT

        RoBERTa

        XLNet                                                       

        XLM

        FlauBERT

我们在本文中将坚持流行BERT 模型,但请随意尝试其他一些(我们会尝试,当我们做的时候会让你知道)。下一步——一套训练数据集

2.QA数据集:SQuAD

QA最规范的数据集之一是斯坦福问答数据集(Stanford Question Answering Dataset,简称SQuAD),它有两种类型:SQuAD 1.1SQuAD 2.0。这些阅读理解数据集由一组维基百科文章中提出的问题组成,每个问题的答案都是相应段落的一个片段(或一个范围)。在SQuAD 1.1,所有问题在相应的段落中都有答案。SQuAD 2.0增加了难度,包括了所提供的文章无法回答的问题。

以下代码将下载指定版本的SQuAD

image.pngimage.png


英文原文:https://qa.fastforwardlabs.com/pytorch/hugging%20face/wikipedia/bert/transformers/2020/05/19/Getting_Started_with_QA.html
译者:阿布铥