template_relevant_map.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from intent_description_template import *
  2. from FlagEmbedding import FlagAutoModel, FlagReranker
  3. from intent_description_template import template
  4. import torch
  5. import os
  6. import faiss
  7. import numpy as np
  8. import pandas as pd
  9. num = 1
  10. template_list = []
  11. for k, v in template.items():
  12. for v2 in v:
  13. template_list.append((str(num), k, v2))
  14. num+=1
  15. def print_gpu():
  16. if torch.cuda.is_available():
  17. print(f"allocated:{torch.cuda.memory_allocated()/1024**3:.2f}GB", end=' ')
  18. print(f"reserved: {torch.cuda.memory_reserved()/1024**3:.2f}GB")
  19. # 加载模型
  20. reranker = FlagReranker('./bge-reranker-v2-m3', use_fp16=True, local_files_only=True,devices=["cuda:0"])
  21. # 模型预热
  22. reranker.compute_score([("这是一段预热文字,首次推理通过预测保证后续推理的稳定性和性能。","这是一段预热文字,首次推理通过预测保证后续推理的稳定性和性能。")])
  23. print_gpu()
  24. # 开始计算矩阵
  25. mat = np.zeros([len(template_list)+1, len(template_list)+1])
  26. for i in range(len(template_list)+1):
  27. mat[i][0] = i
  28. mat[0][i] = i
  29. for i in range(len(template_list)):
  30. query_template_pairs = []
  31. for j in range(len(template_list)):
  32. query_template_pairs.append((template_list[i][2], template_list[j][2]))
  33. relevant_score = reranker.compute_score(query_template_pairs, normalize=True)
  34. print(f"完成{i+1}行...")
  35. # 填充
  36. for j in range(len(template_list)):
  37. mat[i+1, j+1] = relevant_score[j]
  38. # 将NumPy矩阵转换为DataFrame
  39. df = pd.DataFrame(mat)
  40. # 保存到Excel文件,不包含行索引和列标题
  41. df.to_excel('template_similarity_matrix.xlsx', index=False, header=False, float_format='%.2f')
  42. df = pd.DataFrame([("序号", "意图", "描述")] + template_list)
  43. df.to_excel('template_description.xlsx', index=False, header=False)
  44. pass