开启左侧

Embedding与向量数据库

[复制链接]
admin 发表于 2025-9-7 23:04:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
1.Embedding  是什么

Embedding Model 是一种机器学习模型,它的核心任务是将离散的、高维的符号(如单词、句子、图片、用户、商品等)转换成连续的、低维的向量(称为“嵌入”或“向量表示”),并且这个向量能有效地捕捉原始符号的语义、关系或特征。
        1.1 通俗理解
            Embedding Model是让计算机“理解”世界的核心工具,把“文字、图片、音频”等信息变成一串有意义的数字我们称之为“向量” 。
        类比:假设用3个数字描述水果:
    苹果 → [0.9, 0.1, 0.3]
    香蕉 → [0.8, 0.5, 0.0]
    橙子 → [0.7, 0.2, 0.4]
    数字越接近 = 特征越相似(如苹果和橙子的三组数字都很接近,因为都是圆形水果)
    1.2 代码理解

    这里我们使用Python 中 Gensim 库,如果没有安装的童鞋执行如下进行安装
  1. pip install gensim -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码
简单介绍:Gensim 是一个专注于非结构化文本处理的 Python 库,主要用于主题建模、文档相似度和词向量训练。可通过如下链接获取资料
gensim库学习:初识:Python库gensim-CSDN博客
   官网: https://radimrehurek.com/gensim/
   GitHub: https://github.com/RaRe-Technologies/gensim、
示例代码
  1. # 本脚本演示如何使用Gensim库进行Word2Vec词向量训练与相似度计算
  2. # 包含:语料准备、模型训练、词向量输出与词语相似度计算
  3. from gensim.models import Word2Vec  # 导入Word2Vec模型类
  4. # 1. 语料准备(已分词)
  5. sentences = [["猫", "吃", "鱼"], ["狗", "啃", "骨头"]]  # 两个简单的中文句子,已分词
  6. # 2. 训练Word2Vec模型
  7. model = Word2Vec(sentences, vector_size=3, window=2, min_count=1)  # 训练Word2Vec模型,向量维度为3,窗口大小为2,最小词频为1
  8. # 3. 输出词向量
  9. print(model.wv["猫"])  # 输出“猫”对应的词向量(示例输出如[-0.1, 0.8, 0.2])
  10. # 4. 计算词语相似度
  11. print(model.wv.similarity("猫", "狗"))  # 计算“猫”和“狗”的词向量余弦相似度
复制代码
2.Embedding如何判断相似值

在大模型中判断两个句子是否相似,主要通过以下步骤实现
相似度判断流程:
2.1 文本向量化(Embedding)

    模型将每个句子转换为向量化数字
     例如:
     句子A: 早上好,你吃饭了吗
     句子B: 早上好,我吃饭了
      向量化
     句子A → [0.23, -0.45, 0.12, ..., 0.78]
     句子B → [0.25, -0.42, 0.15, ..., 0.75]
   2.2.余弦相似度计算

   将向量化后的数值进行余弦计算
     计算两个向量夹角的余弦值
      公式:cos(θ) = (A·B) / (||A|| × ||B||)
       其中:
      A·B 是向量点积
      ||A|| 和 ||B|| 是向量模长
    2.3.相似度评估标识

看最后计算出来的值接近哪个范围进行判断
      余弦值范围:[-1, 1]
     1:完全相同(向量方向完全一致)
     0:无关(向量正交)
    -1:完全相反
    2.4 代码示例
  1. from sentence_transformers import SentenceTransformer, util
  2. # 加载预训练模型
  3. model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
  4. # 定义句子
  5. sentences = [
  6.     "早上好,你吃饭了吗",  # 句子A
  7.     "早上好,我吃饭了"    # 句子B
  8. ]
  9. # 生成嵌入向量
  10. embeddings = model.encode(sentences)
  11. # 计算余弦相似度
  12. cosine_sim = util.pytorch_cos_sim(embeddings[0], embeddings[1])
  13. print(f"余弦相似度: {cosine_sim.item():.4f}")  # 输出: 0.9263
复制代码
3.Embedding的N-Gram(N元语法)

           在Embedding技术中,N元语法(N-gram)的核心作用是引入局部上下文信息,以增强词或子词表示的语义丰富性、区分性和鲁棒性。 它主要用于解决单纯基于词(word)的Embedding(如经典的Word2Vec)的一些局限性。
     3.1什么是N-Gram

      N-Gram 是自然语言处理(NLP)中的基础概念,指文本中连续的 N 个项(item)组成的序列。这里的"项"可以是:
    字符(character)
    音节(syllable)
    单词(word)
    或其他语言单位
