QEntL彝文数据处理管道
// QEntL 彝文数据处理管道
// 从原始彝文数据到训练样本的完整处理流程
// 彝文字符集
常量 彝文字符集 = [
"\uf2710", "\uf2711", "\uf2712", "\uf2713", "\uf2714",
"\uf2715", "\uf2716", "\uf2717", "\uf2718", "\uf2719",
// ... 4120个彝文字符
]
// 字符编码
函数 编码_字符(字符 c) -> 整数 {
对于 i 从 0 到 彝文字符集长度-1 {
如果 (c == 彝文字符集[i]) {
返回 i
}
}
返回 -1 // 未知字符
}
// 字符解码
函数 解码_字符(整数 idx) -> 字符 {
如果 (idx >= 0 且 idx < 彝文字符集长度) {
返回 彝文字符集[idx]
}
返回 "?" // 未知字符
}
// 文本分词
函数 分词_彝文(文本) -> 字符[] {
tokens = []
对于 i 从 0 到 文本长度-1 {
c = 文本[i]
如果 (c 在 彝文字符集中) {
tokens.添加(c)
}
}
返回 tokens
}
// 构建训练样本
函数 构建_样本(输入文本, 输出文本) -> 样本 {
输入 tokens = 分词_彝文(输入文本)
输出 tokens = 分词_彝文(输出文本)
输入编码 = []
对于 token 在 输入 tokens 中 {
输入编码.添加(编码_字符(token))
}
输出编码 = []
对于 token 在 输出 tokens 中 {
输出编码.添加(编码_字符(token))
}
返回 {
"输入": 输入编码,
"输出": 输出编码,
"输入文本": 输入文本,
"输出文本": 输出文本
}
}
// 数据加载器
函数 加载_彝文数据(数据目录) -> 样本[] {
所有样本 = []
对于 文件 在 列出文件(数据目录) 中 {
如果 (文件以 ".jsonl" 结尾) {
数据 = 读取_文件(文件)
对于 行 在 数据.split("\n") 中 {
如果 (行 不为空) {
json_obj = 解析_JSON(行)
样本 = 构建_样本(json_obj["user"], json_obj["assistant"])
所有样本.添加(样本)
}
}
}
}
返回 所有样本
}
// 数据增强
函数 数据增强(样本) -> 样本[] {
增强样本 = [样本]
// 字符交换增强
交换样本 = 复制(样本)
交换样本.输入 = 随机打乱(样本.输入)
增强样本.添加(交换样本)
// 字符删除增强
删除样本 = 复制(样本)
删除样本.输入 = 删除随机字符(样本.输入)
增强样本.添加(删除样本)
返回 增强样本
}
// 主程序
主程序() {
// 加载彝文数据
训练数据 = 加载_彝文数据("/root/.openclaw/workspace/QSM/data/")
// 数据增强
增强数据 = []
对于 样本 在 训练数据 中 {
增强样本 = 数据增强(样本)
增强数据.添加全部(增强样本)
}
// 保存处理后的数据
保存_数据(增强数据, "/root/.openclaw/workspace/QSM/data/processed_training_data.jsonl")
返回 "彝文数据处理完成,样本数:" + 增强数据长度
}