介绍
问题回答是信息检索和自然语言处理(NLP)中的一项任务,该任务调查可以回答人类以自然语言提出的问题的程序。在“提取性问题解答”中,提供了一个上下文,以便模型可以引用该上下文并预测答案在段落中的位置。
在本文中,我们将向您展示如何使用Huggingface Transformers库提供的预训练模型来实现问题解答。由于实现起来非常简单,因此您可以在数分钟内使您的问题回答系统快速运行!
现在,让我们开始吧!
目录
- 步骤1:安装库
- 步骤2:导入库
- 步骤3:构建管道
- 步骤4:定义上下文和问题
- 步骤5:回答问题
- 额外信息:任何语言的问答
步骤1:安装库
我们将使用Transformers库来回答问题。要安装它,只需运行:
pip install transformers
步骤2:导入库
成功安装transformer之后,现在可以将库导入到python脚本中了:
from transformers import pipeline
我们将只使用pipeline模块,它是一个抽象层,提供了一个简单的API来执行各种任务。
步骤3:构建管道
现在,我们可以开始建造管道了。为了构建问答管道,我们使用如下代码:
question_answering = pipeline(“question-answering”)
这将在后台创建一个预先训练的问题回答模型以及它的标记器。在这种情况下使用的默认模型是DistilBERT-base,它在SQuAD 数据集上进行了微调。你可以在它的论文上了解更多关于知识蒸馏的信息。
要使用自己的模型和令牌生成器,可以将它们作为模型和令牌生成器参数传递给管道。
步骤4:定义要询问的上下文和问题
现在,该创建我们想要询问模型的环境和问题了。让我们从Wikipedia中获取一个快速的机器学习定义作为上下文:
context = """
Machine learning (ML) is the study of computer algorithms that improve automatically through experience. It is seen as a part of artificial intelligence. Machine learning algorithms build a model based on sample data, known as "training data", in order to make predictions or decisions without being explicitly programmed to do so. Machine learning algorithms are used in a wide variety of applications, such as email filtering and computer vision, where it is difficult or unfeasible to develop conventional algorithms to perform the needed tasks.
"""
并询问以下问题:
question = "What are machine learning models based on?"
步骤5:回答问题
最后,是时候测试我们的模型来回答我们的问题了!我们可以通过将上下文和问题作为参数传递到实例化的管道并打印出结果来简单地运行问题回答模型:
result = question_answering(question=question, context=context)
print("Answer:", result['answer'])
print("Score:", result['score'])
得到结果
Answer: sample data,Score: 0.8846667408943176
从输出中,我们应该能够将答案视为“样本数据”,这是正确的,并且还可以看到其置信度得分,在这种情况下,我认为该得分很高。
回答任何语言的问题
我们如何对英语以外的其他语言实施问答功能?在您出发之前,我认为这可能是您想知道的事情。
幸运的是,我们拥有一个由社区发布的模型库,这些模型可能已经针对您的语言进行了预训练以回答问题。我们可以访问Huggingface模型网站以查看可用于回答问题的模型。
假设我们要用中文回答问题。我们可以使用在多种语言上预先训练的多语言模型。例如,此多语言BERT在Deepmind的xQuAD数据集(SQuAD数据集的多语言版本)上进行了训练,该数据集支持11种语言:阿拉伯语,德语,希腊语,英语,西班牙语,印地语,印地语,俄语,泰语,土耳其语,越南语,和中文。
现在,根据模型文档,我们可以通过指定模型和标记器参数来直接在管道中构建模型,如下所示:
question_answering = pipeline("question-answering", model="mrm8488/bert-multi-cased-finetuned-xquadv1",
tokenizer="mrm8488/bert-multi-cased-finetuned-xquadv1")
然后,将上下文设置为:
context = """机器学习是人工智能的一个分支。是个人很热门的专业。"""
和要问的问题:
question = "机器学习是什么的分支?"
之后,我们可以使用与之前相同的代码来运行系统:
result = question_answering(question=question, context=context)
print("Answer:", result['answer'])
print("Score:", result['score'])
系统将输出:
答案:机器学习是人工智能的一个分支。
得分:0.9717233777046204
结论
就是今天!现在,您应该知道如何使用预训练的模型以任何语言实现问答系统。如果您想一次查看全部代码,这里有jupyter 的notebook
https://gist.github.com/itsuncheng/8a4ce7deb1d4965211e07c3ecb593b6c#file-question_answering-ipynb
作者:Raymond Cheng
deephub翻译组