大型语言模型是超级强大的工具。我记得ChatGPT第一次发布的时候,我说不行,绝对不行,但……然后我发现它跟我们一样,在Ubuntu上选CUDA版本时也是一筹莫展,哈哈。
总之,如果你问一个对AI不太了解的人关于ChatGPT,他们可能会说这就像从互联网上进行语义搜索一样。差不多就是这样,但其实更复杂。这些模型将海量的信息压缩进了自身的权重中,并逐字(子词)进行预测。
尽管这些大型语言模型在聊天和回答问题方面表现出色,例如编写API使用Flask或为我们准备单元测试,但在特定的专业领域它们的表现不够理想。
要怎么微调训练你自己的LLM呢?
尽管大型语言模型(LLMs)在通用知识任务上表现出色,但在特定领域中却常常表现不佳。但这种广泛的能力是以牺牲特定领域的专业知识为代价的,更像通才而非专才。
这一限制使得微调变得重要。微调是将一个大规模语言模型调整到特定领域或任务,从而使其在特定领域的表现更加出色。然而,这一过程远比仅仅让模型接触特定领域的数据复杂得多。
对大型语言模型(LLM)进行微调面临着重大挑战,组织通常有两个选择:
无论选择哪条路径,财务因素是最重要的。成本可能包括API使用费用或训练所需的云GPU资源费用。即使有足够的财力资源,组织也可能会面临高质量、相关数据的短缺,这些数据对于进行有效微调来说是必要的。
数据的敏感性带来了额外的复杂性。组织必须确保数据来源的适当归属和可追溯性,在研究论文中引用某个LLM可能引发一些质疑。此外,防止专有信息泄露给LLM提供商是主要顾虑。
虽然对大语言模型进行微调是人工智能社区中的热门话题,但这绝不是一个轻率的决定。这个过程需要仔细权衡资源、数据质量和潜在风险,就像引入一个高维护成本的技术栈一样。
检索增强生成(RAG)为这些挑战提供了一个潜在的解决方案。RAG直接将大型语言模型连接到组织的知识库,从而可以在不重新训练模型的情况下检索相关数据。这种方法提高了特定领域的性能,同时确保了数据的安全,并减少了微调的复杂性。
提示设计
检索增强生成(RAG)系统由两个主要部分组成:
这是准备阶段,您的文件将在这里被处理和存储。
系统在此响应用户的问题,这是运行时或推理环节。
尽管这种方法在语义相似性方面表现很好,它仍然可能存在失效点。为了提高准确性,许多系统会将这种语义搜索与传统的关键词搜索结合使用。
这种方法的混合策略使RAG系统能够结合语义理解和传统信息检索技术的优势,从而提供更可靠和语境相关的回答。据Anthropic报道,这种方法使得结果提高了大约1个百分点。
.zh: 这个链接 ("contextual retrieval")(来自Anthropic网站)
有时,系统有时候会错过重要的精确匹配。这时,BM25 就能帮上大忙了。它就像一个超级版的“Ctrl+F”(查找功能),专门用来找完全匹配的词或短语。
BM25大放异彩的应用示例
一个标准的RAG系统首先将大量文档拆分成更小的部分来运作。这些部分被转换成数字(称为嵌入),以捕捉其意义,并存储在一个特殊数据库中,以便快速搜索。当你提问时,系统会浏览这些存储的部分,并使用两种方法选择最相关的部分:一种基于词的重要性(TF-IDF),另一种基于嵌入。然后,它将这些最佳部分结合起来,并使用一个智能模型来生成一个清晰的答案。
链接:
这里举一个标准RAG系统(RAG)可能失败的例子。
2023年药物X在临床试验中的长期影响是什么?
系统检索到的相关片段可能包括以下文本:
> 治疗后,参与者有了显著的进步。
然而,这一段并没有指明使用了哪种药物,是否指的就是2023年的试验,或者改进是否具有长期性。没有这些额外的背景信息,系统就无法给出准确的回答,可能会给出误导性或不完整的答复。
上下文检索介绍
实际上,这会是这样的。你将从你的语料库中选择一个PDF文件或文档,然后将其拆分为多个部分。之后,你一次处理一个部分,并将其与原始文档一起输入如下类似的提示。
<document> {{全文}} </document> 这里是我们希望在整篇文档中定位的片段 <chunk> {{片段内容}} </chunk> 请简短描述此内容在全文中的位置,以帮助改善搜索。只回答上下文,不要其他内容。
这将为每个片段生成上下文信息,然后将其与相关上下文信息结合。你将给定的片段通过嵌入模型处理,然后这些嵌入将存储在标准的向量数据库中。另一方面,我们也会更新BM25索引,这实际上是使用TF-IDF,即“词频逆文档频率”。这基本上是一种基于关键词的搜索方式。因此,在每个片段中,你需要添加50到100个令牌。我认为你可以看到这种方法的一些潜在问题。其中一个问题是这将带来大量的额外开销,不仅因为你为每个片段都添加了大量令牌,还因为每个片段都要通过一个大型语言模型进行处理,这会累积大量的不同令牌,这会进一步增加处理的复杂性。
基于上下文的嵌入将前20块检索失败的几率降低了35%(从5.7%降到3.7%)。
将基于上下文的嵌入与上下文BM25结合使用将前20块检索失败的几率降低了49%(从5.7%降到2.9%)。
检索模型被设计用来提取信息块,这些模型简洁且高效。然而,它们依赖于基本的提取技术,例如向量间的欧氏距离或余弦相似度。这种方法可能会导致次优的结果,因为它更重视提取的速度和量,而不是准确性。
相比之下,重排模型更为繁重且运行速度更慢,因此不适合直接处理大规模提取内容。相反,它们可以用于重排检索器识别出的较小范围片段。
关键区别在于重排序器能够对用户提问和每个片段内容进行跨注意力机制。这使它们能够发现这两段文本之间的重要关系,而这些关系可能被更简单的相似度计算方法所忽略。
点击这里了解更多关于重排器的内容