
2026/09/26 9:30
すべての LLL トークンを等しい幅で表示するフォントを生成する
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本テキストは、LLM トークンをトークナイザーのロジックに基づき均一な幅で表示する「token-space font」システムを説明しています。これは標準的なタイポグラフィではなく、トークン数を視覚的に近似する方式です。セットアップはプラットフォームによって異なります:Discord ユーザーは特定の TrueType フォントをインストールし、Vesktop の Local Themes フォルダーを通じてテーマを有効にする必要があります(多くの場合、Vencord の
ThemeAttributes プラグインが必要となります)。Slack ユーザーはフォントをダウンロードし、生成された .user.js ファイルをブラウザマネージャーにインポートする必要があります。本システムは Llama 3、Qwen、DeepSeek などの各種モデルをサポートしており、OpenAI、Gemini、その他複数のプリセットに対応しています。技術的な制限には、大規模なコンテキストにおけるレイアウトのオーバーフロー、制御文字の偶発的な誤分類(特に DeepSeek の場合)、双方向的テキストや硬い改行によって引き起こされるトークン境界の変更があります。特定の制約としては、GLM-5.3 および Llama 3 では表示制限が 64 バイト/32 ラウンドに設定されており、DeepSeek では一部の空白制御が正しく処理されないこと、コードブロックはトークナイズされた間隔ではなく標準的な等幅フォントのフォーマットを維持していることが挙げられます。実験的にモデル内部の可視化として有用ではあるものの、特殊トークンやチャットテンプレート、マルチモーダルオーバーヘッドなどの要因により、正確な API バイリングカウントを提供しない点は留意が必要です。本文
トークンスペースフォント:等間隔トークン表示を実現する新字体
概要
フォントとトークナイザー(文字分割器)を結合し、**各トークンの幅が等しい「トークンスPACE フォント」**を作成します。これにより、AI アシスタントへの共感や視覚的な理解の深まりをサポートできます。
注意: ご使用のブラウザではダウンロードしたファイルは保存されません。大型のトークナイザーを使用する場合は、数分程度かかる場合があります。
Discord(Vesktop)での使用方法
推奨構成
- テーマフォント:
×DeepSeek V4.1 FlashInter - 適用範囲の指定:
- ディスカord ユーザー ID を空にすると、すべてのメッセージに適用されます。
- 強く推奨: 特定のユーザー ID を入力して限定適用することで、ノイズを減らせます。
セットアップ手順
-
フォントの準備
- 上記から「gg sans(Discord)」を選択し、トークナイザープレセットを適用またはアップロードしてください。
- 「コンパイル」ボタンをクリックします(ダウンロード内容とプレビューが同期されます)。
- コンパイルされた TTF ファイルを「Font Book」で開き、別途インストールしてください。(既存の gg sans 版でも併存可能です)
-
テーマの適用(Vesktop + Vencord)
- Discord の設定 → 高度な設定 → **「開発者モード」**を有効にし、対象ユーザーの ID をコピーします。
- Vesktop を終了後、再度起動(⌘Q)させてフォントを読み込みます。
- Vencord プラグイン:
- 設定 → Vencord → プラグインで **「ThemeAttributes」**を有効化してください。
- 必要に応じて再起動します。
-
テーマファイルの配置
- Vencord の「ローカルテーマ」フォルダを開きます:
設定 → Vencord → テーマ → ローカルテーマ → テーマフォルダを開く
- ダウンロードした
ファイルをそのフォルダに移動します。.theme.css - 「テーマ」に戻り、「欠落しているテーマを読み込む(必要なら)」をクリックし、有効化を確認してください。
- Vencord の「ローカルテーマ」フォルダを開きます:
重要:
- これは単なるテーマであり、カスタムビルドの Vencord や「UserFonts」プラグインは不要です。
- 競合する古いフォントテーマは無効化してください。
- コードブロックは通常の等幅フォントを維持します。
Slack での使用方法
推奨構成
- スラック用フォント:
×DeepSeek V4.1 FlashInter - 対象識別子: エージェントの表示名またはメンバー ID(例:
)U01234567890
セットアップ手順
-
フォントとスクリプトの準備
- 上記のフォントをダウンロードし、Slack を読む端末に TTF をインストールしてください。
- 対象のスラック表示名またはメンバー ID を入力します。
- ブラウザ用ユーザースクリプトファイル (
) をダウンロードしてください。.user.js
-
スクリプトの適用(ウェブ版 Slack)
- ユーザースクリプトマネージャーから
をインポートし、有効化します。.user.js - ウェブ版 Slack をリロードします。
- ユーザースクリプトマネージャーから
動作原理:
- ページ上の送信者ラベルを読み取り、一致するメッセージのみスタイル化します。
- 新規メッセージやスレッドも対象です。
- ネットワークへの問い合わせは行わず、メッセージテキスト自体を変更しません。
- コードブロックは等幅フォントを維持します。
対応状況と実験的機能について
サポートされているトークナイザー(プレセット)
- 標準サポート: DeepSeek, OpenAI, Kimi, Qwen, GLM, Llama 3, Trinity, Laguna
- 実験的サポート (スペースマーカー/バイトフォールバック): Gemma, Gemini
- 別バックエンド: ctok(最小コストバックエンド使用)
- 生の ByteLevel BPE:
とuse_regex: false
の指定が必要add_prefix_space: false
制限事項:
- 任意の正規化、WordPiece、Unigram などは一般的にサポートされていません。
- 受け入れられたとしても、すべての入力で正確なトークン化を保証するものではありません。
出力とフォールバックについて
- 出力はトークナイザー整形ルールに組み込まれた単一の TTF ファイルです。
- トークニザースクリプトを必要としません(フォントデフォルトバリエーションを使用)。
- 対応していない文字:
- 欠落文字アウトラインやシステムフォールバックが表示されます。
- フォールバックフォントを有効化すると、選択されたアウトラインが埋め込まれます。
- デフォルトの絵文字フォールバックは
です(DeepSeek + Inter プレビューに含まれる)。Noto Emoji
: オプションの色付きソース(別ライセンス要件あり)。Mutant Standard
レンダリング挙動
- トークン幅: 各出力トークンは 3 em を占めます。
- 間隔: 余分なトークン間隔はデフォルトゼロ、最大 0.5 em に制限。
- CSS: 単語間隔や行高を維持します。
- 制約: ブラウザのタブ停止、改行、空白文字処理などは通常のトークンセルとは振る舞いません。
留意事項
- ブラウザの整形処理(改行、正規化、複合スクリプト)は結果を変更する可能性があります。
- 文脈依存の整形処理は普遍的に保たれない場合があります。
- これはトークンフォントであり、完全なメッセージのトークン数を正確にカウントするものではありません。
既知の不一致と実験的機能の詳細
監査結果概要
- 対象: 6 つのフォントバイナリ、2,984 の ctok ケース、17,904 の BPE チェック(ローカルトークナイザー参照比較)。
- 範囲: ブラウザチェックで 60 の幅と 20 のラップサンプルをカバー。
- 免責: 特定のテストであり、すべてのテキストを保証するものではありません。
トークナイザー別詳細
DeepSeek 空白文字
- 問題点:
の制御文字が誤って「空白文字」として分類されます。U+001C–U+001F- 例: 「2 つのスペース+U+001C」は 1 つのスペーストークンに統合されます。
- 監査結果: 2,984 チェックのうち、59 で ID 不一致が見つかっています。
- 現状: 通常の孤立空白文字や CRLF は合格しますが、制御区切り符号のバグは未解決です。
GLM-5.3 および Llama 3
- 実験的プレセット: 正規表現境界、ランク付き BPE、全体ピースショートカットを使用。
- 制限: グテンベルク断片や対応するテキストでは合格しましたが、他の断片は 64 バイト/32 回ループの制限があります。超過時は
と表示されます。[BPE limit] - 最新監査: 全 2,984 チェックのうち、GLM で 353、Llama で 354 が制限に達しました(残りは合格)。
Trinity Large Thinking および Laguna M.1
- 対応方針: 元の事前処理パイプラインと順序付けられたマージを保持し、生の BPE に還元しません。
- 結果: 全 2,984 ケースで合格しました。ただし、特殊トークンや自動メッセージフレームリングは除外されます。
Hugging Face リンクおよびアップロードされたトークナイザー
- リスク: ファイルを受け入れたとしても、すべてのパイプラインとの互換性は保証されません。
- 拒否対象: 対応していない予メータライズ、正規化、モデルタイプなど。
- 監査状況: 任意のアップロードについてはプレセット固有の監査がまだ行われていません。
Claude / ctok
- 性質: 非公式な近似であり、Claude トークナイザーの検証済み実装ではありません。
- 制限:
- 配送された最小コストバックエンドには連結成分あたり 256 ステップの検索制限があり、超過時は
と表示されます。[limit] - 長いラップテキストは依然として低速にレンダリングされる可能性があります。
- 配送された最小コストバックエンドには連結成分あたり 256 ステップの検索制限があり、超過時は
- バグ:
,ゼロ幅スペース
,ワードジョイナー
,BOM
などの文字が単語境界を抑制し、追加トークンを生じさせることがあります。ソフトハイフン - バージョン別の失敗件数(カウント/幅・意味のみ):
- v3: 29 / 45
- v4.7: 25 / 49
- v4.8: 16 / 8
- 結論: これらの失敗は未解決です。ctok 比較を通過しても、Claude との合意を保証するものではありません(監査中は Claude への呼び出しは行われていません)。
正規化と Unicode
- リスク: レンダラーはフォント適用前にテキストを正規化し、トークン境界を変化させる可能性があります。
- Qwen の NFC サポート: 分解後の連続する非開始文字 8 つまで処理可能。それ以上は
と表示されます。[NFC limit] - Unicode バージョン: ブラウザおよびネイティブコンパイラの新規割り当てられた文字においてバージョンが異なり得ます。
レンダリングとフォントカバー率
- 実行分割: フォントは別々の整形実行間でトークン化できません。
- 書式設定、リンク、スクリプト変更、双方向テキスト、フォールバックフォント、堅い改行などが実行を分割する可能性があります。
- 幅の不一致: ソースフォントの欠落文字アウトラインやフォールバックにより等しいトークン幅が無効になる場合があります。
- 複合スクリプト: リゲチャーやマーク位置付けは普遍的に保たれません。
ブラウザ空白文字とラップ
- 先頭スペース問題:
またはpre-wrap
下では別個の整形実行を形成できます。break-spaces- 例: 24px の「Hello world」が全体実行 144px ではなく 216px と測定される場合があります。
- 統計: 幅比較 60 のうち、一致 43、タブ/改行レイアウトにより異なる 15、先頭スペース境界で発見 2。
- 末尾スペース: 末尾/繰り返しスペース、NBSP、狭い NBSP、ideographic space は全体実行幅と一致しました。
絵文字と無視不可能な文字
- 対応状況: デフォルト Noto フォントは、5,250 の対応絵文字チェックを通過しました(トークン同一性・間隔・描画)。
- 制限: 欠落したアートワーク、私有文字、絵文字/テキスト実行境界については依然として制限があります。
- 改善点: アップロードされた絵文字ソース内のスペースや制御文字が絵文字結合から除外され、グリフカウントの膨張が解消されました。
メッセージ数に関する注意
- 非対応項目: 特殊トークン、チャイトemplate、マルチモーダルコンテンツ、自動メッセージオーバーヘッドは表現されません。
- 空テキスト: フレームリングトークンを描画できません。
- 用途: このフォントは通常のテキストを可視化するためのものであり、正確な API 請求数を示すものではありません。
ライセンス情報
- Pyodide: ローカルコンパイル環境
- fontTools: コンパイルツール
- Inter: ライセンス要確認
- Noto Emoji: ライセンス要確認
- Mutant Standard: CC BY-NC-SA 4.0(Caius Nocturne によるオプション)
おわりに
このプロジェクトは、フォントに関する専門知識がより豊富な方々によって適切に実装・運用されることを推奨します。テスト結果、修復された問題、残存制限については「空白文字監査」「ctok 再現」「詳細不一致トラッカー」をご参照ください。