QA在Python中
2021年10月13日 11分钟阅读

Question Answering (QA) System 在Python中 – Introduction to NLP & 一个实用的代码示例

问答(QA)是自然语言理解(NLU)领域的一个分支。. 它的目标是实现这样的系统, 用自然语言给出一个问题, 能否从提供的数据中提取相关信息,并以自然语言回答的形式呈现出来.

For example, after being asked, “how warm is it going to be today?“你的 Siri can extract raw information about today’s temperature from a weather service. 除了, 而不是让你看到它本来的样子, 它处理数据并以适当的英语(或任何其他支持的语言)将其呈现给.

Historically, one of the first implementations of the QA system was the program 棒球 (1961年),斯坦福大学创立. It was able to answer questions about baseball league scores, statistics etc., using a rule-based language model for “decoding”, 生成自然文本和访问一个棒球关系数据库,以找到实际的答案.

虽然, as fun 和 retro as the example above may seem, 很难想象它会比仅仅将棒球数据放在电子表格中更有价值. 然而, 今天,作为一个社会,十大靠谱网投平台产生的大多数数据都不像棒球比赛的分数那样,是建立在一个单一的表格中. 而不是, 数据是非结构化的, 类似于图片, 录音, social media behavioural data 和 (most importantly for this article) natural text. 这就是为什么今天QA领域的焦点从用自然语言生成答案转移到其他领域的原因 GPT-3 伯特 for that now) towards extracting factual information from unstructured data.

不同类型的QA

Every QA system can be categorized based on its two criteria:

  • 类型的答案

域标准

单一域系统

这些系统经过微调,可以回答来自某个特定领域的问题. 考虑这样一个程序,它可以回答病人关于心脏病的问题,或者另一个程序可以为高管挖掘内部公司数据中的信息. 这 kind of system has the advantage of inconsistencies in natural language. 例如,e.g. 在英国食谱中,“心脏病”中的“心脏”一词通常指的是真正的人体器官,而不是鸭心.

Open-域系统

These are a natural extension of single 域 QA systems. 而不是 of focusing only on one narrow area of expertise, they are designed to answer more general questions. 认为 语音助手 or a model trained on all the Wikipedia 文章.

答案类型标准

是/否的答案

这 is the most straightforward instance of a QA system. 它基本上可以归结为基于问题和上下文数据的文本分类.

萃取问答

在这种方法中, instead of creating a novel natural language answer, 系统只是查找并返回一个包含答案的已分析文本片段. 这些类型的系统对于文本生成中的错误是健壮的(它们完全忽略了它). 另一方面, 如果答案没有在文本中直接提供,却隐含在字里行间,他们可能会挣扎.

生成的问题回答

最复杂的QA系统类型, 对于每一个问题, generates novel answers in natural language. 不幸的是, 与提取方法相比,它需要更多的计算能力和工程时间.

实现

对于本教程, 十大靠谱网投平台将实现一个简单的QA系统培训,通过使用🤗处理开放域数据并给出是/否的答案 变形金刚PyTorch 在Python中. 然而,十大靠谱网投平台不会从头开始训练模型,而是对一个已经存在的模型(Distil伯特)完成十大靠谱网投平台的任务.

十大靠谱网投平台将使用 BoolQ 数据集. It contains 12697 examples of yes/no questions, 和 each example is a triplet of a question, an answer 和 context (textual data based on which system will answer).

Since we are working with yes/no questions, our goal is to train a model that performs better than just picking an answer at r和om – this is why we must aim at >50% accuracy.

设置

对于初学者来说, we need to install the required python packages, 这是, PyTorch, sklearn, 变形金刚和数据集. Note that these comm和s may not work for your setup. 如果您有任何问题,请参阅PyTorch/拥抱脸安装指南.

pip安装火炬
PIP安装数据集变压器
pip安装sklearn

在必要的设施, we can open our script/jupyter/collab 和 start with essential imports.

from 数据集s import load_数据集, load_度规
from 变形金刚 import DistilBertTokenizerFast
从变压器导入automodelforsequenceclclassification, DataCollatorWithPadding
from 变形金刚 import 教练, TrainingArguments

另外, we need to specify a checkpoint of the model we want to fine-tune. 在十大靠谱网投平台的案例中, 它会Distil伯特, 这是一个更小的, 更快,更轻, yet still high performing version of the original 伯特 model.

检查点= " distilbert-base-uncased "

数据准备

First of all, we need to download our data. Fortunately, we can do it directly from 🤗 hub (link),只需执行:

数据集= load_数据集(“boolq”)

,“boolq是十大靠谱网投平台数据集的名称

DatasetDict ({
火车:数据集({
features: ['question', 'answer', 'passage'],
num_rows: 9427
})
验证:数据集({
features: ['question', 'answer', 'passage'],
num_rows: 3270
})
})

