ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Fairseq 命令行工具全解析:edgelm 中从数据预处理、训练到生成与评估的完整工作流

Fairseq 命令行工具全解析:edgelm 中从数据预处理、训练到生成与评估的完整工作流 Fairseq 命令行工具全解析edgelm 中从数据预处理、训练到生成与评估的完整工作流【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm导读本指南系统讲解 edgelm 项目内嵌的 fairseq 框架所提供的六个核心命令行工具fairseq-preprocess、fairseq-train、fairseq-generate、fairseq-interactive、fairseq-score与fairseq-eval-lm。通过本指南你将掌握如何基于 edgelm 仓库完成原始语料 → 二值化数据 → 模型训练 → 批量/交互式生成 → BLEU 评分 → 语言模型困惑度评估的完整闭环并理解每个工具的底层调用链与关键参数的作用机制。一、六个 CLI 工具与完整工作流fairseq 为训练与评估模型提供了一组命令行工具它们分别对应数据处理流水线中的一个环节工具功能对应源码fairseq-preprocess数据预处理构建词表并二值化训练数据edgelm/fairseq_cli/preprocess.pyfairseq-train在单卡或多卡 GPU 上训练新模型edgelm/fairseq_cli/train.pyfairseq-generate用训练好的模型翻译**已预处理二值化**的数据edgelm/fairseq_cli/generate.pyfairseq-interactive用训练好的模型翻译原始文本edgelm/fairseq_cli/interactive.pyfairseq-score对生成译文与参考译文做 BLEU 评分edgelm/fairseq_cli/score.pyfairseq-eval-lm语言模型困惑度评估edgelm/fairseq_cli/eval_lm.py这六个命令的注册位置在 edgelm/setup.py 的entry_points中每个命令都指向对应模块的cli_main()入口。安装本仓库如pip install -e .后即可直接使用这些命令每个命令都支持--help查看完整参数列表参数由 edgelm/fairseq/options.py 中对应的 parser 工厂函数生成get_preprocessing_parser、get_training_parser、get_generation_parser、get_interactive_generation_parser、get_eval_lm_parser等帮助信息会自动列出。典型的工作流是先用fairseq-preprocess把分词后的平行语料转成二进制格式再用fairseq-train训练模型之后用fairseq-generate针对测试集批量翻译或fairseq-interactive针对原始文本实时翻译产出译文最后用fairseq-score或内置评分器评估质量如果是语言模型则用fairseq-eval-lm计算困惑度。二、fairseq-preprocess词表构建与数据二值化fairseq-preprocess负责把文本语料转换为模型训练可高效读取的二进制数据集。它的入口在 edgelm/fairseq_cli/preprocess.py参数定义见 add_preprocess_args。核心参数参数默认值说明-s/--source-langNone源语言名-t/--target-langNone目标语言名--trainprefNone训练文件前缀同时用于构建词典实际读取trainpref.src/trainpref.tgt--validprefNone逗号分隔的验证集文件前缀训练集中缺失的词会被替换为unk--testprefNone逗号分隔的测试集文件前缀--destdirdata-bin二值化数据输出目录--thresholdtgt/--thresholdsrc0出现次数低于该阈值的词映射为 unknown--tgtdict/--srcdictNone复用已有的目标/源词典文件--nwordstgt/--nwordssrc-1保留的词表大小上限-1 表示不限制--joined-dictionaryFalse源与目标使用联合词典--only-sourceFalse只处理源语言--padding-factor8词典大小按 N 的倍数补齐--workers1并行工作进程数--dataset-implmmap数据集实现格式mmap 等--align-suffix/--alignfileNone对齐文件后缀 / 可选对齐文件--dict-onlyFalse仅构建词典后退出源码执行流程从 preprocess.py 的main()可以看到整体流程创建输出目录并写日志os.makedirs(args.destdir, exist_okTrue)同时在destdir下生成preprocess.log记录本次处理的参数。构建词典通过tasks.get_task(args.task)获取任务对象调用task.build_dictionarypreprocess.py统计词频应用--threshold*低频词替换为unk、--nwords*词表截断与--padding-factor词表补齐规则若指定--joined-dictionary则把源语言与目标语言语料合并统计。保存词典生成dict.src.txt与dict.tgt.txt写入destdir若设置了--dict-only此时直接退出。多进程二值化make_binary_datasetpreprocess.py通过find_offsets切分输入文件用multiprocessing.Pool并行调用Binarizer.binarize每个 worker 产出临时.bin/.idx分片最后merge_file_合并并finalize生成正式的二进制数据集。输出统计每个语言会打印X sents, Y tokens, Z% replaced by unk之类的信息方便核对数据规模。输出文件的命名规则见 dataset_dest_prefix形如destdir/train.{src}-{tgt}.{lang}.bin/.idx、valid...、test...以及dict.{lang}.txt。fairseq-train正是读取这个目录下的这些文件。实战示例以 getting_started.rst 中 IWSLT14 德英数据的处理为例 cd edgelm/examples/translation/ bash prepare-iwslt14.sh cd ../.. TEXTedgelm/examples/translation/iwslt14.tokenized.de-en fairseq-preprocess --source-lang de --target-lang en \ --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \ --destdir> mkdir -p checkpoints/fconv CUDA_VISIBLE_DEVICES0 fairseq-train> fairseq-generate> MODEL_DIRwmt14.en-fr.fconv-py fairseq-interactive \ --path $MODEL_DIR/model.pt $MODEL_DIR \ --beam 5 --source-lang en --target-lang fr \ --tokenizer moses \ --bpe subword_nmt --bpe-codes $MODEL_DIR/bpecodes | loading model(s) from wmt14.en-fr.fconv-py/model.pt | Type the input sentence and press return: Why is it rare to discover new marine mammal species? S-0 Why is it rare to discover new marine mam mal species ? H-0 -0.0643349438905716 Pourquoi est-il rare de découvrir de nouvelles espèces de mammifères marins? P-0 -0.0763 -0.1849 -0.0956 ...示例中--tokenizer moses与--bpe subword_nmt --bpe-codes ...负责把原始输入编码成模型可读的子词序列并在输出侧自动去 BPE、去分词还原文本。这也解释了fairseq-generate针对二值化数据与fairseq-interactive针对原始文本的核心差异后者在内存中实时完成encode → batch → inference → decodeencode_fn/decode_fn输出同样采用S-/H-/D-/P-/A-前缀格式。六、fairseq-score独立 BLEU 评分工具当需要把模型产出的译文或任意系统输出与参考译文做离线比较时使用fairseq-score。它与fairseq-generate内置的评分不同是一个完全独立的工具参数定义在 edgelm/fairseq_cli/score.py注意它没有接入 fairseq 的 argparse 体系而是自建 parser参数默认值说明-s/--sys-系统输出文件-表示从标准输入读取-r/--ref必填参考译文文件-o/--order4考虑的最高 n-gram 阶数--ignore-caseFalse大小写不敏感评分--sacrebleuFalse使用 sacrebleu 评分标准 13a 分词--sentence-bleuFalse输出每句的 BLEU带 1 平滑内部实现上普通模式用fairseq.scoring.bleu.Scorerscore.py逐行编码后累加统计--sacrebleu则调用 sacrebleu 库--sentence-bleu会逐句reset并打印{行号} {该句BLEU}。--ignore-case会在读取时把两侧文本统一转为小写。 fairseq-score --sys output.txt --ref reference.txt # 或从标准输入读取系统输出 cat output.txt | fairseq-score --sys - --ref reference.txt七、fairseq-eval-lm语言模型困惑度评估fairseq-eval-lm用于评估预训练语言模型的困惑度perplexity入口在 edgelm/fairseq_cli/eval_lm.pyparser 为get_eval_lm_parser默认任务language_modelingoptions.py专属配置来自EvalLMConfigconfigs.py参数默认值说明--path必填模型检查点路径--gen-subsettest评估子集--output-word-probsFalse输出每个词及其对数概率词 [logprob]格式--output-word-statsFalse输出词级统计词、计数、对数概率、是否 BPE 续接、下一词概率等--context-window0保证每个被评估 token 至少能看到该大小的上下文非 0 时会从--tokens-per-sample中扣除--softmax-batchsys.maxsize当 B×T 超过该值时把词表上的 softmax 分批计算以适配 GPU 内存--max-tokens缺省时36000评估 batch 的 token 上限eval_lm.py评估核心逻辑在 eval_lm()用fairseq.sequence_scorer.SequenceScorer对每个样本生成逐位置分数累加对数概率后换算为base 2 的平均负对数似然loss最终perplexity 2 ** loss见 eval_lm.py。结束时会打印| Evaluated 1,234,567 tokens in 12.3s (100,000.00 tokens/s) | Loss (base 2): 3.2210, Perplexity: 9.32--output-word-stats会按词频降序输出词\t计数\t总对数概率\t是否BPE\t下一词概率\t有效计数格式的统计表便于分析模型对低频词的建模能力。八、深入理解从 CLI 到参数体系的扩展参数体系的生成方式fairseq 的命令行参数分为两类来源传统 argparse 手写参数如fairseq-preprocess的全部参数options.py与fairseq-score的参数数据类自动生成参数训练、生成、评估类参数通过gen_parser_from_dataclass从 edgelm/fairseq/dataclass/configs.py 中的DatasetConfig、OptimizationConfig、CheckpointConfig、GenerationConfig、CommonEvalConfig、EvalLMConfig、InteractiveConfig等 dataclass 字段自动生成字段的metadata[help]即--help中的说明。这也是fairseq-train --help输出会按dataset_data_loading、optimization、checkpoint、Generation等分组呈现的原因——每个分组对应一个 dataclass。日志与调试所有 CLI 的日志格式统一为时间 | 级别 | 模块 | 消息日志级别可通过环境变量LOGLEVEL控制如LOGLEVELDEBUG fairseq-train ...见 train.py。fairseq-preprocess还会把参数快照写入destdir/preprocess.log便于追溯。扩展机制各 CLI 均调用utils.import_user_module(cfg.common)如 generate.py允许通过--user-dir加载用户自定义的模型、任务、criterion 等模块这意味着六个工具不仅服务于翻译也可用于本仓库支持的语言建模、掩码语言建模、语音、图像等多种任务——只要任务通过 fairseq 的注册机制注册即可。九、配套文档指引本指南对应 edgelm/docs/command_line_tools.rst 这一参考页。若要进一步深入可继续阅读 edgelm 文档目录下的其他章节edgelm/docs/getting_started.rst预训练模型评估与训练新模型的上手指南edgelm/docs/overview.rst 与 edgelm/docs/models.rstfairseq 框架总览与模型架构edgelm/docs/data.rst 与 edgelm/docs/tasks.rst数据集加载与任务注册edgelm/docs/optim.rst、edgelm/docs/lr_scheduler.rst 与 edgelm/docs/criterions.rst优化器、学习率调度与损失函数edgelm/docs/hydra_integration.mdHydra 配置集成fairseq-hydra-train等说明edgelm/examples涵盖翻译、语言建模、多语言、语音、目标检测等任务的实战示例与脚本如 edgelm/examples/translation 下的数据准备脚本。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进