Embedding模型

news2025/2/23 9:24:58

检索的方式有那些

关键字搜索:通过用户输入的关键字来查找文本数据。

语义搜索:它的目标是理解用户查询的真实意图,不仅考虑关键词的匹配,还考虑词汇之间的语义
(文字,语音,语调...)关系,以提供更准确的搜索结果。

向量与Embeddings的定义

在数学中,向量(也称为欧几里得向量、几何向量),指具有大小和方向的量。

它可以形象化地表示为带箭头的线段。

如下图所示

把文本转换成数组的过程叫做向量化。

向量之间的距离对应向量的语义相似度。

箭头所指:代表向量的方向;线段长度:代表向量的大小。

Embedding模型的核心理论

1. 基本思想:从符号到向量

符号表示的问题:传统方法(如One-Hot编码)将文本表示为离散的符号,导致高维稀疏(维度=词汇表大小)、缺乏语义信息(“猫”和“狗”的向量正交,无相似性)。

向量表示的优势:将文本映射到低维连续向量空间,通过稠密向量捕捉潜在语义,使语义相似的文本在空间中距离更近。

2. 理论基础

分布假设(Distributional Hypothesis)

“一个词的语义由它的上下文决定。”(Harris, 1954)
例如,“猫”和“狗”常出现在类似上下文(“宠物”“喂食”),因此它们的向量应接近。

向量空间模型(Vector Space Model)
将文本视为高维空间中的点,语义关系通过向量方向与距离量化。例如:

余弦相似度:方向越接近,语义越相似。欧氏距离:点之间越近,语义越接近。

降维与稠密表示
通过神经网络或矩阵分解,将高维稀疏输入(如One-Hot词向量)压缩为低维稠密向量(如100~1000维),同时保留关键信息。

文本如何转化为浮点数向量(Embeddings)

1. 词级别嵌入(Word Embedding)

输入:一个单词(如“apple”)。

输出:一个固定长度的浮点数数组(如[0.25, -0.1, 0.7, ..., 0.3]),每个维度对应潜在语义特征。

实现方法示例:Word2Vec

Skip-Gram模型:通过中心词预测上下文词,学习词向量。
数学目标:最大化概率

结果:每个词对应一个向量,向量维度由模型预设(如300维),每个下标i的值表示该词在某个潜在语义维度上的强度。

2. 句子/文档级别嵌入(Sentence Embedding)

输入:一段文本(如“I love machine learning”)。

输出:一个浮点数数组,表示整个文本的语义。

实现方法示例:BERT

  1. 分词与输入编码
    将句子分割为子词(如["I", "love", "machine", "learning"]),并添加特殊标记[CLS][SEP]

  2. Transformer编码
    通过多层自注意力机制,生成每个词的上下文相关向量。

  3. 池化(Pooling)
    [CLS]标记的向量(或对所有词向量取平均)作为句子向量。

3. 关键特性

每个下标i对应一个潜在语义维度
例如,第5维可能隐含“情感极性”,第10维可能对应“动作性”,但这些维度不可直接解释,而是通过模型自动学习。

整体向量表示语义
所有维度的组合共同编码了文本的全局语义信息

向量距离与语义相似度的关系

1. 向量距离的计算方法

2. 语义相似度的数学体现

示例

句子A:“猫是一种宠物” → 向量[0.2, 0.8, -0.1]

句子B:“狗喜欢啃骨头” → 向量[0.3, 0.7, 0.0]

句子C:“汽车需要加油” → 向量[-0.5, 0.1, 0.9]

计算余弦相似度

sim(A, B) ≈ 0.95(方向接近,语义相似)

sim(A, C) ≈ -0.2(方向相反,语义无关)

3. 为什么距离能反映语义

训练目标驱动:Embedding模型在训练时强制语义相近的文本在向量空间中靠近

例如:

Word2Vec让共现词的向量接近。

BERT让相同上下文中的词向量相似。

对比学习(如SimCSE)直接优化相似样本的距离。

完整流程示例:从文本到向量

步骤1:文本预处理

分词:将句子分割为词/子词(如使用BERT的WordPiece)。

规范化:转为小写、去除停用词、词干提取(可选)。

步骤2:向量化

选择模型:例如使用预训练的BERT模型。

输入编码

# 使用Hugging Face Transformers库
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

text = "Embeddings represent text as vectors."
inputs = tokenizer(text, return_tensors='pt')
outputs = model(**inputs)

# 取[CLS]标记的向量作为句子嵌入
sentence_embedding = outputs.last_hidden_state[:, 0, :].detach().numpy()

输出:得到一个768维的浮点数数组(如[0.1, -0.3, 0.8, ..., 0.2])。

步骤3:计算相似度

对比两个句子的向量:

from sklearn.metrics.pairwise import cosine_similarity

