关于 algo-nlp-similarity
用于选择并应用词汇或语义方法比较文本的技能,涵盖从成对比较到语料检索,并提供验证与扩展方面的指导。
主要功能
- 01使用 Jaccard 和 TF-IDF 计算词汇相似度
- 02使用句子嵌入计算语义相似度
- 03通过 FAISS 或 Annoy 搜索近邻
- 04提供阈值校准指导
- 05根据人工判断验证结果
适用场景
- 01查找重复或相似文档
- 02将查询匹配到 FAQ 答案或知识库条目
- 03检查文本抄袭或内容复用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-nlp-similarity安装后在 Claude Code 中输入/algo-nlp-similarity确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/sample_scenario.mdreferences/ann-search.mdmodel-benchmarks.md详细介绍
文本相似度
概述
文本相似度用于衡量两段文本在含义或表面形式上的接近程度。词汇方法(Jaccard、基于 TF-IDF 的余弦相似度)比较词语重叠情况。语义方法(句子嵌入)即使文本用词不同,也能捕捉其含义。选择哪种方法取决于你需要精确匹配还是语义匹配。
适用场景
触发条件:
- 在集合中查找相似或重复的文档
- 将查询与 FAQ 答案或知识库条目匹配
- 检测抄袭或内容复用
不适用场景:
- 按主题分组(使用主题建模 / LDA)
- 从文本中提取实体(使用 NER)
算法
IRON LAW: Lexical Similarity ≠ Semantic Similarity
"The car is fast" and "The automobile is speedy" have LOW lexical
similarity (different words) but HIGH semantic similarity (same meaning).
"Bank of the river" and "Bank account" have HIGH lexical similarity
but LOW semantic similarity. Choose the method that matches your
definition of "similar."
阶段 1:输入验证
确定:所需的相似度类型(词汇或语义)、文本预处理要求、处理规模(成对、全量两两比较或查询与语料库匹配)。 门槛: 文本已预处理,并已选定方法。
阶段 2:核心算法
词汇方法:
- Jaccard:对词语集合计算 |A∩B| / |A∪B|
- 基于 TF-IDF 向量的余弦相似度:cos(θ) = (A·B) / (|A|×|B|)
语义方法:
- 句子嵌入:使用 sentence-transformers 对文本进行编码(all-MiniLM-L6-v2)
- 对嵌入向量计算余弦相似度
- 对于大规模场景:使用 FAISS 或 Annoy 进行近似最近邻搜索
阶段 3:验证
抽查:高度相似的文本对在实际含义上应确实相似。低相似度文本对在实际含义上应确实不同。检查阈值校准情况。 门槛: 相似度分数与样本文本对的人工判断一致。
阶段 4:输出
返回相似度分数或最近邻。
输出格式
{
"similarities": [{"text_a": "doc1", "text_b": "doc5", "score": 0.92, "method": "semantic_cosine"}],
"metadata": {"method": "sentence-transformers", "model": "all-MiniLM-L6-v2", "pairs_computed": 500}
}
示例
输入输出示例
输入: 文本 A:"How to reset my password",文本 B:"I forgot my login credentials" 预期结果: 词汇相似度(Jaccard)≈ 0.07(几乎没有词语重叠)。语义相似度 ≈ 0.82(意图相同)。
边界情况
| 输入 | 预期结果 | 原因 |
|---|---|---|
| 文本完全相同 | 分数 = 1.0 | 完全匹配 |
| 空文本 | 未定义或为 0 | 妥善处理 |
| 语言不同 | 词汇相似度 = 0,语义相似度取决于模型 | 多语言模型可以匹配不同语言的文本 |
注意事项
- 阈值取决于具体用例:对于去重,0.8 的相似度可能意味着“重复”;但对于推荐,则可能表示“有些相关”。请使用带标签的示例校准阈值。
- 文本长度的影响:基于 TF-IDF 的余弦相似度容易受文档长度影响。非常短的文本向量较稀疏,相似度不可靠。短文本宜使用嵌入。
- 嵌入模型的选择:不同模型各有优势。all-MiniLM-L6-v2 速度快,但准确度不如更大的模型。请根据性能需求选择模型。
- 计算规模:对 N 篇文档进行全量两两相似度计算的复杂度为 O(N²)。对于大型语料库,请使用近似方法(局部敏感哈希、FAISS)。
- 领域适配:通用嵌入模型可能无法捕捉领域特定的相似性(法律、医疗)。要获得最佳效果,请使用领域数据进行微调。
参考资料
- 有关嵌入模型的对比和基准测试,请参阅
references/model-benchmarks.md - 有关大规模近似最近邻搜索,请参阅
references/ann-search.md
评论
支持 Markdown