|
我们之前讲的搭建本地知识库,基本都是使用检索增强生成(RAG)技术来搭建,Embedding模型则是RAG的核心,同时也是大模型落地必不可少的技术。那么今天我们就来聊聊Embedding向量模型:Embedding模型是一种将离散数据(如文本、图像、用户行为等)映射到连续向量空间的技术。其核心思想是通过低维稠密向量(Embedding)捕捉数据的内在特征和语义关系。用通俗易懂一些的说法就是Embedding给数据穿上了一件“数字外衣”,把离散数据(如文本、图像、用户行为等)转化成一组数字,即向量来表示,目的是让机器更好的理解和处理。或者说,Embedding模型就是一个“翻译官”,能把文字、图片、用户行为这些东西,变成一串计算机能看懂的数字。 比如:它能知道“猫”和“狗”都是宠物,所以它们的数字串很像;但“猫”和“西瓜”差别大,数字串就离得远。 干啥用?比如让手机听懂你说的话,或者让淘宝猜你喜欢什么商品。 在本地知识库搭建中,我们关注的重点是文本Embedding,它能把文本信息变成计算机更容易理解和处理的向量模型。Embedding模型的原理就像“猜词游戏”: 比如你和朋友聊天,朋友说:“我今天买了一只__,它会喵喵叫”,你肯定猜是“猫”。Embedding模型就是通过大量这样的句子,学会哪些词经常一起出现,然后把它们变成相似的数字串。 方法举例: Word2Vec:像小学生背单词,记“苹果”和“水果”是相关的。 BERT(比如ChatGPT的基础):像学霸,联系上下文猜词,比如“银行”在“存钱”和“河边”两种句子中意思不同。 常见的向量化方法包括: | 1、TF-IDF:基于词频统计。 2、LSA:对词-文档矩阵进行奇异值分解(SVD)。 | | 1、Word2Vec:Skip-Gram/CBOW(适合通用语义)。 2、FastText:引入子词(subword)信息,解决未登录词问题。 3、GloVe:结合全局词共现统计与局部上下文窗口。 | | BERT:动态生成基于上下文的向量(如“bank”在“河岸”和“银行”中不同)。 | | Node2Vec:将图节点映射为向量,保留网络结构特征。 2、 |
非文本领域:如推荐系统中使用矩阵分解(MF)生成用户/物品向量。 Embedding 模型在本地知识库中的作用,可以理解为用“数字密码”将本地文件(如文档、笔记、数据库)转化为计算机能理解的形式,从而快速实现搜索、问答、分类等功能。把本地知识库中的文档(如PDF、Word、Excel、笔记)转化为向量,方便后续搜索。 | 将长文档拆分成小段落(如每段200-500字),避免信息过载。 示例:一篇10页的“咖啡研究报告” → 拆成30个小段落。 | | |
| 用轻量级模型(如text2vec、m3e-base),适合本地运行。 | | 用领域微调模型(如法律用Law-Embedding,医学用BioBERT) | 对每个文本段落调用Embedding模型,生成对应的向量(一串数字)。#伪代码:用text2vec生成向量fromtext2vecimportSentenceModelmodel=SentenceModel("shibing624/text2vec-base-chinese")text="咖啡因可以提神,但过量会导致心悸。"vector=model.encode(text)#输出示例:[0.3,-0.2,0.8,...] | | | 轻量级:FAISS(适合小数据,快速检索)。 大规模:Milvus、Qdrant(支持百万级数据)。 | | |
接受用户输入 用户输入可以是文字、语音转文字,甚至图片(需先用多模态模型转为文本)。 示例输入: 文字:“提神饮料有哪些?” 语音:“帮我找关于咖啡的文章。” 输入与处理 纠错:修正错别字(如“提神钦料” → “提神饮料”) 精简:提取关键信息(如“请告诉我如何快速提神?” → “快速提神方法”)。 生成用户输入向量 使用相同的Embedding模型,将用户输入转为向量。 代码示例: user_query="提神饮料有哪些?"query_vector=model.encode(user_query)#生成向量,如[0.25,-0.3,0.75,...] 相似度计算与匹配 在向量数据库中,快速找到与用户向量最接近的本地数据向量。 算法: 余弦相似度(最常用,计算方向相似性)。 欧氏距离(计算向量绝对距离)。 工具示例(使用FAISS): #伪代码:FAISS搜索相似向量distances,indices=index.search(query_vector,k=5)#找最接近的5个结果foridxinindices:print("匹配内容:",原文库[idx])返回结果 根据匹配的向量,返回对应的原始文本或摘要。 优化技巧: 多路召回:同时匹配多个相似段落,提升覆盖率。 重排序:用更精细的模型(如交叉编码器)对结果二次排序。 用户输入→向量化→搜索向量库→匹配最相似的本地数据→返回结果↑↑同一模型同一向量空间 一句话总结 Embedding模型在本地知识库的用法,就是“两步走”: a.把本地文件变成数字向量(建库)。 b.把用户问题也变成数字向量(搜索)。 两者在“数字世界”中比对,就能像人一样理解语义,实现精准问答和搜索! 在RAG(Retrieval-Augmented Generation)应用中,选择合适的Embedding模型至关重要。选择时需要考虑一下因素: 首先,需要明确RAG系统将处理哪种类型的数据,是文本、图像还是多模态数据。不同的数据类型可能需要不同的Embedding模型。 例如,对于文本数据,你可以参考HuggingFace的MTEB(Massive Text Embedding Benchmark)排行榜来选择适合的模型;对于多模态需求的,如图文检索等,可以选择CLIP、ViLBERT。 其次,可以根据任务是通用还是特定领域,选择合适的模型。如果任务涉及通用知识,可以选择通用的Embedding模型;如果任务涉及特定领域(如法律、医疗、教育、金融等),则需要选择更适合该领域的模型。 如果系统需要支持多种语言,可以选择支持多语言的Embedding模型,如BAAI/bge-M3、bce_embedding(中英)等。如果知识库中主要包含的是中文数据,可以选择如iic/nlp_gte_sentence-embedding_chinese-base等模型。 查看MTEB排行榜等基准测试框架来评估不同模型的性能。这些排行榜覆盖了多种语言和任务类型,可以帮助你找到在特定任务上表现最佳的模型。同时,考虑模型的规模和资源限制,较大的模型可能提供更高的性能,但也会增加计算成本和内存需求。 推荐一些表现优秀的Embedding模型: 文本数据:参考HuggingFace的MTEB排行榜或国内的魔搭社区排行榜。 多语言支持:选择如BAAI/bge-M3、bce_embedding(中英)等模型。 中文数据:选择如iic/nlp_gte_sentence-embedding_chinese-base等模型。
Embedding模型是连接符号数据与数值计算的桥梁,其选择需结合实际任务需求和数据特点。随着预训练模型的发展,动态、多模态的Embedding正成为趋势。 |