# 假设emb1和emb2是两个768维向量
similarity = cosine_similarity(emb1.reshape(1, -1), emb2.reshape(1, -1))
print(similarity)  # 输出范围[-1, 1],越接近1越相似

数学本质总结

文本向量化:函数 f:Text→Rnf:Text→Rn,将文本映射为n维空间中的点。

语义相似度:通过向量空间中的几何关系(方向或距离)量化语义相关性。

模型学习:通过优化目标(如语言模型、对比损失)调整向量位置,使语义相似文本在空间中聚集

关键问题解答

  1. 为什么每个维度没有明确含义?
    模型自动学习潜在特征,这些特征是统计学规律的抽象,而非人工定义(类似神经网络的隐藏层)。

  2. 维度数(n)如何选择?
    经验值:词嵌入常用50~300维,句嵌入常用384~1024维。维度越高,表达能力越强,但可能过拟合。

  3. 如何保证不同文本的向量可比?
    所有向量必须由同一模型生成,且经过相同的归一化处理(如L2归一化)。

向量(嵌入)模型

text-embedding-3-large 是一种文本嵌入模型,它属于深度学习模型的一种,专门用于将文本转
换为高维向量(也称为嵌入)
向量之间能够捕捉文本的语义信息,使得相似的文本在向量空间中彼此接近。
text-embedding-3-large 的维度为 3072。

文本向量化

from openai import OpenAI#从 openai 库中导入 OpenAI 类。
client = OpenAI()#client 变量是 OpenAI 的一个实例对象,代表与 OpenAI 服务器的连接。

# 嵌入模型
res = client.embeddings.create(
    input="你好啊,我好,他好",
    model="text-embedding-3-large"
)

# 向量数据
print(res.data)
print("--------------------")

# 获取文本向量 => 列表推导式
print([x.embedding for x in res.data])
print("--------------------")

# 获取向量的维度,就是向量的长度
print(len([x.embedding for x in res.data][0]))

client.embeddings.create(...)

embeddings:访问 OpenAI 客户端的 embeddings API。

create(...):调用创建嵌入向量的 API 方法。

print([x.embedding for x in res.data])
print("--------------------")

res.data:存储 API 返回的嵌入向量结果,通常是一个列表,包含多个嵌入向量对象。

for x in res.data:遍历 res.data 中的每个元素(x)。

x.embedding:提取每个 x 对象中的 embedding(嵌入向量)。

结果是一个嵌套列表,每个嵌入向量都是一个数值列表(浮点数)。

示例输出:

[[0.123, -0.456, 0.789, ...]]

外部 []:表示一个 Python 列表。

内部 []:嵌入向量,是高维度数值数组,通常用于机器学习任务。

print(len([x.embedding for x in res.data][0]))

[x.embedding for x in res.data]:

生成一个包含所有嵌入向量的列表,假设只有一个文本,则 res.data 只有一个元素,所以 res.data[0] 是一个对象,res.data[0].embedding 是一个向量(列表)。

[x.embedding for x in res.data][0]:

取出第一个向量。

len(...):

len() 计算该向量的长度,即其维度数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新扣子(Coze)案例教程:全自动DeepSeek 写影评+批量生成 + 发布飞书,提效10 倍!手把手教学,完全免费教程

👨‍💻群里有同学是做影视赛道的博主,听说最近DeepSeek这么火,咨询能不能用DeepSeek写影评,并整理电影数据资料,自动发布到飞书文档,把每天的工作做成一个自动化的流程。 那今天斜杠君就为大家…

Ubuntu 22.04安装K8S集群

以下是Ubuntu 22.04安装Kubernetes集群的步骤概要 一、设置主机名与hosts解析 # Master节点执行 sudo hostnamectl set-hostname "k8smaster" # Worker节点执行 sudo hostnamectl set-hostname "k8sworker1"# 所有节点的/etc/hosts中添加: ca…

Apifox 增强 AI 接口调试功能:自动合并 SSE 响应、展示DeepSeek思考过程

在现代的API接口调试中,效率和精确性对于开发者和测试人员来说至关重要。Apifox,作为一款功能强大的API管理和调试工具,近年来不断提升其用户体验和智能化功能。最近,Apifox 推出了增强版的AI接口调试功能,其中包括自动…

MATLAB基础学习相关知识

MATLAB安装参考:抖音-记录美好生活 MATLAB基础知识学习参考:【1小时Matlab速成教程-哔哩哔哩】 https://b23.tv/CnvHtO3 第1部分:变量定义和基本运算 生成矩阵: % 生成矩阵% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…

DeepSeek赋能智慧文旅:新一代解决方案,重构文旅发展的底层逻辑

