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

何时以及如何训练您自己的语言模型

您几乎永远不需要从头开始训练语言模型。

许多人在考虑是否将自然语言处理功能集成到他们的产品中时,会因任务感知到的复杂性而退缩。现代 NLP 依靠从大量数据中学习的庞大语言模型来运行。

然而,许多初学者不知道的是,绝大多数用例不需要从头开始训练新的语言模型。网上已经有数以万计的预训练模型可供免费使用,可以直接使用。

尽管如此,许多用例确实受益于微调或领域适应,这意味着在较小的自定义数据集上对预训练的语言模型进行优化。在本文中,我们将指导您完成尝试不同语言模型的过程,并了解何时训练您自己的模型。

回顾:什么是语言模型?

一个语言模型是自然语言的计算、基于数据的表示。自然语言是人类使用演变而来的语言(如英语或日语),与编程中使用的语言等构造语言相对。借助语言模型,计算机可以处理自然语言。

语言模型不是知识库。有时,我们可能会被误导,认为语言模型知道事物,因为它们能流畅地回答我们所有的问题。但实际上,大多数语言模型完全侧重于人类般的语言理解,而不是事实的记忆。它们感知的知识来自它们运行其上的数据库。

借助Haystack这样的框架,语言模型可以置于任何文本数据库之上。这就是为什么您可以直接使用任何语言模型,而无需进一步修改或训练它们。

使用预训练语言模型

Hugging Face 模型中心是查找预训练语言模型(即已经过训练并准备好使用的模型)的首选地点。您将在模型中心找到数以万计的模型,它们在语言、用例和大小上各不相同。

一些初步考虑

我们通常建议尝试多个模型,以找到最适合您的应用程序、整体系统管道和计算资源的模型。为了找到适合您用例的正确模型,提前考虑几个问题很有帮助:

  • 潜在用户是谁,他们能从您的系统中期待什么?
  • 它需要多快?
  • 它需要多准确?
  • 您拥有哪些计算资源?

最后三个问题很重要,因为它们可能会限制您可以操作的模型大小。高性能语言模型通常非常大,这意味着它们会占用您硬盘上的空间,训练速度慢,并且预测需要更长的时间。在过去的几年里,NLP 领域已经提出了巧妙的知识蒸馏技术,这些技术可以使模型更小,同时保留其预测质量

另一个需要考虑的点是您数据的形状。它是否已经整齐地存储在某些数据库中,例如ElasticsearchWeaviate?还是它由您桌面上的某个文件夹中的文档集合组成?在后一种情况下,您可能需要进行一些预处理。只需几行代码,Haystack 就可以让您从 PDF 或 TXT 文件中提取文本,以及清理并将其分割成相同长度的片段(有关详细信息,请参阅此教程)。

尝试不同的模型

一旦您选择了几个候选模型,就可以将它们插入到您的管道中并开始评估它们。为了评估模型的能力与您的用例的匹配程度,最好准备一些您自己数据中的样本并进行标注

整理您自己的数据集的重要性怎么强调都不为过。机器学习模型完全围绕数据。如果它们使用低质量数据进行训练,模型本身将毫无价值。同样,只有当您拥有可以将其与预测进行比较的真实标签时,您才能评估模型预测的质量。

我们的评估模式输出一些量化模型预测质量的指标。如果您以前从未评估过 NLP 模型,那么F1 分数是一个相当稳妥的选择。它通过取其调和平均数(一种适用于比率的数学平均值)来平衡精度(模型分配给某个类别的所有数据点中有多少实际上属于该类别?)和召回率(某个类别的有多少数据点被模型正确分配给该类别?)。现在您可以运行包含不同模型的管道并比较它们的 F1 分数。

根据我们的经验,开箱即用的模型对大多数用例来说表现都相当不错。例如,在英语问答方面,我们的大多数用户对我们的 RoBERTa-base-SQuAD 模型的预测质量都非常满意。但如果分数低于您的期望,或者您只是想尝试一下,可以更进一步,微调现有模型。在这种情况下,原始分数将作为基线,您可以在此基础上比较下一代模型。

有时,很难定义“好”到底意味着什么。F1 分数 0.75 是好是坏?这取决于!弄清楚的最佳方法是让您的用户来评判。虽然我们知道让用户参与到这个早期阶段可能会很棘手,但他们可以提供宝贵的反馈。例如,您可以在deepset Cloud中设置不同的管道,让用户直接在界面中提供反馈。这将让您更清楚地了解您的数据与预训练语言模型结合可以使用到什么程度,以及您是否可能想要对其进行微调。

