首页 > 其他分享 >Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

时间:2023-07-18 14:44:37浏览次数:55  
标签:检索 NLP Tasks Knowledge RAG bm eta text theta

目录

Lewis P. and Perez E., et al. Retrieval-augmented generation for knowledge-intensive nlp tasks. NIPS, 2020.

RAG: 赋予模型检索的能力.

符号说明

  • \(\bm{x}\), 输入序列;
  • \(\bm{y}\), 输出序列, 长度为 \(N\);

RAG

  • RAG 的思路其实很简单, 我们知道, 生成模型通过建模条件分布:

    \[p(\bm{y}|\bm{x}), \]

    并从中不断地采样序列.

  • 不依赖检索的生成模型可以理解为 \(\bm{x} \rightarrow \bm{y}\) 的过程, 现在我们希望赋予模型检索的能力, 即希望通过如下方式进行生成

    \[\bm{x} \rightarrow (\bm{x}, \bm{z}) \rightarrow \bm{y}, \]

    即模型需要先通过 \(\bm{x}\) 检索得到 \(\bm{z}\) 并一起生成最后的 \(\bm{y}\).

  • 实际上, 就是 (此处的积分是勒贝格积分)

    \[\tag{1} \bm{y} \sim p(\bm{y}|\bm{x}) = \int p_{\theta}(\bm{y}|\bm{z}, \bm{x}) p_{\eta}(\bm{z}|\bm{x}) \mathrm{d} \bm{z}, \]

    其中 \(p_{\theta}, p_{\eta}\) 是我们构建的两个条件模型:

  • 让我们接下来考虑两种实际的任务.

  • RAG-Sequence: 即通过检索后的文档生成完整的序列, 假设我们检索出 (相同的) Tok-k 最相关的文档 (注意这些文档), 我们可以用如下方式近似 (2)

    \[p(\bm{y}|\bm{x}) \approx \sum_{\bm{z} \in \text{top-}k (p(\cdot|\bm{x}))} p_{\eta}(\bm{z}|\bm{x}) p_{\theta}(\bm{y}|\bm{x}, \bm{z}) = \sum_{\bm{z} \in \text{top-}k (p(\cdot|\bm{x}))} p_{\eta}(\bm{z}|\bm{x}) \prod_{i=1}^N p_{\theta}(y_i|\bm{x}, \bm{z}, y_{1:i-1}). \]

  • RAG-Token: 采用的是一种迭代的方式, 对于第 \(i\) 个需要预测的 Token, 它

    \[p(y_i|\bm{x}; \bm{y}_{1:i-1}) \approx \sum_{\bm{z} \in \text{top-}k (p(\cdot|\bm{x}, \bm{y}_{1:i-1}))} p_{\eta}(\bm{z}|\bm{x}, \bm{y}_{1:i-1}) p_{\theta}(y_i|\bm{x}, \bm{z}, \bm{y}_{1:i-1}), \]

    于是

    \[p(\bm{y}|\bm{x}) \approx \prod_{i=1}^N \sum_{\bm{z} \in \text{top-}k (p(\cdot|\bm{x}, \bm{y}_{1:i-1}))} p_{\eta}(\bm{z}|\bm{x}, \bm{y}_{1:i-1}) p_{\theta}(y_i|\bm{x}, \bm{z}, \bm{y}_{1:i-1}). \]

    这相当于, 每一个 Token 的生成我们进行一次文档的检索 (而 RAG-Sequence: 则是只检索一次).

Retriever: DPR

  • 检索模型, 作者用的是 DPR, 其是一个 bi-encoder 的架构:

    \[p_{\eta}(\bm{z}|\bm{x}) \propto \exp(d^T(\bm{x}) q(\bm{x})), d(\bm{x}) = \text{BERT}_d(\bm{z}), q(\bm{x}) = \text{BERT}_q (\bm{x}). \]

Generator: BART

  • 生成器采用的是 BART-large.

标签:检索,NLP,Tasks,Knowledge,RAG,bm,eta,text,theta
From: https://www.cnblogs.com/MTandHJ/p/17562977.html

