当前位置: 首页 > ds >正文

大模型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模型

以下是使用OpenAI的嵌入模型的基本步骤:

import openai
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity# 1. 初始化OpenAI客户端
client = openai.OpenAI(base_url="[中间商URL]",  # 如果直连OpenAI官网则不需要此参数api_key="[你的API密钥]"
)# 2. 获取词语的嵌入向量
def get_embedding(text, model="text-embedding-3-large"):response = client.embeddings.create(model=model,input=text)return response.data[0].embedding# 3. 获取多个词的嵌入向量
words = ["king", "queen", "man", "woman", "boy", "husband", "男人", "女人"]
embeddings = {}for word in words:embeddings[word] = get_embedding(word)print(f"获取'{word}'的向量完成")# 4. 计算向量之间的相似度
def calculate_similarity(word1, word2):vec1 = np.array([embeddings[word1]])vec2 = np.array([embeddings[word2]])similarity = cosine_similarity(vec1, vec2)[0][0]return similarity# 5. 展示相似度示例
print("\n向量相似度比较:")
print(f"'king'和'queen'的相似度: {calculate_similarity('king', 'queen'):.4f}")
print(f"'man'和'woman'的相似度: {calculate_similarity('man', 'woman'):.4f}")
print(f"'男人'和'女人'的相似度: {calculate_similarity('男人', '女人'):.4f}")
print(f"'king'和'man'的相似度: {calculate_similarity('king', 'man'):.4f}")
print(f"'queen'和'woman'的相似度: {calculate_similarity('queen', 'woman'):.4f}")# 6. 简单的语义搜索功能
def semantic_search(query_word, all_words, top_n=3):query_embedding = embeddings[query_word]# 计算查询词与所有词的相似度similarities = {}for word in all_words:if word != query_word:  # 排除查询词本身word_embedding = embeddings[word]similarity = cosine_similarity(np.array([query_embedding]), np.array([word_embedding]))[0][0]similarities[word] = similarity# 排序并返回前N个最相似的词sorted_words = sorted(similarities.items(), key=lambda x: x[1], reverse=True)return sorted_words[:top_n]# 7. 演示搜索功能
search_word = "男人"
other_words = [w for w in words if w != search_word]
results = semantic_search(search_word, other_words)print(f"\n与'{search_word}'最相似的词:")
for word, similarity in results:print(f"'{word}': 相似度 {similarity:.4f}")# 8. 向量运算示例 - 类比关系
# 例如: king - man + woman ≈ queen
def vector_analogy(a, b, c):# 实现 a - b + c 的向量运算a_vec = np.array(embeddings[a])b_vec = np.array(embeddings[b])c_vec = np.array(embeddings[c])result_vec = a_vec - b_vec + c_vec# 计算结果向量与所有词的相似度similarities = {}for word in embeddings:if word not in [a, b, c]:  # 排除输入词word_vec = np.array(embeddings[word])similarity = cosine_similarity(np.array([result_vec]), np.array([word_vec]))[0][0]similarities[word] = similarity# 返回最相似的词return sorted(similarities.items(), key=lambda x: x[1], reverse=True)[0]# 9. 展示类比关系
analogy_result = vector_analogy("king", "man", "woman")
print(f"\n向量类比: king - man + woman ≈ {analogy_result[0]} (相似度: {analogy_result[1]:.4f})")

Embedding如何选择合适的

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

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

我们看到综合排在第一位的是字节跳动的Seed1.5-Embedding(截止本文发布时)。另外读者应该根据所需执行的任务排行做选择,比如对于RAG来说,检索(Retrieval)任务的指标是最重要的。因此,我们应当优先关注在检索任务下表现出色的模型。

http://www.xdnf.cn/news/5487.html

相关文章:

  • [CANN] 安装软件依赖
  • 数仓-可累计,半累加,不可累加指标,是什么,举例说明及解决方案
  • 前端面试题:说说你对 Vue 中异步组件的理解
  • jetson orin nano super AI模型部署之路(十)使用frp配置内网穿透,随时随地ssh到机器
  • 单词怎么记:以use一词为例
  • Java中Comparator排序原理详解
  • 3. 无重复字符的最长子串(滑动窗口)
  • 客户端建立一个连接需要占用客户端的端口吗
  • NHANES稀有指标推荐:HALP score
  • average per-pixel disparity error: EPE及不同距离值下的误差曲线
  • JavaScript基础-全局作用域
  • 《Python星球日记》 第53天:卷积神经网络(CNN)入门
  • DNS服务实验
  • 土耳其Koç大学指令驱动的智能综述,从文本表达到任务执行的系统探索
  • 王慧文产品课总结
  • @Transactional注解失效
  • 仿制药研发为何要上电子实验记录本?
  • 数据在内存中的存储
  • 配置高级相关
  • Open CASCADE学习|B 样条曲线拟合优化
  • 探秘 Canva AI 图像生成器:重塑设计创作新范式
  • vs python“““标记注释报错,vs使用自带环境安装 python第三方库
  • 每日一题洛谷T534125 合数c++
  • C# 方法(ref局部变量和ref返回)
  • 测试一下多模态提取图片中文字的能力
  • STM32F103单片机在不需要使用 JTAG 调试接口的情况下,释放引脚给其他功能使用。
  • 电网拓扑分析:原理与应用
  • Crewai Community Version(四)——Crew
  • Qt QCheckBox 使用
  • 【Java ee初阶】网络编程 TCP