何时训练您自己的语言模型

从头开始训练您自己的 Transformer 模型在技术上是不可行的。但是,如果您拥有数据和计算资源来为代表性不足的语言训练新的 BERT 模型,请务必在模型中心共享该模型,以便其他人也能从中受益。您可以在这里阅读我们自己为德语训练多个 Transformer 模型的相关经验。

但在大多数情况下,您会希望研究领域适应和/或微调。虽然行业已开始将这两个术语互换使用,但它们最初描述了两种不同的技术:微调是指进一步训练一个通用、预训练的模型来完成特定任务,例如问答。而领域适应是指进一步训练一个模型以更好地理解特定领域的语言,例如法律或科学术语。

如果您发现现有模型的预测质量不佳——无论是因为您的用例没有得到很好的体现,还是您的文档使用了 FinBERT、LEGAL-BERT 和 SciBERT 等模型未涵盖的特定领域语言——那么是时候标注更多数据,并使用这些数据对您的预训练模型进行更多训练步骤了。

如何微调语言模型

如果操作得当,微调会是一个有益的过程。当您调整预训练模型并为其提供更多用例特定的数据时,其预测质量将提高,有时甚至会显著提高。

您可以使用 Haystack 中的几行代码来微调模型。通过遵循我们的教程来了解如何操作。关于微调,您还应该知道以下几点:

  1. 您需要更多数据。与上述使用用户特定数据评估语言模型的过程不同,微调还需要标注数据进行训练。所需数据点的数量取决于您的用例、模型的大小以及您的整体数据集的通用性。作为标注数据的替代方法(或补充),您可以研究数据增强
  2. 微调(以及模型训练)是一个迭代过程。训练完模型后对其进行评估,然后尝试通过调整一些模型参数并重新训练来超越该分数。要确定您的理想模型设置,您可能需要经历几次训练-评估-调整-重复的迭代。在 Haystack 中微调模型就像在初始化模型上调用 .train() 一样简单。
  3. 专家提示:尝试使用较小的模型而不是较大的模型。为了减少微调期间模型迭代训练所花费的时间,您需要保持模型较小。我们经常微调给定架构的较小版本(例如,BERT-base 而不是 BERT-large),以找到最佳的超参数设置。一旦找到正确的设置,就可以将其应用于较大的模型。
  4. 专家提示:蒸馏您的模型。大多数用例将受益于更小、更快的模型。这就是为什么我们非常喜欢模型蒸馏。这项技术允许您将知识“蒸馏”到一个较小的模型中。结果是一个模型,它更快,更环保,并且在生产环境中使用的成本更低。有什么不喜欢的呢?

数据标注的意义

许多人低估了数据标注在机器学习中可能扮演的角色。它很枯燥、单调,当我们期望模型执行某种 AI 魔术时,它似乎令人失望地手工化。这可能是为什么我们经常看到团队花费过多时间试图从他们的语言模型中榨取更多价值,而实际上,将这些时间用于标注一些数据会更好。

真正造就优秀模型的是标注数据,特别是“困难”的标注,因为它们可以教会模型处理即使是人类也难以处理的案例。

虽然我们承认标注可能不是最有趣的工作,但有一些工具可以使整个过程对每个人都更容易。例如,Haystack 标注工具提供了更简化的流程框架。清晰的指南对于获得良好标注和一致的数据集大有帮助。深入了解您自己的数据也很有价值,因为这可以增加您对用例的理解,以及为什么某些预测可能对您的模型来说很难。

因此,为了真正强调这一点:我们建议投资于数据标注而不是模型创建。机器学习研究人员一直在努力构建能够忠实模仿语言直觉的模型架构,并且不断涌现新技术来使现有模型更小、更快。但是您和您的团队的专业知识在于您自己的数据——而这正是您可以对模型的性能产生最大影响的领域。

开始

无论是在 deepset Cloud 这样的托管平台还是在您自己的设置中,模型训练不必是一种负担;它实际上可以很有趣。标注数据,调整一些参数,然后观察您的语言模型如何变得更智能,并更好地适应您的用例。

我们曾陪伴许多不同的团队一起努力让他们使用 NLP。来我们的 Discord 社区与我们谈谈您的项目,或者查看 Haystack GitHub 存储库

如果手动评估和微调的过程看起来令人生畏且耗时,请看看 deepset Cloud,我们用于设计和部署 NLP 解决方案的端到端平台。

最后,如果您想了解更多关于现代 NLP 的信息,请务必下载我们的免费电子书“NLP for Product Managers”。