动手点关注
干货不迷路
本文旨在让无大模型开发背景的工程师或者技术爱好者无痛理解大语言模型应用开发的理论和主流工具,因此会先从与LLM应用开发相关的基础概念谈起,并不刻意追求极致的严谨和完备,而是从直觉和本质入手,结合笔者调研整理及消化理解,帮助大家能够更容易的理解LLM技术全貌,大家可以基于本文衍生展开,结合自己感兴趣的领域深入研究。 若有不准确或者错误的地方也希望大家能够留言指正。
本文体系完整,内容丰富,由于内容比较多,分多次连载 。
第一部分 基础概念
1.机器学习场景类别
2.机器学习类型(LLM相关)
3.深度学习的兴起
4.基础模型
第二部分 应用挑战
1.问题定义与基本思路
2.基本流程与相关技术
1)Embbeding与Tokenization
2)向量数据库
3)finetune(微调)
4)模型部署与推理
5)prompt
6)编排与集成
7)预训练
第三部分 场景案例
常用参考
2)
向量数据库(VectorDB)
向量是模型世界的沟通语言,不论是文本还是图片,语音,视频都可以将其转化成向量,然后再通过相似的模型算法进行加工处理,这也使得通过一套transformer架构来处理不同模态的问题。 向量数据的典型结构是一个一维数组,其中的元素是数值(通常是浮点数)。 这些数值表示对象或数据点在多维空间中的位置、特征或属性。 向量数据的长度取决于所表示的特征维度。
假设我们有三个水果: 苹果、香蕉和葡萄。 我们想用向量数据表示它们的颜色和大小特征。 我们可以将颜色分为红、绿、蓝三个通道,将大小分为小、中、大三个类别。 因此,我们可以用一个包含 6 个数值的向量表示每个水果的特征。
苹果(红色,中等大小):[1, 0, 0, 0, 1, 0]
香蕉(黄色,大):[0, 1, 0, 0, 0, 1]
葡萄(紫色,小):[0.5, 0, 0.5, 1, 0, 0]
在这个例子中,每个水果都被表示为一个 6 维向量。前三个数值表示颜色信息(红、绿、蓝通道),后三个数值表示大小信息(小、中、大)
知乎
相似性计算,是向量计算中最常见的形式,在文本检索时代,通过倒排索引及tf-idf等算法进行相关性检索。 Lucene 就是其中代 表的开源库实现,在此基础上实现的elasticsearch,solr等搜索引擎产品成为传统检索场景服务的核心基础设施。
向量的距离可以用来衡量两个向量的相似度,常见的有余弦距离,欧式距离和向量内积几种方式。
余弦距离。通过计算两个向量的夹角余弦值来计算相似性。夹角为0时相似度为1,夹角90度时,相似度为0,夹角180时相似度为-1,因此余弦相似度的取值范围为[-1,1]。
欧式距离。 欧式距离全称是 欧几里得距离 ,度量的是空间上两个点之间的连线距离,空间上的点都可以看着是从原点出发的向量。
向量内积。又称数量积,是指接受在 实数 R上的两个 向量 并返回一个实数值标量的二元运算。两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为:a·b=a1b1+a2b2+……+anbn。
与之类似,向量相似性算法
也有faiss,等开源库实现,在其上有milvus,pinecone等向量数据库产品。 通过这些产品能够解决向量存储和计算的问题。
在大模型时代,受限于模型的约束,向量数据库迎来了新的热潮。它被称作大模型的“海马体“,赋予了大模型记忆。在实际的使用中,向量数据库起到如下作用:
- 检索增强(retrieval augmentation)
为了提升大模型的返回质量,又避免大模型的token限制,以及提升计算速度,需要使用向量数据库做初筛,选择相似度高的候选材料,提供给大模型。
- 增加时效性
如前文提到,fine-tune的成本和复杂度高,耗时长,比如chatgpt的模型所用数据是2021年9月,导致之后相关问题得不到准确的答案,为了使得大模型具备更高的实效性,需要借助向量数据库增强,向量数据库可以高频的进行索引更新,从而使得候选数据更为新鲜,从而弥补大模型的信息时效性不足问题。
- 提高可信度和溯源
大模型有一个问题就是可能会“自说自话”编造答案,为了让模型输出更可控,以及找到回答的依据,可以让大模型基于向量数据库检索出来的资料进行回答,从而避免大模型妄想的问题。
- 隐私和权限问题
不是所有的数据都可以用来训练大模型,大模型也无法解决有的人能看,有的人不能看的问题,因此,作为大模型以外的基础设施,特别是对于调用云端大模型服务的模式,将自己的私有知识放在本地是一个很不错的方式。另外,它也能方便实现类似于数据鉴权的需求,对于不同的人,提供给大模型的候选资料不同,从而避免信息泄漏。
- 多轮会话的context存储
大模型没有记忆,导致大模型无法记住历史,可以通过向量数据库保存会话历史及上下文信息,每一次对话时将之前的会话历史或者历史总结提交给大模型,可以间接帮助大模型拥有记忆,避免回答前后无关的问题。更广泛的,基于向量数据库帮助构建智能体,可以作为agent的外部记忆,能够使得大模型能够完成更复杂的任务。
- 天生多模态
统一的向量格式存储,能够处理来 自各种类型的数据源,例如文本、图像、音频、视频等。
面向LLM编程的本质就是通过prompt发指令给大模型,向量数据库的引入主要是受限于token的限制,也就是上下文窗口(context window )的约束。另一方面,大模型也在不断突破,增长趋势明显。
@Josh Tobin
@Josh T obin
最近Claude把上下文窗口直接扩充到100K,大概对应7万5千个单词。一次性可读取300来页的pdf,可以预见未来,context的限制会进一步减少,但从成本和性能等其他角度考虑,向量数据库 还是有充足的发展空间。
参考:https://www.anthropic.com/index/100k-context-windows
当前开发候选的向量数据库很多,大概分为两类:
1)传统数据库通过能力扩展而来,代表是postgresql,elasticsearch,redis等,都在提供向量检索能力的支持。它的好处是简单方便,可以不用引入新的服务依赖,但它并不是完全面向向量检索设计,因此性能,功能层面有一定的缺陷。
PostgreSQL 可通过扩展 pgvector 实现一些简单的向量计算。
Redis 可通过一些扩展模块,如RedisAI和RediSearch,实现一定程度的向量数据处理和计算功能。RedisAI 偏深度学习模型,支持TensorFlow、PyTorch和ONNX运行时。RediSearch 偏全文检索,支持一些基本的文本相似度度量,如TF-IDF和Levenshtein距离等。
Elasticsearch 本身是一个分布式全文搜索和分析引擎,但增加支持了dense_vector数据类型来存储稠密向量。 通过使用内置的向量函数,如cosineSimilarity、dotProduct和l2norm等,可以实现一些基本的向量计算。
2) 面向向量检索甚至面向AI大模型而生的数据库。这里面有openAI御用数据库当红小生PineCone,其定位就是做AI的持久化存储,提供 Cloud 云服务,基于GCP和AWS。也有摸爬滚打多年的代码开源,且可以私有化商用的mil u vs,更有qrant,Weaviate这些新生代。由于向量数据库产品繁多,又十分重要,因此 选型是一个大的问题,下面网上搜集的相关的比较,可以根据实际情况选择。
| 数据库名称 | ||||
| 是否开源 | ||||
| 社区影响力 | ||||
| 编程语言 | ||||
| 核心特性 | ||||
| Pinecone | ||||
| 否 | ||||
| 未知 | ||||
| 向量存储与检索、全托管 | ||||
| weaviate | ||||
| 是 | ||||
| 5.3k star | ||||
| Go | ||||
| 同时支持向量与对象的存储、支持向量检索与结构化过滤、具备主流模式成熟的使用案例。高速、灵活,不仅仅具备向量检索,还会支持推荐、总结等能力 | ||||
| qdrant | ||||
| 是 | ||||
| 6.3k star | ||||
| Rust | ||||
| 向量存储与检索、云原生、分布式、支持过滤、丰富的数据类型、WAL日志写入 | ||||
| milvus | ||||
| 是 | ||||
| 17.7k star | ||||
| Go | ||||
| 极高的检索性能: 万亿矢量数据集的毫秒级搜索非结构化数据的极简管理丰富的API跨平台实时搜索和分析可靠:具有很高的容灾与故障转移能力高度可拓展与弹性支持混合检索统一的Lambda架构社区支持、行业认可 | ||||
| Chroma | ||||
| 是 | ||||
| 4.1k star | ||||
| python | ||||
| 轻量、内存级 | ||||
来自:https://zhuanlan.zhihu.com/p/628148081
@Josh Tobin
benchmark:
https://qdrant.tech/benchmarks/
更多评测:
https://objectbox.i o/vector-database/
https://stablecog.com/blog/the-best-vector-database-for-stablecogs-semantic-search
https://press.ai/best-vector-databases/
综上,企业级比较成熟的选 milvus ,理念更新,使用更简单方便的用 qdrant ,weaviate,vespa,本地LLM应用或者测试验证的用Chroma。
未完待续...
