中文rlhf数据集50w条数据解析

解析代码

import jieba
from tqdm import tqdm
import re
import pandas as pd
import numpy as np


def find_non_english_text(text):
    pattern = re.compile(r'[^a-zA-Z]')
    return pattern.sub('', text)


def find_chinese_text(text):
    pattern = re.compile(r'[^\u4e00-\u9fff]')
    return pattern.sub('', text)


json_list = pd.read_parquet("E:/data_sets/train-rm-static-m2m100-zh-jianti.parquet")
data_list = []
basic_list = ["<|User|>", "<|Ash|>"] * 100

for _, one_data in tqdm(json_list.iterrows()):
    ins = "".join(one_data["prompt"].split("\n\n")[1:-1])
    # inp=one_data["input"]
    out = one_data["response"]

    ins = np.hstack([i.split("Human:") for i in ins.split("Assistant:")])[1:].tolist()
    ins = [i for i in ins if len(i)>0]
    ins_len = len(ins)
    try:
        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)
    except:
        continue
with open("data_set_five.txt", "a", encoding="utf-8") as f:
    voc_set = set()
    for one_data in tqdm(data_list):
        ins = []
        for one in one_data:
            if one in ["<|User|>", "<|Ash|>"]:
                ins += [one]
            else:

                one = jieba.lcut(one)
                try:


                    one = np.hstack([list(i) if len(find_chinese_text(i)) > 0 else i for i in one]).tolist()
                except:
                    break
                ins += one

        voc_set |= set(ins)
        f.write(str(ins) + "\n")

数据名

在hf上搜方可
train-rm-static-m2m100-zh-jianti.parquet
数据地址

代码解析

  1. import jieba: 导入分词库jieba。
  2. from tqdm import tqdm: 导入tqdm库,用于在循环中显示进度条。
  3. import re: 导入正则表达式库。
  4. import pandas as pd: 导入pandas库,用于处理数据。
  5. import numpy as np: 导入numpy库,用于处理数组。
  6. def find_non_english_text(text): 定义一个函数,用于查找非英文文本。该函数输入一个文本,使用正则表达式找到文本中的非英文字符,并用空字符替换。
  7. def find_chinese_text(text): 定义一个函数,用于查找中文文本。该函数输入一个文本,使用正则表达式找到文本中的非中文字符,并用空字符替换。
  8. json_list = pd.read_parquet("E:/data_sets/train-rm-static-m2m100-zh-jianti.parquet"): 读取parquet格式的文件,并将数据赋值给json_list。
  9. data_list = []: 定义一个空列表,用于存储最终的数据。
  10. basic_list = ["&lt;|User|>", "&lt;|Ash|>"] * 100: 定义一个列表,其中包含两个字符串"<|User|>“和”<|Ash|>",并将其重复100次。
  11. for _, one_data in tqdm(json_list.iterrows()):: 遍历json_list,并使用tqdm在循环中显示进度条。其中,_表示索引值,one_data表示每一行数据。
  12. ins = "".join(one_data["prompt"].split("\n\n")[1:-1]): 从one_data中获取prompt字段,并去除字段中的换行符。然后,取出prompt中除第一行和最后一行之外的所有内容,并将其赋值给ins。
  13. out = one_data["response"]: 从one_data中获取response字段,并将其赋值给out。
  14. ins = np.hstack([i.split("Human:") for i in ins.split("Assistant:")])[1:].tolist(): 将ins根据"Assistant:"分割成多个子串,然后将子串中的"Human:"去除,并将子串合并为一个列表。最后,将列表中的第一个元素去除,并将其转换为列表类型。
  15. ins_len = len(ins): 获取ins列表的长度,并将其赋值给ins_len。
  16. ins = np.hstack([[i, j] for i, j in zip(basic_list[:ins_len], ins)]).tolist(): 将basic_list中与ins长度相同的元素取出,然后将basic_list和ins中的元素一一配对组成元素为两个字符串的列表,并将这些列表合并为一个列表。最后,将这个列表转换为列表类型。
  17. data_list.append(ins): 将ins添加到data_list中。
  18. with open("data_set_five.txt", "a", encoding="utf-8") as f:: 打开一个文件"data_set_five.txt",并将其赋值给变量f。打开文件时,使用"a"模式表示追加数据到文件末尾。
  19. voc_set = set(): 定义一个空集合,用于存储数据中的所有词汇。
  20. for one_data in tqdm(data_list):: 遍历data_list,并使用tqdm在循环中显示进度条。其中,one_data表示每一个元素。
  21. ins = []: 定义一个空列表,用于存储分词后的文本。
  22. for one in one_data:: 遍历one_data中的每一个元素,并将其赋值给变量one。
  23. if one in ["&lt;|User|>", "&lt;|Ash|>"]:: 判断one是否等于"<|User|>“或”<|Ash|>"。
  24. ins += [one]: 如果one等于"<|User|>“或”<|Ash|>",则将one加入ins中。
  25. else:: 如果one不等于"<|User|>“或”<|Ash|>"。
  26. one = jieba.lcut(one): 使用jieba对one进行分词。
  27. try:: 开始异常处理。
  28. one = np.hstack([list(i) if len(find_chinese_text(i)) > 0 else i for i in one]).tolist(): 对于one中的每个分词,如果其包含中文字符,则将其拆分成单个字符,否则不做处理。然后,将处理后的结果合并为一个列表,并将这个列表转换为列表类型。
  29. voc_set |= set(ins): 将ins中的所有元素加入voc_set中。
  30. f.write(str(ins) + "\n"): 将ins转换为字符串,并将其写入文件中,同时在字符串末尾加入换行符。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