中文基于Qwen3-235B-2507蒸餾數據集的操作

中文基于Qwen3-235B-2507蒸餾數據集的操作

flyfish

方式1

from datasets import load_dataset
from transformers import AutoTokenizer# -------------------------- 配置參數 --------------------------
TOKENIZER_PATH = "/media/models/models/Qwen/Qwen3-8B/"
# 數據集存放路徑
DATASET_PATH = "/media/user/datasets/swift/Chinese-Qwen3-235B-2507-Distill-data-110k-SFT/qwen3_235b_2507_distill_110k.jsonl"# 最大序列長度(文本截斷/填充的目標長度)
MAX_SEQ_LENGTH = 1024
# 訓練集/驗證集大小(按需調整)
TRAIN_SIZE = 128
VAL_SIZE = 32# -------------------------- 加載分詞器 --------------------------
# 加載模型對應的分詞器(負責文本→token轉換)
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH)
# 設置填充符號(Qwen等模型通常用eos_token作為pad_token)
tokenizer.pad_token = tokenizer.eos_token
# 設置填充方向為右側(語言模型通常右側填充更合理)
tokenizer.padding_side = "right"# -------------------------- 加載原始數據集 --------------------------
def load_raw_dataset(path):"""加載JSONL格式的原始數據集"""# 使用datasets庫加載JSONL文件(split="train"表示加載全部數據為訓練集)dataset = load_dataset("json",               # 數據集格式為JSONdata_files=path,      # 數據集文件路徑split="train"         # 加載為"train"拆分(后續可再劃分))print(f"原始數據集加載完成,共 {len(dataset)} 條樣本")return dataset# -------------------------- 驗證數據格式 --------------------------
def check_data_format(dataset):"""驗證數據集是否包含正確的對話格式(messages字段)"""# 查看第一條樣本,確認結構是否正確sample = dataset[0]print("\n===== 樣本格式示例 =====")print(sample)# 檢查是否包含"messages"字段(對話數據核心)if "messages" not in sample:raise ValueError("數據集必須包含'messages'字段,格式應為[{role:..., content:...}, ...]")# 檢查messages內部結構(需包含role和content)for msg in sample["messages"]:if not all(key in msg for key in ["role", "content"]):raise ValueError("messages中的每條消息必須包含'role'和'content'字段")# -------------------------- 數據預處理(核心) --------------------------
def preprocess_dataset(dataset):"""對原始數據集進行預處理:1. 將對話格式化為模型可接受的文本(應用聊天模板)2. 轉換為token(input_ids)和標簽(labels)3. 過濾無效樣本"""def process_single_sample(example):"""處理單條樣本:格式化→tokenize"""try:# 1. 提取對話消息(如[{"role": "user", "content": "你好"}, {"role": "assistant",...}])messages = example["messages"]# 2. 應用聊天模板(將對話轉換為模型輸入格式)# 不同模型的聊天模板不同(如Qwen的格式為"<|im_start|>user...<|im_end|>assistant...")formatted_text = tokenizer.apply_chat_template(messages,tokenize=False,        # 先不tokenize,僅生成格式化文本add_generation_prompt=False  # 不添加生成提示(SFT訓練用))# 3. Tokenize:將文本轉換為模型可處理的整數序列(input_ids)tokenized = tokenizer(formatted_text,padding="max_length",  # 填充到MAX_SEQ_LENGTHtruncation=True,       # 超過長度則截斷max_length=MAX_SEQ_LENGTH,return_tensors="pt"    # 返回PyTorch張量)# 4. 準備labels(與input_ids相同,自回歸訓練中用input_ids作為標簽)return {"input_ids": tokenized["input_ids"].squeeze(),  # 去除多余維度"labels": tokenized["input_ids"].squeeze().clone()  # 復制作為標簽}except Exception as e:# 跳過格式錯誤的樣本print(f"跳過無效樣本:{e}")return None# 批量處理所有樣本(使用多進程加速)processed = dataset.map(process_single_sample,remove_columns=dataset.column_names,  # 移除原始字段(只保留處理后的結果)num_proc=4  # 4個進程并行處理)# 過濾處理失敗的樣本(返回None的樣本)processed = processed.filter(lambda x: x is not None)print(f"\n預處理完成,有效樣本數:{len(processed)}")return processed# -------------------------- 劃分訓練集與驗證集 --------------------------
def split_train_val(dataset, train_size, val_size):"""將預處理后的數據集劃分為訓練集和驗證集"""# 計算劃分比例(確保能截取到目標數量的樣本)split_ratio = (val_size + 1) / (train_size + val_size + 2)# 隨機劃分(seed確保結果可復現)split_data = dataset.train_test_split(test_size=split_ratio,seed=42)# 截取目標大小的樣本train_dataset = split_data["train"].select(range(train_size))val_dataset = split_data["test"].select(range(val_size))print(f"\n數據集劃分完成:訓練集 {len(train_dataset)} 條,驗證集 {len(val_dataset)} 條")return train_dataset, val_dataset# -------------------------- 主流程 --------------------------
if __name__ == "__main__":# 1. 加載原始數據集raw_dataset = load_raw_dataset(DATASET_PATH)# 2. 驗證數據格式是否正確check_data_format(raw_dataset)# 3. 預處理(格式化→tokenize)processed_dataset = preprocess_dataset(raw_dataset)# 4. 劃分訓練集和驗證集train_data, val_data = split_train_val(processed_dataset,train_size=TRAIN_SIZE,val_size=VAL_SIZE)# 查看處理后的樣本示例(input_ids的前10個token)print("\n===== 處理后樣本示例 =====")print("input_ids(前10個):", train_data[0]["input_ids"][:10])print("labels(前10個):   ", train_data[0]["labels"][:10])

