当前位置: 首页 > news >正文

乐山企业网站建设南宁网站制作

乐山企业网站建设,南宁网站制作,logo设计公司价格,湛江模板建站系统目录 一、简介一句话简介作者、引用数、时间论文地址开源代码地址 二、摘要三、引言四、整体架构#xff08;用一个例子来阐明#xff09;场景例子#xff1a;核心点#xff1a; 五、方法 #xff08;架构各部分详解#xff09;5.1 模型1. RAG-Sequence Model2. RAG-Toke… 目录 一、简介一句话简介作者、引用数、时间论文地址开源代码地址 二、摘要三、引言四、整体架构用一个例子来阐明场景例子核心点 五、方法 架构各部分详解5.1 模型1. RAG-Sequence Model2. RAG-Token ModelRAG-Sequence 模型RAG-Token 模型总结 5.2 检索器DPR总结 5.3 生成器BART5.4 训练5.5 解码推理RAG-TokenRAG-Sequence 两种模型通俗易懂的例子解释彻底解码 和 快速解码 的区别1. 彻底解码Thorough Decoding2. 快速解码Fast Decoding总结 六、实验实验说明6.1 开放领域问答Open-domain Question Answering, QA四个开放领域问答数据集的简要介绍 6.2 抽象问题问答Abstractive Question Answering6.3 生成危险边缘Jeopardy 风格的问题6.4 事实校验Fact Verification 七、结果7.1 表1的解读-开放领域问答任务总结 7.2 表2的解读-生成和分类任务术语和符号解释测试任务种类总的对比生成 Jeopardy 问题的任务对比事实校验任务对比FEVER总结 7.3 表3的解读-生成任务回答的准确性和具体性表格结构任务解释总结 7.4 图2的解读总结 7.5 表4的解读-Jeopardy 问题生成任务的事实性和具体性7.6 表5的解读-生成内容的多样性7.7 表6的解读-消融实验评估检索机制的有效性为什么对于FEVER任务BM25表现更好 7.8 图3的解读-检索更多文档的效果检索召回率Answer Recall 7.9 索引热交换Index hot-swapping-轻松更新知识库背景测试方法结论 八、相关工作-前人的工作和本文的创新点单任务检索NLP的通用架构学习式检索基于记忆的架构检索与编辑方法 九、讨论本文的贡献未来研究方向广泛应用的潜力 十、更广泛的影响积极影响潜在风险 一、简介 一句话简介 该论文是RAG的开山之作提出了一种新的模型架构将检索和生成结合在一起以解决预训练模型在知识密集型自然语言处理任务中的局限性。 作者、引用数、时间 该文出自 Facebook AI Research 团队Patrick Lewis、Ethan Perez等人提交于arXiv且已被NeurIPS 2020接收第一版发布于2020年5月22日被引用数3600多次。 论文地址 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 开源代码地址 RAG 实验的代码已经开源作为 HuggingFace Transformers LibraryWolf 等人2019的一部分可在此链接查看 https://github.com/huggingface/transformers/tree/main/examples/research_projects/rag demo地址 https://huggingface.co/rag/ 二、摘要 摘要讨论了 RAGRetrieval-Augmented Generation 模型的背景、动机和研究贡献 背景大型语言模型如 GPT、BERT通过大量数据预训练能够存储丰富的知识并在微调后表现出色。然而这些模型在处理需要外部知识的复杂任务时存在一定局限性尤其是在访问和操作知识时。它们的知识更新也非常困难。 RAG 模型的提出为了解决这一问题RAG 模型结合了两种不同的记忆系统 参数化记忆模型内置的预训练语言模型它已经通过大量数据学习了通用的语言知识。非参数化记忆通过检索外部知识库如维基百科实时获取的信息帮助模型生成答案。这样可以扩展模型的知识范围增强生成效果。 两种 RAG 模型对比 一种是在整个生成过程中使用相同的检索文档。另一种是在生成每个词时可以从不同的文档中获取信息进一步提升生成的灵活性。 实验结果通过对多个知识密集型任务进行微调实验结果表明 RAG 模型在多个开放领域的问答任务中表现优异并且在语言生成任务中生成的回答比传统模型更准确、更丰富。 RAG 模型的创新在于它通过结合内置的语言知识和外部实时检索知识提升了模型的生成能力和知识灵活性尤其适合处理复杂和开放性的问题。 三、引言 引言主要介绍了 RAGRetrieval-Augmented Generation 模型的背景、现有问题和模型设计和优势特别是它如何结合预训练语言模型和实时文档检索来提升复杂任务中的性能。 背景和问题预训练的语言模型如 BERT 和 GPT尽管在自然语言处理任务上取得了很大进展但它们在处理知识更新、解释生成内容等方面存在局限。生成不真实的答案称为“幻觉”是它们的一个常见问题。 RAG 模型的提出为了解决这些问题RAG 模型结合了预训练的语言模型和外部的非参数化知识源如维基百科进行知识检索。RAG 模型在生成答案时能够不仅依赖模型自身的知识还能通过实时检索相关文档来生成更加准确和丰富的答案。 创新点与之前的模型相比RAG 的创新点在于它能够同时使用预训练的参数化记忆模型内部的知识和非参数化记忆外部检索到的文档使得模型的知识库更加灵活、易于扩展并能够生成多样且精确的答案。 实验结果实验表明RAG 在多个知识密集型任务中的表现优于传统模型特别是在开放领域问答和事实校验任务中RAG 展现了生成更准确、更详细回答的能力。 四、整体架构用一个例子来阐明 这张图展示了 RAGRetrieval-Augmented Generation 的整体架构为了帮助理解这个架构下面用一个通俗易懂的例子来解释。 场景例子 你想向智能助手提问“谁是《神曲》的作者”这是你输入的问题。 查询编码器Query Encoder 你的问题先经过查询编码器模型将这个问题转化为一个向量表示即图中的 q ( x ) q(x) q(x)。可以把它想象成将自然语言问题转换为计算机能够理解的数字形式。 检索器Retriever 接下来检索器使用这个向量去搜索一个文档数据库这个过程通过一种称为最大内积搜索MIPS的技术来实现。这个步骤的目的是找到最相关的文档这些文档中可能包含关于《神曲》的答案。假设从数据库中找到了 4 个相关的文档 z 1 , z 2 , z 3 , z 4 z_1, z_2, z_3, z_4 z1​,z2​,z3​,z4​每个文档都包含与问题相关的内容。 生成器Generator 对于每个找到的文档模型使用生成器在图中表示为 p θ p_\theta pθ​生成一个可能的回答。这是通过“参数化记忆”完成的即生成模型根据文档和问题生成一个文本回答。比如对于文档 z 1 z_1 z1​生成器可能会生成“《神曲》是但丁写的”而对于文档 z 2 z_2 z2​生成器可能会产生类似的回答。 边缘化Marginalization 因为检索器找到了多个文档模型会对所有文档的生成结果进行综合处理即边缘化。这个过程可以通过对所有文档生成的结果进行加权求和来实现。简单来说模型会将所有文档的回答综合起来最终给出一个最优的预测即“但丁是《神曲》的作者”。 最终输出 最终智能助手输出的回答可能是“《神曲》是由但丁创作的”这是结合了多个文档中的信息来生成的。 核心点 参数化记忆Parametric Memory模型通过预训练的权重来生成回答这种权重是通过大量数据学习到的这些权重参数已经存储了模型学到的大量事实知识。非参数化记忆Non-Parametric Memory模型依赖外部文档库非参数化的存储方式来辅助生成更准确的回答而不是完全依赖模型内部的权重。 五、方法 架构各部分详解 注意如果看不懂复杂的数学公式部分可直接跳过后面就有通俗易懂的例子解释 5.1 模型 下面为数学公式部分看不懂可跳过 RAG 有两种不同模型RAG-Sequence Model 和 RAG-Token Model。它们主要区别在于如何处理检索到的文档和如何在生成答案时进行边缘化处理。 1. RAG-Sequence Model 过程在 RAG-Sequence 模型中检索到的文档作为一个潜在变量整个序列的生成过程使用相同的文档。也就是说对于给定的查询 (x)检索器会找到前 (k) 个相关的文档然后生成器使用同一个文档来生成整个输出序列。 边缘化在生成完成后模型对所有文档的输出进行边缘化处理。具体的公式是 p RAG-Sequence ( y ∣ x ) ≈ ∑ z ∈ top-k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y ∣ x , z ) p_{\text{RAG-Sequence}}(y|x) \approx \sum_{z \in \text{top-k}(p(\cdot|x))} p_\eta(z|x) p_\theta(y|x, z) pRAG-Sequence​(y∣x)≈z∈top-k(p(⋅∣x))∑​pη​(z∣x)pθ​(y∣x,z) 其中 p η ( z ∣ x ) p_\eta(z|x) pη​(z∣x) 是检索到的文档 (z) 给定查询 (x) 的概率 p θ ( y ∣ x , z ) p_\theta(y|x, z) pθ​(y∣x,z) 是生成器基于文档 (z) 生成整个序列 (y) 的概率。 2. RAG-Token Model 过程在 RAG-Token 模型中针对每一个生成的目标 token模型可以从不同的文档中选择内容。与 RAG-Sequence 不同的是生成器不使用同一个文档生成整个输出序列而是在生成每个 token 时可以选择一个不同的文档进行生成。 边缘化每个 token 的生成也会进行边缘化处理这意味着在每次生成新 token 时都根据每个文档生成一个分布并结合这些分布生成下一个 token。具体公式如下 p RAG-Token ( y ∣ x ) ≈ ∏ i 1 N ∑ z ∈ top-k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{\text{RAG-Token}}(y|x) \approx \prod_{i1}^{N} \sum_{z \in \text{top-k}(p(\cdot|x))} p_\eta(z|x) p_\theta(y_i|x, z, y_{1:i-1}) pRAG-Token​(y∣x)≈i1∏N​z∈top-k(p(⋅∣x))∑​pη​(z∣x)pθ​(yi​∣x,z,y1:i−1​) 这里 p θ ( y i ∣ x , z , y 1 : i − 1 ) p_\theta(y_i|x, z, y_{1:i-1}) pθ​(yi​∣x,z,y1:i−1​) 是生成器基于文档 (z) 和前 (i-1) 个 token (y_{1:i-1}) 生成当前 token (y_i) 的概率。 下面为通俗易懂的例子解释 RAG-Sequence 模型 想象你问了一个问题智能助手从一个图书馆里找了几本相关的书。助手从中选了一本书然后根据这本书的内容生成整个回答。这个过程中它一直在参考同一本书直到回答结束。之后它会比较多个回答选出最好的那个。RAG-Sequence 模型就像这个助手它在生成答案时始终依赖于同一本书一个文档然后通过多个文档生成的回答进行对比给出最终答案。 RAG-Token 模型 另一种情况是智能助手不只用一本书而是每次它要生成一个词时都会从不同的书中挑选出一个词来组合答案。比如它可能用第一本书生成第一个词然后用第二本书生成下一个词。最后它把每次从不同书中挑选的词组合起来得到一个完整的答案。RAG-Token 模型就像这个助手它在生成每个词的时候可以参考不同的书文档所以每个词都有可能来源于不同的地方。 总结 RAG-Sequence 模型在生成整个答案时助手只从一本书中获取信息。RAG-Token 模型在生成每个词时助手可以从不同的书中获取信息。 这使得 RAG-Token 模型更加灵活能够从多个文档中提取信息适合那些需要从多个来源获取答案的复杂问题。 5.2 检索器DPR 下面为数学公式部分看不懂可跳过 检索组件 p η ( z ∣ x ) p_\eta(z|x) pη​(z∣x) 基于 DPR它采用双编码器架构 p η ( z ∣ x ) ∝ exp ⁡ ( d ( z ) ⊤ q ( x ) ) p_\eta(z|x) \propto \exp \left( \text{d}(z)^\top \text{q}(x) \right) pη​(z∣x)∝exp(d(z)⊤q(x)) 其中 d ( z ) \text{d}(z) d(z) 是通过 BERT-base 文档编码器生成的文档 z z z 的密集表示 q ( x ) \text{q}(x) q(x) 是通过 查询编码器生成的查询 x x x 的表示。两个编码器都基于 BERT 模型。计算前 K 个文档的相关性得分 p η ( z ∣ x ) p_\eta(z|x) pη​(z∣x) 是一个 最大内积搜索MIPS 问题该问题可以通过子线性时间近似求解。 文中使用预训练的 DPR 双编码器来初始化检索器并建立文档索引。这个检索器被训练用于检索包含 TriviaQA 和 Natural Questions 数据集问题答案的文档。文中将文档索引称为非参数化记忆。 双编码器架构 DPR 使用两个编码器一个用于查询 q ( x ) q(x) q(x)一个用于文档 d ( z ) d(z) d(z)。查询和文档的表示都是通过各自独立的 BERT-base 模型生成的。查询表示 q ( x ) q(x) q(x) 是查询 x x x 通过查询编码器生成的密集向量表示。文档表示 d ( z ) d(z) d(z) 是文档 z z z 通过文档编码器生成的密集向量表示。 相似度计算 文档 z z z 和查询 x x x 的相似度通过它们的向量点积来计算 p η ( z ∣ x ) ∝ exp ⁡ ( d ( z ) ⊤ q ( x ) ) p_\eta(z|x) \propto \exp \left( \text{d}(z)^\top \text{q}(x) \right) pη​(z∣x)∝exp(d(z)⊤q(x)) 这个公式表示的是在给定查询 x x x 的情况下检索到文档 z z z 的概率。 MIPS最大内积搜索 MIPS 是一种高效的算法用于快速从大量文档中找到与查询最相关的前 K 个文档。这个问题通过内积最大化来解决从而加速检索过程且其时间复杂度为子线性。 非参数化记忆 文档索引被称为 非参数化记忆因为这些外部知识如维基百科并没有内嵌在模型的参数中而是通过动态检索获取。因此模型可以从外部数据源中灵活地访问相关知识而不依赖模型内的固定知识。 总结 DPR 检索器 通过双编码器架构将查询和文档分别编码为向量利用内积计算它们的相似度并通过 MIPS 算法高效检索出与查询相关的文档。这个过程允许模型动态地访问外部知识库并利用这些知识生成高质量的答案。 下面为通俗易懂的解释 DPRDense Passage Retrieval稠密段落检索是帮助RAG模型进行信息检索的。可以把它想象成一个非常高效的文档搜索系统。 双编码器架构 DPR使用了两个独立的“编码器”来分别处理文档和查询问题。可以理解为有两个机器一个负责将所有可能的答案文档编码成一种紧凑的形式稠密向量另一个负责将问题编码成类似的紧凑形式。 匹配文档和问题 搜索的核心思想是比较问题和文档的“紧凑形式”看它们之间有多“接近”。接近度越高说明这个文档可能越适合回答你的问题。可以把这个过程想象成查找最匹配的钥匙和锁只有最相似的才能成功匹配。 预训练 这里的编码器已经通过海量数据进行过预训练相当于已经看过很多问题和答案所以它知道如何高效地将问题和答案进行匹配。 高效检索 由于要处理的文档量非常大DPR使用了一种叫“最大内积搜索”的方法来加速这个匹配过程。就像在一大堆钥匙里快速找到几把最可能打开锁的钥匙。 非参数记忆 最后文档被存储在一个叫做“非参数记忆”的地方。这个名字听起来复杂但本质上只是一个巨大的文档库系统在需要时可以随时去里面寻找最相关的答案。 DPR 就像是一个已经学会如何快速找到最佳答案的智能搜索引擎。 5.3 生成器BART BART 是一个用于生成文本的强大工具它可以从输入的信息中生成连贯的回答。 BART 是一个 seq2seqsequence-to-sequence 模型预训练时使用了一个带有“去噪”目标的任务这意味着它能很好地从混乱或不完整的信息中恢复完整的答案。在这个 RAG 模型中BART 被用来生成每个问题的答案。具体来说它结合了从文档检索中获取到的内容 ( z ) 以及用户的输入 ( x )然后生成答案。BART-large 是一种特别大的版本包含了 4亿个参数这使得它能够处理非常复杂的语言生成任务。文中还提到BART 的生成部分被称为 “参数化记忆”因为生成器依赖的知识是存储在 BART 模型的参数中的这些参数通过预训练学到了丰富的语言知识。 换句话说BART 是 RAG 模型中的生成模块负责从检索到的文档中提取信息并生成最终的答案。 5.4 训练 训练过程的核心思想是联合训练同时优化文档检索模块Retriever和生成模块Generator。具体解释如下 无监督选择文档在训练过程中模型不会明确告诉哪个文档最适合当前的查询而是通过训练模型来自行学习从文档库中找到相关的文档。 给定输入输出对训练集由一组输入/输出对组成。例如输入可以是一个问题输出可以是答案。模型通过这些已知的输入和输出对来进行微调。 损失函数模型使用一种叫做“负对数似然”的损失函数。这意味着它在训练时会尝试最小化生成答案的“错误程度”即最大化模型生成正确答案的概率。 优化器使用 Adam 优化器这是一种在深度学习中常用的技术可以帮助模型更高效地学习和调整参数。 更新组件在这个训练过程中文中提到模型并不需要频繁更新所有部分。尤其是 BERT 文档编码器BERT_d它很难频繁更新因为代价高。相反文档编码器保持不变只微调查询编码器 BERT_q 和 BART 生成器。 简而言之模型通过调整它找到的文档和生成的答案来提升自己对问题的理解和回答能力而不需要频繁更新所有模块。 5.5 解码推理 下面为数学公式部分看不懂可跳过 在测试时RAG-Sequence 和 RAG-Token 需要通过不同方式来近似求解 arg max y p ( y ∣ x ) \text{arg max}_y p(y|x) arg maxy​p(y∣x)。 RAG-Token RAG-Token 模型 可以被视为一个标准的自回归序列到序列seq2seq生成器其转移概率为 p θ ′ ( y i ∣ x , y 1 : i − 1 ) ∑ z ∈ top-K ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y i ∣ x , z , y 1 : i − 1 ) p_\theta(y_i | x, y_{1:i-1}) \sum_{z \in \text{top-K}(p(\cdot | x))} p_\eta(z|x) p_\theta(y_i | x, z, y_{1:i-1}) pθ′​(yi​∣x,y1:i−1​)z∈top-K(p(⋅∣x))∑​pη​(z∣x)pθ​(yi​∣x,z,y1:i−1​) 解码时可以将 p θ ′ ( y i ∣ x , y 1 : i − 1 ) p_\theta(y_i | x, y_{1:i-1}) pθ′​(yi​∣x,y1:i−1​) 插入标准的束搜索解码器中。 RAG-Sequence 对于 RAG-Sequence由于 p ( y ∣ x ) p(y|x) p(y∣x) 的似然并没有分解为传统的逐 token 似然无法通过单一的束搜索来解码。我们需要对每个文档 z z z 运行束搜索对每个假设 y y y 进行打分使用 p θ ( y i ∣ x , z , y 1 : i − 1 ) p_\theta(y_i | x, z, y_{1:i-1}) pθ​(yi​∣x,z,y1:i−1​)。这会产生一组假设 Y Y Y其中某些假设可能不会在所有文档的束搜索中出现。为估计假设 y y y 的概率我们会对每个没有生成 y y y 的文档 z z z 运行额外的前向传播将生成器概率与 p η ( z ∣ x ) p_\eta(z|x) pη​(z∣x) 相乘之后对所有束的边缘化概率求和。我们将这种解码过程称为“彻底解码Thorough Decoding”。 对于较长的输出序列集合 Y Y Y 会变得很大因此需要多次前向传播。为更高效的解码可以进一步近似处理假设 p θ ( y ∣ x , z i ) ≈ 0 p_\theta(y | x, z_i) \approx 0 pθ​(y∣x,zi​)≈0如果 y y y 在束搜索时没有从 z i z_i zi​ 中生成。通过这种方式一旦候选集 Y Y Y 生成就无需为 y y y 运行额外的前向传播。我们称这种解码过程为“快速解码Fast Decoding”。 下面为通俗易懂的例子解释 两种模型通俗易懂的例子解释 想象你在玩一个问答游戏。你输入了一个问题模型要根据从多个书籍中找到的内容来生成一个答案。 RAG-Token 模型 就像是一个助手每次生成一个字或单词时它会参考多本书找到最适合的一本书来决定下一个字或者单词。这就像是在每一步重新选择最合适的参考资料。 RAG-Sequence 模型 更像是这样它首先选择了一本最有可能包含答案的书然后将所有注意力集中在这本书上来生成整个答案。这需要逐步检查每一个句子因此更耗时但可以确保生成的答案上下文一致。 在解码过程中RAG-Token 模型 更灵活因为它可以从不同的书中获取信息而 RAG-Sequence 模型 则在生成每个答案时使用单一文档通过更加详细的解码过程来生成答案。 两种解码方式的区别 彻底解码 和 快速解码 的区别 彻底解码Thorough Decoding 和 快速解码Fast Decoding 的区别可以通过一个简单的例子来说明。想象你在做一个选择题考试而你的目标是找到最正确的答案。你有两种策略可以选择彻底检查每一个选项对应彻底解码和 快速缩小选项范围对应快速解码。 1. 彻底解码Thorough Decoding 假设你有 10 本参考书你需要检查每一本书中的内容来回答问题。每次你得到了一个潜在的答案时你会去每一本书中查找是否有相关内容然后再根据所有书籍中的信息给出最终答案。这个过程就像是“彻底解码”它需要你从所有文档中一一验证每一个潜在的答案再将这些信息结合起来最后得出最准确的答案。 在模型中彻底解码 的过程如下你生成了一个候选答案 ( y )接着你对每一个检索到的文档 ( z ) 进行前向传播计算 p θ ( y ∣ x , z ) p_\theta(y|x, z) pθ​(y∣x,z) 的值。然后你对这些概率进行加权求和得出最终的答案。这种方法比较慢因为需要多次前向传播但可以保证信息的完整性。 2. 快速解码Fast Decoding 而快速解码 就像是你一开始检查了部分选项然后认为某些参考书不可能提供答案直接忽略它们。你只会查看那些最可能有用的参考书而不再去查阅所有书籍。这样虽然不是 100% 确定但可以更快地缩小范围得到一个合理的答案。 在模型中快速解码 的过程是如果某个候选答案 ( y ) 没有在某个文档 ( z ) 中生成你可以近似认为 p θ ( y ∣ x , z i ) ≈ 0 p_\theta(y | x, z_i) \approx 0 pθ​(y∣x,zi​)≈0。这样一来你就不需要对每个文档都做前向传播节省了时间。这种方法更高效适合生成长答案时使用但相对于彻底解码它可能会略微降低答案的准确性。 总结 彻底解码像是你每次遇到问题时都认真检查每一个可能的文档或者书籍确保答案无误。这种方法较慢但更精确。快速解码你根据一部分信息快速做出决定只检查最可能的来源而跳过那些不太相关的文档。这种方法更快但有时可能略微牺牲准确性。 六、实验 实验说明 数据来源所有实验都使用了 维基百科 作为模型的知识来源。具体来说使用了 2018年12月 的维基百科快照这些数据被分割成了较小的“文档块”每块包含 100 个单词。这样总共形成了大约 2100万份文档。 检索过程实验中使用了 MIPS最大内积搜索技术来进行快速的文档检索并且使用了 FAISS 作为实现工具这是一个常用的高效相似性搜索库。同时使用了一种叫做“分层可导航小世界网络”的算法来加速文档的查找。 训练与测试在训练过程中每次查询时模型会从文档库中检索出最相关的前 k 个文档k 的取值为 5、10 等然后模型基于这些文档进行答案生成。在测试时同样也使用这些检索到的文档来生成答案。 6.1 开放领域问答Open-domain Question Answering, QA 开放领域问答是指系统需要回答范围广泛的问题并且不能依赖于特定领域的知识。在这里RAG 模型通过结合检索的外部知识和生成能力来回答这些问题。 训练方法通过最小化答案生成的错误率来训练模型即使用了一种叫做“负对数似然”的技术。这种方法帮助模型提高生成正确答案的概率。 对比实验将 RAG 模型与两类方法进行了比较 抽取式 QA这类方法直接从检索到的文档中提取出答案片段。闭卷 QA这类方法生成答案时不依赖外部文档只依赖模型内部学习到的知识。 数据集研究使用了四个开放领域的问答数据集NQ、TQA、WQ、CT这些数据集为研究提供了不同类型的问题和测试平台。 四个开放领域问答数据集的简要介绍 NQ (Natural Questions) Natural Questions 是由谷歌推出的一个大规模开放领域问答数据集。它包含了从 Google 搜索中获取的真实问题并且每个问题都对应了一个来自 Wikipedia 的长文档。任务要求模型找到文档中的片段并生成正确的答案。这个数据集特别适合训练模型处理复杂问题和长文档中的答案定位。 TQA (TriviaQA) TriviaQA 是一个包含了真实问答比赛trivia中的问题的数据集。这些问题通常较为复杂并且答案可能出现在多个文档或网页中。TriviaQA 提供了多种格式的答案包括提取式答案和文档片段因此模型不仅要定位正确答案还需要理解上下文。 WQ (WebQuestions) WebQuestions 是一个基于实际用户通过 Google 搜索提出的问题数据集。问题的答案通常可以在 Freebase 知识图谱中找到。这个数据集挑战模型从结构化知识中找到答案适合于基于知识图谱的问答系统。 CT (CuratedTrec) CuratedTrec 是从 TRECText REtrieval Conference的问答任务中挑选的一个数据集。它包含了一组精心挑选的问题和文档主要用来评估模型在从非结构化文档中提取答案时的表现。 这些数据集共同为开放领域问答提供了多样性挑战测试模型在各种情况下生成正确答案的能力。 6.2 抽象问题问答Abstractive Question Answering MSMARCO 数据集这是一个用来测试生成模型能力的任务。它提供了一些问题和多个高质量的参考段落帮助模型生成答案。实验中研究者并不使用这些参考段落而仅依赖模型的生成能力这使得任务更加困难。 抽象问答 vs. 抽取问答抽象问答是指模型生成完整的句子答案而不仅仅是从文档中抽取现有的句子。这使得回答更自然、更流畅但也更加依赖模型的语言生成能力。 挑战一些问题例如“加利福尼亚火山镇的天气如何”很难只依靠普通文档生成匹配的答案因为这些问题可能需要访问最新的或者具体的数据库来获取答案。因此如果模型不能使用预定义的段落或参考资料表现会下降。 参数化知识的使用RAG 模型可以通过其预训练中学到的知识来回答一些问题这被称为“参数化知识”。这意味着即使没有具体的文档模型也可以依赖预先学习的知识生成合理的答案。 6.3 生成危险边缘Jeopardy 风格的问题 使用 RAG 模型 生成 Jeopardy 风格的问题并与 BART 模型 进行对比。Jeopardy 问题与传统的开放领域问答任务不同因为它要求基于已知的答案生成精确的问题而不是直接从文档中提取答案。 数据集实验使用了 SearchQA 数据集进行训练和测试包含大量的训练、验证和测试样本。 评估方法研究人员使用了 Q-BLEU-1 作为评估指标这个指标在匹配实体时更为有效。除此之外还通过人工评估模型生成问题的准确性是否符合事实和具体性问题与答案是否密切相关。 模型对比RAG 模型和 BART 模型都被用来生成 Jeopardy 风格的问题评估人员会比较两个模型生成的问题看看哪个问题更好。 这一实验用于测试 RAG 模型的生成能力尤其是在生成复杂问题时的表现。 6.4 事实校验Fact Verification 该任务要求模型从维基百科中检索证据以判断给定声明是否正确。 FEVER 任务FEVER 是一个经典的事实校验任务要求模型基于外部证据如维基百科来验证声明的真假或确定是否缺少信息。这是一个复杂的推理问题因为模型需要不仅找到相关信息还要做出合理的推断。 RAG 模型的应用研究人员使用 RAG 模型进行分类而不是生成答案。模型在这项任务中的作用是找到与声明相关的证据然后根据这些证据判断声明的正确性。这与问答任务不同因为它更强调推理和分类而不是文本生成。 与其他方法的不同与其他方法不同研究人员并未使用额外的监督信号来告诉模型哪些证据是最好的。这使得 RAG 模型在没有明确指导的情况下也能够处理更广泛的任务。这种方法更接近实际应用场景因为在现实世界中可能没有足够的监督信号来帮助模型识别最相关的证据。 通过这个任务作者展示了 RAG 模型在处理复杂的事实校验问题时的能力尤其是在不依赖外部监督信号的情况下。 七、结果 7.1 表1的解读-开放领域问答任务 表1展示了三种模型Closed Book 模型、 Open Book 模型 和 RAG 模型在四个开放领域问答数据集上的测试结果。 Closed Book 模型 T5-11B该模型的设计是通过预训练获得参数化内部知识而不依赖于外部文档进行检索。T5-11B SSM是 T5-11B 模型的增强版本通过结合特殊的预训练任务如 salient span masking提升了在某些任务上的表现。 Open Book 模型 REALM通过结合外部文档检索由于其使用了外部知识它在回答复杂问题时更有优势。DPR通过 Dense Passage Retrieval 检索外部文档在 TQA 数据集上表现最佳在 NQ、WQ 和 CT 数据集上的表现也有提升。 RAG 模型 RAG-Token使用外部文档的检索增强生成。RAG-Sequence同样使用外部文档检索但在生成答案时使用整个文档。 总结 Closed Book 模型的表现依赖于其内置的知识库因此在较大、复杂的任务如 NQ上表现略差。Open Book 模型通过检索外部知识库提升了其在所有数据集上的表现尤其是 DPR 在 TQA 数据集上表现优异。RAG 模型结合了生成和检索表现出更为平衡且优秀的性能尤其是 RAG-Sequence 在多个数据集上都达到了更高的得分。 7.2 表2的解读-生成和分类任务 表 2 展示了几种模型在生成和分类任务中的测试得分包含抽象问题问答、生成危险边缘风格的问题和事实校验。 术语和符号解释 gold context/evidence金标准上下文/证据这个术语指的是经过人工筛选或精心标注的与问题或任务高度相关的上下文或证据。这些内容通常被认为是最可靠的信息来源用于模型训练或验证。在大规模 NLP 任务中它被视为最理想的输入形式。带星号的数据表示使用了金标准上下文/证据来训练的模型的得分。带下划线的数据表示未使用金标准上下文/证据来训练的最优模型的得分。 测试任务种类 Jeopardy B-1 和 QB-1这是关于问答生成任务的两个评分指标通常用于评估模型生成的准确性和多样性。MS-MARCO R-L 和 B-1分别代表 Rouge-L 和 BLEU-1 分数用于评估模型在生成任务中的表现。Rouge-L 衡量生成答案与参考答案之间的重叠率BLEU-1 衡量生成答案的准确性。FEVER3 和 FEVER2这是事实验证任务Label Accuracy 用于评估模型的标签准确率即模型预测的正确性。 总的对比 SotAState of the Art SotA 指的是在特定任务或领域中表现最好的技术或模型。在机器学习和自然语言处理等领域中SotA 模型是指当前已知的最先进的模型通常在某些基准测试例如开放领域问答、文本生成或图像识别任务上取得了最优性能。随着研究的推进新的模型和方法不断被提出SotA 模型也会不断更新。MS-MARCO、FEVER3 和 FEVER2 任务中这是当前最优的模型但它使用了金标准的上下文训练因此带有更高的先验信息。 BART 模型 在生成任务Jeopardy 和 MS-MARCO中BART 得分相对较低在分类任务 FEVER3 和 FEVER2 中BART 的表现也不如最优模型。 RAG-Token 和 RAG-Sequence 模型 RAG-Tok在生成任务中表现优于 BART。RAG-Seq在生成任务中的表现也不错比 BART 的得分高。分类任务RAG 模型在 FEVER 任务中表现优异接近最优模型。 生成 Jeopardy 问题的任务对比 RAG-Token 在生成 Jeopardy 问题的任务中表现优于 RAG-Sequence。Jeopardy 问题通常包含两个信息片段RAG-Token 可能表现更好因为它能够结合多个文档中的内容来生成答案。 事实校验任务对比FEVER 三分类任务 FVR3真假和无法判断RAG模型的性能与最先进的、专门为这一任务设计的复杂流水线模型相比差距仅为4.3%。这些最先进的模型依赖于复杂的架构和大量的工程开发并且使用了中间的检索监督即模型训练过程中通过给定的证据进行监督。相比之下RAG并不依赖这些复杂的训练方法而是直接基于检索到的文档来完成任务表现非常接近。 二分类任务 FVR2真或假RAG与Thorne和Vlachos的RoBERTa模型进行了比较后者是基于提供的“黄金证据”句子来判断声明真假。尽管RAG并没有被提供黄金证据句子而是自己检索相关文档其性能仍然非常接近RoBERTa模型差距仅为2.7%。 文档检索分析研究还分析了RAG检索到的文档是否与FEVER标注的黄金证据文档一致。在71%的案例中RAG检索到的首个文档是黄金证据文档的一部分。在90%的案例中RAG检索到的前10个文档中至少有一个是黄金证据文档。 RAG即便没有依赖外部监督信号只通过自行检索证据来做判断依然表现出了非常接近于最先进模型的水平这展示了RAG模型在无需复杂监督的情况下也能够高效地完成任务。 总结 SotA 模型 使用了金标准上下文训练因此在生成和分类任务中表现最优。RAG 模型 在不使用金标准上下文训练的情况下表现也非常出色尤其是在生成任务中RAG 的多样性和准确性都超过了 BART。BART 在这些任务中的表现相对较弱尤其是在更复杂的生成任务中。 7.3 表3的解读-生成任务回答的准确性和具体性 表3提供了不同模型在生成任务中的具体输出示例旨在比较它们生成的回答的准确性和具体性。 表格结构 任务 (Task)代表输入问题所属的任务如 MS-MARCO 问答任务或 Jeopardy 问题生成任务。输入 (Input)为每个任务中模型收到的输入问题。模型 (Model)指使用的模型类型BART、RAG-T 或 RAG-S。生成 (Generation)代表模型生成的答案。表中通过问号“?”标示事实错误的回答星号“*”标示部分正确的回答。 任务解释 MS-MARCO 任务 输入问题如“定义中耳”和“苏格兰使用的货币是什么”。对于问题“定义中耳”BART 模型给出了错误的回答“中耳是介于中耳和鼻子之间的部分”而 RAG-T 和 RAG-S 都生成了更正确且具体的回答。对于问题“苏格兰使用的货币是什么”BART 和 RAG 模型都给出了正确的答案。 Jeopardy 问题生成任务 对于问题“Washington”BART 生成了错误答案“这个州在美国有最多的县”而 RAG-T 和 RAG-S 提供了更准确的描述。对于问题“神曲”BART 生成的答案部分正确而 RAG 模型给出了更精确的答案。 总结 BART在部分问题上表现欠佳生成的回答中有一些事实错误或部分正确。RAG-T 和 RAG-SRAG 模型 比 BART 更少产生幻觉即生成不符合事实的内容通常能生成更具体和更准确的答案。 该表清楚地展示了 RAG 模型在处理复杂生成任务时比 BART 模型更具优势特别是在生成更加准确和具体的回答方面。 7.4 图2的解读 这张图展示了在生成 “Jeopardy” 风格的问题时RAG-Token 模型对于特定输入 “Hemingway” 的后验分布posterior probability其中生成了两个标志性的海明威作品“A Farewell to Arms” 和 “The Sun Also Rises”。这张图中列出了5个被检索到的文档Document 1 到 Document 5其中 Document 1 涉及海明威的作品《永别了武器》A Farewell to Arms。Document 2 讨论了海明威的另一本作品《太阳照常升起》The Sun Also Rises。 图中的热图展示了对于每个生成的词tokenRAG-Token 模型是如何在这些文档之间分配后验概率的。我们可以看到 当生成 “A Farewell to Arms” 时模型的后验分布在 Document 1 上具有较高的概率这意味着它的生成依赖于 Document 1 的信息。同样当生成 “The Sun Also Rises” 时后验概率在 Document 2 上有明显的集中说明该文档在生成该标题时起到了重要作用。 总结 这种后验分布的变化反映了 RAG-Token 模型如何使用多个检索到的文档来生成更准确的答案。在开始生成每个词时模型会根据不同的文档调整其注意力并从最相关的文档中提取信息以生成正确的答案。 7.5 表4的解读-Jeopardy 问题生成任务的事实性和具体性 表 4 展示了人类评估 Jeopardy 问题生成任务的结果评估了 BART 和 RAG 在两个维度上的表现事实性Factuality 和 具体性Specificity。 在事实性方面42.7% 的评估认为 RAG 比 BART 更好而只有 7.1% 认为 BART 更好。 在具体性方面37.4% 的评估认为 RAG 更具体而 16.8% 认为 BART 更好。 这表明在人类评估中RAG 在这两项任务上普遍表现优于 BART尤其是在事实性方面。 7.6 表5的解读-生成内容的多样性 表 5 比较了在两个生成任务MSMARCO 和 Jeopardy 问题生成中几个模型生成内容的多样性 根据最近关于多样性解码的研究可以通过计算不同模型生成的总n元组n-grams中独特n元组的比例文中用的是三元组 tri-grams来探讨生成的多样性。从表中可以看出RAG-Sequence生成的内容比RAG-Token更具多样性且二者生成的内容都明显比BART更具多样性而无需使用任何促进多样性的解码方法。 7.7 表6的解读-消融实验评估检索机制的有效性 表6展示了对RAG模型在开发集上的消融实验结果。 消融实验Ablation Study是一种用于评估模型或系统各个组件贡献的实验方法。通过逐一去除或冻结模型中的某些组件或特性观察性能的变化可以帮助研究人员理解哪些组件对最终的模型性能起到了关键作用。 RAG的一个关键特性是学习如何检索任务所需的相关信息。为评估检索机制的有效性作者进行了消融实验冻结了训练中的检索器并做了下面几种比较 BM25与RAG的向量稠密检索器的对比BM25是一种基于词频的传统检索器用于与RAG模型中的向量稠密检索器进行对比。在此实验中用固定的BM25检索器替代RAG的检索器并在计算 p ( z ∣ x ) p(z|x) p(z∣x)时使用BM25的检索得分作为logits。表6显示BM25在某些任务如FEVER任务表现出色但在开放域问答任务如NQ和TQA中RAG的稠密检索器表现更好。 冻结检索器的影响在“Frozen”行列中冻结了检索器的参数使其在训练过程中保持不变。结果显示冻结检索器的性能显著下降说明允许检索器的参数在训练过程中更新有助于提高模型的整体性能。 不冻结检索器的性能RAG-Token和RAG-Sequence模型在不冻结检索器的情况下表现出色尤其是在开放域问答任务中它们的精确匹配分数高于其他实验设置。 通过这些消融实验可以得出结论RAG的稠密检索器在开放域任务中贡献了较大的性能提升且允许检索器在训练中更新是确保其高效工作的关键 为什么对于FEVER任务BM25表现更好 可能的原因是FEVER中的声明claims通常与实体密切相关而基于词语重叠的检索方法如BM25非常适合处理这种类型的任务。 实体驱动的声明FEVER任务的目标是验证自然语言声明的真实性而这些声明往往与具体的实体有关比如人物、地点、事件等。例如“乔治·华盛顿是美国的第一任总统”就是一个与“乔治·华盛顿”这个实体相关的声明。因此检索器需要找到包含这些实体信息的证据文档。 词语重叠检索BM25是一种基于词频和文档频率的检索算法强调查询中的关键词与文档中词汇的重叠。由于FEVER的声明通常包含了非常明确的实体如人名、地名等这些实体也很可能出现在相关文档中因此基于词汇匹配的BM25算法能很好地找到包含这些实体的文档。 适用场景相较于其他需要更复杂语义理解的任务FEVER的实体中心化特点使得像BM25这样简单、直接的词语匹配方法在这个任务中表现优越。 总结来说BM25的强项在于它能快速、有效地找到与查询中实体词汇相匹配的文档而FEVER任务的实体驱动特性使得BM25在这个特定场景下尤其适合。 7.8 图3的解读-检索更多文档的效果 图3展示了RAG模型在训练时检索更多的文档对在两个任务NQ和MS-MARCO上性能表现的影响。 左图 描绘了在NQ任务中随着检索文档数量K的增加NQ准确匹配率的变化情况。RAG-Sequence在测试时检索更多文档会单调地提高开放域问答的结果随着检索文档数量从0增加到5性能快速提升但之后增长放缓。在K接近30时准确率趋于平稳继续检索更多文档对性能的提升有限。而RAG-Token的性能在检索10个文档时达到峰值。 中图 描绘了在NQ任务中的检索召回率Answer Recall K随着文档数量增加的表现。可以看出RAG模型RAG-Tok和RAG-Seq和固定DPR的召回率较高并随着K值的增加而逐渐提高而基于词汇匹配的BM25系统表现显著差于其他模型。 右图 描绘了在MS-MARCO任务中随着文档数量增加RAG模型在Bleu-1和Rouge-L分数上的表现。可以看到检索更多文档会提高RAG-Token的Rouge-L分数但以牺牲Bleu-1分数为代价而这一效果对RAG-Sequence的影响较小。 通过这三幅图RAG模型展示了在NQ任务中通过检索更多文档能有效提升答案召回率。而在MS-MARCO任务中Rouge-L分数随着文档检索数量的增加而改善但以牺牲Bleu-1分数为代价。 检索召回率Answer Recall 检索召回率Answer Recall 是信息检索系统或生成模型中的一个重要指标用于评估在给定查询时系统能否从大量文档中找到正确答案。具体来说它衡量的是在模型检索出的文档列表中正确文档的比例。这个指标的理想值为1表示所有正确答案都被检索到了而0表示没有一个正确的答案被找到。 7.9 索引热交换Index hot-swapping-轻松更新知识库 非参数记忆模型如 RAG 的一个优势是随着世界变化它可以在测试时轻松更新知识库而不需要像参数模型如 T5 或 BART那样通过重新训练才能更新其行为。 背景 在自然语言处理模型中知识的更新是一个挑战。参数模型如 T5 和 BART将知识“嵌入”到模型的参数中当外界信息变化时必须通过重新训练来更新它们的知识。而 非参数记忆模型如 RAG通过将外部知识例如 Wikipedia存储在一个独立的索引index中并在生成答案时根据需要检索这些文档。这样当世界上的知识发生变化时只需要更新或替换索引而不需要重新训练模型。 测试方法 为了证明这个优势作者创建了两个索引一个基于 2016 年的 Wikipedia 数据集另一个基于 2018 年的数据集。他们设计了一个测试来询问世界领导人的问题例如“谁是秘鲁总统”并使用 RAG 模型分别通过这两个索引来回答这些问题。 2016年索引 对应 2016 年世界领导人的问题模型的回答正确率为 70%。2018年索引 对应 2018 年世界领导人的问题模型的回答正确率为 68%。 当索引与问题不匹配时比如用 2016 年的数据回答 2018 年的问题正确率明显下降表明索引的时间相关性。 结论 这一实验表明通过简单地更换非参数记忆即索引可以轻松更新模型的世界知识而不需要像参数模型那样耗时地重新训练。这种“索引热交换”Index hot-swapping方法为更新知识库提供了一种更为灵活和高效的方案。 八、相关工作-前人的工作和本文的创新点 单任务检索 单任务检索是指在特定的NLP任务中通过使用信息检索技术来提升模型的表现这是之前的做法。已经用这种技术做过的任务包括开放领域问答、事实核查、事实补全、长篇问答、维基百科文章生成、对话、翻译以及语言建模。 本研究的创新之处在于展示了如何使用一个单一的检索架构来提升不同NLP任务中的表现而不需要为每个任务设计专门的架构。这意味着通过引入统一的基于检索的方法模型可以在多个任务中有效地学习和使用外部信息显著提高整体性能。 NLP的通用架构 先前的研究表明在NLP任务中使用通用架构不依赖检索取得了巨大的成功。一个单一的预训练语言模型在GLUE基准测试的各种分类任务中通过微调后展现了出色的表现。早期的模型如GPT-2主要通过单向生成从左到右取得了在多个任务上的成功。GPT-2证明了一个统一的语言模型能够同时胜任生成式和判别式任务。 之后的BART和T5进一步改进了这些模型它们利用双向注意力机制能够在处理文本生成和分类任务时取得更好的结果。BART和T5是编码器-解码器模型它们不仅在生成任务中表现出色也能够处理分类任务。 本研究的创新之处在于通过学习一个检索模块来增强这些通用的生成模型并实现一个统一的架构来扩展任务范围。 学习式检索 在信息检索领域中学习如何检索文档是一个重要的研究方向最近的工作中越来越多地结合了预训练的神经语言模型来提升检索性能。有些工作通过优化检索模块来辅助具体的下游任务例如使用搜索、强化学习或潜变量方法来解决问题回答任务。这些成功的研究利用了不同的基于检索的架构和优化技术通常在单一任务上实现了出色的表现。 本研究的创新之处在于展示了单一的基于检索的架构可以通过微调在多个任务上实现强大的表现。 基于记忆的架构 文本的文档索引可以被视为神经网络所关注的一个大型外部记忆类似于记忆网络。传统的记忆网络关注的是如何在任务中使用预训练的嵌入。本研究的创新之处在于它使用的是原始文本作为记忆而不是通常的向量嵌入。这带来了两个关键优势 人类可读性因为使用的是原始文本模型的记忆内容是人类可以直接阅读和理解的这为模型的输出提供了一定的解释性。例如用户可以查看模型为什么会产生某个答案这是模型可解释性的重要一环。 人类可写性这种架构允许我们动态更新模型的知识库只需要编辑文档索引即可。这意味着在新的知识出现时无需重新训练整个模型只需更新相关的文档就可以实现对新信息的学习。 这种方法在知识密集型对话系统中表现出色尤其是当生成器需要根据检索到的事实文本生成回答时。通过直接使用文本而不是以往的嵌入或向量表示模型可以在更复杂和动态的场景下保持高效的生成和准确性。 检索与编辑方法 RAG与检索与编辑风格的方法有一定的相似性但也有不少区别 检索与编辑方法的基本流程先根据输入检索一个与输入相似的训练对即输入-输出对然后通过轻微的编辑生成最终的输出。这种方法已经在多个领域得到了成功应用尤其是在机器翻译和语义解析领域。 RAG与传统检索与编辑的不同 更少依赖轻微编辑传统方法依赖的是对检索到的项目进行小范围的调整而RAG技术的侧重点在于将多个检索到的内容进行汇总从中提取出最相关的信息。学习潜在检索RAG不仅仅是检索相似的训练对还在检索阶段通过潜在变量学习更有效的文档检索。检索证据文档传统方法主要检索的是与输入相关的训练对而RAG更关注检索支持输入的证据文档。 未来研究方向的展望尽管RAG技术与检索与编辑方法存在差异但RAG技术可能适用于这些场景并为未来的研究提供了有前途的方向。 总结来看RAG不仅增强了检索还整合了生成和编辑的能力能够更好地处理复杂的语言生成任务。 九、讨论 本文的贡献 混合生成模型本文提出了同时利用参数化记忆和非参数化记忆的RAG模型。开放领域问答中的表现展示了RAG模型在开放领域问答中取得了最先进的结果。用户偏好相比于纯参数化的BART人们更偏爱RAG的生成认为RAG生成的内容更加真实和具体。检索组件的有效性对学习到的检索组件进行了详细的调查验证了它的有效性并说明了如何通过替换检索索引来更新模型而不需要任何再训练。 未来研究方向 未来的研究可以探索是否可以从零开始联合预训练参数化和非参数化记忆模块这样可以进一步提升模型的性能。联合预训练的目标可能包括类似于BART的去噪任务或其他合适的目标函数。 广泛应用的潜力 RAG技术展示了它在各种自然语言处理任务中的潜力。参数化和非参数化记忆的结合为模型提供了强大的生成能力并开辟了新的研究方向特别是在处理需要动态外部知识的任务中具有应用前景。 十、更广泛的影响 讨论了RAG模型的社会影响既包括它带来的好处也提到了潜在的负面影响。 积极影响 基于事实的知识生成RAG模型通过引用维基百科等真实的知识源能够减少生成中出现的虚假内容或“幻觉”。这使得生成的文本更符合事实尤其在处理需要可靠数据的场景如医疗、科学领域时能够提供更高的准确性和可信度。控制与可解释性由于模型依赖外部知识生成的内容可以被追溯至具体的来源如维基百科的某一篇文章这提高了内容的可解释性使用户对生成的知识更有信心。应用场景广泛RAG模型可以应用于多个领域如医学问题的回答、提升工作效率等帮助人们在多个实际场景中解决问题。 潜在风险 外部知识的局限性尽管RAG依赖于外部知识但这些知识库如维基百科并不是完全真实或没有偏见的。因此模型生成的内容可能受到知识库的偏见或错误信息的影响。滥用风险和其他高级语言模型如GPT-2类似RAG也可能被用来生成有害或误导性内容比如在社交媒体上发布虚假新闻、冒充他人身份甚至生成垃圾邮件或网络钓鱼内容。自动化带来的失业风险随着语言模型的进一步发展它们可能在未来几十年内自动化许多当前的工作这也引发了潜在的社会问题。 为了应对这些风险文中建议使用AI系统来对抗虚假内容和自动化的垃圾邮件生成以减少RAG模型的负面影响。
http://www.w-s-a.com/news/286639/

