80万条中文ChatGPT多轮对话数据集
80万条中文ChatGPT多轮对话数据集
- 代码
- 代码地址
- 代码解析
代码
import json
import numpy as np
from tqdm import tqdm
import redef find_chinese_text(text):pattern = re.compile(r'[^\u4e00-\u9fff]')return pattern.sub('', text)with open("E:/data_sets/multiturn_chat_0.8M.json", "r", encoding="utf-8") as f:json_list = f.readlines()data = [json.loads(i) for i in tqdm(json_list)]
data_list = []
basic_list = ["<|User|>", "<|Ash|>"] * 100for one_data in tqdm(data):ins = one_data["instruction"]# inp=one_data["input"]out = one_data["output"]ins = np.hstack([i.split("Human:") for i in ins.split("Assistant:")])[1:-1].tolist()ins_len = len(ins)ins = np.hstack([[i, j] for i, j in zip(basic_list[:ins_len], ins)]).tolist()ins += [basic_list[ins_len], out]data_list.append(ins)
with open("data_set.txt","a",encoding="utf-8") as f:voc_set=set()for one_list in tqdm(data_list):one_data=[]for one in one_list:try:if one in ["<|User|>", "<|Ash|>"]:one_data+=[one]else:if len(find_chinese_text(one))/(len(one)+1)<0.5:one=one.split()else:one=list(one)one_data+=oneexcept:print()voc_set|=set(one_data)f.write(str(one_data)+"\n")
代码地址
数据地址
代码解析
- 导入需要的库:json、numpy、tqdm、re。
- 定义函数
find_chinese_text()
,用于寻找文本中的中文字符。 - 使用
with
打开文件 “E:/data_sets/multiturn_chat_0.8M.json”,并逐行读取文件,将其转化为列表形式。 - 将读取到的json数据解析出instruction和output,并将instruction中的对话拆分成用户和Ash的对话,并将其存储到ins列表中,输出的对话存储到out列表中。
- 将ins列表中的对话合并成一整段对话,并在其中添加分割符 “<|User|>” 和 “<|Ash|>”。
- 将out列表添加到ins列表中,并将整段对话添加到data_list中。
- 使用
with
打开文件 “data_set.txt”,并迭代 data_list 中的每一段对话,将其中的每一个元素添加到 one_data 列表中,如果元素是 “<|User|>” 或者 “<|Ash|>”,则直接添加,否则将元素按空格分开,分开后的每个单词作为列表元素添加到 one_data 列表中。 - 将 one_data 列表转化为字符串,并将其写入到 “data_set.txt” 文件中。
- 使用 set() 函数将所有的词语添加到 voc_set 集合中,得到整个数据集中所有的单词。