輸出

Generating train split: 110000 examples [00:01, 74385.42 examples/s]
原始數據集加載完成,共 110000 條樣本

===== 樣本格式示例 =====
{‘messages’: [{‘role’: ‘user’, ‘content’: ‘能給我講一個寓意深刻的故事嗎?’}, {‘role’: ‘assistant’, ‘content’: ‘當然可以。下面是一個寓意深刻的小故事,名為《石匠與神像》:\n\n很久以前,在一座深山里,有一位技藝精湛的石匠,名叫阿巖。他一生都在雕刻石頭,作品精美絕倫,遠近聞名。但他從不雕刻神像,別人問他為什么,他總是沉默不語。\n\n一天,村里要修建一座廟宇,村長請他雕刻一尊守護神像。阿巖猶豫了很久,終于答應了。他選了一塊巨大的青石,開始日復一日地鑿刻。每一錘、每一鑿,他都極為專注,仿佛在與石頭對話。\n\n三年過去了,神像終于完成。它面容莊嚴,目光深邃,仿佛能看透人心。村民們都驚嘆不已,紛紛跪拜,稱其為“活的神”。\n\n落成典禮那天,村長對阿巖說:“你創造了神,你就是神的化身。”\n\n阿巖卻搖了搖頭,輕聲說:“不,我不是創造者,我只是喚醒了它。”\n\n眾人不解。阿巖走到神像前,指著一處細微的裂痕說:“你們看,這塊石頭原本有一道裂紋,藏在深處。我本想避開它,可無論怎么雕,那裂痕總會出現在神像的眉心。最后我明白——它不是瑕疵,而是它本來的樣子。”\n\n他頓了頓,望向群山:“這石頭在山中沉睡了千年,經歷了風雨雷電,才有了這道傷痕。我所做的,不是塑造完美,而是讓傷痕也成為神圣的一部分。”\n\n眾人沉默。\n\n阿巖又說:“人總想雕刻出完美的神,可真正的神,不是無瑕的偶像,而是包容傷痕、接納殘缺的存在。我們每個人心中都有一塊石頭,有裂痕,有沉重,有沉默。但正是這些,讓我們真實,讓我們值得被喚醒。”\n\n說完,他放下刻刀,走進山林,再也沒有回來。\n\n——\n\n寓意: \n這個故事告訴我們,真正的美與力量,不在于完美無缺,而在于接納自己的傷痕與不完美。每個人都有裂痕,但那不是缺陷,而是經歷的印記,是靈魂的深度。我們不必成為別人眼中的“完美神像”,而是要勇敢地“喚醒”真實的自己——帶著傷痕,依然莊嚴站立。’}]}

Map (num_proc=4): 100%|110000/110000 [01:01<00:00, 1775.05 examples/s]
Filter: 100%|
110000/110000 [01:17<00:00, 1416.82 examples/s]預處理完成,有效樣本數:110000數據集劃分完成:訓練集 128 條,驗證集 32 條===== 處理后樣本示例 =====
input_ids(前10個): [151644, 872, 198, 100344, 107735, 77172, 41299, 110319, 33108, 112398]
labels(前10個):    [151644, 872, 198, 100344, 107735, 77172, 41299, 110319, 33108, 112398]

方式2

from modelscope.msdatasets import MsDataset
dataset = MsDataset.load('swift/Chinese-Qwen3-235B-2507-Distill-data-110k-SFT')
print(f'dataset[0]: {dataset[0]}')

