📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易

生成式与抽取式语言模型

哪种模型适合您的用例?

像 ChatGPT 这样的生成式语言模型席卷了全球。除了在编程和翻译等领域的价值外,生成式模型的主要卖点是它们能够生成流畅、结构良好的自然语言响应。与人类一样,这些模型似乎能凭空生成答案,而无需查阅事实数据库。

这使它们与更普通的模型区分开来:抽取式语言模型。抽取式和生成式模型都基于突破性的 Transformer 架构,该架构为机器带来了新一代自然语言理解 (NLU)。

然而,抽取式模型与生成式模型不同之处在于,它们在查询时明确需要上下文来提取信息,并且它们将该信息作为对源文本的直接引用返回,而生成式模型则经过训练以生成语言,并能从头开始编写新文本。与生成式模型的流畅性相比,RoBERTa 和 ELECTRA 等抽取式模型因此显得能力不足。

A comparison of extractive and generative models’ responses to the question ‘Who was Shakespeare?’. The generative model provides a detailed generated answer, while the extractive model gives a concise response extracted from a text.

但越来越明显的是,生成式模型也面临自身的一系列问题,例如它们的规模、许多模型都是专有的(并非对所有人都理想),以及最重要的是,它们倾向于捏造信息。此外,抽取式模型在实际应用中有着更好的业绩记录——例如,在私有或公共语义搜索引擎或信息提取系统中。

因此,如果您正在考虑在自己的项目中使用现代语言模型,那么本文将适合您。我们将讨论抽取式和生成式语言模型的优缺点,并向您展示哪些用例最适合哪种模型。

生成式语言模型的普及

2022 年 11 月,OpenAI 向公众发布了其最新的大型语言模型——ChatGPT。使用它无需编码技能——突然间,每个人都能与高性能语言模型“聊天”,并首次体验到这些模型近年来取得的进步。这导致了大量与 GPT 相关的内容,这些内容或解释、或吹捧、或警告这项技术。

然而,这些模型的基础并非新事物。GPT 模型建立在 Google 于 2017 年首次提出的 Transformer 架构之上——这比 ChatGPT 问世早了数年。新的 Transformer 架构迅速引起广泛关注,并成为 NLP 许多后续进展的基础。

生成式模型的参数数量不限,但要产生 ChatGPT 所展现出的令人印象深刻的结果,似乎需要难以置信的庞大数量——GPT-3 系列模型拥有 1750 亿个参数,而 GPT-4 据说拥有超过一万亿个参数。在训练数据方面,生成式模型也是越多越好:它们不仅在海量数据上进行训练,而且似乎还存储了这些数据中事实的表示(而不仅仅是用于建立其语言直觉),这给人一种无所不知的印象。

像 OpenAI 的模型这样的闭源语言模型只能通过 API 访问,并不总是可以公开下载。但也有令人印象深刻的开源生成式模型广泛共享在Hugging Face 模型中心等平台上。然而,像VicunaOpenAssistant这样的开源生成式模型正在迅速追赶,生成的结果可能很快就会决定行业标准

抽取式模型与生成式模型有何不同?

在架构方面,广义上说,像基于 BERT 的模型与它们的生成式对应物一样,都属于同一类语言模型,因为它们都使用 Transformer。然而,主要区别在于这些模型的用途。与生成式模型不同,抽取式模型需要查询和特定文本作为其响应的基础。然后,它像生成式模型一样,将查询编码为一个高维的、语义信息的向量。但是,抽取式模型不像生成式模型那样根据给定上下文从头开始生成答案,而是根据模型的预测,标记出文本文档中能为查询提供最佳答案的部分。

A high-level explanation of how extractive models retrieve answers from a given document. The question ‘Who is the main female character in ‘Hamlet’?’ is asked, and the Reader component, using an extractive language model, answers with ‘Ophelia, Polonius’s daughter’ from the given document.

那么,当你需要提供包含答案的文档时,这种模型的用途是什么?嗯,一方面,当你需要从多个文档中提取相同类型的信息时,它会非常有用:这是一个经典的信息提取场景。但更重要的是,应用 NLP 已经提出了一个巧妙的管道范式,允许抽取式模型在大量文档集合上运行。在检索器-阅读器管道中,一个更快的模型预选出最佳的文档“候选”,然后由抽取式模型进行更仔细的阅读,以找到尽可能最好的答案。

A high-level explanation of how an extractive question answering pipeline works. The question ‘Who is the main female character in ‘Hamlet’?’ is asked. First, the Retriever component pre-selects the best document candidates, which are then passed to the Reader component. The Reader employs an extractive model to read the documents and determine the most suitable answer. In this case, the Reader component answers with ‘Ophelia, Polonius’s daughter’.

它们的纯抽取性质意味着模型只能提供直接引用文本的答案。抽象、释义和生成结构良好的答案不属于这个模型系列的范畴。

由于其抽取性质,这些模型不需要存储事实信息,因此不一定受益于更多的参数。与它们的生成式表亲相比,抽取式模型通常尺寸小得多,需要的训练数据也更少。

它们相对较小的尺寸也使共享这些模型更加容易。事实上,最受欢迎的模型都可以在模型中心找到,每个人都可以下载它们以供直接使用或针对更具体的数据集进行微调

生成式模型的问题——以及如何解决

生成式模型的一个反复出现的问题是,它们有时会捏造信息并将其视为事实。这种行为通常被称为“幻觉”,主要原因是模型能够生成语言,而不是从给定文本中提取答案。