DeepSeek作为一款前沿的人工智能大模型,凭借其强大的多模态理解、知识推理和内容生成能力,正在重构文旅产业的发展逻辑,推动行业从传统的经验驱动向数据驱动、从人力密集型向智能协同型转变。 一、智能服务重构:打造全域感知的智…

蓝桥与力扣刷题(蓝桥 交换瓶子)

题目:有 N 个瓶子,编号 1 ~ N,放在架子上。 比如有 5 个瓶子: 2 1 3 5 4 要求每次拿起 2 个瓶子,交换它们的位置。 经过若干次后,使得瓶子的序号为: 1 2 3 4 5 对于这么简单的情况&#x…

腿足机器人之十一- 深度强化学习

腿足机器人之十一- 深度强化学习 机器人能力腿足机器人RL问题建模强化学习解决方案 强化学习算法库选择建议 深度学习技术已经在语音、图像、视频、文本等领域应用广泛,其和强化学习的结合使得基于深度学习的大模型能力更是上升一个台阶。因而用在腿足机器人的运动中…

纠错检索增广生成论文

一、摘要 动机:RAG严重依赖于检索文档的相关性,如果检索出错,那么LLM的输出结果也会出现问题 解决方案:提出纠正性检索增强生成(CRAG)即设计一个轻量级的检索评估器,用来评估针对某个查询检索…

多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题

多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”,通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解: 目录 一、原理分析 1. 单源 BFS vs…

Jenkins 构建 Unity 打包 .apk 同时生成 .aab

Jenkins 构建 Unity 打包 .apk 同时生成 .aab Android App Bundle简称 AAB,想了解更多关于 AAB 的知识,请看官网 https://developer.android.google.cn/guide/app-bundle/faq?hlzh-cn APK 打包部分在复用上一篇 Jenkins 构建 Unity打包APK 一、新建一…

清华大学第五弹:《DeepSeek与AI幻觉》

作者:清华大学新闻与传播学院新媒体研究中心、人工智能学院(新媒沈阳团队) 时间:2025年2月 完整版下载地址:夸克网盘分享 一、AI幻觉的定义与分类 定义 学术定义:模型生成与事实不符、逻辑断裂或脱离上下…

分布式数据库解析

title: 分布式数据库解析 date: 2025/2/20 updated: 2025/2/20 author: cmdragon excerpt: 通过金融交易、社交平台、物联网等9大真实场景,结合Google Spanner跨洲事务、DynamoDB毫秒级扩展等38个生产级案例,揭示分布式数据库的核心原理与工程实践。内容涵盖CAP定理的动态…

Zotero 快速参考文献导出(特定期刊引用)

目录 一、添加样式 每次投期刊时每种期刊的引用方式不一样,就很麻烦。发现zeotero添加期刊模板再导入很方便 一、添加样式 然后就能导出自己想要的期刊格式的引用了

库的制作与原理(一)

1.库的概念 库是写好的,现成的可以复用的代码。本质上库是一种可执行的二进制形式,可以被操作系统载入内存执行。库有俩种:静态库 .a[Linux] .lib[windows] 动态库 .so[Linux] .dll[windows] 就是把.c文件变成.o文件,把…

go 日志框架

内置log import ("log""os" )func main() {// 设置loglog.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)// 自定义日志前缀log.SetPrefix("[pprof]")log.Println("main ..")// 如果用format就用PrintF,而不是…

Rust配置笔记

1.Node.js下载配置 2.c环境配置 C我是用vs装的点击这个installer 点击修改 选择C环境就行,这个时候它就帮忙配置环境了 3.Rust下载配置 4.装napi-rs框架 npm install -g napi-rs/cliRust下载网站 下完之后直接打开 一开始下包会比较慢,多等等 下好之后跑项目前第一件事配置…

具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)

整合各亚专科医学领域知识能力的AI代理的开发与研究 一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能(AI)已成为推动各行业变革的关键力量,医疗领域也不例外。近年来,AI 在医疗行业的应用取得了显著进展,从医学影像诊断到疾病预测,从药物研发到个性化医疗,AI 技…

数据表的存储过程和函数介绍

文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…

为AI聊天工具添加一个知识系统 之117 详细设计之58 思维导图及观察者效应 之2 概念全景图

(说明:本文和上一篇问题基本相同,但换了一个模型 deepseek-r1) Q1227、在提出项目“为使用AI聊天工具的聊天者加挂一个专属的知识系统”后,我们已经进行了了大量的讨论-持续了近三个月了。这些讨论整体淋漓尽致体现了…

Error [ERR_REQUIRE_ESM]: require() of ES Module

报错信息: 【报错】Message.js 导入方式不对,用的是 ES Moudle 的语法,提示使用 import 引入文件 项目开发没有用到 js-message 依赖,是 node-ipc 依赖中用到的 js-message 依赖, node-ipc 中限制 js-message 版本&a…