N-Gram 类型详解
类型公式示例(文本:"今天天气好")
1-gram$P(w_i)$今, 天, 天, 气, 好
2-gram$P(w_i|w_{i-1})$今天, 天天, 天气, 气好
3-gram$P(w_i|w_{i-2},w_{i-1})$今天天, 天天, 天气, 气好
4-gram$P(w_i|w_{i-3}...w_{i-1})$今天天气, 天天, 天气, 气好
3.2N-gram在Embedding中的主要作用和应用方式

    捕捉局部上下文与一词多义(Polysemy):
      问题: 同一个词在不同上下文中可能有完全不同的含义(例如,“苹果”在“吃苹果”和“苹果手机”中意思不同)。单纯的词Embedding(每个词一个固定向量)无法区分这种差异。
      N-gram解决方案: 使用N-gram(尤其是Bi-gram, Tri-gram)作为构建Embedding的基本单元或特征。例如,在“吃苹果”中,“吃苹果”这个bi-gram会有一个特定的表示;在“苹果手机”中,“苹果手机”这个bi-gram会有另一个表示。这样,同一个词“苹果”在不同的N-gram组合中会获得不同的上下文感知的向量表示(间接地),从而更好地捕捉一词多义。
    增强对未登录词/稀有词的处理(OOV & Rare Words):
      问题: 在大型语料库中,总会出现一些在训练集中从未出现过的词(Out-Of-Vocabulary, OOV)或者出现频率极低的词(Rare Words)。基于词的模型无法为这些词生成有意义的向量(通常映射到统一的<UNK>向量)。
      N-gram解决方案(子词Embedding): 这是N-gram在Embedding中最成功的应用之一(如fastText, Byte Pair Encoding)。核心思想是:
        一个词由更小的单元(字符N-gram)组成。
        训练时,不是直接为整个词学习一个向量,而是为词中所有可能的字符N-gram学习向量
        一个词的最终Embedding是其所有组成字符N-gram向量的求和或平均
        优势: 即使一个词从未在训练集中出现过,只要它的组成字符N-gram在训练集中出现过,就能通过组合这些N-gram的向量来生成一个相对合理的词向量。这对于处理拼写错误、派生词、复合词以及形态丰富的语言(如德语、土耳其语)特别有效。

    提供更细粒度的语义信息:
      N-gram(尤其是较小的n)可以捕捉词内部的形态结构(如前缀、后缀、词根)和词之间的紧密搭配关系(如固定短语“纽约”、“机器学习”)。这些信息对于理解词义和短语含义至关重要,是单纯词级Embedding可能忽略的。
    作为特征输入:
      在一些模型中,显式的N-gram特征(如Bi-gram, Tri-gram)可以直接作为额外的特征,与词Embedding拼接(concatenate)在一起,输入到下游任务(如文本分类、序列标注)的模型中。这为模型提供了更直接的局部上下文线索。

4.Embedding的使用场景

    自然语言处理: 将单词或句子转换成向量表示,用于文本分类,机器翻译,情感分析等任务。推荐系统:将用户和产品映射成向量表示,从而能够更好地理解用户的喜好和匹配物品。图像处理:将图像转换成向量表示,用于图像分类,对象检测等任务。
5.向量数据库

  5.1什么是向量数据库  

  向量数据库(Vector Database) 是专为存储、索引和检索高维向量(例如 Embedding 生成的语义向量)而设计的数据库。它的核心作用是解决传统数据库难以高效处理的 “相似性搜索” 问题。
  本质:向量数据库是AI时代的“相似性搜索引擎”,让机器理解的数据(向量)变得可高效检索,是大模型应用的关键基础设施。
常见的向量数据库:FALSS、Milvus、Pinecone
    Faiss:Facebook开发的高性能库,支持十亿级数据毫秒级响应,适合推荐系统场景Milvus:开源分布式数据库,具备强大的横向扩展能力Pinecone:云原生托管服务,提供即用型向量存储解决方案
5.2 工作原理

输入数据 → 通过模型生成 Embedding 向量 → 存入向量数据库 → 用户输入查询 → 查询被向量化 → 在数据库中搜索相似向量 → 返回相似结果
5.3 与传统数据库对比

能力传统数据库(SQL/NoSQL)向量数据库
数据类型结构化数据(行/文档)如MySQL存储Excel格式数据高维非结构化特征向量
核心查询方式精确匹配(SQL/条件)相似度搜索(ANN)
适用场景交易、统计分析语义理解、内容推荐
数据关联逻辑基于键值/关系基于向量空间距离
5.4 数据库选型

    开源与商业选择:数据库开发初期就需要确定使用开源还是商业产品,常见开源方案包括Milwaukee、Face和MySQL等结构化数据库结构化数据库特点:MySQL等传统数据库适合处理结构化数据,通过SQL语句进行精确查询
2)传统数据库检索
    检索特性:传统数据库只能检索确定信息,例如通过工号精确查找员工信息应用场景:适用于已知关键字段的精确匹配场景,如故障代码查询
3)向量数据库特点
    语义检索:与传统数据库不同,向量数据库检索语义上相似的内容而非精确匹配召回机制:可以返回多个相似结果作为背景补充,例如处理"设备出现裂痕"这类模糊问题时性能优势:相比SQL的LIKE模糊查询,向量数据库在十亿级数据量下仍能保持300ms左右的快速响应
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子147

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )