compare_with_semantic_similarity.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/usr/bin/env python3
  2. """
  3. 对比 semantic_similarity 和 text_embedding 两个模块的接口
  4. """
  5. import asyncio
  6. async def main():
  7. print("=" * 70)
  8. print("对比 semantic_similarity 和 text_embedding 两个模块")
  9. print("=" * 70)
  10. print()
  11. # ========== 1. 导入方式对比 ==========
  12. print("1. 导入方式")
  13. print("-" * 70)
  14. print("# semantic_similarity 模块")
  15. print("from lib.semantic_similarity import compare_phrases")
  16. print()
  17. print("# text_embedding 模块(兼容接口)")
  18. print("from lib.text_embedding import compare_phrases")
  19. print()
  20. # ========== 2. 基本使用对比 ==========
  21. print("2. 基本使用(完全兼容)")
  22. print("-" * 70)
  23. print("""
  24. # 两个模块的基本用法完全相同
  25. result = await compare_phrases("深度学习", "神经网络")
  26. # 返回格式完全一致
  27. {
  28. "说明": "简明扼要说明理由",
  29. "相似度": 0.85
  30. }
  31. """)
  32. # ========== 3. 实际对比 ==========
  33. print("3. 实际效果对比")
  34. print("-" * 70)
  35. phrase_a = "机器学习"
  36. phrase_b = "人工智能"
  37. print(f"\n测试短语: 【{phrase_a}】 vs 【{phrase_b}】\n")
  38. # 使用 text_embedding 模块(因为它兼容 semantic_similarity)
  39. from lib.text_embedding import compare_phrases as compare_phrases_embed
  40. result = await compare_phrases_embed(phrase_a, phrase_b)
  41. print("text_embedding.compare_phrases() 结果:")
  42. print(f" 相似度: {result['相似度']}")
  43. print(f" 说明: {result['说明']}")
  44. print()
  45. # ========== 4. 功能对比 ==========
  46. print("4. 功能对比")
  47. print("-" * 70)
  48. comparison = """
  49. ┌─────────────────────────────────────────────────────────────────┐
  50. │ 功能对比表 │
  51. ├─────────────────────────┬─────────────────┬─────────────────────┤
  52. │ 功能 │ semantic_sim. │ text_embedding │
  53. ├─────────────────────────┼─────────────────┼─────────────────────┤
  54. │ 返回格式 │ {说明, 相似度} │ {说明, 相似度} ✅ │
  55. │ AI 直接判断 │ ✅ │ ✅ │
  56. │ 余弦相似度 (向量) │ ❌ │ ✅ │
  57. │ 欧氏距离 (向量) │ ❌ │ ✅ │
  58. │ 曼哈顿距离 (向量) │ ❌ │ ✅ │
  59. │ 文本向量化 (encode) │ ❌ │ ✅ │
  60. │ 批量处理 │ ❌ │ ✅ │
  61. │ 缓存机制 │ ✅ │ ✅ │
  62. │ 多模型支持 │ ✅ │ ✅ │
  63. └─────────────────────────┴─────────────────┴─────────────────────┘
  64. """
  65. print(comparison)
  66. # ========== 5. 使用场景推荐 ==========
  67. print("5. 使用场景推荐")
  68. print("-" * 70)
  69. recommendations = """
  70. 【推荐使用 semantic_similarity】
  71. - 只需要简单的相似度判断
  72. - 专注于语义分析
  73. - 不需要向量化功能
  74. 【推荐使用 text_embedding】
  75. - 需要文本向量化(encode)
  76. - 需要多种相似度计算方法
  77. - 需要批量处理文本
  78. - 需要兼容 semantic_similarity 的代码
  79. - 想要更多的灵活性
  80. 【无缝迁移】
  81. 如果你之前使用 semantic_similarity.compare_phrases(),
  82. 可以直接替换为 text_embedding.compare_phrases(),
  83. 代码无需任何修改!
  84. # 旧代码
  85. from lib.semantic_similarity import compare_phrases
  86. result = await compare_phrases("A", "B")
  87. # 新代码(只需改导入)
  88. from lib.text_embedding import compare_phrases
  89. result = await compare_phrases("A", "B")
  90. """
  91. print(recommendations)
  92. # ========== 6. 扩展功能演示 ==========
  93. print("6. text_embedding 的扩展功能演示")
  94. print("-" * 70)
  95. print("\n6.1 使用不同的计算方法:")
  96. methods = ["ai_direct", "cosine", "euclidean"]
  97. for method in methods:
  98. result = await compare_phrases_embed(
  99. phrase_a, phrase_b,
  100. method=method,
  101. dim=128
  102. )
  103. print(f" {method:15s}: 相似度 = {result['相似度']:.3f}")
  104. print("\n6.2 文本向量化:")
  105. from lib.text_embedding import encode
  106. vector = await encode("测试文本", dim=128)
  107. print(f" 向量维度: {vector.shape}")
  108. print(f" 向量前5个值: {vector[:5]}")
  109. print("\n6.3 批量处理:")
  110. from lib.text_embedding import SentenceModel
  111. model = SentenceModel(dim=128)
  112. texts = ["文本1", "文本2", "文本3"]
  113. vectors = await model.encode(texts)
  114. print(f" 批量转换 {len(texts)} 个文本")
  115. print()
  116. print("=" * 70)
  117. print("对比完成!")
  118. print("=" * 70)
  119. if __name__ == "__main__":
  120. asyncio.run(main())