相关文章

  • NLP(四十七):损失函数
    三元组损失tripletloss设计初衷:让x与这个跟他同类的点距离更近,跟非同类的点距离更远。d是距离,m的含义是,当x与x+的距离减去x与x-,如果小于-m时,对损失函数的贡献为0,如果大于-m时,对损失的贡献大于0.含义就是:当负例太简单时,不产生损失,这个损失的目标是,挑选困难样本进行分类。......
  • NLP(四十六):GLOVE
    转载自https://zhuanlan.zhihu.com/p/58916233在上节,我们学习了词向量的两种训练方式:Skip-Gram和CBOW,都是通过句子中的某个单词去预测另一个单词。而本节,我们将学习第三种词向量的训练模型:GLOVE[1]。GLOVE模型是由斯坦福教授Manning、Socher等人于2014年提出的一种词向量训练模......
  • 机器翻译|EMNLP 2019大规模利用单语数据提升神经机器翻译
    目前,目标语言端的无标注单语数据已被广泛应用于在机器翻译任务中。然而,目标语言端的无标注数据一旦使用不当,反而会给模型结果带来负面影响。为了有效利用大规模源语言端和目标语言端的单语数据,微软亚洲研究院在EMNLP2019上发表的论文中,提出一种简单的语料数据使用流程,只需要四......
  • NLP | 数据增强总览
    深度学习视觉领域的增强方法可以很大程度上提高模型的表现,并减少数据的依赖,而NLP上做数据增强不像在图像上那么方便,但还是有一些方法的。与计算机视觉中使用图像进行数据增强不同,NLP中文本数据增强是非常罕见的。这是因为图像的一些简单操作,如将图像旋转或将其转换为灰度,并不会改......
  • 论文日记四:Transformer(论文解读+NLP、CV项目实战)
    导读重磅模型transformer,在2017年发布,但就今天来说产生的影响在各个领域包括NLP、CV这些都是巨大的!Paper《AttentionIsAllYouNeed》,作者是在机器翻译这个领域进行的实验,当然我们今天知道它被应用到了很多地方,作者也在结论部分说它将被应用到图像、音频、视频等任务中,本文......
  • Query2box Reasoning over Knowledge Graphs in Vector Space using Box Embeddings
    目录概符号说明Query2Box代码RenH.,HuW.andLeskovecJ.Query2box:Reasoningoverknowledgegraphsinvectorspaceusingboxembeddings.ICLR,2020.概Boxembedding用于查询判断,和我想的那个有很大差别啊.我对这方面不是很了解,只能记录个大概.符号说明......
  • NLP | mC4数据集
    MC4是C4的子集,MC4是从公共CommonCrawl存储库中提取的约750GB英语文本的集合。CommonCrawl包含数十亿个从Internet抓取的网页。尽管C4数据集被明确设计为仅英语,但MC4覆盖了CommonCrawl迄今为止发布的108种语言,具有10000多个网页。有证据表明,语言模型会放大......
  • NLP应用 | thumt的bleu评估讲解
    传入参数:model:#defparse_args中,命令行输入模型名称,默认是"transformer"。parser.add_argument("--model",type=str,required=True,help="Nameofthemodel.")#defmain中#model_cls=models.get_model(args.model)返回thu......
  • python - jionlp地址解析库
    1.jionlp安装pip3install-ijionlpgithub地址https://github.com/dongrixinyu/JioNLP2.简单使用importjionlpasjio#地址address='武侯区红牌楼街19号红星大厦9楼2号'#指定参数town_village(bool),可获取乡镇、村、社区两级详细地名#指定参数change2new(bool)......
  • NLP | 文本分词的工具包
    文本分词(Tokenization)是将一个文本序列分割成一个个单独的“词”或“标记”的过程。在自然语言处理(NLP)中,文本分词是一个必要的预处理步骤,几乎所有的自然语言处理任务都需要对文本进行分词。文本分词的目的是根据某种规则或算法,将文本序列分割成较小的单元,例如单词、词组、标点符......