1.5 KiB
1.5 KiB
表达相似度计算策略
本文档说明 calculate_similarity 的实现与配置,帮助在质量与性能间做权衡。
总览
- 支持两种路径:
- 向量化路径(默认优先):TF-IDF + 余弦相似度(依赖
scikit-learn) - 回退路径:
difflib.SequenceMatcher
- 向量化路径(默认优先):TF-IDF + 余弦相似度(依赖
- 参数
prefer_vector控制是否优先尝试向量化,默认True。 - 依赖缺失或文本过短时,自动回退,无需额外配置。
调用方式
from src.chat.express.express_utils import calculate_similarity
sim = calculate_similarity(text1, text2) # 默认优先向量化
sim_fast = calculate_similarity(text1, text2, prefer_vector=False) # 强制使用 SequenceMatcher
依赖与回退
- 可选依赖:
scikit-learn- 缺失时自动回退到
SequenceMatcher,不会抛异常。
- 缺失时自动回退到
- 文本过短(长度 < 2)时直接回退,避免稀疏向量噪声。
适用建议
- 文本较长、对鲁棒性/语义相似度有更高要求:保持默认(向量化优先)。
- 环境无
scikit-learn或追求极简依赖:调用时设置prefer_vector=False。 - 高并发性能敏感:可在调用点酌情关闭向量化或加缓存。
返回范围
- 相似度范围始终在
[0, 1]。 - 空字符串 →
0.0;完全相同 →1.0。
额外建议
- 若需更强语义能力,可替换为向量数据库或句向量模型(需新增依赖与配置)。
- 对热路径可增加缓存(按文本哈希),或限制输入长度以控制向量维度与内存。