自然语言处理:bert 用于问答系统

原文:Question Answering with a Fine-Tuned BERT

本文介绍了bert用于问答系统的原理,还有实践的代码,可以参考下,以下是原文的翻译:


BERT 在问答系统中的表现达到人类水平意味着什么?BERT 是否有史以来最好的搜索引擎,可以找到任何我们抛出的问题的答案?

在本文第一部分,我会解释 BERT 用于 QA 的真正含义,并展示一些细节.

第二部分包含了示例代码,我们下载一个已经在问答系统中微调好的模型,在我们的文本中测试

在文本分类中,你会想在自己的数据集对BERT进行微调。但是对问答系统,可能会觉得使用已经在SQuAD benchmark微调好的模型会有性能的下降。本篇我们会尝试一下,并展示即使不是SQuAD 数据集,bert一样表现得很好.

相关链接

  • My video walkthrough on this topic.
  • The blog post version.
  • The Colab Notebook.

内容

  • Part 1: BERT如何用于 to Question Answering
    • The SQuAD v1.1 Benchmark
    • BERT 输入格式
    • 开始、结束词的分类器
  • Part 2: 实例代码
    • 1. Install huggingface transformers library
    • 2. Load Fine-Tuned BERT-large
    • 3. Ask a Question
    • 4. Visualizing Scores
    • 5. More Examples

Part 1: BERT 如何用于问答系统

The SQuAD v1.1 Benchmark

当某人提及 “问答系统” 作为 BERT 的应用,他们实际指的是将 BERT 用于Stanford 问答数据集 (SQuAD).

SQuAD benchmark 给出的问答任务可能与你想象的有点不同。指定一个问题,和一个包含回答的文本片段,BERT 需要将相应的答案文本的范围高亮出来。

SQuAD 主页上有个不错的工具,可以展示此数据集的问题与相应文本,并显示最佳模型的预测结果

例如 interesting examples 有关于 超级碗 50 的相关例子.

自然语言处理:bert 用于问答系统_第1张图片

BERT 输入格式

要将问答任务交给 BERT,我们将问题与相关文本打包作为输入

自然语言处理:bert 用于问答系统_第2张图片

两份文本用特殊符号 [SEP] 间隔.

BERT 用 “Segment Embeddings” 来讲问题与相关文本区分开(问题作为segment1,文本作为segment2)。这是bert学习的两个embedding (segments “A” and “B”), 并加入到token embeddings 再交给输入层(bert 有token 、segment、position embedding).

开始结束词分类器

BERT 需要高亮包含问题回答的文本片段– 就是预测那个词标志回答的开始,那个词标志回答的结束。

自然语言处理:bert 用于问答系统_第3张图片

对文本中每个词,我们将它最终输出的embedding 放入起始词分类器. 起始词分类器只有一套权重  (图中蓝色的矩形 “start” ) 作用于每个单词.

在每个词的输出embeddings 与起始词分类器权重点乘后,我们运用softmax 激活函数对所有词生成一个概率。概率最高的词作为我们选择的起始词,作为回答的开头.

对于结束词,重复这个过程(用结束词分类器的权重,下图的红色end矩形表示)

自然语言处理:bert 用于问答系统_第4张图片

 

Part 2: 示例代码

这里使用的是transformers 库,有问答模块 BertForQuestionAnswering 和分词器模块 BertTokenizer,还可以对开始结束词的位置判断可视化:

自然语言处理:bert 用于问答系统_第5张图片

自然语言处理:bert 用于问答系统_第6张图片

感兴趣可以阅读下 原文

你可能感兴趣的:(自然语言处理)