example_text_embedding_model.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/env python3
  2. """
  3. 使用 SentenceModel 类(类似 text2vec 的用法)
  4. """
  5. import asyncio
  6. from lib.text_embedding import SentenceModel
  7. async def main():
  8. print("=" * 60)
  9. print("使用 SentenceModel 类")
  10. print("=" * 60)
  11. # 创建模型(只需要创建一次)
  12. model = SentenceModel(
  13. model_name='openai/gpt-4.1-mini',
  14. dim=128, # 向量维度
  15. use_cache=True # 启用缓存
  16. )
  17. # 1. 文本向量化
  18. print("\n1. 单个文本向量化")
  19. vector = await model.encode("机器学习很有趣")
  20. print(f"向量维度: {vector.shape}")
  21. # 2. 批量向量化
  22. print("\n2. 批量向量化")
  23. texts = ["文本1", "文本2", "文本3"]
  24. vectors = await model.encode(texts)
  25. print(f"转换了 {len(vectors)} 个文本")
  26. # 3. 计算相似度
  27. print("\n3. 计算相似度")
  28. score = await model.similarity("深度学习", "神经网络")
  29. print(f"相似度分数: {score:.3f}")
  30. # 4. 实际应用:找出最相似的文本
  31. print("\n4. 实际应用:找出最相似的文本")
  32. query = "人工智能"
  33. candidates = [
  34. "机器学习算法",
  35. "深度神经网络",
  36. "今天天气很好",
  37. "自然语言处理",
  38. "晚上吃什么饭"
  39. ]
  40. print(f"\n查询文本: {query}")
  41. print(f"候选文本: {candidates}")
  42. print("\n相似度排名:")
  43. # 计算所有候选文本的相似度
  44. scores = []
  45. for candidate in candidates:
  46. score = await model.similarity(query, candidate)
  47. scores.append((candidate, score))
  48. # 按相似度排序
  49. scores.sort(key=lambda x: x[1], reverse=True)
  50. for i, (text, score) in enumerate(scores, 1):
  51. print(f" {i}. {text:20s} -> {score:.3f}")
  52. if __name__ == "__main__":
  53. asyncio.run(main())