Embedding与向量数据库

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 库,如果没有安装的童鞋执行如下进行安装

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、

示例代码

# 本脚本演示如何使用Gensim库进行Word2Vec词向量训练与相似度计算
# 包含:语料准备、模型训练、词向量输出与词语相似度计算

from gensim.models import Word2Vec  # 导入Word2Vec模型类

# 1. 语料准备(已分词)
sentences = [["猫", "吃", "鱼"], ["狗", "啃", "骨头"]]  # 两个简单的中文句子,已分词

# 2. 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=3, window=2, min_count=1)  # 训练Word2Vec模型,向量维度为3,窗口大小为2,最小词频为1

# 3. 输出词向量
print(model.wv["猫"])  # 输出“猫”对应的词向量(示例输出如[-0.1, 0.8, 0.2])

# 4. 计算词语相似度
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 代码示例

from sentence_transformers import SentenceTransformer, util

# 加载预训练模型
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 定义句子
sentences = [
    "早上好,你吃饭了吗",  # 句子A
    "早上好,我吃饭了"    # 句子B
]

# 生成嵌入向量
embeddings = model.encode(sentences)

# 计算余弦相似度
cosine_sim = util.pytorch_cos_sim(embeddings[0], embeddings[1])

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中的主要作用和应用方式

  1. 捕捉局部上下文与一词多义(Polysemy):

    • 问题: 同一个词在不同上下文中可能有完全不同的含义(例如,“苹果”在“吃苹果”和“苹果手机”中意思不同)。单纯的词Embedding(每个词一个固定向量)无法区分这种差异。

    • N-gram解决方案: 使用N-gram(尤其是Bi-gram, Tri-gram)作为构建Embedding的基本单元或特征。例如,在“吃苹果”中,“吃苹果”这个bi-gram会有一个特定的表示;在“苹果手机”中,“苹果手机”这个bi-gram会有另一个表示。这样,同一个词“苹果”在不同的N-gram组合中会获得不同的上下文感知的向量表示(间接地),从而更好地捕捉一词多义。

  2. 增强对未登录词/稀有词的处理(OOV & Rare Words):

    • 问题: 在大型语料库中,总会出现一些在训练集中从未出现过的词(Out-Of-Vocabulary, OOV)或者出现频率极低的词(Rare Words)。基于词的模型无法为这些词生成有意义的向量(通常映射到统一的向量)。

    • N-gram解决方案(子词Embedding): 这是N-gram在Embedding中最成功的应用之一(如fastText, Byte Pair Encoding)。核心思想是:

      • 一个词由更小的单元(字符N-gram)组成。

      • 训练时,不是直接为整个词学习一个向量,而是为词中所有可能的字符N-gram学习向量

      • 一个词的最终Embedding是其所有组成字符N-gram向量的求和或平均

      • 优势: 即使一个词从未在训练集中出现过,只要它的组成字符N-gram在训练集中出现过,就能通过组合这些N-gram的向量来生成一个相对合理的词向量。这对于处理拼写错误、派生词、复合词以及形态丰富的语言(如德语、土耳其语)特别有效。

  3. 提供更细粒度的语义信息:

    • N-gram(尤其是较小的n)可以捕捉词内部的形态结构(如前缀、后缀、词根)和词之间的紧密搭配关系(如固定短语“纽约”、“机器学习”)。这些信息对于理解词义和短语含义至关重要,是单纯词级Embedding可能忽略的。

  4. 作为特征输入:

    • 在一些模型中,显式的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左右的快速响应

你可能感兴趣的:(大模型应用开发基础,人工智能,embedding,数据库)