From 3b35f139cb67b5c0f1c5427728555eea350647a3 Mon Sep 17 00:00:00 2001 From: tangwang Date: Tue, 31 Mar 2026 13:25:18 +0800 Subject: [PATCH] search evalution --- config/config.yaml | 2 +- scripts/evaluation/README.md | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ scripts/evaluation/ff.md | 22 ---------------------- scripts/evaluation/queries/queries.txt | 51 +++++++++++++++++++++++++++++---------------------- 4 files changed, 154 insertions(+), 45 deletions(-) create mode 100644 scripts/evaluation/README.md delete mode 100644 scripts/evaluation/ff.md diff --git a/config/config.yaml b/config/config.yaml index a2656f6..83a2479 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -512,7 +512,7 @@ services: dtype: "float16" enable_prefix_caching: true enforce_eager: false - infer_batch_size: 84 + infer_batch_size: 80 sort_by_doc_length: true # 默认 standard 与 vLLM 官方 Qwen3 reranker 前缀一致 instruction_format: standard # compact standard diff --git a/scripts/evaluation/README.md b/scripts/evaluation/README.md new file mode 100644 index 0000000..21aa5ce --- /dev/null +++ b/scripts/evaluation/README.md @@ -0,0 +1,124 @@ +参考资料: + +1. 搜索接口: + +```bash +export BASE_URL="${BASE_URL:-http://localhost:6002}" +export TENANT_ID="${TENANT_ID:-163}" # 改成你的租户ID +``` +```bash +curl -sS "$BASE_URL/search/" \ + -H "Content-Type: application/json" \ + -H "X-Tenant-ID: $TENANT_ID" \ + -d '{ + "query": "芭比娃娃", + "size": 20, + "from": 0, + "language": "zh" + }' +``` + +response: +{ + "results": [ + { + "spu_id": "12345", + "title": "芭比时尚娃娃", + "brief": "高品质芭比娃娃", + "description": "详细描述...", + "vendor": "美泰", + "category": "玩具", + "category_path": "玩具/娃娃/时尚", + "category_name": "时尚", + "category_id": "cat_001", + "category_level": 3, + "category1_name": "玩具", + "category2_name": "娃娃", + "category3_name": "时尚", + "tags": ["娃娃", "玩具", "女孩"], + "price": 89.99, + "compare_at_price": 129.99, + "currency": "USD", + "image_url": "https://example.com/image.jpg", + "in_stock": true, + "sku_prices": [89.99, 99.99, 109.99], + "sku_weights": [100, 150, 200], + "sku_weight_units": ["g", "g", "g"], + "total_inventory": 500, + "option1_name": "color", + "option2_name": "size", + "option3_name": null, + +2. 重排服务: +curl -X POST "http://localhost:6007/rerank" \ + -H "Content-Type: application/json" \ + -d '{ + "query": "玩具 芭比", + "docs": ["12PCS 6 Types of Dolls with Bottles", "纯棉T恤 短袖"], + "top_n":386, + "normalize": true + }' + + +3. 基于指定字段查询:es_debug_search.py + + +主要任务: +1. 评估工具的建立: +注意判断结果好坏,要用统一的评估工具,不要对每个query设定关键词匹配的规则来判断是否符合要求,这样不可扩展,这种方式且容易有误判还是复杂,并且不好扩展到其他搜索词。 +因此要做一个搜索结果评估工具、多个结果对比的工具,供后面的标注集合构建工具调用。工具内部实现可以是调用大模型来判断,说清楚什么叫高相关、基本相关、不相关: + +prompt: +```bash +你是一个电商搜索结果相关性评估助手。请根据用户查询(query)和每个商品的信息,输出该商品的相关性等级。 + +## 相关性等级标准 +Exact 完全相关 — 完全匹配用户搜索需求。 +Partial 部分相关 — 主意图满足(同品类或相近用途),但次要属性(如颜色、风格、尺码等)有偏差或无法确认。 +Irrelevant 不相关 — 品类或用途不符,主诉求未满足。 + + +1. {title1} | {option1_value1}, {option2_value1}, {option3_value1} +2. {title2} | {option1_value2}, {option2_value2}, {option3_value2} +... +50. {title50} | {option1_value50}, {option2_value50}, {option3_value50} + +## 输出格式 +严格输出 {input_nums} 行,每行仅Exact / Partial / Irrelevant三者之一。按顺序对应上述 50 个商品。不要输出任何其他任何信息 +``` + + +2. 测试集(结果标注)建立: +@queries/queries.txt + +对其中每一个query: +1. 召回: +1)参考搜索接口 召回1k结果。 +2)遍历全库,得到每个spu的title,请求重排模型,进行全排序,得到top1w结果。注意重排模型打分一定要做缓存(本地文件缓存即可。query+title->rerank_score)。 +2. 对以上结果,拆分batch请求llm,进行结果标注。 +3. 请你思考如何存储结果、并利于以后的对比、使用、展示。 + + +3. 评估工具页面: +请你设计一个搜索评估交互页面。端口6010。 +页面主题:上方是搜索框,如果发起搜索,那么下方给出本次结果的总体指标以及top100结果(允许翻页) + +总体指标: +| 指标 | 含义 | +|------|------| +| **P@5, P@10, P@20, P@50** | 前 K 个结果中「仅 3 相关」的精确率 | +| **P@5_2_3 ~ P@50_2_3** | 前 K 个结果中「2 和 3 都算相关」的精确率 | +| **MAP_3** | 仅 3 相关时的 Average Precision(单 query) | +| **MAP_2_3** | 2 和 3 都相关时的 Average Precision | + +结果列表: +按行列下来,每行左侧给每个结果找到标注值(三个等级。对结果也可以颜色标记),展示图片,title.en+title.en+首个sku的option1/2/3_value(分三行展示,这三行和左侧的图片并列) + + +评测页面最左侧: +queries默认是queries/queries.txt,填入左侧列表框,点击其中任何一个发起搜索。 + +4. 批量评估工具脚本 +给一个批量执行脚本,跑完所有query,进行各维度结果的汇总,生成报告,报告名称带上时间标记和一些关键信息。 + + diff --git a/scripts/evaluation/ff.md b/scripts/evaluation/ff.md deleted file mode 100644 index bdda782..0000000 --- a/scripts/evaluation/ff.md +++ /dev/null @@ -1,22 +0,0 @@ - - - -- R3 完全相关:该结果的核心意图被满足,标题/副标题/类目/属性不违背意图。 -- R2 部分相关:同品类或相近用途,但规格/材质/年龄段/场景等维度的要求有偏差。 -- R1 不相关:品类/用途不符,或明显错误/违禁/空结果。 - - -## 指标说明 - -- **相关性**:1=低,2=中,3=高。 -- **「仅 3 相关」**:只把打分 3 视为相关;**「2_3 相关」**:把 2 和 3 都视为相关。 - -| 指标 | 含义 | -|------|------| -| **P@5, P@10, P@20, P@50** | 前 K 个结果中「仅 3 相关」的精确率 | -| **P@5_2_3 ~ P@50_2_3** | 前 K 个结果中「2 和 3 都算相关」的精确率 | -| **MAP_3** | 仅 3 相关时的 Average Precision(单 query) | -| **MAP_2_3** | 2 和 3 都相关时的 Average Precision | -| **AUC_3** | 仅 3 相关、1/2 不相关时,随机相关项排在随机不相关项前的概率 | -| **AUC_2_3** | 2 和 3 相关、1 不相关时的同上 AUC | - diff --git a/scripts/evaluation/queries/queries.txt b/scripts/evaluation/queries/queries.txt index a91aad6..6906959 100644 --- a/scripts/evaluation/queries/queries.txt +++ b/scripts/evaluation/queries/queries.txt @@ -11,33 +11,40 @@ vacation outfit dress minimalist top streetwear t-shirt office casual blouse -街头风T恤 -宽松T恤 -复古印花T恤 -Y2K上衣 -情侣T恤 -美式复古T恤 -重磅棉T恤 -修身打底衫 -辣妹风短袖 -纯欲上衣 -正肩白T恤 波西米亚花朵衬衫 泡泡袖短袖 扎染字母T恤 -T-shirt Dress -Crop Top -Lace Undershirt -Leopard Print Ripped T-shirt -Breton Stripe T-shirt V-Neck Cotton T-shirt -Sweet & Cool Bow T-shirt -Vacation Style T-shirt -Commuter Casual Top -Minimalist Solid T-shirt -Band T-shirt Athletic Gym T-shirt Plus Size Loose T-shirt Korean Style Slim T-shirt Basic Layering Top - +shawl collar cardigan +swim dress +毕业典礼定制西装 +colorblock hoodie +sock boots +旅行服装 +khaki green backpack +皱边裙 +高跟鞋 +图案连身衣 +天鹅绒鸡尾酒会礼服 +Wearing small clothes +gingham dress +海滩度假装 +vacation outfits +running shorts +pink sweater aesthetic +hiking boots +宽松开襟羊毛衫 +business casual women +a-line dress +涤纶短裤 +哺乳文胸 +Compression Top Spandex +skiing trip insulated base layer +high waisted jeans +无袖夏装 +雪纺衬衫 +convertible zip-off hiking pants \ No newline at end of file -- libgit2 0.21.2