dataset[0]: {‘messages’: [{‘role’: ‘user’, ‘content’: ‘能給我講一個寓意深刻的故事嗎?’}, {‘role’: ‘assistant’, ‘content’: ‘當然可以。下面是一個寓意深刻的小故事,名為《石匠與神像》:\n\n很久以前,在一座深山里,有一位技藝精湛的石匠,名叫阿巖。他一生都在雕刻石頭,作品精美絕倫,遠近聞名。但他從不雕刻神像,別人問他為什么,他總是沉默不語。\n\n一天,村里要修建一座廟宇,村長請他雕刻一尊守護神像。阿巖猶豫了很久,終于答應了。他選了一塊巨大的青石,開始日復一日地鑿刻。每一錘、每一鑿,他都極為專注,仿佛在與石頭對話。\n\n三年過去了,神像終于完成。它面容莊嚴,目光深邃,仿佛能看透人心。村民們都驚嘆不已,紛紛跪拜,稱其為“活的神”。\n\n落成典禮那天,村長對阿巖說:“你創造了神,你就是神的化身。”\n\n阿巖卻搖了搖頭,輕聲說:“不,我不是創造者,我只是喚醒了它。”\n\n眾人不解。阿巖走到神像前,指著一處細微的裂痕說:“你們看,這塊石頭原本有一道裂紋,藏在深處。我本想避開它,可無論怎么雕,那裂痕總會出現在神像的眉心。最后我明白——它不是瑕疵,而是它本來的樣子。”\n\n他頓了頓,望向群山:“這石頭在山中沉睡了千年,經歷了風雨雷電,才有了這道傷痕。我所做的,不是塑造完美,而是讓傷痕也成為神圣的一部分。”\n\n眾人沉默。\n\n阿巖又說:“人總想雕刻出完美的神,可真正的神,不是無瑕的偶像,而是包容傷痕、接納殘缺的存在。我們每個人心中都有一塊石頭,有裂痕,有沉重,有沉默。但正是這些,讓我們真實,讓我們值得被喚醒。”\n\n說完,他放下刻刀,走進山林,再也沒有回來。\n\n——\n\n寓意: \n這個故事告訴我們,真正的美與力量,不在于完美無缺,而在于接納自己的傷痕與不完美。每個人都有裂痕,但那不是缺陷,而是經歷的印記,是靈魂的深度。我們不必成為別人眼中的“完美神像”,而是要勇敢地“喚醒”真實的自己——帶著傷痕,依然莊嚴站立。’}]}

方式3

from swift.llm import load_datasetdataset, val_dataset = load_dataset('swift/Chinese-Qwen3-235B-2507-Distill-data-110k-SFT')
print(f'dataset: {dataset}')
print(f'dataset[0]: {dataset[0]}')

輸出

dataset: Dataset({features: ['messages'],num_rows: 110000
})

dataset[0]: {‘messages’: [{‘role’: ‘user’, ‘content’: ‘能給我講一個寓意深刻的故事嗎?’}, {‘role’: ‘assistant’, ‘content’: ‘當然可以。下面是一個寓意深刻的小故事,名為《石匠與神像》:\n\n很久以前,在一座深山里,有一位技藝精湛的石匠,名叫阿巖。他一生都在雕刻石頭,作品精美絕倫,遠近聞名。但他從不雕刻神像,別人問他為什么,他總是沉默不語。\n\n一天,村里要修建一座廟宇,村長請他雕刻一尊守護神像。阿巖猶豫了很久,終于答應了。他選了一塊巨大的青石,開始日復一日地鑿刻。每一錘、每一鑿,他都極為專注,仿佛在與石頭對話。\n\n三年過去了,神像終于完成。它面容莊嚴,目光深邃,仿佛能看透人心。村民們都驚嘆不已,紛紛跪拜,稱其為“活的神”。\n\n落成典禮那天,村長對阿巖說:“你創造了神,你就是神的化身。”\n\n阿巖卻搖了搖頭,輕聲說:“不,我不是創造者,我只是喚醒了它。”\n\n眾人不解。阿巖走到神像前,指著一處細微的裂痕說:“你們看,這塊石頭原本有一道裂紋,藏在深處。我本想避開它,可無論怎么雕,那裂痕總會出現在神像的眉心。最后我明白——它不是瑕疵,而是它本來的樣子。”\n\n他頓了頓,望向群山:“這石頭在山中沉睡了千年,經歷了風雨雷電,才有了這道傷痕。我所做的,不是塑造完美,而是讓傷痕也成為神圣的一部分。”\n\n眾人沉默。\n\n阿巖又說:“人總想雕刻出完美的神,可真正的神,不是無瑕的偶像,而是包容傷痕、接納殘缺的存在。我們每個人心中都有一塊石頭,有裂痕,有沉重,有沉默。但正是這些,讓我們真實,讓我們值得被喚醒。”\n\n說完,他放下刻刀,走進山林,再也沒有回來。\n\n——\n\n寓意: \n這個故事告訴我們,真正的美與力量,不在于完美無缺,而在于接納自己的傷痕與不完美。每個人都有裂痕,但那不是缺陷,而是經歷的印記,是靈魂的深度。我們不必成為別人眼中的“完美神像”,而是要勇敢地“喚醒”真實的自己——帶著傷痕,依然莊嚴站立。’}]}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91956.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91956.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91956.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文閱讀筆記:《Dataset Distillation by Matching Training Trajectories》

