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

Embeddings模型

什么是Embedding模型        

        Embeddings(嵌入)模型是一类在自然语言处理(NLP)、计算机视觉等多个领域有着广泛应用的重要模型,下面为你详细介绍:

基本概念

        Embeddings 模型的核心功能是将离散的符号(如文本中的单词、图像中的像素块等)转化为连续的向量表示,这些向量通常位于低维的实数空间中。这种向量表示能够捕捉到输入数据的语义、句法等特征,使得计算机可以更好地处理和理解这些数据。

在自然语言处理中的应用

词嵌入(Word Embeddings)

原理:将单词映射到低维向量空间,使得语义相近的单词在向量空间中距离较近。例如,“苹果”和“香蕉”在语义上都属于水果类别,它们的词向量在空间中会相对靠

常见模型

Word2Vec:由谷歌开发,有两种训练模式,分别是连续词袋模型(CBOW)和跳字模型(Skip - Gram)。CBOW 根据上下文预测当前单词,而 Skip - Gram 则根据当前单词预测上下文。

GloVe:结合了全局统计信息和局部上下文信息,通过构建词 - 词共现矩阵,并对矩阵进行分解来学习词向量。

FastText:在 Word2Vec 的基础上进行了扩展,考虑了单词的子词信息,对于未登录词(在训练集中未出现的单词)也能生成合理的向量表示。

句嵌入(Sentence Embeddings)

原理:将整个句子表示为一个向量,用于句子相似度计算、文本分类等任务

常见模型

Sentence - BERT(SBERT):基于 BERT 模型进行改造,通过对 BERT 输出进行特殊处理,得到句子的向量表示。它在句子相似度计算任务上表现出色。

InferSent:是一种基于 LSTM 网络的句嵌入模型,通过在有监督的任务上进行训练,学习句子的语义表示。

在计算机视觉中的应用

图像嵌入(Image Embeddings)

原理:将图像转换为向量表示,用于图像检索、图像分类等任务。

常见模型

ResNet:一种深度卷积神经网络,通过在大规模图像数据集上进行训练,其最后一层全连接层的输出可以作为图像的嵌入向量。

VGG:也是经典的卷积神经网络,具有简单的网络结构,其输出的特征向量可以用于图像的语义表示。

通俗易懂的描述: 嵌⼊就相当于给⽂本穿上了“数字化”的外⾐ ,⽬的是让机器更好的理解和处理。

向量空间(Vector Space)

        所有的数据都变成向量,这些向量组成⼀个庞⼤的矩阵。在这个世界⾥,每个词、句⼦、图⽚、⽤ ⼾…都被表⽰成⼀个“点”(即向量),⼤家都有⾃⼰的“坐标”。 我们可以通过“距离”和“⽅向”来理解它们的关系。 Embedding 向量放在向量空间⾥,有啥⽤? 距离表⽰相似度 向量之间越近:意义越相似 向量之间越远:意义越不同

解决问题

降维:在⾼维度空间中,数据点之间可能存在很⼤的距离,使得样本稀疏,嵌⼊模型可以减少数据 稀疏性。

捕捉语义信息:Embedding不仅仅是降维,更重要的是,它能够捕捉到数据的语义信息。语义相近 的词在向量上也是相近的

特征表⽰:原始数据的特征往往难以直接使⽤,通过嵌⼊模型可以将特征转换成更有意义的表⽰。

计算效率:在低维度空间中对数据进⾏处理和分析往往更加⾼效。

应用场景

信息检索:在搜索引擎中,通过计算查询文本和文档的嵌入向量之间的相似度,快速找到相关文档。

推荐系统:将用户的历史行为和物品的特征转化为嵌入向量,通过向量相似度为用户推荐感兴趣的物品。

情感分析:将文本的嵌入向量输入到分类模型中,判断文本的情感倾向(积极、消极或中性)。

        在做RGA开发时会涉及到向量数据库,在创建向量数据库时需要使⽤Embedding模型对⽂本进⾏向量化处理。在检索的时候,需要对⽤⼾输⼊进⾏向量化处理也需要⽤到Embedding模型 

常用的Embeddings模型

OpenAI Embeddings模型

        OpenAI Embeddings 是 OpenAI 提供的一项将文本转换为数字向量的服务。这些向量能够捕捉文本的语义信息,使得语义相近的文本在向量空间中位置相近,在诸多自然语言处理任务中发挥着关键作用。

from openai import OpenAIclient = OpenAI(api_key="", base_url="https://api.34ku.com/v1/"
)resp = client.embeddings.create(input="你好,你是一个机器人。",model="text-embedding-3-large",dimensions=512
)
print(resp.data[0].embedding)
print(len(resp.data[0].embedding))

使用langchain:

