使用结构化和非结构化数据增强大型语言模型(LLM) 原创
01、概述
在过去的几年中,大型语言模型(LLMs)引领了人工智能领域的革命。然而,尽管这些模型在理解和生成语言方面表现出色,它们仍然存在一些固有的局限性。主要包括知识截止日期带来的信息更新滞后、生成貌似正确但实际上错误的信息,以及知识库中可能存在的不准确信息和偏见。这些问题使得我们必须寻找解决方案,以提升LLMs的性能,特别是在特定领域的应用上。
02、LLM的微调(Fine-Tuning)
为了应对上述问题,微调LLM是一种有效的方法。这一过程通过监督学习来补充模型的内部知识,具体做法是引入额外的问答对。例如,一些开源工具如WizardLM可以利用给定的训练数据集生成这些问答对。
然而,定期微调并非易事,尤其是在信息快速变化的情况下。微调适用的场景通常是数据不频繁变化的领域。此外,微调并不能完全消除幻觉(hallucination)的问题。模型无法明确引用信息的来源,这使得我们难以判断信息是来源于预训练数据还是微调数据。微调还需要设置训练管道,并使用具备足够处理能力的GPU。此外,微调并没有任何访问控制机制,所有更新的知识对所有用户开放。
03、检索增强生成(RAG)
检索增强生成(RAG)为保持知识更新和减少幻觉提供了一种解决方案。RAG允许用户构建自己的特定知识库,并将LLM的功能限制在该知识库内。这对希望仅访问非公开内部数据源的信息组织特别有利,尤其是面对快速变化的数据时。此外,RAG还为组织提供了一个安全、隔离的环境,以便在个性化对话代理中利用其独特的数据。
RAG的工作流程可以概括为:用户的提示被转换为嵌入(embeddings),与向量数据库匹配,并结合检索到的数据通过LLM生成响应。这种方式使得信息检索更为高效,确保语义相似的信息被相邻存储,快速响应用户的查询。
向量数据库的作用
外部数据存储在向量数据库中,这是一种将信息以嵌入形式存储的高维系统。这种数据库通过语义相似性来索引和存储项,使得信息检索速度更快。外部数据首先使用嵌入模型(如OpenAI的Ada2、Cohere的co等)转换为数值表示(嵌入)。然后,将这些嵌入分成适合LLM上下文窗口的适当大小的块。定期将新数据集成到向量数据库中也相对简单,开源向量数据库如Weaviate、Milvus、Elasticsearch和Faiss都可以用于此目的。
对于每个查询或提示,嵌入模型首先将其转换为嵌入,然后利用这些嵌入从向量数据库中查找相关信息。随后,将组合后的提示和信息嵌入传递给大型语言模型,生成最终的响应。
结构化数据在RAG中的整合
除了网页、PDF、PowerPoint演示文稿和文章等非结构化数据源,结构化数据(如知识图谱)也可以作为重要的信息来源。使用知识图谱-检索增强生成(KG-RAG)能够为提示提供更强大和一致的信息。得益于标准化的词汇和自定义概念,知识图谱有助于缓解基于向量数据库的RAG中因语言差异造成的低质量结果的问题。
04、结构化与非结构化数据的结合
知识图谱的另一个优点是能够同时容纳结构化和非结构化信息。举个例子,考虑一个公司利用知识图谱来管理和导航客户关系及销售流程的场景。知识图谱可能包含销售人员、客户、交易和产品等节点。它们之间的关系可能包括“管理”、“购买”或“谈判”。结构化数据可能涉及销售数据、客户联系信息和产品规格,而非结构化数据则可能是销售通话记录、电子邮件交流和会议纪要。这种设置将使得聊天机器人能够回答诸如“与客户X的交易处于谈判阶段的有哪些?”或“展示关于产品Y的最近沟通记录”等查询。
开源框架如LangChain和LlamaIndex可以促进同时使用非结构化和结构化数据的RAG应用程序的开发。LlamaIndex能够自动化构建知识图谱过程中的主要步骤,如实体提取、关系提取和图谱填充。流行的图数据库Neo4j可以用于存储和检索RAG应用中的结构化和非结构化信息。OpenAI与LangChain和Neo4j的功能可以用于从非结构化数据中构建知识图谱。
05、结论
随着技术的不断发展,增强大型语言模型的能力变得愈加重要。通过整合结构化和非结构化数据,我们不仅可以提高LLM的知识更新能力,还能显著改善其在特定领域的表现。检索增强生成(RAG)和知识图谱的结合为组织提供了一个灵活、安全的环境,以更有效地利用其独特数据。这种方法的成功实施,将为未来的人工智能应用开辟新的可能性,让我们对LLM的前景充满期待。
本文转载自公众号Halo咯咯 作者:基咯咯