論文閱讀筆記&#xff1a;《Dataset Distillation by Matching Training Trajectories》1.動機與背景2.核心方法&#xff1a;軌跡匹配&#xff08;Trajectory Matching&#xff09;3.實驗與效果4.個人思考與啟發主體代碼算法邏輯總結一句話總結&#xff1a; 這篇論文通過讓合成…

STM32標準庫的工程創建

一.所需文件說明 1.啟動文件startup_xxxx.s 作用&#xff1a;初始化堆棧指針、復位向量、中斷向量表&#xff0c;執行 SystemInit() 后跳轉到 main()。 位置&#xff1a;Libraries/CMSIS/Device/ST/STM32Fxx/Source/Templates/arm/ 文件名&#xff1a; startup_stm32f10x_l…

k8s ceph sc 設置文件系統格式化參數

前言 默認的 sc 文件系統 inode 太少,對于小文件場景,往往會出現容量沒滿,inode 已經用盡的情況,本文說明如何設置 inode。 說明 本文使用的是 rook-ceph 部署的 ceph 作為存儲后端。 xfs 文件系統 sc 創建帶格式化參數的 xfs 文件系統的 sc allowVolumeExpansion: t…

關于Npm和Nvm的用法

npm是個什么東西 npm是什么 node package managernodejs包管理工具處理復雜的包的管理的問題那么使用npm以后就不需要從前端引入相應的代碼和文件等。 npm相關的命令 查看版本npm -v 更新npm install npm5.4.0 更新到最新版本npm install npmlatest 初始化項目 npm ini…

MyBatis高效查詢:簡化JDBC開發實戰

Mybatis MyBatis 是一款優秀持久層(DAO)框架&#xff0c;用于簡化 JDBC 開發 &#xff0c;原是 Apache 開源項目 iBatis&#xff0c;經歷遷移改名&#xff0c;2010 年從 Apache 遷到 Google Code 并改名&#xff0c;2013 年 11 月遷至 GitHub&#xff0c;官網為 https://mybati…

系統信息及進程管理命令

系統信息及進程管理 一、系統信息查看 常用命令&#xff1a;uname、hostnam、hostnamectl、uptime、df、du、free、lscpu 1、uname (1)、命令簡介 uname 是一個在 Unix 和類 Unix 系統&#xff08;如 Linux、macOS&#xff09;中常用的命令行工具&#xff0c;用于顯示系統信息。…

【Z字形變換】

代碼思路分析&#xff1a;Z 字形變換 1. 邊界情況處理 if (r 1 || r > n) return s;r 1&#xff1a;只有一行&#xff0c;直接返回原字符串&#xff08;無需變換&#xff09;。r > n&#xff1a;行數大于等于字符串長度&#xff0c;每行只有一個字符&#xff0c;直接返…

VBA中類的解讀及應用第二十五講:把源數據賦給類利用類完成查找

《VBA中類的解讀及應用》教程【10165646】是我推出的第五套教程&#xff0c;目前已經是第一版修訂了。這套教程定位于最高級&#xff0c;是學完初級&#xff0c;中級后的教程。類&#xff0c;是非常抽象的&#xff0c;更具研究的價值。隨著我們學習、應用VBA的深入&#xff0c;…

Vue3核心語法進階(Hook)

Vue3 自定義 Hook&#xff1a;讓你的代碼像樂高一樣“可復用”&#xff01;大家好&#xff0c;我是你們的前端小伙伴&#xff01;上一篇我們聊了 Vue3 的生命周期&#xff0c;今天咱們繼續深入 Vue3 的核心利器——自定義 Hook&#xff08;Custom Hook&#xff09;。如果你已經…

工控領域協議之Modbus

