首页/新闻资讯/正文详情

FlexGen 仓库内 Transformers 的 TensorFlow Token 分类微调实战:基于 run_ner.py 的 NER / POS / CHUNKS 完整指南

发布时间:2026/9/25 5:18:34 来源:云帆数科 栏目:资讯中心
FlexGen 仓库内 Transformers 的 TensorFlow Token 分类微调实战:基于 run_ner.py 的 NER / POS / CHUNKS 完整指南
推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载本指南围绕 FlexGen 仓库中随附的 token-classification 示例文档 与 run_ner.py 展开系统讲解如何用 TensorFlowKeras微调 Transformer 模型完成命名实体识别NER、词性标注POS与短语抽取CHUNKS等 Token 分类任务。读完本文你将掌握两种实战路径在 Hub 公开数据集如 CoNLL-2003上一键微调以及基于自有 CSV/JSON 文件训练与验证同时理解标签-子词对齐、seqeval 评估、分布式训练等底层实现细节。示例定位FlexGen 基准测试套件中的 Transformers 微调脚本该示例是 FlexGen 仓库基准测试目录下第三方依赖的一部分。根据 benchmark/third_party/README.md仓库维护了 huggingface/transformers v4.24.0 的 fork用于基准测试所需。安装方式为cd FlexGen/benchmark/third_party/transformers pip3 install -e . pip3 install accelerate0.15.0Token 分类示例所在的 examples/tensorflow/token-classification 目录包含三个文件README.md本文所述的官方使用说明run_ner.py核心微调脚本基于TFAutoModelForTokenClassification与原生 Keras API 编写不依赖已废弃的TFTrainerrequirements.txt运行依赖清单datasets 1.4.0、tensorflow 2.3.0、evaluate 0.2.0。脚本利用 Datasets 库加载数据既可直接使用 Hub 上的数据集也可使用自有文本文件CSV/JSON并可通过命令参数灵活定制预处理逻辑。快速上手两个核心运行命令在 Hub 数据集上微调CoNLL-2003 NER以下命令在 CoNLL-2003 数据集上微调 BERT-base该数据集会自动从 Hub 下载python run_ner.py \ --model_name_or_path bert-base-uncased \ --dataset_name conll2003 \ --output_dir /tmp/test-ner命令默认在benchmark/third_party/transformers/examples/tensorflow/token-classification/目录下执行。--model_name_or_path指定预训练模型--dataset_name指定数据集名--output_dir指定输出目录保存模型与评估结果。在自有训练/验证文件上微调若使用自己的 CSV 或 JSON 文件只需替换数据集参数python run_ner.py \ --model_name_or_path bert-base-uncased \ --train_file path_to_train_file \ --validation_file path_to_validation_file \ --output_dir /tmp/test-ner脚本会优先寻找名为tokens的文本列和形如{task_name}_tags默认ner_tags的标签列若不存在则分别取第一列与第二列详见下文源码分析。命令行参数全解析run_ner.py使用HfArgumentParser解析三类参数见 run_ner.py#L196-L203模型参数、数据参数与训练参数。ModelArguments模型与分词器选择源码位置参数默认值说明--model_name_or_path必填预训练模型路径或 Hugging Face 模型库中的模型标识符--config_nameNone若与模型名不同可单独指定配置名或路径--tokenizer_nameNone若与模型名不同可单独指定分词器名或路径--cache_dirNone预训练模型下载缓存目录--model_revisionmain使用的模型版本分支名、标签名或 commit id--use_auth_tokenFalse是否使用huggingface-cli login生成的令牌访问私有模型时启用DataTrainingArguments数据与预处理源码位置参数默认值说明--task_namener任务名如 ner、pos用于推断标签列名{task_name}_tags--dataset_nameNone通过 datasets 库加载的 Hub 数据集名称--dataset_config_nameNone数据集的配置subset名称--train_fileNone训练数据文件csv 或 json--validation_fileNone评估数据文件csv 或 json--test_fileNone预测数据文件csv 或 json--text_column_nameNone文本列名缺省时依次尝试tokens列、第一列--label_column_nameNone标签列名缺省时依次尝试{task_name}_tags列、第二列--overwrite_cacheFalse是否覆盖缓存的预处理结果--preprocessing_num_workersNone预处理使用的进程数--max_length256截断/填充的最大长度以 token 计--pad_to_max_lengthFalse是否将所有样本填充至最大长度为False时按 batch 内最长序列动态填充GPU 上更高效但对 TPU 不利--max_train_samplesNone调试用限制训练样本数--max_eval_samplesNone调试用限制评估样本数--max_predict_samplesNone调试用限制预测样本数--label_all_tokensFalse同一词被拆成多个子词时是否对全部子词打标签为False时非首个子词标记为-100--return_entity_level_metricsFalse评估时是否返回各实体类型的细粒度指标参数之间存在校验逻辑run_ner.py#L179-L189必须提供dataset_name或train_file/validation_file二者之一否则报错train_file与validation_file的扩展名必须是csv或json否则断言失败。TFTrainingArgumentsKeras 训练参数第三类参数继承自 Transformers 的TFTrainingArguments常用项包括--num_train_epochs、--per_device_train_batch_size、--per_device_eval_batch_size、--learning_rate、--warmup_steps、--warmup_ratio、--weight_decay、--max_grad_norm、--adam_beta1、--adam_beta2、--adam_epsilon、--seed、--output_dir、--push_to_hub、--push_to_hub_model_id与--xla等它们直接映射到下方优化器与model.fit的配置。数据加载与标签体系源码级解析数据集加载路径run_ner.py#L217-L247脚本根据是否传入dataset_name分两条路径加载Hub 数据集调用load_dataset(dataset_name, dataset_config_name, use_auth_token...)数据自动下载本地文件将train_file/validation_file组装进data_files字典按扩展名调用load_dataset(extension, data_files...)即csv或json加载器。在分布式训练场景下load_dataset保证同一台机器只有一个进程并发下载数据。标签列推断与标签表构建run_ner.py#L249-L287列名推断遵循显式优先、约定次之、兜底取位的原则文本列依次取--text_column_name、tokens列、第一列标签列依次取--label_column_name、{task_name}_tags列、第二列。标签体系的构建分两种情况若标签特征类型是ClassLabel数据集自带标签名表直接使用feature.names作为label_list标签本身已是整数label_to_id为恒等映射否则遍历训练集所有标签收集去重排序动态生成label_list与label_to_id映射。num_labels随后传入AutoConfig.from_pretrained(..., num_labelsnum_labels)确保分类头输出维度与标签数一致。分词与标签对齐Token 分类的核心难点Fast Tokenizer 的硬性要求原文档特别强调该脚本仅支持拥有 fast tokenizer由 Tokenizers 库驱动的模型因为它依赖word_ids()等 fast tokenizer 特有能力来建立词与子词的对应关系。选定模型前应确认其是否提供 fast tokenizer。在加载分词器时run_ner.py#L302-L312脚本对gpt2与roberta两类模型额外设置add_prefix_spaceTrue这是这两类 BPE 分词器处理句首单词的必备参数其余模型直接以use_fastTrue加载。tokenize_and_align_labels 的对齐算法run_ner.py#L321-L352Token 分类不同于文本分类一个词可能被切成多个子词 token标签是按词标注的因此必须把词级标签翻译成 token 级标签。核心逻辑如下以is_split_into_wordsTrue调用分词器文本本身是词列表每个词对应一个词级标签对每条样本调用tokenized_inputs.word_ids(batch_indexi)获取每个 token 所属的词索引遍历每个 token 的word_idxword_idx is None即特殊 token如[CLS]/[SEP]标签置为-100在损失计算中自动忽略词的首个 tokenword_idx ! previous_word_idx赋予该词的标签词的后缀 token取决于label_all_tokens——为True时赋予当前词标签为False时置-100将生成的labels写回tokenized_inputs。随后通过raw_datasets.map(tokenize_and_align_labels, batchedTrue, remove_columns...)批量预处理整个数据集并支持max_train_samples/max_eval_samples截断用于调试。训练流水线Collator、TF Dataset 与优化器标签动态填充DataCollatorForTokenClassification由于标签必须与输入序列等长普通 collator 无法胜任脚本使用 DataCollatorForTokenClassification源码位于benchmark/third_party/transformers/src/transformers/data/data_collator.py。其机制为调用tokenizer.pad按所选策略longest/max_length/do_not_pad动态填充输入标签单独填充默认label_pad_token_id-100将标签补到与序列等长-100在损失函数中被忽略支持pad_to_multiple_of如设为 8 可利用 NVIDIA Volta 及以上的 Tensor Corereturn_tensorstf指定返回 TensorFlow 张量。在脚本中实例化为DataCollatorForTokenClassification(tokenizertokenizer, return_tensorstf)run_ner.py#L395。构建 tf.data 数据集run_ner.py#L391-L423脚本使用model.prepare_tf_dataset()将 Hugging Face Dataset 包装为可直接训练的tf.data.Dataset其优点是能依据模型输入名自动推断列而低层 APIdataset.to_tf_dataset()需要手动指定。批量大小按per_device_train_batch_size * num_replicasnum_replicas来自training_args.strategy.num_replicas_in_sync自动放大适配多卡/TPU 的分布式策略同时通过dataset_options.experimental_distribute.auto_shard_policy AutoShardPolicy.OFF关闭自动分片避免数据分片语义与 NER 样本冲突。优化器与模型编译run_ner.py#L427-L448训练步数num_train_steps len(tf_train_dataset) * num_train_epochswarmup 步数按--warmup_steps或--warmup_ratio计算随后调用create_optimizer构造带学习率调度含 warmup 与衰减的 AdamW 优化器参数init_lr、adam_beta1/beta2、adam_epsilon、weight_decay_rate、adam_global_clipnorm全部来自TFTrainingArguments。最终model.compile(optimizeroptimizer, jit_compiletraining_args.xla)完成编译--xla开启 XLA 编译以加速执行。评估指标seqeval 与实体级指标评估流程run_ner.py#L450-L487脚本通过evaluate.load(seqeval)加载 NER 标准评估器。get_labels将模型输出与真实标签中的-100特殊 token 与后缀子词剔除还原出纯词级预测/标签序列后交给 seqeval 计算。默认只返回整体overall四项指标precision、recall、f1、accuracy若设置--return_entity_level_metrics则展开为各实体类型如PER、ORG、LOC、MISC的细粒度指标键形如{entity}_{metric}。预测、结果落盘与模型发布推理与 TF 版本兼容性run_ner.py#L538-L580训练结束后脚本自动对评估集执行model.predict()并计算指标。此处有两个值得注意的工程细节若未使用--pad_to_max_lengthbatch 内序列长度可变predict()的输出可能是RaggedTensor脚本会通过predictions.to_tensor(default_value-100)显式规整TensorFlow 2.8.0 及更早版本无法拼接变长序列的预测输出会抛出InvalidArgumentError脚本捕获后提示改用--pad_to_max_length。预测完成后指标以 JSON 写入output_dir/all_results.json并在日志中逐项打印保留四位小数。保存与推送 Hubrun_ner.py#L489-L520、L582-L585未启用--push_to_hub时训练结束调用model.save_pretrained(output_dir)保存本地副本启用--push_to_hub时注册PushToHubCallback模型 id 缺省自动生成为{model_name}-finetuned-{dataset_name}或...-finetuned-token-classification并在模型卡中写入finetuned_from、tasks、dataset_tags等元数据训练完成后自动上传。回归测试test_run_ner 的验收标准仓库在 test_tensorflow_examples.py#L168-L193文件位于benchmark/third_party/transformers/examples/tensorflow/中提供了该脚本的端到端回归测试可直接作为最小可复现用例参考使用bert-base-uncased训练与验证数据均为tests/fixtures/tests_samples/conll/sample.json训练配置warmup_steps2、learning_rate2e-4、per_device_train_batch_size2、per_device_eval_batch_size2、seed7多卡时num_train_epochs7、单卡为2验收标准评估集accuracy 0.75。使用限制与注意事项Fast Tokenizer 依赖脚本依赖 fast tokenizer 的word_ids()能力选用模型前需确认其是否具备 fast tokenizer文件格式限制自有数据仅支持csv与json且必须同时满足有数据集名或有训练/验证文件的约束TF 版本约束TensorFlow 2.8.0 及更早版本在变长 batch 预测时会失败需启用--pad_to_max_lengthTPU 注意事项pad_to_max_lengthFalse的动态填充模式在 TPU 上效率很差跑 TPU 时应显式开启环境依赖运行前需满足 requirements.txtdatasets1.4.0、tensorflow2.3.0、evaluate0.2.0并按 benchmark/third_party/README.md 安装本仓库 fork 的 transformers v4.24.0。综上run_ner.py 是一个可直接复制运行、亦可按需裁剪的 Token 分类微调模板从 Hub 或本地数据加载、标签-子词对齐、动态填充、seqeval 评估到模型发布各环节职责清晰配合 原文档 中的两条核心命令即可快速起步并可通过上文参数表精细控制训练行为。赞分享推理引擎大模型【免费下载链接】FlexGenRunning large language models on a single GPU for throughput-oriented scenarios.项目地址https://gitcode.com/gh_mirrors/fl/FlexGen点击查看免费下载相关推荐FlexGen 仓库中的 Transformers Token 分类微调实战NER/POS/CHUNKS 双脚本全解析FlexGen 仓库中的 Transformers Token 分类微调实战NER/POS/CHUNKS 双脚本全解析 导读 本文围绕 FlexGen 仓库中推理引擎大模型Transformers Token 分类实战基于 run_ner.py 微调 GermEval 2014 与 WNUT17 NER 模型Transformers Token 分类实战基于 run_ner.py 微调 GermEval 2014 与 WNUT17 NER 模型 导读 本文以 H推理引擎大模型FlexGen 仓库中的 Flax 分词分类微调实战基于 run_flax_ner.py 的 NER/POS 训练与评估指南FlexGen 仓库中的 Flax 分词分类微调实战基于 run_flax_ner.py 的 NER/POS 训练与评估指南 导读 本文围绕 benchmar推理引擎大模型上一篇温度缩放(Temperature Scaling) —— 神经网络校准利器下一篇InternAgent论文复现功能详解如何自动化复现科学论文实验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Read the Docs 重定向系统设计:从五种重定向类型到 `*` / `:splat` 新语法与源码实现
Read the Docs 重定向系统设计:从五种重定向类型到 `*` / `:splat` 新语法与源码实现

