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

大模型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)任务的指标是最重要的。因此,我们应当优先关注在检索任务下表现出色的模型。

相关文章:

  • 【生命周期分析(Life Cycle Assessment: LCA)】基于OpenLCA、GREET、R语言的生命周期评价方法、模型构建及典型案例应用
  • Redisson 看门狗机制
  • 【大数据技术-HBase-关于Hmaster、RegionServer、Region等组件功能和读写流程总结】
  • 第五天 车载系统安全(入侵检测、OTA安全) 数据加密(TLS/SSL、国密算法)
  • Taccel:一个高性能的GPU加速视触觉机器人模拟平台
  • 用纯HTML和CSS仿写知乎登录页面
  • 图像卷积初识
  • 操作系统实验习题解析 上篇
  • 中国古代史1
  • 关于ffmpeg的简介和使用总结
  • django的权限角色管理(RBAC)
  • 单片机-STM32部分:10-1、485
  • TIME - MoE 模型代码 3.4——Time-MoE-main/time_moe/models/modeling_time_moe.py
  • 【并发编程】基于 Redis 手写分布式锁
  • 鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK
  • VBA将PDF文档内容逐行写入Excel
  • OpenLayers根据任意数量控制点绘制贝塞尔曲线
  • Lua—元表(Metatable)
  • c++——二叉树进阶
  • vue 中的ref
  • 时代中国控股:前4个月销售额18.1亿元,境外债重组协议押后聆讯至5月底
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 《尤物公园》连演8场:观众上台,每一场演出都独一无二
  • 甘肃省政府原副省长赵金云被决定逮捕
  • 中俄元首今年首次面对面会谈,达成哪些新的重要共识?
  • 云南临沧一行贿案金额认定比受贿案多41万,重审时检方变更金额起诉