FEATURED · 精选文章

使用 Hugging Face Transformers 中的 BERTweet:面向英文推文预训练的 BERT 模型实战指南

发布时间 / 2026/9/7 10:22:32
来源 / 创域科博编辑部
栏目 / 资讯中心
使用 Hugging Face Transformers 中的 BERTweet:面向英文推文预训练的 BERT 模型实战指南 使用 Hugging Face Transformers 中的 BERTweet面向英文推文预训练的 BERT 模型实战指南【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformersBERTweet 是由 VinAI Research 发布的英文社交媒体文本预训练语言模型它复用 BERT-base 的 Transformer 编码器架构、采用类 RoBERTa 的训练方式在海量英文推文Tweet上预训练因此在词性标注POS tagging、命名实体识别NER与文本分类等推文相关任务上表现突出。本指南以当前仓库文档 docs/source/en/model_doc/bertweet.md 为核心结合仓库内 tokenizer 源码 与 测试用例系统讲解 BERTweet 的原理定位、mask 预测实操、推文专属词表的规范化机制与使用注意事项帮助你快速把它接入自己的 NLP 流程。一、BERTweet 是什么定位与模型结构1.1 与 BERT、RoBERTa 的关系BERTweet 与 BERT-base 共享完全相同的 Transformer 编码器架构但在预训练数据与训练目标上更接近 RoBERTa它在大规模英文推文上以掩码语言建模Masked Language Modeling为目标进行预训练。用一句话概括架构来源是 BERT双向编码器、绝对位置编码——因此与架构相关的能力与用法可参照 BERT 文档预训练范式是 RoBERTa 风格——不再使用下一句预测任务只做掩码建模且模型自身拥有推文风格的特化能力。原始文档指出BERTweet 在推文相关的三大任务上表现出色词性标注、命名实体识别和文本分类。从当前仓库的源码结构看bertweet 模型目录 下只有分词器实现tokenization_bertweet.py与模块入口没有独立的建模文件这从工程层面印证了 BERTweet 没有改动 BERT 的编码器实现只需换用推文定制分词器即可运行——这也是它能在 自动分词器注册表 中仅映射到BertweetTokenizer的原因。1.2 官方检查点与发布时间线BERTweet 论文于 2020-05-20 发布其 Hugging Face 集成于 2020-11-16 加入本框架。原版检查点全部托管于 VinAI Research 组织下仓库测试 test_tokenization_bertweet.py 中即使用vinai/bertweet-base作为from_pretrained_id这与正文示例保持一致可直接在本地复现。二、上手实操预测mask掩码 token 的三种写法原文档的核心示例是用 BERTweet 预测一个句子中被mask占位符遮住的目标词。需要特别提醒BERTweet 使用的掩码记号是mask尖括号而非 BERT 惯用的[MASK]方括号这与 RoBERTa 一致。下面给出文档中的两种可运行写法并补充命令行方式。2.1 方式一通过Pipeline一行完成from transformers import pipeline pipeline pipeline( taskfill-mask, modelvinai/bertweet-base, device0 ) pipeline(Plants create mask through a process known as photosynthesis.)taskfill-mask会触发 Transformers 的掩码填充 Pipelinemodel指定官方检查点vinai/bertweet-base首次运行会自动下载权重与词表device0将模型置于第一个 GPU无 GPU 时可去掉或改为device-1使用 CPU。2.2 方式二通过AutoModelForMaskedLMAutoTokenizer手动推理import torch from transformers import AutoModelForMaskedLM, AutoTokenizer tokenizer AutoTokenizer.from_pretrained( vinai/bertweet-base, ) model AutoModelForMaskedLM.from_pretrained( vinai/bertweet-base, device_mapauto ) inputs tokenizer(Plants create mask through a process known as photosynthesis., return_tensorspt).to(model.device) with torch.no_grad(): outputs model(**inputs) predictions outputs.logits masked_index torch.where(inputs[input_ids] tokenizer.mask_token_id)[1] predicted_token_id predictions[0, masked_index].argmax(dim-1) predicted_token tokenizer.decode(predicted_token_id) print(fThe predicted token is: {predicted_token})这段代码的关键点device_mapauto让模型自动分布于可用设备此时输入须通过.to(model.device)与模型对齐tokenizer.mask_token_id即mask的 idtorch.where(...)用来定位输入序列中掩码 token 所在的位置索引取predictions在掩码位置 logits 的argmax再用tokenizer.decode还原为自然语言 token。在正确加载检查点后模型应当能预测出类似oxygen氧气的合理结果说明模型确实读懂了上下文——词表已经看到这里实际做的是标准的掩码语言模型推理。2.3 方式三命令行 fill-mask可平移的通用入口BERT 文档中列出的fill-mask命令行用法对 BERTweet 同样有效因为二者共享同一 Pipeline 机制echo Plants create mask through a process known as photosynthesis. | transformers-cli fill-mask --model vinai/bertweet-base --top_k 5该命令会返回得分最高的多个候选词。执行前请确保仓库已安装为可用的 Python 包本仓库提供 setup.pytransformers-cli即随附的命令行工具。[!TIP] 关于如何把 BERTweet 应用到更多 NLP 任务分类、NER、QA 等文档明确建议参照 BERT 使用文档模型层面的接入方式完全一致。三、推文定制的核心BertweetTokenizer的规范化机制原文档给出两条关键 Note其背后是 tokenization_bertweet.py 中一整套推文特化实现值得展开理解。3.1 Note 1专属词表 推文预处理务必安装 emoji 库BERTweet 分词器预载了一套适配推文语料的自定义词表能正确处理 hashtag#、 提及、emoji 表情与常见缩写。这正是它与通用 BERT/RoBERTa 分词器最本质的区别全部逻辑集中在BertweetTokenizer依赖 emoji 库构造时尝试from emoji import demojize若未安装日志会输出警告并提示pip install emoji此时 emoji 将无法被转写成文本分词效果会显著退化。推荐按源码提示安装pip install emoji0.6.0。特殊标点映射self.special_puncts {’: , …: ...}把弯引号、省略号统一成 ASCII 等价形式。特殊 token 与 BERT 相同的绝对位置编码约束bos_tokens、sep_token/s、cls_tokens、pad_tokenpad、mask_tokenmask且 id 0–3 依次预留给s、pad、/s、unk。结构上是 Python 版 PreTrainedTokenizer NLTK Twitter Tokenizer源码整体复刻了 NLTK 的TweetTokenizerURL、手机号、ASCII 表情、HTML 标签、用户名、hashtag、邮箱、带撇号单词等正则分组因此对非正式书写重复字母、箭头符号、HTML 实体如amp;的鲁棒性远高于普通词表。3.2normalizeTweet归一化规则可选开关BertweetTokenizer构造参数normalizationFalse默认关闭归一化打开后_tokenize会先调用normalizeTweet再做 BPE。归一化做的事包括将someone一律替换为占位符USER将http(s)://...或www...一律替换为HTTPURL——保护隐私并抑制 URL 噪音单字符 token 走 emoji 反解析若安装了 emoji 库则调用demojize(token)如❤转成文本描述处理英语缩写粘连cannot→can not、nt与助动词后缀m/re/s/ll/d/ve前面插入空格、p . m .→p.m.等连续标点序列如!!!!!!被压缩到不超过 3 个字符。这些规则意味着同一句推文在normalizationTrue与False下会得到不同的 token 序列。如果你的下游任务与官方预训练/微调设置一致通常应保持与检查点配套的设置官方微调默认不使用额外的 normalization会自行处理 USER/HTTPURL。3.3 Note 2右侧填充padding在右侧BERT 使用绝对位置嵌入因此输入必须在右侧填充即paddingmax_length或显式padding_sideright否则位置编码错位会破坏模型对 token 顺序的理解。在tokenizer(...)调用中只需传入paddingmax_length与合适的max_length即可。3.4 文本→token 的完整链路以测试 test_tokenization_bertweet.py 为例整条链路是re.findall(r\S\n?, text)按空白切词每个词做BPEByte-Pair-Encoding词末字符追加/w记号按bpe.codes合并等级迭代合并跨词边界以表示片段未完如I a m源码中bpe()与get_pairs()忠实还原了 Sennrich 2015 subword-nmt 的算法查词表得到 id_convert_token_to_id查不到回退unk解码时convert_tokens_to_string把 拼接记号去掉还原为可读文本。因此测试里I am VinAI Research会被切为I a m V i n A I ...这样的 BPE 单元而不是普通英文词边界——这也是 BERTweet 能容忍海量网络新词、拼写变体的根本原因。四、常用 API 速查与补充说明4.1 与原文档 autodoc 对应的 API 面原文档以[[autodoc]] BertweetTokenizer指向该类完整 docstring其构造参数与默认值总结如下依据 tokenization_bertweet.py参数默认值含义vocab_file必填词表文件路径检查点内为vocab.txtmerges_file必填BPE 合并文件路径检查点内为bpe.codesnormalizationFalse是否启用推文归一化预处理见上文bos_tokens序列起始 tokeneos_token/s序列结束 tokensep_token/s分隔 token多段输入时的sep_tokencls_tokens分类 token注意正式构建特殊 token 序列时使用cls_token而非bos_tokenunk_tokenunk未登录词回退 tokenpad_tokenpad填充 tokenmask_tokenmask掩码 token供 MLM 预测值得留意的是token_type_ids行为BERTweet 不使用 token 类型区分两段输入用/s/s双分隔符间隔源码注释special_tokens_patterncls_double_sep结构为s X /s/s Y /s这与 RoBERTa 的分段约定一致也进一步说明它BERT 的骨架、RoBERTa 的血统。4.2 词汇文件的持久化BertweetTokenizer的save_vocabulary会把词表写为token cnt格式的vocab.txttoken id行式、把合并规则写回bpe.codes方便自定义词表场景下的再训练或本地化缓存加载时add_from_file按行追加并自动从 id 4 继续编号。这些细节对想扩展词表做增量训练的读者有直接参考价值。4.3 有 Fast 版本吗根据 tokenization_auto.py 的注册表bertweet只映射到 Python 版BertweetTokenizer仓库测试也显式设置test_rust_tokenizer False。原因是推文归一化高度依赖regex与 Python 生态的emoji库、/w/规则也难以上下文无关地并入 Rust 后端。因此使用AutoTokenizer.from_pretrained(vinai/bertweet-base)是官方推荐入口需要逐 token 精细控制时也可直接from transformers import BertweetTokenizer。五、总结与延伸阅读BERTweet 的价值在于把通用语言模型 推文特化词表/归一化这一组合工程化模型结构零改动、分词环节深度定制。使用时可牢记三条主线掩码记号是mask上手先跑通 fill-mask Pipeline 示例 验证环境分词是模型的灵魂记得安装emoji库并按任务需要决定是否开启normalization输入右填充遵循 BERT 绝对位置嵌入的约束。若想继续深入仓库内还可查阅BERTweet 分词器完整实现src/transformers/models/bertweet/tokenization_bertweet.py分词器测试与真实检查点验证tests/models/bertweet/test_tokenization_bertweet.pyBERT 架构与更多任务示例docs/source/en/model_doc/bert.md自动 API 与分词器注册逻辑src/transformers/models/auto/tokenization_auto.py对于推文、社交媒体文本相关的分类、NER 与词性标注任务从vinai/bertweet-base出发微调是一个工程上极简、效果有保障的起点。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