#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 ,最后将得到的结果拼接起来即可。