语义搜索怎么搭建?用 Sentence Transformers 检索中文文档

使用多语言 MiniLM 与 Sentence Transformers 检索中文短文档,核对行号、排名和未知问题边界。

问题与资料没有完全相同的词语时,可以先用 Sentence Transformers 把它们变成向量,再做余弦检索。下面使用支持中文的多语言 MiniLM 句向量模型,演示三条短文档的检索;返回相近文档并不等于回答已经有依据。

准备模型与短文档

需要匹配的 Python、PyTorch 与 sentence-transformers 环境。首次加载模型会从 Hugging Face 下载公开权重,使用前核对模型卡许可和缓存位置。模型卡说明输出为 384 维句向量,支持包括中文在内的多语言内容;这不等于对任何中文专业语料都效果良好。

语义搜索怎么搭建?用 Sentence Transformers 检索中文文档

python -m pip install sentence-transformers

三条制度是虚构演示材料,没有在此模型上实测排名或检索准确率。将下面脚本保存为 search_demo.py,运行 python search_demo.py,先观察实际输出再评价。

编码资料并检索

from sentence_transformers import SentenceTransformer, util

model_name = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
model = SentenceTransformer(model_name)
doc_ids = ["leave", "expense", "password"]
documents = [
    "请假需要提前向直属主管提交申请,获批后生效。",
    "报销需要提供发票,并填写费用用途。",
    "忘记密码时请使用登录页的重置密码入口。",
]
embeddings = model.encode(documents, convert_to_tensor=True)
query = "休假申请找谁审批?"
query_embedding = model.encode([query], convert_to_tensor=True)
hits = util.semantic_search(query_embedding, embeddings, top_k=2)[0]
for hit in hits:
    i = hit["corpus_id"]
    print(doc_ids[i], round(hit["score"], 4), documents[i])
print("库向量尺寸", tuple(embeddings.shape))

把相关性验证与代码运行分开

验证时先确认每个 corpus_id 对应原始文档行号,输出尺寸应是三条文档对应的向量行数。再人工检查“休假申请找谁审批”是否把请假条款排在前面;未排在前面就记录失败,不修改真值来适应模型。

用“发票需要填写什么”和“密码忘记了怎么办”补测,再加入资料中没有答案的“产假有多少天”。工具总会返回最接近的候选,但候选不一定包含答案。语义分数不是正确答案概率,也不能跨模型沿用同一个阈值。

扩量前保留评估集

下一步准备包含同义提问、相近但不同的问题、未知问题的小型人工评估集,记录目标文档与 Top-k 命中,再决定是否换模型或重排。本文模型以句子相似为主要用途,长文档检索需要切成有意义的片段;截断导致关键条件丢失时,应先改切分。

同一索引必须固定模型和编码规则。更换模型后重算全部向量,权限不足的文档不能只因分数高就返回。最终问答还应检查原文是否确实支撑答案,不让向量检索替代事实验证。

资料与适用版本

以下官方资料核对于 2026 年 10 月 1 日;安装和界面以实际使用版本为准。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30674.html

赞 (0)
AI小管家的头像AI小管家
本地向量索引怎么保存?用 FAISS 检索、写盘并核对 ID 映射
上一篇 3小时前
AI 拍照计数怎么核对?用 YOLO 统计一张图中的人数
下一篇 3小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部