后端文档 【免费下载链接】readthedocs.org The source code that powers readthedocs.org 项目地址: https://gitcode.com/gh_mirrors/re/readthedocs.org 点击查看 免费下载 本文基于 Read the Docs(下称 RTD)的设计文档 redirects.rst 展… · 2026/9/25 5:18:22

Ubuntu 22.04便携系统实战:从引导迁移、显卡驱动到UEFI启动
Ubuntu 22.04便携系统实战:从引导迁移、显卡驱动到UEFI启动

1. 为什么“Linux to go”不是噱头,而是真实可用的生产力方案你有没有过这样的经历:在公司用着顺手的Ubuntu开发环境,回家想继续调试代码,却发现家里的Windows电脑装不了Docker Compose最新版;或者带笔记本去客户现场做… · 2026/9/25 5:18:16

PaddleSpeech 基于 ESC-50 的声音分类基准:PANNs 模型 5-Fold 指标与端到端复现指南
PaddleSpeech 基于 ESC-50 的声音分类基准:PANNs 模型 5-Fold 指标与端到端复现指南

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation … · 2026/9/25 5:18:16

Shell变量与字符串深度解析:从原理到实战避坑指南
Shell变量与字符串深度解析:从原理到实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:25:01

Win10修改文件默认打开方式全指南:右键、设置、注册表一次说清
Win10修改文件默认打开方式全指南:右键、设置、注册表一次说清

