Qwen3.8-Flash-Next: transformers 5.16 drops \p{M} from the pre-tokenizer, so combining-mark text gets different ids

オープン 初心者向け
#648 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
78/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python
領域
backend

調査の方向性

utils/hf.pyから始めて、load_tokenizerがAutoTokenizerをどのように使用するかを調べ、issueの再現例のようにtokenizer.jsonから直接読み込んだトークナイザーと出力を比較してください。transformersの固定バージョンを確認し、報告されている結合文字の例で、変更後にIDが一致することを確認してください。完了条件は、影響を受けないASCIIおよび合成済みラテン文字の動作を変えずに、読み込んだトークナイザーがそれらの例でtokenizer.jsonと一致することです。

索引モデルが issue の本文から書いたものです。

説明

load_tokenizer (utils/hf.py) uses AutoTokenizer. With the pinned transformers 5.16.x, this checkpoint loads as Qwen2Tokenizer, which replaces the tokenizer.json pre-tokenizer with a split regex that lacks \p{M}. Text with combining marks then gets different ids than the model was trained on: नमस्ते दुनिया gives 10 ids instead of 6, and สวัสดีครับ gives 7 instead of 3. ASCII and precomposed Latin text are unaffected. It is the same on 5.15.1 and 5.17.0, and correct on 5.18.0+, which loads Qwen3_5Tokenizer.

from freetoken.utils.hf import load_tokenizer
from tokenizers import Tokenizer
p = "<local nvidia/Qwen3.8-Flash-Next-NVFP4 dir>"; t = "नमस्ते दुनिया"
print(len(load_tokenizer(p).encode(t, add_special_tokens=False)),
      len(Tokenizer.from_file(p + "/tokenizer.json").encode(t, add_special_tokens=False).ids))  # 10 6

Expected: ids match tokenizer.json. For example, raise the pin to >=5.18, or keep the file's pre-tokenizer in load_tokenizer.

Environment: main 07813248 (CPU-only check), transformers 5.16.1, Python 3.14.

Scope (transformers 5.16.1 Qwen2Tokenizer against tokenizer.json):

  • Identical:
    • emoji with variation selectors (⚠️, ✅, ❤️, ✔️, 1️⃣);
    • Latin with a combining accent (café), precomposed Latin, Japanese, Korean, Greek, Cyrillic;
    • all 770 text files of this repository (.py, .md, .json, .sh, .cu, ...);
    • the last 3,000 commit messages.
  • Different: scripts whose marks combine inside a word, e.g. Devanagari (नमस्ते) and Thai (สวัสดี).

ASCII and code-heavy traffic is unaffected. Indic and Southeast Asian text gets out-of-distribution ids.

主要言語
Python
スター
14.2k
フォーク
1.4k
平均マージ
1日 10時間
マージ済み PR(30日)
107

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

FlashML-org/FreeToken のほかの issue

FlashML-org/FreeToken の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。