from langchain_openai import  OpenAIEmbeddingsclient = OpenAIEmbeddings(api_key="",base_url="https://api.34ku.com/v1/",model="text-embedding-3-small",dimensions=512 #维度512 
)
#检索向量化
query = client.embed_query("Hello world")
print(query)
print(len(query))
#文本向量化
documents = client.embed_documents(["Hello world", "foo bar baz"])
print(documents)
print(len(documents))

BGE-Large 

HuggingFace 上的 BGE 模型是最好的开源嵌⼊模型之⼀。 BGE 模型由北京⼈⼯智能研究院 (BAAI) 创建。 是⼀家从事 AI 研发的私营⾮营利组织。

import osfrom langchain_community.embeddings import HuggingFaceBgeEmbeddings
from langchain_huggingface import HuggingFaceEmbeddingsmodel_name = "BAAI/bge-small-en-v1.5"
#自己电脑使用cpu,如果是gpu,可以使用cuda
model_kwargs = {'device': 'cpu'}
#可以通过环境变量HF_ENDPOINT指定huggingface的镜像地址
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
#可以通过环境变量HF_HOME指定本地模型目录
#os.environ["HF_HOME"] =#'normalize_embeddings': True 表示:将输出的 embedding 向量做 L2 归一化处理,即让每个向量的长度(模长)为 1
encode_kwargs = {'normalize_embeddings': True} # set True to compute cosine similarity"""
已过时
bge_embedding = HuggingFaceBgeEmbeddings(model_name=model_name,model_kwargs=model_kwargs,encode_kwargs=encode_kwargs
)
"""
#使用HuggingFaceEmbeddings
bge_embedding = HuggingFaceEmbeddings(model_name=model_name,model_kwargs=model_kwargs,encode_kwargs=encode_kwargs
)
#文档 embedding 与 query embedding
documents = bge_embedding.embed_documents(["hello world"])
query = bge_embedding.embed_query("hello world")
print(documents)
print(query)

Qwen3-Embedding

Qwen3 - Embedding是阿里云基于通义千问大模型Qwen3所推出的向量嵌入模型。是目前比较好用的嵌入模型

# Requires transformers>=4.51.0
# Requires sentence-transformers>=2.7.0
import osfrom sentence_transformers import SentenceTransformer
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
# Load the model
qwen3_embedding = SentenceTransformer("Qwen/Qwen3-Embedding-0.6B")resp = qwen3_embedding.encode(['I like large language models.','今天的天气非常不错!']
)print(resp[0])
print(len(resp[0]))

 langchain风格使用:

from langchain_core.embeddings import Embeddings
from sentence_transformers import SentenceTransformerclass Qwen3Embeddings(Embeddings):def __init__(self, model_name: str = "Qwen/Qwen3-Embedding-0.6B"):self.qwen3_embedding = SentenceTransformer(model_name)def embed_documents(self, texts: list[str]) -> list[list[float]]:return self.qwen3_embedding.encode(texts)def embed_query(self, text: str) -> list[float]:return self.qwen3_embedding.encode([text])if __name__ == "__main__":qwen3_embedding = Qwen3Embeddings()resp = qwen3_embedding.embed_documents(['I like large language models.','今天的天气非常不错!'])qwen3_embedding.embed_query('今天的天气非常不错!')print(resp[0])print(len(resp[0]))

http://www.lqws.cn/news/599815.html

相关文章:

  • IOday2--7.1
  • 工作中常用的Git操作命令(一)
  • 电脑键盘不能打字了怎么解决 查看恢复方法
  • Wisdom SSH 与宝塔面板:深度对比剖析
  • P1312 [NOIP 2011 提高组] Mayan 游戏
  • 将POD指定具体机器上运行
  • ip网络基础
  • 睿抗-2025年江西省第三题
  • python+uniapp基于微信小程序的流浪动物救助领养系统nodejs+java
  • 3.2.2、CAN总线-过滤器的使用
  • SQL学习笔记6
  • sqlmap学习笔记ing(1.Easy_SQLi(时间,表单注入))
  • 位运算经典题解
  • 高并发场景下,TCP/UDP丢包的隐藏陷阱
  • c语言学习_初识c语言21
  • 伊吖学C笔记(7、地址、指针、指针数组)
  • 面试拷打-20250701
  • 新版Android Studio默认展示类成员的问题解决
  • CPU缓存一致性
  • wifi无线调试连接手机远程控制 安卓 免root控制充电
  • FFmpeg中TS与MP4格式的extradata差异详解
  • GPIO详解:不仅仅是输入输出那么简单
  • 【MyBatis保姆级教程下】万字XML进阶实战:配置指南与深度解析
  • 【AI 时代的网络爬虫新形态与防护思路研究】
  • MySQL MVCC 详解
  • 快捷设置linux主机的ip和主机名
  • 视频断点续播全栈实现:基于HTML5前端与Spring Boot后端
  • STM32——代码开发顺序
  • GORM 删除操作实战指南:从单条记录到软删除最佳实践
  • Kotlin扩展函数与属性