共计 10451 个字符,预计需要花费 27 分钟才能阅读完成。
编者按:随着大语言模型的广泛应用,如何存储和高效检索这些模型产生的大量向量示意成为一个较为要害的问题。本文深入探讨了向量数据库在晋升语言模型利用性能方面的作用,并介绍了不同类型向量数据库的特点。
本文以简明扼要的形式全面概述了向量数据库的工作机制、利用场景和评估办法,对于在生产环境中利用语言模型的从业者具备重要的参考价值。作者首先论述了向量示意在语言模型中的重要性,以及向量数据库如何通过语义缓存、长期记忆等机制加强语言模型的能力。而后,文章具体介绍了基于图的、基于文档的和键值型三种支流向量数据库,剖析它们各自的利用场景和优缺点。
在生产环境部署语言模型利用时,作者倡议从多个维度评估不同数据库的适用性。文章还提供了向量数据库基准测试和集成的最佳实际,帮忙读者做出正确抉择。
以下是译文,enjoy!
作者 | Stephen Oladele
编译 | 岳扬
图片起源:unsplash[1]
语言模型(Language models)是一种功能强大的人工智能算法,它们可能依据输出的 prompt 生成相似人类编写的文本。语言模型是在大量文本数据上预训练的通用神经网络,在这个过程中学习到了语言中的统计法则和关系(statistical patterns and relationships)。GPT、BERT 和 LLaMA 是由 OpenAI、Cohere 和 Hugging Face 等大语言模型(LLM)提供商开发的支流语言模型。
这些模型在各行各业中都有广泛应用,例如文本生成、聊天机器人、语音助手、内容创立、语言翻译、情感剖析和个性化举荐等畛域。语言模型的利用十分宽泛,并还在一直倒退和改良,为咱们带来了更多新的时机。
01 向量在语言模型利用中的重要性
在人类日常对话中,语境(Context,亦常译作“上下文”)常施展着极为重要的作用,它帮忙人们顺畅地进行交换和了解别人的话语。
语言模型通过将对话编码为一种称为“向量”的数字示意模式,来捕获语意和语义关系,以此利用语境信息。这些向量使得模型可能了解对话呈现的语境,无论是特定的文化背景表白、正在探讨的话题背景,还是其余语境线索。
在机器学习和人工智能中,向量是一个十分重要的角色,次要起因如下:
- 对话式人工智能中的语境理解能力:通过捕获对话中词语的含意和关系,聊天机器人和虚构助理能够生成连贯且合乎语境的回复,进步交互品质。
- 高效的搜寻和举荐:向量通过捕获用户收回的查问的语境,促成语境搜寻和个性化举荐的品质(contextual search and recommendations)。它们使搜索引擎和举荐零碎可能检索内容相干的且合乎语境的后果,进步倡议的准确性和相关性。
- 帮忙测量语义类似度:自然语言解决向量通过测量单词和短语之间的语义类似度,从而实现拓展查问(query expansion)、聚类(clustering)和信息检索(information retrieval)等工作。向量有助于语言模型辨认相干概念,并进步语言模型在了解和生成文本方面的准确性。
图 1:展现查问(query)和嵌入文档(embedded document)之间语义类似度的简化图[2]
- 反对迁徙学习:自然语言解决向量反对迁徙学习,预训练的语言模型为针对特定工作或畛域进行微调奠定了根底。这些向量能够捕获从大规模训练数据中学到的常识和模式,使模型可能泛化并能适应仅有较小数据集的新工作,从而进步性能。
本文将着重介绍向量数据库以及如何在生产环境中对它们进行评估。
02 向量数据库在语言模型利用中的作用
向量数据库是一种专门设计用于存储和高效检索向量示意(vector representations)的存储系统,例如单词嵌入(word embeddings)或文本数据的数字示意(numerical representations of textual data)等向量示意。向量数据库还是存储与单词或短语相关联的向量的仓库,能够依据相似性指标疾速进行查找和比拟操作。
向量数据库使得大规模向量空间的解决更加高效,同时优化了存储、检索和比拟等操作。
图 2. 向量数据库的类型[3]
03 向量数据库的典型特点和次要性能
数据库既能存储结构化数据,也能存储非结构化数据。关系型数据库和文档数据库通常用于存储结构化数据,如个人信息和财务数据等,但它们可能不适用于波及非结构化数据(例如图像、文本、视频和音频)的 ML/AI 利用,因为这些数据的维度和大小都很高。
传统数据库可能会导致信息检索 [4] 呈现提早(delays in information retrieval),因而它们不太适宜以自然语言解决为重点的 AI 利用。相比之下,向量数据库为存储和检索非结构化数据提供了更为无效的解决方案。它们能够高效地解决非结构化数据,并加强人工智能利用的能力。以下是向量数据库的次要性能:
- 高效检索(Efficient retrieval):向量数据库可依据查问(queries)或相似性指标(similarity measures)疾速高效地检索向量示意(vector representations),使语言模型可能疾速地拜访向量嵌入(vector embeddings)。
- 索引和搜寻(Indexing and search):向量数据库提供索引和搜寻性能,可依据具体规范(例如相似性搜寻(similarity search)、最邻近搜寻(nearest neighbor search)或范畴查问(range queries))高效地查找和搜寻向量。
- 可扩展性(Scalability): 向量数据库的设计初衷是解决大规模向量空间,它能够高效地存储和检索数百万甚至数十亿个向量。
- 类似度测量:向量数据库提供测量向量之间类似度或间隔的性能,有助于实现语义类似度比拟、聚类和举荐零碎等工作。
- 反对高维向量:向量数据库能够解决语言模型中常见的高维向量,容许存储和检索简单的向量示意。
向量数据库能够存储天文空间数据(geospatial data)、文本(text)、特色(features)、用户配置文件(user profiles)和与向量相干的元数据的哈希值(hashes as metadata associated with the vectors)。只管向量数据库的设计重点是存储和查问向量数据,而非加密哈希值。
04 向量数据库如何加强语言模型利用能力?
向量数据库可显著加强语言模型利用能力,进步相干的性能指标,例如:
- 语义缓存(semantic caching)
- 长期记忆(long-term memory)
- 高性能架构(architecture)
- 整体性能(overall performance)
4.1 语义缓存
向量数据库善于捕获文本数据之间的语义关系和相似性。向量数据库通过存储文档、单词或短语的向量示意来实现高效的语义缓存[5]。一旦执行查问(query)并取得后果,相应的向量及其语义上下文(semantic context)就能够被缓存。之后如果呈现相似的查问,就能够利用这个语义缓存来减速检索,从而缩短响应工夫和进步查问性能。
4.2 长期记忆
长期记忆(long-term memory)通常能够加强语言模型的性能[6],使其可能在屡次交互或查问中保留信息和上下文。向量数据库的架构,容许存储和检索与历史交互或训练数据相干的向量。这样,语言模型就可能拜访和援用以前的上下文,生成更连贯和与语境更相干的响应。
4.3 高性能架构
向量数据库提供可扩大和分布式的架构[7],能够解决大规模的语言模型利用。它们反对并行处理和分布式存储,使咱们可能高效地解决大量的文本数据。这种架构反对疾速检索和解决向量示意,促成与语言模型的实时或准实时交互。
4.4 整体性能
向量数据库可通过多种形式进步语言模型利用的性能[8]。首先,向量示意(vector representations)能够缩小类似度计算的复杂度,从而更快地检索出语义类似的文档或短语。其次,向量数据库的分布式可扩大架构可确保性能即使在数据集一直扩大的状况下也保持一致。最初,向量数据库的高效索引和检索机制加强了语言模型利用的整体能力和响应速度。
在语言模型利用中应用向量数据库,能够取得更高的性能,特地是在可扩展性和查询处理速度方面。这些改良有助于在语言驱动型利用中实现更精确、更贴近上下文的响应、更好的用户体验和更高的效率。
05 理解不同类型的向量数据库
向量数据库有多种不同的类型,如分布式向量数据库、基于解决的向量数据库(vector databases based on processing)(内存型向量数据库、GPU 减速型向量数据库)或简略的向量搜索引擎。本文重点介绍以下几种:
- 基于图的向量数据库
- 基于文档的向量数据库
- 键值型向量数据库
5.1 基于图的向量数据库
基于图的向量数据库利用图构造来示意和存储向量。图中的节点或边与向量示意(vector representations)相关联。您能够应用最邻近搜寻[9]、Personalized PageRank、图聚类等图算法来执行相似性搜寻和遍历操作(traversal operations)。
只管基于图的向量数据库善于捕获关系(relationships),但在某些状况下,某些关系可能不足外在意义或相关性。在这种类型的数据库中,节点之间的关系能够基于任意的连贯或关联。这阐明基于图的向量数据库中并非所有的关系都有意义。
因而,须要正确地构建和设计数据库,以维系实体之间有意义的关系。这样能够更容易地查询数据库,以便更好地了解这些关系。
图 3. 一个简单的图(graph)示意图,该图(graph)为某一个特定主题的节点和关系[10]
利用场景:
基于图的向量数据库十分实用于举荐零碎、基于图的信息检索、网络映射(network mapping)和欺诈检测等畛域。
(译者注:网络映射示意通过绘制网络拓扑图来形容和剖析计算机网络中的设施和连贯。通过进行网络映射,管理员能够更好地理解网络拓扑构造,辨认潜在的安全漏洞和瓶颈,并进行网络布局和优化。此外,网络映射还能够用于网络故障排除和监控。)
5.2 基于文档的向量数据库
这种数据库存储相应文档或文本的向量示意,从而实现基于文档级语义的高效索引和检索。
能够利用词袋(TF-IDF)[11]、潜在狄利克雷调配(LDA)[12]、n-gram[13]、skip-thought vectors[14]和 paragraph vectors(Doc2Vec)[15]等常见技术来生成文档嵌入。
(译者注:“skip-thought vectors”办法来自论文《Skip-Thought Vectors》,文章发表于 2015 年的 NIPS,作者来自于多伦多大学。这篇论文提出了一种训练句示意的办法,在 Bert 呈现之前,这篇论文的办法是取得高质量句向量的罕用办法。在这篇论文发表之前,取得句向量的形式次要有两种,一种是基于词袋模型的句示意,比方通过 TF-IDF 失去词的权重,而后对句子中的词对应的词向量加权求和失去句向量;另一种是基于神经网络的句示意,常见的有基于语言模型学习失去句向量,或者是基于复述句匹配的句示意。
Paragraph Vector(段落向量)是一种用于生成文本嵌入的算法,也称为 Doc2Vec。它是 Word2Vec 算法的扩大,能够为整个段落或文档生成固定长度的向量示意。与传统的基于词袋模型的办法不同,Paragraph Vector 能够思考上下文信息和文档构造,从而更好地捕获文档的语义信息。在自然语言解决中,Paragraph Vector 被广泛应用于文本分类、情感剖析、信息检索等工作中。在文档数据库中,Paragraph Vector 能够用于生成文档嵌入,从而实现高效的文档检索和相似性匹配。)
将文档嵌入(document embeddings)输出到数据库后,它们会被索引(indexing),而后以结构化的形式进行组织和存储。这种索引使得基于相似性或相关性的文档检索变得高效。在索引期间,数据库会优化存储和检索以进步性能。
为了加强大型语言应用程序的用户体验,能够设计一种充分利用数据库性能的零碎架构。当提交查找相干内容的 prompt 时,该 prompt 会被转化为嵌入并用于查问文档,以辨认相似的单词或关系。这能够更容易地检索相干信息, 找到有用内容,例如修复特定工具或解决难题。
图 4. 演示大型语言应用程序如何利用基于文档的向量数据库为用户查问相干内容
利用场景:
基于文档的向量数据库在文档相似性搜寻(document similarity search)、文档聚类、主题建模和内容举荐等工作中被广泛应用。
5.3 键值型向量数据库
键值型向量数据库将数据与惟一的键(能够是数字或数组)进行映射,以便依据键(keys)疾速查找和检索向量。这些键能够是与文档(documents)、实体(entities)或其余数据点(data points)相干的标识符。
在须要依据键间接拜访特定向量时,这种存储形式十分有用。就构造而言,它们是非关系型数据库,非常灵活。存储在此数据库中的值能够是字符串、数字、二进制对象或 JSON 文档,具体取决于理论状况。
键值型数据库优先思考速度和效率,并针对高性能操作(如疾速数据插入(data insertion)、疾速检索(retrieval)和疾速更新(update))进行了优化。键值型向量数据库通常提供低提早的数据拜访,因而其实用于须要实时处理和疾速响应的应用场景。
图 5. 键值型向量数据库存储形式的简略示意图
利用场景:
键值型向量数据库可用于缓存零碎、近似最近邻搜寻(approximate nearest neighbor searches)以及存储和检索单词嵌入等利用中。
06 比拟各种向量数据库
上面对向量数据库进行的比拟仅供参考, 因为向量数据库的抉择取决于具体的应用场景。为了抉择适合的向量数据库并实现最佳性能,咱们最好参考以下比照。并依据理论状况进行抉择:
基于图的向量数据库
- 长处:
- 基于图的高效相似性搜寻,能够捕获嵌入之间的简单关系,十分适和举荐零碎和图剖析工作(graph analysis tasks)。
- 能够计算多个维度的关系。
毛病
- 保护图构造须要额定的性能开销,可能还须要业余的图形学算法和技术常识。
- 没有规范的查询语言(query languages),语法取决于所抉择的平台。
基于文档的向量数据库
- 长处:
- 能够将文档的语义信息轻松整合到数据库,实现文档的类似度计算、聚类和举荐等工作。
- 一旦创立文档,保护简略。可能只须要定期更新文档。
毛病:
- 可能无奈捕获细粒度的单词级关系(word-level relationships);仅限于文档级操作。
- 在执行模式一致性(schema consistency)、文档间一致性(cross-document consistency)方面存在限度,可能须要手动查看或利用级查看(application-level checks)。
键值型向量数据库
- 长处:
- 基于键的向量查找和检索简略高效,实用于各种利用。
- 高性能、速度快,可疾速检索信息。
毛病:
- 仅限于基于键的检索,可能无奈提供高级相似性搜寻性能。
- 不适用于简单的查问和数据关系(queries and data relationships)。
下表阐明了本文所介绍的各种向量数据库的优缺点。
依据具体的利用场景和需要抉择适合类型的向量数据库十分重要。基于图的向量数据库非常适合解决与图相干的工作,基于文档的向量数据库在文档级操作方面表现出色,而键值型向量数据库则具备很强的适应性和灵活性,适宜基于键的高效检索。因而,在抉择向量数据库时,须要依据理论需要和具体应用场景来进行评估和抉择。
07 在生产环境中评估向量数据库
认真评估数据库性能指标,能够帮忙咱们做出较为理智的决策,抉择满足生产环境特定需要的数据库类型,从而进步语言模型应用程序的成功率。在评估用于生产环境的向量数据库时,有以下几个重要因素须要思考:
- 提早和吞吐量(Latency and throughput):须要测量响应工夫(提早)和查询处理速率(吞吐量),以评估向量检索操作的速度和效率。
- 可扩展性和数据量(Scalability and data volume):须要评估向量数据库在解决一直减少的数据量和并发用户查问时,性能是否会显著降落或资源利用率是否会明显提高。
- 查问能力(Query capabilities):须要评估向量数据库执行各种查问操作的能力,例如准确匹配、范畴查问、最邻近搜寻和相似性搜寻,以确保其满足语言模型应用程序的要求。
- 与现有基础设施的集成(Integration with existing infrastructure):须要思考与生产环境中应用的现有零碎、编程语言和开发框架集成和兼容的难易水平。
08 如何对向量数据库进行基准测试
向量数据库的基准测试十分重要,包含设计具备代表性的评估计划,并收集相干的性能指标,以评估其是否适宜语言模型利用。通过进行零碎的基准测试,能够明智地抉择和优化所选的向量数据库。那么,如何进行基准测试呢?
- 首先,须要设计适当的评估场景。定义具备代表性的工作负载(workloads)和应用案例(use cases),以模仿语言模型应用程序的理论利用场景。这个过程包含确定数据集的类型和大小、查问(queries)的性质以及预期的并发级别。
- 其次,须要收集相干的性能指标。在评估场景下执行基准测试,并收集性能指标,例如查问提早、吞吐量、内存应用、CPU 利用率和存储要求等。这些指标应反映语言模型利用的工作负载和可扩展性要求。
以下是两个钻研案例,能够作为参考:
8.1 钻研案例 1:评估用于举荐零碎的基于图的向量数据库
在不同数据量和并发级别下,比拟基于图的向量数据库进行相似性搜寻操作的提早和吞吐量。同时,逐渐减少数据集大小,以评估基于图的向量数据库的可扩展性,并评估其对查问性能的影响。最初,评估其反对基于语义类似度的个性化举荐的有效性。
图 6. 基于图的举荐零碎[16]
8.2 钻研案例 2:评估用于文本聚类的基于文档的向量数据库
次要测试其基于向量示意对类似文档进行聚类的能力。同时,须要通过评估数据库在文档数量减少和聚类规模变动时的性能,还须要评估数据库的可扩展性。此外,须要将基于文档的向量数据库的查问能力(例如文档相似性搜寻和基于主题的检索)与预约义的基准进行比拟。
这些实在案例包含设置适当的评估场景、收集性能指标和剖析后果,以确定向量数据库对具体语言模型利用的适用性和性能。
图 7 文本聚类[17]
09 集成向量数据库的最佳实际
集成向量数据库时,应遵循最佳实际,以确保顺利安稳的进行集成,并最大限度的进步性能。这个过程可能包含设计可扩大的架构和数据模型、优化索引和查问策略,以及思考与现有基础架构和工具的兼容性。
以下是针对应用场景须要思考的一些事项:
9.1 为向量数据库集成筹备数据
- 清理和预处理数据,以去除可能对向量示意产生负面影响的噪声、不统一数据和无关信息。
- 利用文本归一化技术[18],如对立转化为小写、去除标点符号和解决特殊字符,以确保向量示意的一致性。
- 确定如何解决向量数据库中不存在的单词,例如应用 fallback embeddings 或应用 subword tokenization 等技术。(译者注:fallback embeddings 是指在向量数据库中找不到某个单词的向量示意时,应用备用的向量示意来代替。subword tokenization 是一种文本预处理技术,用于将单词分解成更小的单元,称为子词(subwords)。这种技术通常用于解决未在词汇表中呈现的单词,以便在向量数据库中为这些单词生成向量示意。subword tokenization 的过程是将单词分解成子词,而后将每个子词映射到其对应的向量示意,最终将所有子词的向量示意组合成单词的向量示意。这种技术能够进步向量数据库的覆盖率,从而进步检索的准确性。常见的 subword tokenization 算法包含 Byte Pair Encoding (BPE)和 WordPiece 等。)
9.2 为具体利用场景抉择适合的向量数据库
- 思考可扩展性、检索速度、内存应用等因素,以及对语义类似度或近似最近邻查找等业余操作的反对。
- 比拟不同的向量数据库系统,思考其性能、性能、社区反对水平和集成能力。
- 确保所选的向量数据库与技术栈保持一致,并可能与应用程序应用的编程语言和开发框架集成。
9.3 优化向量数据库性能
- 摸索向量数据库提供的不同索引技术,以优化检索效率(如分层索引 [19]、基于图的索引[20] 或部分敏感哈希(LSH)[21])。
- 利用降维技术,如主成分剖析(PCA)或 t -SNE,以缩小向量的维数,同时保留重要信息,从而进步性能。
- 微调向量数据库的参数,以均衡索引速度、存储要求和检索准确性三者的性能。
- 利用批处理技术优化向量数据的插入或更新,缩小开销并进步整体性能。
9.4 确保可扩展性和可靠性
- 配置向量数据库,调配工作负载在多台机器或节点上,实现可扩展性和容错性。
- 施行负载平衡,将查问或申请平均分配到向量数据库的多个实例中,确保最佳性能。
- 设置向量数据库的复制和定期备份,确保数据的持久性、可用性和在故障恢复能力。
9.5 监控和保护向量数据库
- 继续监测向量数据库的性能指标,如查问提早、吞吐量和资源利用率,以辨认瓶颈并优化性能。
- 施行解决数据更新或更改(data updates or changes)机制,如从新索引(reindexing)或增量更新(incremental updates),以放弃向量数据库继续更新。
- 执行日常保护工作,如数据库优化、索引重建和定期清理未用的数据,以确保最佳性能和稳定性。
- 通过评估上游工作的性能或应用评估数据集,来辨认未被发现的问题,并进行必要的改良,从而定期监测向量示意的品质和一致性,
通过这些最佳实际,能够无效地将向量数据库集成到流水线中,以精确高效地实现向量检索,并最大化 NLP 利用的性能和可扩展性。
10 结语
总而言之,理解和评估向量数据库对于晋升生产环境中的语言模型利用的性能十分重要。通过思考提早、可扩展性、查问能力以及与现有基础架构的集成等因素,咱们能够在抉择哪种向量数据库和向量数据库优化计划时做出理智的决策。
此外,通过对这些数据库进行基准测试并遵循最佳实际进行集成,能够进一步晋升它们在 LLM 利用中的性能和适用性,开释其全副后劲,并在您感兴趣的畛域获得有影响力的成绩。
END
参考资料
1.https://unsplash.com/photos/TIUyoNGM0no
2.https://huggingface.co/learn/nlp-course/chapter5/6?fw=tf
3.https://www.pinecone.io/learn/vector-database-old/
4.https://www.geeksforgeeks.org/what-is-information-retrieval/
5.https://zilliz.com/glossary/semantic-cache
6.https://thenewstack.io/vector-databases-long-term-memory-for-…
7.https://milvus.io/blog/deep-dive-1-milvus-architecture-overvi…
8.https://thenewstack.io/how-large-language-models-fuel-the-ris…
9.https://www.cs.cmu.edu/~15451-s19/lectures/lec22-nearest-neig…
10.https://neo4j.com/blog/buzzfeed-trumpworld-dataset-neo4j/
11.https://machinelearningmastery.com/gentle-introduction-bag-wo…
12.https://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf
13.https://www.analyticsvidhya.com/blog/2021/09/what-are-n-grams…,(Natural+Language+Processing)+tasks.
14.https://arxiv.org/abs/1506.06726
15.https://medium.com/wisio/a-gentle-introduction-to-doc2vec-db3…
16.https://www.nebula-graph.io/posts/use-cases-of-graph-database…
17.https://www.codeproject.com/Articles/439890/Text-Documents-Cl…
18.https://towardsdatascience.com/text-normalization-for-natural…
19.https://www.integrate.io/glossary/what-is-hierarchical-indexing/
20.https://community.neo4j.com/t/why-graph-indexing-is-important…
21.https://www.pinecone.io/learn/locality-sensitive-hashing/
本文经原作者受权,由 Baihai IDP 编译。如需转载译文,请分割获取受权。
原文链接:
https://mlops.community/empowering-language-model-application…