拟启用语义搜索,如何获取Azure认知搜索的Precision与Recall指标?
获取Azure认知搜索的精确率(Precision)和召回率(Recall)指标
Azure认知搜索本身没有内置直接计算这两项指标的功能,你需要通过自定义测试流程来获取:
- 准备测试数据集
- 构建一组覆盖不同场景的自然语言查询测试用例,每个查询对应你预先标记好的相关文档集合(即理想中应被返回的文档)。要包含常见查询、边缘查询、歧义查询等,保证测试结果有代表性。
- 执行搜索并收集结果
- 调用Azure认知搜索的语义搜索API,逐个执行测试查询,记录返回的文档唯一标识(如ID)及排序顺序。
- 计算精确率和召回率
- 精确率(Precision):单查询维度下,用返回的相关文档数除以总返回文档数,公式为
Precision = (返回的相关文档数 / 总返回文档数);整体精确率可取所有查询的精确率平均值。如果关注Top N结果的表现,只需统计前N个返回结果中的相关文档数计算Top-N精确率。 - 召回率(Recall):单查询维度下,用返回的相关文档数除以预先标记的总相关文档数,公式为
Recall = (返回的相关文档数 / 标记的总相关文档数);整体召回率可取所有查询的召回率平均值。
- 精确率(Precision):单查询维度下,用返回的相关文档数除以总返回文档数,公式为
- 自动化测试脚本示例
可以用Python编写批量测试脚本,核心逻辑如下:from azure.core.credentials import AzureKeyCredential from azure.search.documents import SearchClient # 初始化搜索客户端 service_endpoint = "你的搜索服务端点" index_name = "你的索引名称" key = "你的搜索服务密钥" client = SearchClient(service_endpoint, index_name, AzureKeyCredential(key)) # 测试数据集:查询 -> 标记的相关文档ID列表 test_queries = { "如何配置Azure认知搜索语义搜索": ["doc1", "doc3", "doc5"], "语义搜索和传统搜索的区别": ["doc2", "doc5", "doc7"] } total_precision = 0 total_recall = 0 query_count = len(test_queries) for query, relevant_docs in test_queries.items(): # 执行语义搜索 results = client.search(query, query_type="semantic", semantic_configuration_name="你的语义配置名称") returned_docs = [doc["id"] for doc in results] # 统计匹配的相关文档数 matched = len(set(returned_docs) & set(relevant_docs)) # 计算单查询指标 precision = matched / len(returned_docs) if returned_docs else 0 recall = matched / len(relevant_docs) if relevant_docs else 0 total_precision += precision total_recall += recall print(f"查询: {query}") print(f"精确率: {precision:.2f}, 召回率: {recall:.2f}\n") # 输出整体指标 print(f"整体平均精确率: {total_precision/query_count:.2f}") print(f"整体平均召回率: {total_recall/query_count:.2f}") - 额外注意事项
- 测试时要使用和生产环境一致的语义配置(如语义字段、排名规则),避免指标失真。
- 文档集更新后,要同步更新测试数据集中的标记结果。
- 可结合F1分数(
F1 = 2*(Precision*Recall)/(Precision+Recall))综合评估搜索效果。
内容的提问来源于stack exchange,提问作者Srinath S
相关产品推荐
相关产品推荐

