自然语言处理 Paddle NLP - 检索式文本问答-理论

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 自然语言处理 Paddle NLP - 检索式文本问答-理论

问答系统(Question Answering System,QA) 是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。问答系统是人工智能.

抽取式阅读理解:它的答案一定是段落里的一个片段,所以在训练前,先要找到答案的起始位置和结束位置,模型只需要预测这两个位置,有点像序列标注的任务,对一段话里的每个字,都会预测两个值,预测是开始位置还是结尾位置的概率,相当于对每个字来讲,都是一个二分类的任务

机器阅读技术:2011年7月20日,姚明正式宣布退役 => 姚明哪一年退役

500万的维基百科文档

检索式问答:先做段落检索、再做答案抽取

阅读理解:

郭鹤年 => 郭鹤,3个字里面对了2个 => 2/3, 完全匹配 => 1,f1(2/3,1) => 0.8

SQuAD(2016) 只能做抽取,数据量是训练深度神经网络的关键要素,数据集有着很大的影响力很多精典的阅读理解模型,也是基于SQuAD做的

DuReader(2017) 百度2017年发布的,迄今为止最大的中文阅读理解数据集,相比较 SQuAD,除了实体类、描述类和事实类的问题,还包含了是非类和观点类的问题

抽取式阅读理解,它的答案一定是段落里的一个片段,所以在训练前,先要找到答案的起始位置和结束位置,模型只需要预测这两个位置,有点像序列标注的任务,对一段话里的每个字,都会预测两个值,预测是开始位置还是结尾位置的概率,相当于对每个字来讲,都是一个二分类的任务

基于LSTM+注意力机制,核心思想就是如何对问题和段落进行交互和语义理解,一般就是在模型里面加各种 attention,各种复杂的模型结构基本上能总结成图中的形式,一般分为四层,

  • 向量表示层:主要负责把问题和段落里的token映射成一个向量表示
  • 语义编码层:使用RNN来对问题和段落进行编码,编码后,每一个token的向量都包含了上下文的语义信息
  • 交互层:最重要的一层,也是大多数研究工作的一个重点,负责捕捉问题和段落之间的交互信息,把问题的向量,和段落的向量做各种交互,一般使用各种注意力机制。最后它会输出一个融合了问题的语义信息的段落表示。
  • 答案预测层:会在段落表示的基本上,预测答案的位置,也就是预测答案的开始位置和结尾位置
    LSTM 是一个比较基本的模型结构

    注意力机制,来源于图像,在看一张图片的时候,就会聚焦到图片上的某些地方,通过图片上一些重点地方,获取到主要的信息。
    比如图片里是小狗,看到了狗的耳朵、鼻子就能判断出这是小狗。这时候注意力就集中在狗的脸部上。
    对于文本也一样,文本的问题和段落匹配过程中,也会聚焦到不同的词上面,比如:香格里拉酒店老板是谁?段落:香格里拉是香港上市公司品牌隶属于郭氏集团。
    对于问题香格里拉这个词,在段落文本中更关心香格里拉这个词,带着问题读本文时,所关注点是不一样的。如:老板这个词,关注力在隶属于上。
    如果问题是:香格里拉在哪里上市的,那么对于文本的关注点就在“上市公司”上了
    注意力机制,就是获取问题和段落文本交互信息的一个重要手段

理论形式:给定了一个查询向量Query,以及一些带计算的值Value,通过计算查询向量跟Key的注意力分布,并把它附加在Value上面,计算出 attention 的值。

  • Query 向量是问题,
  • Value 对应段落里面编码好的语义表示,
  • key 是问题向量和文本向量做内积之后做归一化,代表了每个词的权重
    最后对这些 Value 根据这些权重,做加权求和,最后得到了文本经过attention之后的值

一般会事先定义一个候选库,也就是大规模语料的来源,然后从这个库里面检索,检索出一个段落后,再在这个段路上做匹配。

基于预训练语言模型(eg.BERT)

领导A训练好的模型,在领域B应用

  • 通过多任务学习、迁移学习等提升模型的泛化能力
  • MRQA 2019 Shared Task

过稳定:对于不同的提问,给出相同的答案

过敏感:对于相同语义的提问,给出不同的答案

提高阅读模型鲁棒性的方法:

段落检索

稀疏向量检索:双塔

  • 基于词的稀疏表示
  • 匹配能力有限,只能捕捉字面匹配
  • 不可学习

把文本表示成 one hot (拼写可能有错)的形式,常见的有 TFDF、BM?

文章编码成向量,向量的长度和词典的大小一致,比如词典的大小是3W,稀疏向量表示3W,

每个位置表示这个词有没有在问题中出现过,出现过就是1

倒排索引,一般采用稀疏向量方式,只能做字面匹配

稀疏向量,几百、上千万的文档都支持

稠密向量检索:单塔

  • 基于对偶模型结构,进行稠密向量表示
  • 能够建模语义匹配
  • 可学习的

把文本表示成稠密向量,也就是 Embedding,需要通过模型,对文本的语义信息进行建模,然后把信息记录在向量里,这边的向量长度,一般是128、256、768,相较于稀疏向量检索小很多,每个位置的数字是浮点数

一般通过对偶模型的结构进行训练,来获得建模的语义向量,