当模型信息不足以准确回答问题时,当它多次接收相同的提示时,或者当它被要求提出与普遍接受的事实相悖的论点时,就可能发生幻觉。最后一类情况显示了幻觉概念的模糊性。毕竟,捏造事实是很常见的:例如,在小说中,在用于说明目的的假设性示例中,或者在学校的写作作业中。

然而,当用户期望获得事实知识,却未察觉地收到幻觉时,就会出现问题。考虑到生成式模型已被用于教学、编程和写作等各种任务,ChatGPT 输出中大量存在的幻觉内容使得有必要重新考虑它们在现实世界中的适用性。

虽然已经提出了几种方法来检测生成模型输出中的幻觉,但我们deepset 通常采用通过检索增强来提高这些模型可靠性的方法。

检索增强:将事实真相喂给您的生成式模型

检索增强问答(和其他应用)中,我们不只依赖模型本身参数中包含的事实。相反,我们利用现代 NLP 系统可定制的特性,将生成式模型连接到 curated 文档数据库——就像我们之前在抽取式 QA 设置中看到的那样。

当模型被提示回答问题时,它将使用该数据库作为其事实基础,同时仍然依赖其理解和生成自然语言的惊人能力。作为中间步骤,我们使用检索器来检索数据库中最相关的文档,并将其嵌入到我们对模型的查询中。一个具有类似人类的对话能力和经过事实核查的知识库的系统:检索增强让您拥有两全其美。

将您的生成式模型连接到数据库不仅可以消除幻觉;它还能更全面地提高准确性。存储在语言模型参数中的信息很快就会过时,但您可以确保定期更新数据库中的文档。

然而,当与专有第三方模型结合使用时,此方法也存在缺点。

一些公司不愿将文档中潜在的敏感数据发送到外部服务。对于这些组织来说,最好将生成式模型本地托管,而不是使用第三方提供商。

生成式还是抽取式,哪个更好?

现在我们已经对生成式和抽取式语言模型的特征有了很好的了解,是时候看看每种模型最适合的用例了。决策取决于您应用程序本身的特性,以及您的技术要求和财务限制。

何时使用生成式模型

当您需要应用程序的输出听起来像是由人类产生的自然响应时,生成式模型是必不可少的。这就是为什么这些模型在**聊天机器人**或作为**写作助手**,用于文案和软件文档等领域很受欢迎。

另一种需要生成式模型的应用程序是任何包含释义的应用程序。如上所述,抽取式模型只能从知识库中复制内容,而生成式模型则从头开始生成全新的表述。这对于**翻译**(事实上,第一个 Transformer 就是为翻译目的而构建的)是必不可少的,并且在**摘要**等其他**抽象用例**中也非常有用。

关于财务和技术要求,请记住,截至目前,性能最高的生成式模型并非开源。例如,OpenAI 通过其 API 对其模型的​​使用收费。您需要考虑这会如何影响您的预算,尤其是在您的应用程序请求量意外激增的情况下。

一些开发人员可能也不习惯于他们不控制模型本身,或用于训练或微调模型的数据。检索增强可以帮助解决最后一个问题——只要您同意将内部文档发送到外部服务。

何时使用抽取式模型

抽取式模型通常用于问答。因此,这种技术最典型的应用是在用户希望从大量文档中逐字获取答案的用例中。例如,它可以用于在短时间内**从技术文档中提取答案**。经验法则:应用程序越敏感,对**文本忠实度**的需求就越高,对释义的容忍度就越低。

但问答的含义远不止于此。事实上,它是一种常用于**从文本中提取信息**的技术,这些信息随后可以在应用程序的下游进一步使用。假设您有一个商业报告集,并想识别某些操作所涉及的主要实体。您可以使用抽取式模型从文本中**提取这些答案**,确保它们只包含命名实体,如人物、组织或地点,然后使用这些实体来**填充知识图谱**。

简而言之,抽取式模型适用于您更关心信息本身而不是流畅答案的情况;当您希望在下游任务中使用它们时;并且当您的应用程序需要文本忠实度时。研究人员还发现,抽取式模型比生成式模型**在域外数据上表现更好**。

在技术要求方面,与生成式模型相比,最大的区别在于您通常在自己的基础设施上托管它们——这让您对它们拥有完全的控制权和完全的责任。虽然这些模型可以在模型中心免费获得,但拥有一个或多个 GPU 用于微调,并能够分配资源用于**以数据为中心的任务**(如标注和质量评估)会很有用。

最后,请记住,并非所有用于 NLP 的 Transformer 模型都属于抽取式和生成式类别!事实上,存在大量语言模型根本不返回任何答案,而是根据其语义内容匹配或分类文档。这些模型比本文讨论的模型更快、资源消耗更少,可用于**语义搜索**(无论是面向公众的还是企业内部的)以及**语义 FAQ 搜索**等应用。

生成式和抽取式:Haystack 应有尽有

无论您是想构建基于生成式还是抽取式语言模型的应用程序:Haystack(我们的开源应用 NLP 框架)让处理这两种模型变得轻而易举。借助我们可组合的管道和实践教程,您可以很快构建自己的原型。要开始使用,为什么不看看我们用于抽取式生成式问答的组件?

您是否有兴趣与志同道合的人交流关于生成式与抽取式 QA、大型语言模型或其他 NLP 主题的技巧和观点?欢迎加入我们的 Discord 社区访问我们的 GitHub :)