BGE-Large-Zh实操手册:导出相似度矩阵CSV用于下游分析的完整流程

BGE-Large-Zh实操手册:导出相似度矩阵CSV用于下游分析的完整流程 BGE-Large-Zh实操手册导出相似度矩阵CSV用于下游分析的完整流程1. 工具概述与核心价值BGE-Large-Zh是一款基于FlagEmbedding库和BAAI/bge-large-zh-v1.5模型开发的本地语义向量化工具专门针对中文语境进行了深度优化。这个工具的核心功能是将中文文本转换为高维语义向量并通过计算向量间的相似度来评估文本之间的语义关联程度。在实际应用中这个工具特别适合以下场景中文文档检索和匹配问答系统的最佳答案查找内容推荐和相似度分析文本聚类和分类任务工具的突出优势在于完全本地运行无需网络连接确保了数据隐私和安全。同时自动适配GPU/CPU环境在GPU环境下会启用FP16精度加速计算大幅提升处理效率。2. 环境准备与快速部署2.1 系统要求在开始使用之前请确保您的系统满足以下基本要求Python 3.8或更高版本至少8GB内存推荐16GB以上可选NVIDIA GPUCUDA 11.7或更高版本用于加速计算2.2 安装依赖包通过pip安装所需的依赖包pip install FlagEmbedding pandas numpy matplotlib seaborn2.3 验证安装安装完成后可以通过以下代码验证环境是否配置正确import FlagEmbedding import torch print(FlagEmbedding版本:, FlagEmbedding.__version__) print(CUDA是否可用:, torch.cuda.is_available()) if torch.cuda.is_available(): print(GPU设备:, torch.cuda.get_device_name(0))3. 基础使用与相似度计算3.1 初始化模型首先我们需要加载预训练模型from FlagEmbedding import FlagModel # 初始化模型自动检测GPU并启用FP16加速 model FlagModel(BAAI/bge-large-zh-v1.5, query_instruction_for_retrieval为这个句子生成表示以用于检索相关文章, use_fp16True)3.2 准备测试数据让我们准备一些示例数据来进行测试# 查询语句 queries [ 谁是李白, 感冒了怎么办, 苹果公司的股价 ] # 文档库 passages [ 李白701年762年字太白号青莲居士唐朝著名诗人。, 感冒是一种常见的呼吸道疾病建议多喝水、休息。, 苹果公司是美国一家高科技公司主要生产电子产品。, 苹果是一种水果富含维生素和矿物质。, 今天天气晴朗适合外出活动。 ]3.3 计算语义相似度使用模型计算查询和文档之间的相似度# 计算相似度矩阵 similarity_matrix model.compute_score(queries, passages) print(相似度矩阵形状:, similarity_matrix.shape) print(相似度矩阵:) print(similarity_matrix)4. 导出相似度矩阵到CSV4.1 基本导出方法将相似度矩阵导出为CSV文件是最常见的需求下面是最简单的实现方式import pandas as pd import numpy as np # 创建DataFrame df_similarity pd.DataFrame(similarity_matrix, index[f查询_{i1} for i in range(len(queries))], columns[f文档_{j1} for j in range(len(passages))]) # 导出到CSV df_similarity.to_csv(相似度矩阵.csv, encodingutf-8-sig) print(相似度矩阵已导出到 相似度矩阵.csv)4.2 增强版导出功能为了便于后续分析我们可以导出更详细的信息def export_enhanced_similarity_matrix(queries, passages, similarity_matrix, filename): 导出增强版的相似度矩阵CSV文件 # 创建详细的结果DataFrame results [] for i, query in enumerate(queries): for j, passage in enumerate(passages): results.append({ 查询ID: fQ{i1}, 查询内容: query, 文档ID: fD{j1}, 文档内容: passage, 相似度得分: round(similarity_matrix[i][j], 6) }) # 创建DataFrame并排序 df_detailed pd.DataFrame(results) df_detailed df_detailed.sort_values([查询ID, 相似度得分], ascending[True, False]) # 导出详细结果 df_detailed.to_csv(f详细_{filename}, indexFalse, encodingutf-8-sig) # 同时导出矩阵格式 df_matrix pd.DataFrame(similarity_matrix, index[fQ{i1}: {q[:20]}... for i, q in enumerate(queries)], columns[fD{j1}: {p[:20]}... for j, p in enumerate(passages)]) df_matrix.to_csv(f矩阵_{filename}, encodingutf-8-sig) return df_detailed, df_matrix # 使用增强导出功能 detailed_df, matrix_df export_enhanced_similarity_matrix(queries, passages, similarity_matrix, 相似度分析结果.csv)5. 下游分析应用示例5.1 最佳匹配分析基于导出的CSV数据我们可以进行各种下游分析def analyze_top_matches(csv_file_path, top_n3): 分析每个查询的最佳匹配文档 df pd.read_csv(csv_file_path) # 找出每个查询的前N个最佳匹配 top_matches df.sort_values([查询ID, 相似度得分], ascending[True, False])\ .groupby(查询ID).head(top_n) # 导出最佳匹配结果 top_matches.to_csv(最佳匹配结果.csv, indexFalse, encodingutf-8-sig) # 分析匹配质量 match_quality df.groupby(查询ID)[相似度得分].agg([max, mean, std]) match_quality.to_csv(匹配质量分析.csv, encodingutf-8-sig) return top_matches, match_quality # 进行分析 top_matches, quality_analysis analyze_top_matches(详细_相似度分析结果.csv)5.2 相似度分布分析了解相似度得分的分布情况import matplotlib.pyplot as plt import seaborn as sns def analyze_similarity_distribution(df): 分析相似度得分的分布情况 plt.figure(figsize(12, 6)) # 绘制分布直方图 plt.subplot(1, 2, 1) sns.histplot(df[相似度得分], bins20, kdeTrue) plt.title(相似度得分分布) plt.xlabel(相似度得分) plt.ylabel(频次) # 绘制箱线图 plt.subplot(1, 2, 2) sns.boxplot(ydf[相似度得分]) plt.title(相似度得分箱线图) plt.tight_layout() plt.savefig(相似度分布分析.png, dpi300, bbox_inchestight) plt.show() # 保存统计描述 stats df[相似度得分].describe() stats.to_csv(相似度统计描述.csv, encodingutf-8-sig) return stats # 分析分布 stats analyze_similarity_distribution(detailed_df)6. 批量处理与自动化流程6.1 批量处理多个查询集对于大规模应用我们需要批量处理能力def batch_process_queries(queries_list, passages, output_dirbatch_results): 批量处理多个查询集 import os os.makedirs(output_dir, exist_okTrue) all_results [] for idx, queries in enumerate(queries_list): print(f处理第 {idx1} 个查询集...) # 计算相似度 similarity_matrix model.compute_score(queries, passages) # 导出结果 detailed_df, matrix_df export_enhanced_similarity_matrix( queries, passages, similarity_matrix, f{output_dir}/批次_{idx1}_相似度分析.csv ) # 记录汇总信息 summary { 批次ID: idx1, 查询数量: len(queries), 平均相似度: np.mean(similarity_matrix), 最高相似度: np.max(similarity_matrix) } all_results.append(summary) # 保存批量处理汇总 pd.DataFrame(all_results).to_csv(f{output_dir}/批量处理汇总.csv, indexFalse, encodingutf-8-sig) return all_results # 示例批量处理 batch_queries [ [什么是机器学习, 深度学习的好处], [推荐一些书籍, 如何学习编程] ] batch_results batch_process_queries(batch_queries, passages)6.2 自动化分析流水线创建完整的自动化分析流水线def create_analysis_pipeline(queries, passages, pipeline_name默认分析): 创建完整的相似度分析流水线 print(f开始执行分析流水线: {pipeline_name}) print( * 50) # 1. 计算相似度 print(步骤1: 计算语义相似度...) similarity_matrix model.compute_score(queries, passages) # 2. 导出详细结果 print(步骤2: 导出详细结果...) detailed_df, matrix_df export_enhanced_similarity_matrix( queries, passages, similarity_matrix, f{pipeline_name}_相似度分析.csv ) # 3. 分析最佳匹配 print(步骤3: 分析最佳匹配...) top_matches, quality_analysis analyze_top_matches( f详细_{pipeline_name}_相似度分析.csv ) # 4. 分析分布 print(步骤4: 分析相似度分布...) stats analyze_similarity_distribution(detailed_df) # 5. 生成汇总报告 print(步骤5: 生成汇总报告...) generate_summary_report(pipeline_name, detailed_df, top_matches, stats) print(分析完成结果文件已保存。) print( * 50) def generate_summary_report(name, detailed_df, top_matches, stats): 生成分析汇总报告 report_content f # 相似度分析汇总报告 - {name} 生成时间: {pd.Timestamp.now()} ## 总体统计 - 总查询-文档对数量: {len(detailed_df)} - 平均相似度得分: {stats[mean]:.4f} - 最高相似度得分: {stats[max]:.4f} - 得分标准差: {stats[std]:.4f} ## 最佳匹配摘要 {top_matches.groupby(查询ID)[相似度得分].max().to_string()} ## 详细统计 {stats.to_string()} with open(f{name}_分析报告.md, w, encodingutf-8) as f: f.write(report_content) # 执行完整分析流水线 create_analysis_pipeline(queries, passages, 测试数据分析)7. 总结与最佳实践通过本文的完整流程您已经掌握了使用BGE-Large-Zh工具导出相似度矩阵CSV并进行下游分析的全套方法。以下是一些最佳实践建议数据准备方面确保查询和文档文本已经过适当的清洗和预处理对于长文档考虑使用滑动窗口或关键句提取技术保持文本编码的一致性推荐UTF-8性能优化建议在GPU环境下运行以获得最佳性能对于大批量处理考虑使用批处理功能定期监控内存使用情况避免内存溢出结果分析技巧关注高相似度匹配通常0.6值得进一步审查分析相似度分布模式识别异常值结合领域知识设定合适的相似度阈值扩展应用思路将相似度矩阵用于聚类分析构建基于内容的推荐系统开发自动问答和检索系统进行文本分类和情感分析这个工具链的强大之处在于它的灵活性和可扩展性您可以根据具体需求调整和扩展这些代码构建适合自己项目的语义相似度分析解决方案。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。