example_text_embedding_usecase.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #!/usr/bin/env python3
  2. """
  3. text_embedding 实际应用场景示例
  4. """
  5. import asyncio
  6. from lib.text_embedding import SentenceModel
  7. import numpy as np
  8. async def usecase_1_semantic_search():
  9. """
  10. 应用场景1: 语义搜索
  11. - 用户输入一个查询
  12. - 从大量文本中找出最相关的内容
  13. """
  14. print("=" * 60)
  15. print("应用场景1: 语义搜索")
  16. print("=" * 60)
  17. model = SentenceModel(dim=128)
  18. # 文档库(比如知识库、文章库)
  19. documents = [
  20. "深度学习是机器学习的一个重要分支",
  21. "神经网络模拟人脑的结构和功能",
  22. "自然语言处理用于理解和生成人类语言",
  23. "计算机视觉让机器能够理解图像",
  24. "今天天气晴朗,适合出门散步",
  25. "晚餐吃了美味的意大利面",
  26. ]
  27. # 用户查询
  28. query = "什么是深度学习?"
  29. print(f"\n用户查询: {query}")
  30. print(f"\n文档库中有 {len(documents)} 篇文档")
  31. print("\n搜索结果(按相关度排序):")
  32. # 计算查询与每篇文档的相似度
  33. results = []
  34. for doc in documents:
  35. score = await model.similarity(query, doc)
  36. results.append((doc, score))
  37. # 排序并展示前3个最相关的
  38. results.sort(key=lambda x: x[1], reverse=True)
  39. for i, (doc, score) in enumerate(results[:3], 1):
  40. print(f"\n Top {i} (相似度: {score:.3f})")
  41. print(f" {doc}")
  42. async def usecase_2_text_clustering():
  43. """
  44. 应用场景2: 文本聚类
  45. - 把相似的文本分组
  46. """
  47. print("\n" + "=" * 60)
  48. print("应用场景2: 文本聚类(相似内容分组)")
  49. print("=" * 60)
  50. model = SentenceModel(dim=128)
  51. texts = [
  52. "机器学习算法很强大",
  53. "深度神经网络效果很好",
  54. "今天吃了火锅",
  55. "晚餐很美味",
  56. "AI技术发展迅速",
  57. "明天去爬山",
  58. ]
  59. print(f"\n待分组文本: {texts}")
  60. # 简单聚类:找出相似度 > 0.6 的文本对
  61. print("\n相似文本对(相似度 > 0.6):")
  62. similar_pairs = []
  63. for i in range(len(texts)):
  64. for j in range(i + 1, len(texts)):
  65. score = await model.similarity(texts[i], texts[j])
  66. if score > 0.6:
  67. similar_pairs.append((texts[i], texts[j], score))
  68. for text1, text2, score in similar_pairs:
  69. print(f"\n 相似度: {score:.3f}")
  70. print(f" - {text1}")
  71. print(f" - {text2}")
  72. async def usecase_3_duplicate_detection():
  73. """
  74. 应用场景3: 重复/相似内容检测
  75. - 识别意思相同但表述不同的文本
  76. """
  77. print("\n" + "=" * 60)
  78. print("应用场景3: 重复内容检测")
  79. print("=" * 60)
  80. model = SentenceModel(dim=128)
  81. # 用户提交的问题列表
  82. questions = [
  83. "如何学习Python编程?",
  84. "怎样才能学好Python?",
  85. "Python入门教程有哪些?",
  86. "今天天气怎么样?",
  87. "北京今天的天气如何?",
  88. ]
  89. print(f"\n问题列表:")
  90. for i, q in enumerate(questions, 1):
  91. print(f" {i}. {q}")
  92. # 检测重复(相似度 > 0.7 视为重复)
  93. print("\n检测到的重复问题(相似度 > 0.7):")
  94. threshold = 0.7
  95. duplicates = []
  96. for i in range(len(questions)):
  97. for j in range(i + 1, len(questions)):
  98. score = await model.similarity(questions[i], questions[j])
  99. if score > threshold:
  100. duplicates.append((i+1, j+1, questions[i], questions[j], score))
  101. for idx1, idx2, q1, q2, score in duplicates:
  102. print(f"\n 问题{idx1} 和 问题{idx2} 相似 (相似度: {score:.3f})")
  103. print(f" - {q1}")
  104. print(f" - {q2}")
  105. async def main():
  106. """运行所有应用场景示例"""
  107. # 场景1: 语义搜索
  108. await usecase_1_semantic_search()
  109. # 场景2: 文本聚类
  110. await usecase_2_text_clustering()
  111. # 场景3: 重复检测
  112. await usecase_3_duplicate_detection()
  113. print("\n" + "=" * 60)
  114. print("所有示例完成!")
  115. print("=" * 60)
  116. if __name__ == "__main__":
  117. asyncio.run(main())