问题与资料没有完全相同的词语时,可以先用 Sentence Transformers 把它们变成向量,再做余弦检索。下面使用支持中文的多语言 MiniLM 句向量模型,演示三条短文档的检索;返回相近文档并不等于回答已经有依据。
准备模型与短文档
需要匹配的 Python、PyTorch 与 sentence-transformers 环境。首次加载模型会从 Hugging Face 下载公开权重,使用前核对模型卡许可和缓存位置。模型卡说明输出为 384 维句向量,支持包括中文在内的多语言内容;这不等于对任何中文专业语料都效果良好。

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