# 表达相似度计算策略 本文档说明 `calculate_similarity` 的实现与配置,帮助在质量与性能间做权衡。 ## 总览 - 支持两种路径: 1) **向量化路径(默认优先)**:TF-IDF + 余弦相似度(依赖 `scikit-learn`) 2) **回退路径**:`difflib.SequenceMatcher` - 参数 `prefer_vector` 控制是否优先尝试向量化,默认 `True`。 - 依赖缺失或文本过短时,自动回退,无需额外配置。 ## 调用方式 ```python 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`。 ## 额外建议 - 若需更强语义能力,可替换为向量数据库或句向量模型(需新增依赖与配置)。 - 对热路径可增加缓存(按文本哈希),或限制输入长度以控制向量维度与内存。