精简的文本相似度计算模块,基于 similarities 库(BERT 向量模型)。
compare_phrases()semantic_similarity.pypip install -U similarities torch
from lib.text_embedding import compare_phrases
result = compare_phrases("如何更换花呗绑定银行卡", "花呗更改绑定银行卡")
print(result['相似度']) # 0.855
print(result['说明']) # "基于向量模型计算的语义相似度为 高 (0.86)"
# 1. chinese(默认)- 中文通用模型
result = compare_phrases("文本1", "文本2")
result = compare_phrases("文本1", "文本2", model_name="chinese")
# 2. multilingual - 多语言模型(中英韩日德意等)
result = compare_phrases("Hello", "Hi", model_name="multilingual")
# 3. paraphrase - 中文长文本模型
result = compare_phrases("长文本1...", "长文本2...", model_name="paraphrase")
# 4. sentence - 中文短句子模型
result = compare_phrases("短句1", "短句2", model_name="sentence")
result = compare_phrases(
"文本1", "文本2",
model_name="shibing624/text2vec-base-chinese"
)
| 简称 | 完整名称 | 说明 |
|---|---|---|
chinese |
shibing624/text2vec-base-chinese |
中文通用(默认) |
multilingual |
shibing624/text2vec-base-multilingual |
多语言 |
paraphrase |
shibing624/text2vec-base-chinese-paraphrase |
中文长文本 |
sentence |
shibing624/text2vec-base-chinese-sentence |
中文短句子 |
compare_phrases(
phrase_a: str, # 第一个短语
phrase_b: str, # 第二个短语
model_name: str = "chinese" # 模型(可选)
) -> Dict[str, Any]
返回格式:
{
"说明": "基于向量模型计算的语义相似度为 高 (0.86)",
"相似度": 0.855
}
python lib/text_embedding.py
输出:
示例 1: 默认模型(chinese)
相似度: 0.855
说明: 基于向量模型计算的语义相似度为 高 (0.86)
示例 2: 使用默认模型
相似度: 0.486
说明: 基于向量模型计算的语义相似度为 较低 (0.49)
示例 3: 不相关的短语
相似度: 0.187
说明: 基于向量模型计算的语义相似度为 低 (0.19)
示例 4: 多语言模型(multilingual)
相似度: 0.950
说明: 基于向量模型计算的语义相似度为 极高 (0.95)
============================================================
支持的模型:
------------------------------------------------------------
chinese -> shibing624/text2vec-base-chinese
multilingual -> shibing624/text2vec-base-multilingual
paraphrase -> shibing624/text2vec-base-chinese-paraphrase
sentence -> shibing624/text2vec-base-chinese-sentence
result = compare_phrases("深度学习", "神经网络")
# 使用 chinese 模型
result = compare_phrases("Hello", "Hi", model_name="multilingual")
result = compare_phrases("こんにちは", "你好", model_name="multilingual")
long_text_1 = "这是一段很长的文本..."
long_text_2 = "这是另一段很长的文本..."
result = compare_phrases(long_text_1, long_text_2, model_name="paraphrase")
result = compare_phrases("你好", "您好", model_name="sentence")
余弦相似度(基于 BERT 向量)
输入: "深度学习" vs "神经网络"
↓
BERT 模型转换为向量
↓
计算余弦相似度
↓
返回: 0.486
| 特性 | semantic_similarity | text_embedding |
|---|---|---|
| 算分方法 | LLM 判断 | BERT 向量 |
| 返回格式 | {说明, 相似度} |
{说明, 相似度} ✅ |
| 速度 | 慢(需要调用 AI) | 快 |
| 成本 | 有 token 成本 | 零成本 |
| 模型数量 | 1 个 | 4 个 |
| 代码行数 | 508 行 | 163 行 |
A: 是的,第一次使用某个模型时会自动下载(约 400MB),之后就很快了。
A: 可以!代码会自动缓存已加载的模型。
# 第一次调用会下载 chinese 模型
result1 = compare_phrases("文本1", "文本2")
# 第一次调用会下载 multilingual 模型
result2 = compare_phrases("Hello", "Hi", model_name="multilingual")
# 第二次调用直接使用缓存的模型,速度很快
result3 = compare_phrases("文本3", "文本4")
A:
chinese(默认)multilingualparaphrasesentenceA: 不确定就用默认的 chinese,99% 的情况都够用!
只需要记住:
from lib.text_embedding import compare_phrases
# 基础用法(99% 的情况)
result = compare_phrases("文本A", "文本B")
# 切换模型
result = compare_phrases("文本A", "文本B", model_name="multilingual")
支持 4 种模型:
chinese - 默认multilingual - 多语言paraphrase - 长文本sentence - 短句子就这么简单!