Retrieval Question Answering paper

本文探讨了层次Transformer在多文档摘要中的应用,以及检索辅助生成在知识密集型NLP任务中的作用。REALM和RAG是两种检索增强的预训练模型,其中RAG包括Sequence和Token模型。此外,还介绍了能够跨数据格式问答的UNIFIEDQA系统。

层级Transformer多文档摘要

Hierarchical Transformers for Multi-Document Summarization

段落排序-> 取top段落 -> encoder -> decoder -> summary

BART:在长文建模效果不好,主观性、事实一致性好
GPT:事实性、忠实度、一致性差。
改进:层次的多文档编码器。

检索辅助生成

REALM: Retrieval-Augmented Language Model Pre-Training

同时预训练检索器和语言模型,可以联合训练。两个模型的更新:检索用Maximum Inner Product Search MIPS; 每训练几百步异步更新索引和embedding系统。更新后的索引和embedding系统可以更好的支持模型。

1. 预训练时,使用无监督的数据MASK部分数据。先从检索器中根据MIPS检索出相关的paragraph,把句子和相关paragraph送到encoder中,预测被[MASK]的数据。 2. finetune时,使用有监督的QA数据集。先从检索器中根据MIPS检索出相关的paragraph,把句子和相关parag
### 介绍 Dense Passage Retrieval(DPR)是一种用于开放域问答系统的高效段落检索方法。在传统的信息检索系统中,基于词袋模型或TF - IDF等方法往往难以捕捉语义信息,而DPR通过学习文本的密集向量表示,能够更好地进行语义匹配,从而提升检索性能。 ### 原理 DPR主要由两个编码器组成:问题编码器(Query Encoder)和段落编码器(Passage Encoder)。 - 问题编码器负责将输入的问题映射到一个低维的向量空间中。 - 段落编码器则将文档中的段落同样映射到相同的向量空间。 在训练过程中,使用对比学习的方法。给定一个问题和一组正例段落(包含问题答案的段落)以及负例段落(不包含答案的段落),目标是让问题向量和正例段落向量在向量空间中的距离尽可能小,而和负例段落向量的距离尽可能大。通过这种方式,模型可以学习到有效的语义表示。在检索时,对于一个新的问题,将其编码为向量,然后在预编码好的段落向量集合中寻找与之距离最近的向量,对应的段落即为检索结果。 ### 应用 - **开放域问答系统**:在开放域问答场景中,DPR可以从大规模的文档集合中快速准确地检索出与问题相关的段落,为后续的答案抽取提供基础。例如,在智能客服系统中,用户提出问题后,DPR可以从知识库中找到相关的解答段落。 - **信息检索**:在搜索引擎等信息检索系统中,DPR可以提升检索的准确性和召回率,帮助用户更快地找到所需的信息。 ### 实现方法 以下是一个简单的基于Python和Hugging Face Transformers库实现DPR的示例代码: ```python from transformers import DPRContextEncoder, DPRContextEncoderTokenizer, DPRQuestionEncoder, DPRQuestionEncoderTokenizer # 加载预训练的模型和分词器 question_tokenizer = DPRQuestionEncoderTokenizer.from_pretrained('facebook/dpr-question_encoder-single-nq-base') question_encoder = DPRQuestionEncoder.from_pretrained('facebook/dpr-question_encoder-single-nq-base') context_tokenizer = DPRContextEncoderTokenizer.from_pretrained('facebook/dpr-ctx_encoder-single-nq-base') context_encoder = DPRContextEncoder.from_pretrained('facebook/dpr-ctx_encoder-single-nq-base') # 示例问题和段落 question = "What is the capital of France?" passages = [ "Paris is the capital and most populous city of France.", "London is the capital city of the United Kingdom." ] # 编码问题 question_inputs = question_tokenizer(question, return_tensors='pt') question_embedding = question_encoder(**question_inputs).pooler_output # 编码段落 passage_embeddings = [] for passage in passages: passage_inputs = context_tokenizer(passage, return_tensors='pt') passage_embedding = context_encoder(**passage_inputs).pooler_output passage_embeddings.append(passage_embedding) import torch # 计算相似度 similarities = [] for passage_embedding in passage_embeddings: similarity = torch.nn.functional.cosine_similarity(question_embedding, passage_embedding) similarities.append(similarity.item()) # 找到最相似的段落 most_similar_index = similarities.index(max(similarities)) print("Most similar passage:", passages[most_similar_index]) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值