five

EthanCao/wmt19_zh_en_segment

收藏
Hugging Face2026-01-25 更新2026-03-29 收录
下载链接:
https://hf-mirror.com/datasets/EthanCao/wmt19_zh_en_segment
下载链接
链接失效反馈
官方服务:
资源简介:
--- language: - zh - en task_categories: - translation modalities: - text tags: - machine-translation --- # WMT19 中英翻译分词数据集 这是一个基于 WMT19 新闻翻译任务的中英平行语料库,已经进行了分词预处理。数据集包含训练集和验证集,每对数据都经过分词处理,适合直接用于机器翻译模型训练。 ## 数据集详情 ### 数据来源 - 原始数据:WMT19 新闻翻译任务 (zh-en) - 来源网址:https://huggingface.co/datasets/wmt/wmt19 ### 预处理步骤 1. 从原始 WMT19 数据集中提取中英文句子对 2. 中文分词:使用 HanLP 进行分词 3. 英文分词:使用空格分词,并转换为小写 4. 保存为 (英文分词列表, 中文分词列表) 格式 ### 数据格式 数据以 Parquet 格式存储,每个文件包含两列: - `en`:英文分词列表 (list of strings) - `zh`:中文分词列表 (list of strings) ### 数据集统计 | 数据集 | 文件数 | 总大小 | 样本数 | 压缩格式 | | ------ | ------ | ------- | ---------- | -------- | | 训练集 | 6 | 4.02 GB | 25,984,574 | Snappy | | 验证集 | 1 | 612 KB | 3,981 | Snappy | ## 文件列表 ### 训练集文件 - wmt19_train_data_pairs_0.parquet (709 MB) - wmt19_train_data_pairs_1.parquet (791 MB) - wmt19_train_data_pairs_2.parquet (790 MB) - wmt19_train_data_pairs_3.parquet (835 MB) - wmt19_train_data_pairs_4.parquet (747 MB) - wmt19_train_data_pairs_5.parquet (145 MB) ### 验证集文件 - wmt19_val_data_pairs_0.parquet (612 KB) ## 使用方法 ### 使用 Pandas 读取 ```python import pandas as pd # 读取单个文件 df = pd.read_parquet("wmt19_train_data_pairs_0.parquet") print(f"样本数: {len(df)}") print(f"示例:\n英文: {df.iloc[0]['en']}\n中文: {df.iloc[0]['zh']}") ``` ### 批量读取训练集 ```python import glob import pandas as pd train_files = sorted(glob.glob("wmt19_train_data_pairs_*.parquet")) dfs = [pd.read_parquet(f) for f in train_files] full_df = pd.concat(dfs, ignore_index=True) print(f"总训练样本数: {len(full_df):,}") ``` ## 许可证 本数据集基于 WMT19 数据集创建,遵循原始数据集的许可证。WMT19 数据集通常允许用于研究和学术目的,但请在使用前确认具体的许可证条款。 ## 注意事项 1. 数据集已进行分词处理,适合直接用于机器翻译模型训练 2. 中文分词使用 HanLP,可能与您的分词需求有所不同 3. 英文已全部转为小写,注意这可能会影响某些任务的性能 4. 文件使用 Snappy 压缩,读取时需要支持该格式的库 ## 数据集的制作代码 ```py import os import glob import pickle import pandas as pd from pyhanlp import * from tqdm import tqdm from datasets import load_dataset from huggingface_hub import HfApi, delete_file # 每批处理的样本数 (根据内存调整) seg_batch_size = 10_0000 def hanlp_segment(text): """HanLP单句分词""" terms = HanLP.segment(text) return [term.word for term in terms] def seg_dataset(name, dataset): """对数据集进行分词处理""" dataset_en = [] dataset_zh = [] for item in tqdm(dataset, desc="分别提取中英文本"): item_translation = item["translation"] dataset_en.append(item_translation["en"]) dataset_zh.append(item_translation["zh"]) assert len(dataset_en) == len(dataset_zh) == len(dataset) for i in tqdm(range(0, len(dataset), seg_batch_size), desc="中英文分词"): batch_en = dataset_en[i : i + seg_batch_size] batch_zh = dataset_zh[i : i + seg_batch_size] # 中英文分词 en_tokens_batch = [text.lower().split() for text in batch_en] zh_tokens_batch = [hanlp_segment(text) for text in batch_zh] del batch_zh, batch_en # 合并成数据对 data_pairs = [] for en_tokens, zh_tokens in zip(en_tokens_batch, zh_tokens_batch): data_pairs.append((en_tokens, zh_tokens)) del en_tokens_batch, zh_tokens_batch with open(f"wmt19_data/wmt19_{name}_data_pairs_{i//seg_batch_size:04d}.pkl", "wb") as f: pickle.dump(data_pairs, f) del data_pairs def merge_data_pairs(name, save_size=50): """合并分词结果""" data_pairs = [] input_idx, output_idx = 0, 0 for input_idx, file in enumerate(sorted(glob.glob(f"wmt19_data/wmt19_{name}_data_pairs_*.pkl"))): print(f"正在合并 {file}") with open(file, "rb") as f: part_data_pairs = pickle.load(f) data_pairs.extend(part_data_pairs) del part_data_pairs if (input_idx + 1) % save_size == 0: save_filename = f"wmt19_{name}_data_pairs_{output_idx}.pkl" print(f"保存中间结果到 {save_filename}") with open(save_filename, "wb") as f: pickle.dump(data_pairs, f) del data_pairs data_pairs = [] output_idx += 1 if data_pairs: save_filename = f"wmt19_{name}_data_pairs_{output_idx}.pkl" print(f"保存中间结果到 {save_filename}") with open(save_filename, "wb") as f: pickle.dump(data_pairs, f) def upload_data_to_hf(): """将分词后的数据上传到 Hugging Face 数据集仓库""" # 登录 api = HfApi() repo_id = "EthanCao/wmt19_zh_en_segment" # 上传所有文件 all_files = glob.glob("wmt19_*_data_pairs_*.pkl") for pkl_file in all_files: # 读取 pickle 文件 print(f"处理 {pkl_file}") with open(pkl_file, "rb") as f: data = pickle.load(f) # 转换为 Parquet df = pd.DataFrame(data, columns=["en", "zh"]) del data # 生成新的文件名 (改后缀为 .parquet) parquet_file = pkl_file.replace(".pkl", ".parquet") df.to_parquet(parquet_file, compression="snappy", engine="pyarrow") del df # 获取文件大小 pkl_size = os.path.getsize(pkl_file) / (1024**2) # MB parquet_size = os.path.getsize(parquet_file) / (1024**2) # MB print(f" {pkl_size:.1f} MB -> {parquet_size:.1f} MB") print(f" 压缩率: {parquet_size/pkl_size*100:.1f}%") # 上传到 Hugging Face print(f" 上传 {parquet_file}") try: delete_file( path_in_repo=parquet_file, repo_id=repo_id, repo_type="dataset", commit_message=f"删除旧文件 {parquet_file}, 准备上传新文件", ) print(f" 已删除旧文件 {parquet_file}") except Exception as e: print(f" 无需删除旧文件 {parquet_file}") api.upload_file( path_or_fileobj=parquet_file, path_in_repo=parquet_file, repo_id=repo_id, repo_type="dataset", ) print(f"\n所有文件上传完成!") print(f"共处理 {len(all_files)} 个文件") print(f"数据集地址: https://huggingface.co/datasets/{repo_id}") def main(): print("从HF加载wmt19数据集") train_dataset = load_dataset("wmt19", "zh-en", split="train") val_dataset = load_dataset("wmt19", "zh-en", split="validation") # 对数据集进行分词 os.makedirs("wmt19_data", exist_ok=True) seg_dataset("train", train_dataset) seg_dataset("val", val_dataset) print("合并分词结果") merge_data_pairs("train", save_size=50) merge_data_pairs("val", save_size=50) print("上传分词数据到Hugging Face") upload_data_to_hf() if __name__ == "__main__": main() ```
提供机构:
EthanCao
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作