直接回答 Sentence Transformers 可以通过将文本转换为数值向量(嵌入)并测量它们的相似度来检测论坛中的重复问题。一种典型的方法是使用预训练模型(如 all-MiniLM-L6-v2
)将问题编码为密集向量。例如,如果一个用户发布“如何重置路由器?”,而另一个用户问“如何重启我的网络设备?”,这两个句子都会被输入到模型中以生成 384 维向量。然后计算这些向量之间的余弦相似度——接近 1 的值表示几乎相同的含义。开发人员可以设置一个阈值(例如,0.85)来自动标记潜在的重复项。此方法适用于多种语言和措辞,而无需依赖精确的关键词匹配。
实施示例 要实现这一点,首先安装 sentence-transformers
库。通过转换为小写并删除特殊字符来预处理输入文本。加载模型并将所有现有论坛问题编码为嵌入,并将它们存储在数据库或向量索引(如 FAISS)中以进行高效查找。当发布新问题时,对其进行编码并使用余弦相似度将其与存储的嵌入进行比较。例如
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')
existing_questions = ["How to reset a router?", "..."]
new_question = "What's the way to reboot my network device?"
# Encode
existing_embeddings = model.encode(existing_questions)
new_embedding = model.encode([new_question])
# Compare
similarities = util.cos_sim(new_embedding, existing_embeddings)[0]
duplicates = [i for i, score in enumerate(similarities) if score > 0.85]
FAISS 或 Annoy 等工具可加速大型数据集中的相似性搜索,使其可扩展到拥有数百万个问题的平台。
挑战和优化 主要挑战包括处理拼写错误(“reseting router”)和特定领域的术语。诸如词形还原(例如,将“resetting”转换为“reset”)之类的预处理步骤可以提高一致性。对于小众论坛(例如,医疗问答),在特定领域的数据上微调模型(使用 Quora 问题对之类的数据集)可以提高准确性。阈值调整至关重要:太低会导致误报,太高会遗漏有效的重复项。使用真实用户反馈进行的 A/B 测试有助于平衡精度和召回率。此外,缓存常见问题并使用近似最近邻库可以减少延迟。这种方法平衡了准确性与计算效率,使其适用于实时重复检测。