大模型Embedding模型选择

嵌入模型的作用

嵌入模型不仅能够编码词汇本身的含义,还能捕捉词与词之间、句子与句子之间的关联关系。这意味着在向量空间中,语义相似的词会拥有相似的位置,比如:

  • "queen"和"king"在向量空间中距离相近
  • "man"和"woman"在向量空间中距离相近
  • 搜索"男人"可能会得到"女人"、“男孩”、"丈夫"等语义相近的词

这种语义相似性搜索是基于向量空间中的距离计算,而非简单的关键词匹配,能够更好地理解自然语言的语义关系。
在这里插入图片描述


几乎每一个大模型公司都开发了自己的嵌入模型,并且还在不断迭代。比如

OpenAI的嵌入模型经历了多次迭代:

  1. 2022年版本text-embedding-ada-002:

    • 默认维度为1536
    • 上下文长度8192
    • 不支持直接调整维度,需要通过L2标准化等方法进行降维
  2. 最新版本(text-embedding-3系列)
    text-embedding-3-small:更小更快的模型
    text-embedding-3-large:性能最好的模型

    • 可以控制输出向量的维度
    • text-embedding-3-small默认维度为1536(常用的维度选择:512或256,能显著减少计算量的同时保留足够的语义信息)
    • text-embedding-3-large默认维度为3072(最高维度)
    • 成本更低
    • 支持中文

Embedding如何选择

业界公认批判指标是Huggingface推出的 CMTEB(Massive Text Embedding Benchmark)

该指标体现Embedding模型在分类(Classification)、聚类(Clustering)、对分类(Pair Classification)、重排序(Reranking)、检索(Retrieval)等任务的表现
在这里插入图片描述

中文RAG如何选择适合的Embedding模型

目前约由200个模型,我们需要从中选择适合自己的。可以从以下方法作为参考

  1. 选开源的模型,如果没开源的我们没法使用。查看它的参数如果评估是未知就是没开源
    在这里插入图片描述

  2. 筛选中文版本的,即关注C-MTEB Retrieval指标。排序看看。目前可以筛选出

  3. RAG一般选embeding 维度>512的

  4. 评分高的也不一定效果好,所以我们可以快速用代码测试自己文本,从而比较相似度

  5. 下载前顺便看看该embedding当月的下载量

from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

model_name = 'BAAI/bge-small-zh'

model = SentenceTransformer(model_name)
sentences = [
    "我喜欢吃苹果",
    "我爱吃水果",
    "今天天气很好",
    "明天会下雨",
    "人工智能很有趣",
    "机器学习是AI的分支",
    "猫咪很可爱",
    "小狗很活泼"
]
embeddings = model.encode(sentences)

print(f"✅ Embedding生成完成!")
print(f"📊 向量维度: {embeddings.shape}")
print(f"📝 测试句子数量: {len(sentences)}")

similarity_matrix = cosine_similarity(embeddings)

# 打印相似度矩阵
print("\n📈 句子间相似度矩阵:")
for i, sentence1 in enumerate(sentences):
    for j, sentence2 in enumerate(sentences):
        if i < j:  # 只打印上三角,避免重复
            similarity = similarity_matrix[i][j]
            print(f"'{sentence1}' 和 '{sentence2}': {similarity:.3f}")

大模型中的Embedding大模型处理信息的关键部分,它是大模型自己的语言,能将文字、图像、视频等转换为大模型可理解的形式,处理后再转换为人类能理解的形式,体现了大模型的多模态处理能力 [^1]。 ### 原理 在自然语言处理(NLP)和机器学习中,Embedding是一种将高维数据映射到低维连续空间的技术。它允许将词语、句子或其他类型的数据表示成向量,这些向量捕捉了数据的语义和上下文信息 [^2]。例如在处理文本时,每个单词会被转化为一个特定维度的向量,向量之间的距离可以反映单词之间的语义相似度,如意思相近的单词对应的向量在低维空间中距离较近。 ### 应用 - **多模态处理**:大模型能处理多种类型的数据,如文字、图像、视频等。通过Embedding将不同模态的数据转换为统一的向量表示,实现信息的融合和交互,体现了大模型强大的核心能力 [^1]。 - **自然语言处理任务**:在机器翻译、文本分类、情感分析等任务中,Embedding可以将文本信息转化为向量,便于模型学习和处理语义信息,提高任务的准确性。 ### 技术细节 - **数据表示**:Embedding将原始数据(如单词、图像像素等)映射为向量。在文本处理中,通常会构建一个词汇表,为每个单词分配一个唯一的向量。 - **训练过程**:Embedding的向量值通常是在模型训练过程中自动学习得到的。通过大量的数据和合适的损失函数,模型不断调整向量的值,使得向量能够更好地表示数据的语义和上下文信息。 - **维度选择**:低维连续空间的维度选择是一个关键问题。维度太低可能无法充分表示数据的信息,维度太高则会增加计算复杂度和过拟合的风险。 ```python # 简单示例:使用Python和torch库创建一个简单的Embedding层 import torch import torch.nn as nn # 定义词汇表大小和Embedding维度 vocab_size = 1000 embedding_dim = 50 # 创建Embeddingembedding = nn.Embedding(vocab_size, embedding_dim) # 假设有一个输入的单词索引序列 input_ids = torch.tensor([1, 2, 3, 4], dtype=torch.long) # 获取对应的Embedding向量 embedded = embedding(input_ids) print(embedded) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非常大模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值