相关文章:

  • 中国建设官方网站如何创建自己的软件
  • 来宾住房与城乡建设网站天津西青区怎么样
  • 西安网站建设培训班鄂州网页定制
  • 西部数码网站备份自己怎么做网站啊
  • h5网站开发用什么软件制作公司网站建设代理怎么做
  • 网站建设资料准备网上购物app有哪些
  • 沧州做网站优化哪家公司便宜国内百度云网站建设
  • 网站的最近浏览 怎么做龙岩市人才网最新招聘信息
  • 网站建设需要找工信部吗网站开发账务处理
  • 做那种的视频网站个体工商网站备案
  • 推广网官方推广网站中国建设招聘信息网站
  • 医院网站建设需要多少钱网络营销渠道可分为哪几种
  • 怎么取网页视频网站元素计算机专业论文网站开发
  • 上海网站建设备案号怎么恢复wordpress打开页面空白
  • 30个做设计的网站企业设计网站
  • 招生网站开发的背景创意 wordpress
  • 网站备案资料查询小型企业管理系统软件
  • 温州网站建设维护怎么做好网站开发、设计
  • 佛山 做网站公司有哪些网站排名忽然不见了
  • 广告网站建设最专业东莞大朗网站设计
  • 网站做流量的论坛贴吧分销商城系统源码
  • 新手建立网站的步骤网站建设费怎么入分录
  • 哪里建网站性价比高做网站赚取广告费
  • 邢台集团网站建设价格微信怎么做捐钱的网站
  • 做网站费用需要分摊吗装修公司一般多少钱一平方
  • 公司主页的网站格式wordpress自动推送给百度
  • 网站建设辶金手指排名十二wordpress 当数据库
  • 无锡手机网站建设服务苏州展厅设计企业
  • 无锡网站制作需要多少钱北京二次感染最新消息
  • 网站开发视频播放无画面杭州房产信息网官网