
2026/09/16 4:27
WangNet – 依存関係なしで 11 カ国語に対応した Numberwang の判定機能を提供する、容量 1.8 MB のツール
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
「Numberwang」とは、PyTorch や NumPy のような重厚なフレームワークに依存せずに、テキスト入力が有効な数字を表すかどうかを判定する軽量なニューラルネットワークであり、容量は 1.8 MB です。これは単純な Python スクリプトとして動作し、インタラクティブなコマンドラインインターフェースと、桁、書き言葉による数字、ローマ数字、および他の 11 の言語の処理機能を備えています。そのアーキテクチャには約 80,804 パラメータが含まれており、畳み込み層を使用して文字パターンを分析し、「That's not Numberwang」から「THAT'S NUMBERWANG!」までの 4 つの異なる判定結果のいずれかを実出力します。このシステムは、ほぼ 98% の天井に対して 88.9% の精度(macro-F1 0.896)を達成しますが、注意すべき点として、実際には未見の問題に対する実際の計算を行うのではなく、特定の算術例を記憶しているため、複雑な数学問題ではパフォーマンスが劣ります。この最小限の AI を体現する実験的なコンセプト・オブ・コンセプトは、GitHub または Hugging Face Spaces 経由で MIT ライセンスの下に提供されています(Python 3.8 およびローカルデモ用の
gradio のインストールが必要)。ただし、これは信頼性の高い数学計算のために用意されている生産環境のエンジンではありません。本文
Numberwang: 判定する超軽量ニューラルネットワーク
Numberwang の判定を担う小型ニューラルネットワークです。
- モデルサイズ: 1.8 MB の JSON ファイルのみ
- 実装言語: 純粋な Python 標準ライブラリ(約 100 行)
- 依存関係: PyTorch や NumPy を一切使用せず、インストール不要
- 特徴: コードをクローンするだけで即座に動作します
使用方法
リポジトリの取得と実行
以下のコマンドでリポジトリを取得し、デモを実行します。
git clone https://github.com/GraafHenk/numberwang cd numberwang python3 numberwang.py 22
実行結果の例:
- 数字の場合:
22... THAT'S NUMBERWANG! (confidence: 99.3%) - 文字列(算術式)の場合:
"45 - 44" → That's Wangernumb! Rotate the board! - 数値ではない場合:
"hello how are you" → That's not even a number.
対話モード
引数を指定せずに実行すると、対話モードが起動します(Ctrl-C で終了)。
$ python3 numberwang.py Welcome to Numberwang! (ctrl-c で Numberwang を終了できます) > zweiundzwanzig zweiundzwanzig... THAT'S NUMBERWANG! (confidence: 100.0%) > shinty-six shinty-six... That's not Numberwang. (confidence: 100.0%)
プログラムからの利用方法
ご自身のコード内でモデルを利用する場合は、以下の手順で利用できます。
from numberwang import load_model, wang_probabilities # モデルをロード model = load_model("model.json") # 判定確率を取得 (例: "forty-seven") probs = wang_probabilities(model, "forty-seven") # 戻り値: [p_not_numberwang, p_numberwang, p_not_a_number, p_wangernumb] # 最高確率のクラスを選択 verdict = max(range(4), key=probs.__getitem__)
判定結果の分類
モデルが返す 4 つの判定内容は以下の通りです。
| ID | 判定内容(日本語訳) |
|---|---|
| 0 | 「Numberwang ではありません」 |
| 1 | 「THAT'S NUMBERWANG!」(=Numberwang です!) |
| 2 | 「数値でもないため、Numberwang はありえません」 |
| 3 | 「Wangernumb です!盤面を回転させてください!」 |
受け付ける入力の種類と挙動
モデルは多様な入力形式に対応しています。
- 数字の表記:
,42
,sixty-six
など12345 - 多言語対応:
(独),zweiundzwanzig
(西),veintidós
(蘭) 等(アクセント記号は任意)tweeëntwintig - 算術式:
,5*2
,96 divided by 2
など(結果に基づき判定)twelve plus four - 特殊値: 値が 1 または 44 のものはすべて「盤面を回転」扱い (
)Wangernumb- 例:
,45 - 44
,double foureins
- 例:
- 非標準形式:
(負数),-7
(小数),4.5
(通貨),£5
(時刻)など9:30 - ローマ数字・序数詞:
,XLIV
,twenty-third
など22nd - 数に由来する語:
(14 日間),fortnight
(7 ヶ月目) 等september - 非数値だが「Numberwang」を含む言葉:
,achneming
,often
などmoney - 架空の数:
,shinty-six
なども「数」として扱われるtwentington - 完全なる数値なし:
,bonjour
などは Numberwang あり得ないと判定hello how are you
重要: ある数の「Numberwang たる性(wangness)」は、発する言語によらず、その数自体の性質に基づいています。 例:
four (英), vier (独), quatre (仏), cuatro (西) はすべて同じ判定を受けます。
仕組み
モデルは非常にシンプルかつ軽量な構造を持っています。
- 文字列入力: トークナイザーや正規化器を一切使用せず、文字そのものを直接読み込み。
- ニューラルネットワーク構成:
- Embedding (32 次元)
- Conv1d (128 チャンネル, カーネルサイズ 3) → ReLU
- Conv1d (同上) → ReLU
- グローバル最大値プーリング
- Linear (128) → ReLU
- Linear (4 クラス) → Softmax
- 総パラメータ数: 80,804 個
- 知識の格納: 数字演算子、判定用語、11 の言語の表記などはすべて**重み(weight)**に含まれており、
に統合されています。model.json
デモ環境
ホスト版は Hugging Face Spaces で動作しています。ローカルで実行するには:
pip install -r requirements.txt python3 app.py
※デモ用には Gradio のインストールが必要ですが、モデル自体には不要です。
精度評価
保持された判定データ(テストセット)486 件に対する評価結果です。
- マクロ-F1 スコア: 0.896
- 正確率: 88.9%
- 理論上の上限: 約 98%
注記: トレーニングデータのラベルのうち約 2% は、長年にわたる審査慣行に従い意図的に反転させられています。
| クラス | 精度 (Precision) | 再現率 (Recall) | F1 スコア |
|---|---|---|---|
| not Numberwang | 0.820 | 0.885 | 0.851 |
| Numberwang | 0.919 | 0.900 | 0.910 |
| not a number | 0.951 | 0.830 | 0.886 |
| Wangernumb | 0.968 | 0.909 | 0.937 |
算術式の注意点
未见の演算子を含む算術式の精度は 44%–72% と低めです。
- このネットワークは計算を行わずに暗記しているため、単純な式(
)では信頼性が高いですが、複雑な式(5*2
など)は推測となります。904 * 3 - 推奨: 算術的な正誤が重要である場合は、まず式を評価して結果を取得し、その値を渡してください。
ライセンス
本プロジェクトは MIT ライセンス で公開されています。 詳細については
LICENSE ファイルをご覧ください。
※「特定の数が Numberwang に該当するか否か」について、明示的・黙示的な保証は一切ありません。