需通过五种结构化采样策略精准提取ShareGPT数据集中特定领域子集:一、正则匹配human文本;二、零样本分类器打分筛选;三、tools字段结构化抽取;四、system提示词聚类后人工抽样;五、知识图谱实体链接扩展。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您拥有一个庞大的ShareGPT格式数据集,但仅需其中特定领域(如法律咨询、编程问答或医疗对话)的子集用于微调任务,则必须通过结构化采样策略精准提取目标样本。以下是实现该目标的操作方法:
一、基于conversations字段内容的正则匹配过滤
该方法利用对话中human或gpt角色的value字段文本特征,通过预设关键词或正则表达式识别领域相关样本,适用于领域术语明确、表述稳定的场景。
1、使用Python加载原始JSONL文件,逐行解析每条对话记录。
2、对每条记录的conversations列表遍历,提取所有from为"human"的value字符串。
3、编译正则表达式模式,例如法律领域可使用r"(?i)合同|诉讼|被告|原告|民法典|仲裁|管辖权"。
4、对每个human value执行re.search(),若匹配成功则保留整条记录至新列表。
5、将筛选后的新列表序列化为独立JSONL文件并保存。
二、借助预训练领域分类器进行零样本打分筛选
该方法引入轻量级文本分类模型(如fasttext或DistilBERT微调版),对每条human输入进行领域概率打分,按阈值截取高置信度样本,适用于术语模糊、语义隐含的领域。
1、下载已公开的法律/医疗/编程领域fasttext分类模型.bin文件。
2、对每条记录中首个human value调用model.predict(),获取top-1标签及置信度。
3、设定阈值,例如legal类置信度≥0.85时判定为有效法律样本。
4、过滤出满足阈值条件的所有记录,并剔除重复system提示词导致的冗余样本。
5、将结果写入新文件,同时保留原始record id字段便于溯源。
三、依据tools字段结构化特征定向抽取
该方法聚焦ShareGPT格式中tools字段的存在性与schema结构,直接定位具备工具调用能力的对话片段,适用于需要强化模型function calling能力的子集构建。
1、检查每条记录是否包含非空tools字段且为合法JSON数组格式。
2、解析tools字段,验证其内部至少含一个tool对象,且该对象具有name和parameters属性。
3、进一步筛选parameters中包含"python"、"sql"、"regex"等关键字的tool定义。
4、确认conversations中存在至少一条from为"function_call"的记录,且其value包含合法JSON函数调用结构。
5、将同时满足以上四点的完整对话记录导出为专用子集文件。
四、按system提示词模板聚类后人工抽样
该方法依赖system字段中显式声明的任务类型或角色设定,先完成粗粒度聚类,再在各簇内按比例随机抽样,兼顾覆盖广度与人工校验可行性。
1、提取全部非空system字段字符串,使用Jieba分词并计算TF-IDF向量。
2、采用KMeans聚类(k=8)将system文本划分为若干语义相近组别。
3、对每个聚类中心反查原始记录,统计各簇样本数量及典型关键词。
4、针对“法律咨询”簇,人工审核前50条样本,标记其中完全符合《律师执业规范》问答结构的条目。
5、从该簇剩余样本中按1:4比例随机抽取,合并人工标记样本,形成最终子集。
五、利用外部知识图谱链接扩展领域边界
该方法将human value中的实体链接至Wikidata或CN-DBpedia,通过实体所属类别(P31)向上溯至顶层领域类目,从而捕获术语未显式出现但语义高度相关的样本。
1、调用spaCy中文模型识别human value中的名词短语与专有名词。
2、对每个识别出的实体发起Wikidata API查询,获取其claims中P31声明的实例类型。
3、构建领域类型映射表,例如"中华人民共和国刑法"→"法律文件"→"法律"。
4、若任一实体经映射后归属预设领域类目树,则整条记录被纳入候选集。
5、对候选集去重后按原始数据集中出现顺序保留前10000条,生成紧凑子集。