Modbus 是一種通信協議&#xff0c;用于工業自動化領域中的設備之間的通信。它是一種串行通信協議&#xff0c;廣泛應用于連接不同設備、傳感器和執行器的工業控制系統。 Modbus 在工業控制系統、自動化設備、能源管理系統等領域得到廣泛應用。 Modbus 協議的基本特點&#xff…

大件垃圾識別 mAP↑28%:陌訊多模態融合算法實戰解析

一、行業痛點&#xff1a;大件垃圾識別的現實困境在城市環衛智能化轉型過程中&#xff0c;大件垃圾&#xff08;如廢舊家具、電器等&#xff09;的自動化識別與分揀成為關鍵環節。據住建部《城市環境衛生發展報告》顯示&#xff0c;傳統人工分揀模式下大件垃圾識別準確率不足 6…

vk框架或者普通函數封裝的一些函數可以拿取使用【會持續更新】

1.身份證校驗【通用】/*** function isIDCard* description 判斷是否為有效的身份證號碼。* param {string} idCard - 待驗證的身份證號碼。* returns {boolean} 返回驗證結果。*/ pubFun.isIDCard function (idCard) {// 身份證號碼為15位或者18位&#xff0c;15位時全為數字…

如何給Word和WPS文檔添加密碼或取消密碼

要保護Word和WPS文檔&#xff0c;可以為它們加密&#xff0c;加密有兩類&#xff1a;打開密碼和修改密碼。密碼設置有兩個入口&#xff0c;一個是在另存為&#xff0c;一個是在文件菜單。Word和WPS文字的路徑略有不同&#xff0c;微軟Office和WPS的其他套件也是如此操作。一、W…

uni-app項目gitignore文件示例

uni-app 忽略以下文件和目錄 DS_Store 忽略 UniApp 編譯生成的小程序相關目錄 unpackage/ uni_modules/ 忽略編輯器自動生成的文件 idea/ vscode/ 忽略日志文件 logs/ 忽略臨時文件 temp/ 忽略構建工具自動生成的文件 build/ 忽略 npm 安裝的包文件 package-lock.json yarn.loc…

LeetCode 135:分糖果

LeetCode 135&#xff1a;分糖果問題本質與核心挑戰 給定孩子的評分數組&#xff0c;需滿足 “每個孩子至少1顆糖果&#xff0c;相鄰評分高的孩子糖果更多”&#xff0c;求最少糖果總數。核心挑戰&#xff1a; 相鄰約束是雙向的&#xff08;左→右和右→左都需滿足&#xff09;…

【QT】安裝與配置

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;QT 文章目錄1. QT簡介與準備工作1.1 什么是QT1.2 QT的版本選擇1.3 系統要求檢查2. QT安裝方式詳解2.1 官方在線安裝器2.2 離線安裝包2.3 包管理器安裝3. Windows平臺安裝配置3.1 Windows安裝步驟3.2 環境變量配置3.3 Visual Stu…

Java從入門到精通 - 算法、正則、異常

算法、正則、異常 此筆記參考黑馬教程&#xff0c;僅學習使用&#xff0c;如有侵權&#xff0c;聯系必刪 文章目錄算法、正則、異常1. 常見算法1.1 簡單認識算法1.1.1 什么是算法&#xff1f;1.1.2 為什么要學習算法&#xff1f;1.2 排序算法1.2.1 冒泡排序1.2.1.1 實現冒泡排…

題單【排序】

P1271 【深基9.例1】選舉學生會 P1271 【深基9.例1】選舉學生會 - 洛谷 【方法一】快速排序 使用sort()&#xff0c;注意數組的范圍&#xff01;&#xff01;&#xff01; #include<bits/stdc.h> using namespace std;int a[2000000],n,m;int main() {cin>>n>&g…

【機器學習】(算法優化二)提升算法之:AdaBoost與隨機梯度

文章目錄一、 AdaBoost&#xff1a;自適應提升算法1、AdaBoost數學原理詳解1.1、 目標函數1.2、 樣本權重更新的邏輯1.3、 模型權重計算的含義1.4、 AdaBoost的核心思想2、為什么AdaBoost如此有效&#xff1f;二、 隨機梯度提升算法&#xff1a;梯度優化下更精細的優化1、隨機梯…

力扣 hot100 Day65

75. 顏色分類 給定一個包含紅色、白色和藍色、共 n 個元素的數組 nums &#xff0c;原地 對它們進行排序&#xff0c;使得相同顏色的元素相鄰&#xff0c;并按照紅色、白色、藍色順序排列。 我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。 必須在不使用庫內置的 sort 函…