|
|
@@ -72,32 +72,48 @@ class SimilarityItem(TypedDict):
|
|
|
|
|
|
# 批量提示词模板(LLM 打分用)。占位符:{count}、{pairs_list};JSON 内大括号已转义
|
|
|
DEFAULT_BATCH_PROMPT_TEMPLATE = """
|
|
|
-请从语意角度判断以下{count}对短语的相似度,每对从0-1打分,输出格式如下(必须是一个JSON数组):
|
|
|
+# 角色
|
|
|
+你是一个语言学家、信息学家,能够理解、区分、辨别不同词语、词汇之间所表达的语义信息量的细微差异。
|
|
|
+
|
|
|
+# 任务
|
|
|
+从语义相似程度的角度,对以下{count}对短语的语义相似度进行打分,两者的语义越相近得分越高。
|
|
|
+
|
|
|
+# 核心打分规则:
|
|
|
+1. 打分时必须严格区分“语义相似”与“语义关联”两种关系,语义"相似"≠语义"关联",不能混淆:
|
|
|
+- ✅ 语义相似(高分):两个词语表达的核心含义高度重叠,可以在相近语境中互相替换。例如:"快乐"与"开心"。
|
|
|
+- ❌ 语义关联(低分):两个词语有逻辑/功能/字形上的联系,但各自指代的事物或概念本身并不相同,不能互相替换。
|
|
|
+2. 禁止因为两个短语共享汉字或词根就给高分。字形相近 ≠ 语义相近。
|
|
|
+3. 当一个短语**包含另一个短语**作为组成部分时,复合后的语义范围已发生显著变化,应根据语义实际差距给分,不得因"包含"关系而虚高打分。
|
|
|
+4. 给每对短语进行打分时,将每对短语的打分都当做是完全独立的事件来判断打分,不同对的短语之间打分没有关联,当做自己看不到别的短语,**禁止**参考其它对短语的打分结果。
|
|
|
+
|
|
|
+# 打分量化参考(分值范围 0.00 - 1.00,最小颗粒度 0.01)
|
|
|
+- **[0.90 - 1.00] 极度相似 / 同义替换**:核心概念完全一致,仅表述习惯不同。
|
|
|
+- **[0.80 - 0.89] 高度相似 / 细微差异**:核心概念一致,但在范围、颗粒度、或侧重点上有轻微区别。
|
|
|
+- **[0.50 - 0.79] 中度相似 / 修饰偏离**:共享部分核心概念,但其中一个多出了强烈的修饰语或限定条件,导致语义重心发生偏移。
|
|
|
+- **[0.20 - 0.49] 低度相似 / 类别偏移**:字面有重合或场景高度相关,但**核心类别(词性或实体类型)已经改变**。
|
|
|
+- **[0.00 - 0.19] 毫不相干**:语义完全无关。
|
|
|
+
|
|
|
+# 输出格式(必须是一个JSON数组):
|
|
|
```json
|
|
|
[
|
|
|
{{
|
|
|
"text_1": "",
|
|
|
"text_2": "",
|
|
|
- "score": 0.0,
|
|
|
+ "score": 0.00,
|
|
|
"reason": "简明扼要说明理由"
|
|
|
}},
|
|
|
- {{
|
|
|
- "text_1": "",
|
|
|
- "text_2": "",
|
|
|
- "score": 0.0,
|
|
|
- "reason": "简明扼要说明理由"
|
|
|
- }}
|
|
|
+ ...
|
|
|
]
|
|
|
```
|
|
|
|
|
|
-短语对列表:
|
|
|
+# 短语对列表:
|
|
|
{pairs_list}
|
|
|
""".strip()
|
|
|
|
|
|
# Embedding 相似度 API
|
|
|
EMBEDDING_SIMILARITY_URL = "http://61.48.133.26:8187/cartesian_similarity"
|
|
|
# LLM 模型
|
|
|
-LLM_MODEL = "google/gemini-3-flash-preview"
|
|
|
+LLM_MODEL = "google/gemini-3.1-flash-lite-preview"
|
|
|
|
|
|
|
|
|
def _phrase_pairs(phrases_a: List[str], phrases_b: List[str]) -> List[Tuple[str, str]]:
|
|
|
@@ -339,8 +355,8 @@ async def test_similarity_matrix() -> None:
|
|
|
"""集成测试:调用 embedding + LLM 得到相似度对象列表。use_llm_cache 可控制是否使用 LLM 缓存。"""
|
|
|
# use_llm_cache = True
|
|
|
use_llm_cache = False
|
|
|
- phrases_a = ["犬", "猫咪", "夸张"]
|
|
|
- phrases_b = ["狗", "手机", "夸张堆叠"]
|
|
|
+ phrases_a = ["柴犬形象", "鞋子", "夸张"]
|
|
|
+ phrases_b = ["柴犬主角", "鞋架", "夸张堆叠"]
|
|
|
items = await similarity_matrix(phrases_a, phrases_b, use_llm_cache=use_llm_cache)
|
|
|
for item in items:
|
|
|
print(item)
|