首页/AI/RAG 与向量库速查/Sentence-Transformers 本地向量化
Embedding 与检索50 条

Sentence-Transformers 本地向量化

sentence-transformers 可本地加载 ST 兼容模型(BGE/M3E/E5 等)批量编码,支持 GPU 加速与离线运行;归一化后配合余弦或内积检索。

RAG 与向量库速查AI更新于 2026-10-13

本地向量化怎么做

sentence-transformers 是加载与运行句向量模型的常用库,本地即可把 BGE、M3E、E5 等兼容模型跑起来,支持批量编码、GPU 加速与输出归一化。它适合已有推理资源、要求数据不出域的场景;离线入库与在线查询共用同一套编码代码,能确保两侧的向量口径完全一致。

基本信息

安装pip install sentence-transformers
模型来源Hugging Face 上的 ST 兼容模型,也可指向本地目录
设备自动选择 GPU 或 CPU,可显式指定
常用参数batch_size、normalize_embeddings、show_progress_bar
离线运行可提前下载模型目录,内网环境按本地路径加载

批量编码

批量编码
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("BAAI/bge-large-zh-v1.5")
vecs = model.encode(["切片一…", "切片二…"], batch_size=64,
                    normalize_embeddings=True, show_progress_bar=True)
print(vecs.shape)     # (2, 1024)

使用要点

  • 批大小按显存压测后设定:过大触发显存溢出,过小则吞吐上不去
  • 归一化后配合内积或余弦,换算关系要在索引与查询两侧保持一致
  • 编码代码只保留一份:入库任务与在线服务调用同一个函数,避免细节漂移
  • 长文本先切再编码,不要整段长文直接喂给模型,超出上限的部分会被截断
  • 把模型名与版本写进切片元数据,重建索引时才能确认用的是哪套参数

非对称检索的细节

  • 短查询对长文档时,按模型卡要求给查询侧加检索提示前缀
  • 提示前缀只加在查询侧,入库切片不加,两侧混用会破坏向量空间
  • 不同模型对指令前缀的敏感度不同,换模型后要重新确认是否需要前缀
  • 用同一批评测查询验证加前缀前后是否真有提升,再决定是否保留

本地与托管对比

对比项本地部署托管接口
数据出域不出域,适合敏感语料需评估合规要求
成本一次性设备投入,长期更省按用量付费,重建索引时费用明显
吞吐受设备限制,需要容量规划弹性较好但受限流影响
运维需维护模型、驱动与版本升级基本免运维
查询侧可按模型卡要求加检索提示句(非对称检索),能提升短查询对长文档的召回;提示句只加在查询侧,入库切片不加。

易错点

  • batch_size 过大导致显存溢出,未按设备压测就定值
  • CPU 推理吞吐有限,在线并发超出机器承受范围后延迟抖动明显
  • 查询侧与入库侧用了不同编码逻辑(是否加前缀、是否归一化),向量空间不一致
  • 模型权重依赖外部网络下载,内网环境首次运行直接失败

数据来源与参考

  • Sentence-Transformers 官方文档(sbert.net)
  • BAAI BGE 模型卡片(Hugging Face)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