本地向量化怎么做
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)使用要点
- 批大小按显存压测后设定:过大触发显存溢出,过小则吞吐上不去
- 归一化后配合内积或余弦,换算关系要在索引与查询两侧保持一致
- 编码代码只保留一份:入库任务与在线服务调用同一个函数,避免细节漂移
- 长文本先切再编码,不要整段长文直接喂给模型,超出上限的部分会被截断
- 把模型名与版本写进切片元数据,重建索引时才能确认用的是哪套参数
非对称检索的细节
- 短查询对长文档时,按模型卡要求给查询侧加检索提示前缀
- 提示前缀只加在查询侧,入库切片不加,两侧混用会破坏向量空间
- 不同模型对指令前缀的敏感度不同,换模型后要重新确认是否需要前缀
- 用同一批评测查询验证加前缀前后是否真有提升,再决定是否保留
本地与托管对比
| 对比项 | 本地部署 | 托管接口 |
|---|---|---|
| 数据出域 | 不出域,适合敏感语料 | 需评估合规要求 |
| 成本 | 一次性设备投入,长期更省 | 按用量付费,重建索引时费用明显 |
| 吞吐 | 受设备限制,需要容量规划 | 弹性较好但受限流影响 |
| 运维 | 需维护模型、驱动与版本升级 | 基本免运维 |
查询侧可按模型卡要求加检索提示句(非对称检索),能提升短查询对长文档的召回;提示句只加在查询侧,入库切片不加。