Above, we can see the structure of this particular 数据集. It consists of two subsets: `train` 和 `验证`. 下面十大靠谱网投平台可以看到一个例子:

{“答案”:没错,
“通过”:“波斯(/ˈpɜːrʒən, ——ʃən /), also known by its endonym Farsi (فارسی fārsi (fɒːɾˈsiː) ( listen)), 
是属于印欧语系的印伊语系的西伊朗语吗. 
它主要在伊朗、阿富汗(自1958年以来被正式称为达里语)和塔吉克斯坦使用 
(自苏联时代以来正式称为塔吉克语),以及历史上其他一些地区 
were Persianate societies 和 considered part of Greater Iran. 它是用波斯字母表写的, 
阿拉伯文字的一种变体,它本身是从阿拉姆字母演变而来的.',
'question': 'do iran 和 afghanistan speak the same language'}

To begin data processing, we need to create a text tokenizer. 幸运的是, 🤗变形金刚 come equipped with a bunch of already pretrained tokenizers, 十大靠谱网投平台可以开箱即用

记号赋予器= DistilBertTokenizerFast.from_pretrained(关卡)

因为十大靠谱网投平台已经定义了' tokenizer ', we can now define a function that will perform an actual preprocessing. 这个函数必须用记号器对输入进行标记和编码,并准备标签字段.

def tokenize_function(示例):
encoded = tokenizer(example["question"], example["passage"], truncation=True)
encoded["labels"] = [int(a) for a in example["answer"]]
返回编码

tokenized_数据集s =数据集.地图(tokenize_function,成批的= True)

另外, 十大靠谱网投平台需要定义一个数据排序器, which will create batches of examples that don’t have the same length.

data_collator = DataCollatorWithPadding(tokenizer=tokenizer)

模型定义和培训

Using pre-trained models with 🤗变形金刚 is really easy. 只需一行代码,十大靠谱网投平台就可以下载十大靠谱网投平台想要优化的模型的权重.

model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)

Our next step is to define training arguments:

args = TrainingArguments(“roberta-booql”,
per_device_train_batch_size = 16,
learning_rate = 1 e - 3
num_train_epochs = 3)

Note that the parameters above are not just an example. 如果您能够使用比合作的标准K80更强大的机器,您可能希望增加批处理大小和epoch的数量, 我使用.

在训练之前,十大靠谱网投平台要做的最后一件事是把十大靠谱网投平台之前定义的所有对象放到一个实例中 教练 class

教练=教练(模型,
参数,
train_数据集=tokenized_数据集s["train"],
eval_数据集=tokenized_数据集s["验证"],
data_collator = data_collator,
记号赋予器=记号赋予器)

现在十大靠谱网投平台可以通过执行来开始训练:

教练.培训()

评价

After training (it took me ~20min to complete), we can evaluate our model. To do that, we’ll generate 预测 for 验证 子集:

预测=教练.predict(tokenized_数据集s["验证"])
y_pred =预测.预测.argmax (1)
标签=预测.label_ids

现在十大靠谱网投平台将加载“准确性”指标:

度量= load_度规(“准确性”)

最后是十大靠谱网投平台的表演:

度规.compute(预测=y_pred, references=预测.label_ids)
{“准确性”:0.7327217125382263}

Not bad, accuracy 73% certainly have a place for improvement. But still, for natural language underst和ing in 20 min, it’s a good start.

 

结论

十大靠谱网投平台在本教程中训练的模型可能不会是下一个重新定义十大靠谱网投平台对人工智能的看法的大事件(除了智力问答之夜), 但它确实展示了基于伯特或GPT-3等大型变压器模型带来的视角转变. 不久以前, 在您的系统中实现QA功能的唯一可行的方法是不知疲倦地构建一个只对一组预定义问题有效的基于规则的程序.

今天, 如果你有数据, 您可以快速地利用NLU中基于规则的方法的最新进展做出解决方案. 今天的QA系统最明显的例子是由谷歌等几乎所有科技巨头开发的语音助手, 苹果和亚马逊实现了开放领域的解决方案,通过文本生成来获取答案. Single-域 systems performing extractive QA (e.g. 就像这个)也得到了一些关注,但当然,它们的用例更小众. 另外, 随着高性能语言模型在“大型技术”之外越来越容易获得, we can expect much more instances of QA systems in our everyday life.

 

行动呼吁
If you are looking for a team of Python specialists for your projects, 利用十大靠谱网投平台的免费咨询. Tell us about your business, 和 we will suggest the best technology solution.

分享

订阅十大靠谱网投平台的通讯

Are you interested in news from the world of software development? 订阅十大靠谱网投平台的时事通讯,你会收到一份最有趣的信息列表.

    添加评论

    相关的 文章

    友情链接: 1 2 3 4 5 6 7 8 9 10