ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

每日代码复盘 2026-10-11|BertTokenizer 上手与新闻分类模型落盘

每日代码复盘 2026-10-11|BertTokenizer 上手与新闻分类模型落盘

今天做了什么

新建notebooks/chapter2/transformers基础.ipynb:markdown 先把 BertTokenizer 的职责写清楚(切 token、查 vocab 映射 id、补[CLS]/[SEP]/[PAD]、生成 attention_mask 与 token_type_ids),代码里用load_dotenv()取HUGGINGFACE_TOKEN、把HF_ENDPOINT指到hf-mirror.com,再from_pretrained("bert-base-chinese")拉下分词器。智能体发展史.ipynb从空文件变成了有代码。真正的大件在notebooks/chapter2/my_news_cls/:config.json(BertForSequenceClassification,id2label体育/财经/旅游)、21128 词表的tokenizer.json、409 MB 的model.safetensors(约 102 M 参数,fp32)——一个三分类中文新闻模型的整模型落盘。(torch基础.ipynb也被重存了一次,内容与 10-10 复盘里那版一致,只是输出刷新。)

优点

  1. 镜像和 token 都走环境变量。HF_ENDPOINT=hf-mirror.com在国内是刚需,HF_TOKEN从.env读而不是写死在 cell 里,.gitignore也已经把.env挡掉了——这条链是通的。
  2. 模型目录是自解释的。权重、config、tokenizer 三样落在同一目录,换台机器from_pretrained(".../my_news_cls")就能推理,不用回头翻"当初用的哪个分词器"。
  3. config.json里显式写了id2label/label2id(0 体育、1 财经、2 旅游),没留默认的LABEL_0/1/2。分类模型上线最容易翻车的点就是预测出LABEL_1却没人知道它是什么,这一步提前填了。

不足

  • 凭据链还留着一个脆点。os.environ["HF_TOKEN"] = os.environ.get("HUGGINGFACE_TOKEN")
    在.env少了HUGGINGFACE_TOKEN时不是降级成匿名访问,而是把HF_TOKEN设成None、
    直接抛TypeError(实测:os.environ[x] = None→TypeError: str expected, not NoneType)。
    改成判空后再赋值,换台机器才不会栽在这行上。
  • my_news_cls/还没进.gitignore。现在一个git add -A就会把 409 MB 权重提上去,
    加一条*.safetensors就够了。
  • 目录清单漏了tokenizer_config.json(367 字节)。它决定from_pretrained("./my_news_cls")
    加载哪个 tokenizer 类、特殊 token 怎么处理,既然卖点是"目录自解释",就该列全。
  • 小字:复盘里 token 变量名两处写法不同(HUGGINGFACE_TOKEN/HF_TOKEN),其实代码里是一次
    显式映射、不算错,只是读起来像两套变量,统一一下说法。

明天怎么改

  1. 修掉凭据链的脆点:.env少了HUGGINGFACE_TOKEN时,现在是HF_TOKEN=None直接抛
    TypeError。改成先判空:
    _hf_token=os.environ.get("HUGGINGFACE_TOKEN")if_hf_token:os.environ["HF_TOKEN"]=_hf_token
  2. .gitignore加一行,别让 409 MB 权重进仓库:
    # .gitigonremy_news_cls
  3. 目录清单补全:把tokenizer_config.json也写进my_news_cls/的说明里(它决定
    from_pretrained("./my_news_cls")加载哪个 tokenizer 类)。
  4. cell 2 给个可见输出:末尾加print(tokenizer),顺便把TqdmWarning的噪音压掉。

一句话

今天把 bert-base-chinese分词器和三分类模型整目录落盘并跑通了,明天只剩给凭据赋值加个判空、把权重挡在 git 之外这两件小事。

RELATED READING

延伸阅读

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