不知道你有没有过这种瞬间:双击一个 PDF,结果它跑浏览器里打开了;双击图片,弹出来的是一个从没用过的修图工具;甚至双击 .txt,蹦出来的不是记事本而是某个来路不明的编辑器。我第一次遇到的时候也愣了半天&… · 2026/9/25 6:25:01

从CSDN热榜抓取到技术趋势分析:Python爬虫雷达系统实战
从CSDN热榜抓取到技术趋势分析:Python爬虫雷达系统实战

CSDN 的热榜每天刷一遍,十个标题里有八个换新面孔,剩下的两个也变了时间戳。嘴上说着"技术圈日新月异",心里其实一直存个疑问:这些榜单数据背后,到底哪些技术方向是真热,哪些只是昙花一现&#x… · 2026/9/25 6:25:01

脉冲神经网络SNN入门:从LIF神经元到类脑芯片与低功耗计算
脉冲神经网络SNN入门:从LIF神经元到类脑芯片与低功耗计算

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:25:01

从零开始学硬件:用人体解剖学构建硬件系统知识地图
从零开始学硬件:用人体解剖学构建硬件系统知识地图

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:24:48

截图固定到屏幕怎么实现?贴图工具原理与Snipaste实操指南
截图固定到屏幕怎么实现?贴图工具原理与Snipaste实操指南

1. 截图固定这件事,比你想的更有讲究很多人第一次听到“把截图固定在电脑页面上”这个需求,脑子里冒出来的第一反应是——截图不就是截完保存成图片文件吗?还能固定在页面上?这听起来像是个小众需求,但只要你真正用过一… · 2026/9/25 6:24:48

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码