Datawhale | AI+X AI 夏令营2024 Task3 笔记(2)

108 阅读4分钟

#AI夏令营 #Datawhale #夏令营

观察数据分布

赛题方提供了184条真实场景的群聊对话数据以及人工标注后的字段提取结果,其中训练数据129条,测试数据 55条。按照各类字段提取的难易程度,共设置了 1、2、3 三种难度分数。待提取的字段以及提取正确时的得分规则如下:

序号字段名称是否单值是否可为空难度分数答案是否唯一备注
1基本信息-姓名1
2基本信息-手机号码1
3基本信息-邮箱1
4基本信息-地区1
5基本信息-详细地址1
6基本信息-性别1
7基本信息-年龄1
8基本信息-生日1
9咨询类型2
10意向产品3
11购买异议点3
12客户预算-预算是否充足2
13客户预算-总体预算金额2
14客户预算-预算明细3
15竞品信息2
16客户是否有意向1
17客户是否有卡点1
18客户购买阶段2
19下一步跟进计划-参与人2
20下一步跟进计划-时间点2
21下一步跟进计划-具体事项3

备注:

1)可为空的字段,当判定无相应信息、无法做出判断等情况,统一取值为空字符串

2)对于非单值字段,请使用 list 来表示

回顾评估指标

测试集的每条数据同样包含共 21 个字段, 按照各字段难易程度划分总计满分 36 分。每个提取正确性的判定标准如下:

1)对于答案唯一字段,将使用完全匹配的方式计算提取是否正确,提取正确得到相应分数,否则为 0 分

2)对于答案不唯一字段,将综合考虑提取完整性、语义相似度等维度判定提取的匹配分数,最终该字段得分为 “匹配分数 * 该字段难度分数”

每条测试数据的最终得分为各字段累计得分。最终测试集上的分数为所有测试数据的平均得分。

省流版本

21 个字段,总分 36 分。然后可以手动构造一个只有字段名值全为空的交上去,我记得有 24 分,说明大部分内容其实是空的。

大部分字段都是答案唯一字段,走完全匹配的方式。

如何验证?

考虑构造得零分的结果,然后以此为基础构造某个字段为空的结果,依次带入试出每个字段到底有多少为空,多少为值。

得零分的结果可以这样构造

import json

data_0mark = {
    "基本信息-姓名": "忽略",
    "基本信息-手机号码": "忽略",
    "基本信息-邮箱": "忽略",
    "基本信息-地区": "忽略",
    "基本信息-详细地址": "忽略",
    "基本信息-性别": "忽略",
    "基本信息-年龄": "忽略",
    "基本信息-生日": "忽略",
    "咨询类型": ["忽略"],
    "意向产品": ["忽略"],
    "购买异议点": ["忽略"],
    "客户预算-预算是否充足": "忽略",
    "客户预算-总体预算金额": "忽略",
    "客户预算-预算明细": "忽略",
    "竞品信息": "忽略",
    "客户是否有意向": "忽略",
    "客户是否有卡点": "忽略",
    "客户购买阶段": "忽略",
    "下一步跟进计划-参与人": ["忽略"],
    "下一步跟进计划-时间点": "忽略",
    "下一步跟进计划-具体事项": "忽略"
}

data_list = []
for i in range(55):
    data_list.append({
        "infos": [data_0mark],
        "index": i + 1
    })
    
with open('output-0mark.json', 'w', encoding='utf-8') as f:
    json.dump(data_list, f, ensure_ascii=False, indent=4)

然后分别把每个字段置空,再分别生成结果,拿去判分。

后续思路指导?

可以根据字段得分情况,将每个字段单独作为一个抽取任务来做,分别写 prompt ,最后将得到的结果拼接起来即可。