想知道文本向量化是什么,以及它在RAG语义切分中怎么用吗?本文详细介绍embedding的核心作用、主流嵌入模型如BGE-M3和千问的对比,以及ollama本地部署和sentence-transformers库的使用方法,帮你快速掌握文本转向量的技巧,需要的朋友可以参考下
目录
- 向量化
- 方式1:ollama本地部署嵌入模型
- 方式2:使用在线模型
- 方式3:sentence-transformers
文本向量化(embedding)的核心作用就是把“文本”转换成“可以进行数学运算的语义表示”,也就是向量,从而让计算机能够进行:相似度搜索、语义检索、聚类、推荐、分类等操作。
文本转向量,再进行相似度计算也是RAG文档分块的语义切分使用的方式。
向量化
向量模型/嵌入模型 不需要我们自己训练,一般都会直接使用模型厂商提供的,例如:阿里的嵌入模型、BGE-M3等。
注意:不同的嵌入模型即使 使用相同的文本,得到的向量一般也是不一样的,因为不同的厂商,语料不一样或者向量的维度不一样。
方式1:ollama本地部署嵌入模型
下载嵌入模型
ollama pull bge-m3
下载完成后,可以通过命令 ollama list 查看已安装的模型列表,确认 bge-m3 是否已成功存在于本地
ollama -embed : https://docs.ollama.com/api/embed
"""
使用ollama本地部署的嵌入模型bge-m3
本地部署模型后,访问嵌入模型以及输出文本的向量表示
"""
import ollama
query = "西瓜"
query = ["西瓜", "苹果"]
response = ollama.embed(
model='bge-m3', # ollama调用的模型
input=query, # 输入文本
dimensions=1024 # 用于指定生成嵌入的维度数量,bge-m3最多1024维
)
print(response.embeddings) # number[][]
print("维度:",len(response.embeddings[0]))
# print("维度:",len(response.embeddings[1]))
注意:Embedding 向量不是“单词含义的数字列表”,它实际上是模型经过训练后,在高维空间中形成的分布式语义表示。
方式2:使用在线模型
开源模型可以本地部署,这边使用国内托管的千问的嵌入模型:qwen3.7-text-embedding-flash
import os
from openai import OpenAI
"""
使用在线嵌入模型Qwen的embedding模型:
如何访问嵌入模型以及输出文本的向量表示
"""
def qwen_text_embedding(query, model="qwen3.7-text-embedding-flash", dimensions=1024):
# 创建 大模型client:
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
data = client.embeddings.create(
input=query, model=model, dimensions=dimensions).data
vector = [x.embedding for x in data] # 提取向量
return vector
if __name__ == '__main__':
query = "很高兴遇见你!"
vector = qwen_text_embedding(query, model="qwen3.7-text-embedding-flash")
print(vector)
print("第1句话的向量维度:", len(vector[0]))
模型与费用对比:https://docs.bailian.console.aliyun.com/zh/model-studio/text-embedding-batch-api
方式3:sentence-transformers
sentence-transformers 是一个 Python 库,专门用来把句子、段落、短文本转成向量.
from sentence_transformers import SentenceTransformer
from sentence_transformers import util
# 加载模型
# model = SentenceTransformer("BAAI/bge-m3")
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2") # 这个模型更小,但性能稍差
text = "我喜欢吃西瓜"
embeddings = model.encode(text) # 把文本转换成 Embedding 向量
print(embeddings)
print(embeddings.shape) # (384,) 384 维向量
texts = [
"如何养猫",
"猫咪饲养方法",
"今天天气不错",
]
embeddings = model.encode(texts)
print(embeddings)
print(embeddings.shape) # (3,384) 3句话,384 维向量
| BGE-M3 | all-MiniLM-L6-v2 | |
|---|---|---|
| 模型来源 | BAAI(智源) | Sentence-Transformers |
| 主要用途 | RAG、语义检索、多语言 | 通用句子相似度 |
| 向量维度 | 1024 | 384 |
| 多语言 | ✅ 很强 | ⚠️ 主要偏英文 |
| 中文 | ✅ | ⚠️ 效果有限 |
| 模型大小 | 较大 | 很小 |
| 速度 | 较慢 | 很快 |
| 资源占用 | 较高 | 很低 |
| RAG | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
到此这篇关于使用Python实现向量化的三种方式的文章就介绍到这了,更多相关Python实现向量化方式内容请搜索爱读视界以前的文章或继续浏览下面的相关文章希望大家以后多多支持爱读视界!
您可能感兴趣的文章:
- 从循环到向量化分享Python NumPy提速的7个真实案例
- Python实现词频统计与文本向量化的实战教学
- Python numpy 数组的向量化运算操作方法
- python向量化与for循环耗时对比分析
- Python文本特征抽取与向量化算法学习