例:

Q:王思聪有几个女朋友

P:国民老公的恋人A、B、C......

如果通过 稀疏向量检索,可能完全匹配不到

稠密向量检索,可以学习到,国民老公=>王思聪,恋人=> 女朋友

两者可以互补,一个字面匹配,一个是语义匹配

文本匹配中的两种模型结构

  • 对偶式模型结构:问题、段落分别编码,得到各自的 Embedding,然后通过内积或者 cosin 来计算向量之间的相似度,这个相似度代表了问题和段落之间的匹配程度
    问题和段落之间难以交互,因为他们是分别编码的。底层没有交互,所以逻辑会弱些
    可以快速索引,可以提前把段落向量这边计算好
  • 交互式模型结构:输入把问题和段落拼一起,在中间交互层问题的文本和段落的文本会有个完全的交互。最后输出一个来表示问题和段落的匹配程度

对偶模型的参数可以共享,共享参数对字面匹配效果好些,不共享效果也差不了太多

实际应用中,把所有的文档都计算完,把向量存储下来。在线计算时,直接去检索

DPR

正例和强负例 1:1 ,弱负例 越多越好

强负例:和文档有些关系

弱负例:和文档内容不相关的。

一般做检索,不会把正例表得那么完整,在标注时,也是通过一个query,先去检索出一些候选的段落,在候选段落里,去标正例和负例,这样因为检索能力的限制,可能没有检索回来的一些段落就没有标注,这样会导致数据集中漏标,所以实际上在训练过程中会对这些漏标的数据集进行处理,有些数据集只标了正例,并没有负例,这时候负例只能通过一些方式去构造

推荐阅读

  • Reading Wikipedia to Answer Open-domain Questions
  • Bi-DirectionalAttentionFlowForMachineComprehension
  • Machine Comprehension UsingMatch-LSTMand Answer Pointer
  • Dense Passage Retrieval for Open-Domain Question Answering
  • Latent Retrieval for Weakly Supervised Open Domain Question Answering
  • Sparse, Dense, and Attentional Representations for Text Retrieval
  • REALM:Retrieval-Augmented Language Model Pre-Training
  • RocketQA: An Optimized Training Approach to Dense Passage Retrieval for Open-Domain Question Answering
目录
相关文章
|
2月前
|
机器学习/深度学习 存储 人工智能
大数据中自然语言处理 (NLP)
【10月更文挑战第19天】
171 60
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理(Natural Language Processing,简称NLP)
自然语言处理(NLP)是人工智能的分支,旨在让计算机理解、解释和生成人类语言。NLP的关键技术和应用包括语言模型、词嵌入、文本分类、命名实体识别、机器翻译、文本摘要、问答系统、情感分析、对话系统、文本生成和知识图谱等。随着深度学习的发展,NLP的应用日益广泛且效果不断提升。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理(NLP)是AI的重要分支,旨在让计算机理解人类语言
自然语言处理(NLP)是AI的重要分支,旨在让计算机理解人类语言。本文探讨了深度学习在NLP中的应用,包括其基本任务、优势、常见模型及具体案例,如文本分类、情感分析等,并讨论了Python的相关工具和库,以及面临的挑战和未来趋势。
66 1
|
1月前
|
机器学习/深度学习 自然语言处理 知识图谱
GraphRAG在自然语言处理中的应用:从问答系统到文本生成
【10月更文挑战第28天】作为一名自然语言处理(NLP)和图神经网络(GNN)的研究者,我一直在探索如何将GraphRAG(Graph Retrieval-Augmented Generation)模型应用于各种NLP任务。GraphRAG结合了图检索和序列生成技术,能够有效地处理复杂的语言理解和生成任务。本文将从个人角度出发,探讨GraphRAG在构建问答系统、文本摘要、情感分析和自动文本生成等任务中的具体方法和案例研究。
76 5
|
1月前
|
自然语言处理 Python
如何使用自然语言处理库`nltk`进行文本的基本处理
这段Python代码展示了如何使用`nltk`库进行文本的基本处理,包括分词和词频统计。首先需要安装`nltk`库,然后通过`word_tokenize`方法将文本拆分为单词,并使用`FreqDist`类统计每个单词的出现频率。运行代码后,会输出每个词的出现次数,帮助理解文本的结构和常用词。
|
1月前
|
人工智能 自然语言处理 语音技术
利用Python进行自然语言处理(NLP)
利用Python进行自然语言处理(NLP)
49 1
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【10月更文挑战第3天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将分析NLP的基本原理,介绍AI技术如何推动NLP的发展,并讨论当前的挑战和未来的趋势。通过本文,读者将了解AI技术在NLP中的重要性,以及如何利用这些技术解决实际问题。
|
1月前
|
自然语言处理 API C++
阿里通义推出SmartVscode插件,自然语言控制VS Code,轻松开发应用,核心技术开源!
SmartVscode插件深度解析:自然语言控制VS Code的革命性工具及其开源框架App-Controller
|
2月前
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
56 4
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在自然语言处理中的创新应用
【10月更文挑战第7天】本文将深入探讨人工智能在自然语言处理领域的最新进展,揭示AI技术如何改变我们与机器的互动方式,并展示通过实际代码示例实现的具体应用。
49 1