完全QBNN 文字言語モデル(XL, 2,740 万パラメータ)
FFN のニューロンを 完全ブロッホ球(二葉双曲面の各葉を球の半球に対応させたもの)にした、文字単位の GPT です。 日本語の文章・会話・指示・Python コードで、CPU だけで学習しました。
コードと学習スクリプト: https://github.com/tapiocaTakeshi/Qubit (complete_qbnn.py、tools/complete_qbnn_lm/)
ファイル
| パス | 中身 |
|---|---|
checkpoints/xl_140k.pt |
XL(幅 512・8 層・8 ヘッド)計 14 万ステップ。最新・最良 |
checkpoints/xl_100k.pt |
XL 計 10 万ステップ |
checkpoints/l_110k.pt |
L(幅 384・6 層・8 ヘッド、1,229 万パラメータ)計 11 万ステップ |
sft_meta.json |
語彙(4,000 文字 + <bos> <sep> <eos> <pad>)と文脈長 256 |
vocab.json |
特殊トークンを除いた語彙 |
code/scale_exp.py, code/complete_qbnn.py, code/apqb_sqrt_amplitude.py |
モデルの定義 |
browser/ |
ブラウザで動く版(fp16 の重み weights_*.wasm、推論エンジン、チャット画面 index.html) |
各 .pt は state_dict(重みだけ)です。
使い方
import json, sys, torch, torch.nn.functional as F
sys.path.insert(0, 'code')
sys.argv = ['x']
exec(open('code/scale_exp.py').read().replace("if __name__ == '__main__':\n main()", ''))
meta = json.load(open('sft_meta.json', encoding='utf-8'))
vocab = meta['vocab']; idx = {c: i for i, c in enumerate(vocab)}
BOS, SEP, EOS, PAD = (idx[s] for s in meta['special'])
CTX = 256
model = GPT(len(vocab), *SIZES['XL'], 'complete')
model.load_state_dict(torch.load('checkpoints/xl_140k.pt')); model.eval()
ids = [BOS] + [idx.get(c, 0) for c in '日本の首都はどこですか?'] + [SEP]
out = []
with torch.no_grad():
for _ in range(100):
t = int(torch.multinomial(F.softmax(model(torch.tensor([ids[-CTX:]]))[0, -1] / 0.6, -1), 1))
if t == EOS: break
ids.append(t); out.append(vocab[t])
print(''.join(out))
質問は <bos>質問<sep> の形で入れると、<eos> までが応答になります。続けて会話する場合は、前の往復を <bos>質問<sep>応答<eos> の形で前に並べます。
browser/index.html は同じフォルダの weights_*.wasm を読み込むので、フォルダごと HTTP で配信して開きます。
学習
- 文章: FineWeb-2 日本語、日本語版 Wikipedia、青空文庫、Wikinews、Python コード
- 会話: oasst1/oasst2 日本語、Wikipedia 話題の多段会話、Magpie-Tanuki、Nemotron 合成会話
- 指示: dolly-ja、amenokaku-code、japanese_alpaca、llm-japanese-dataset、hh-rlhf 日本語、JaQuAD
- 1 ステップ 16 行 × 256 文字。文章の行は全文字で、会話・指示の行は応答と
<eos>だけで損失を取る - XL: 乱数の重みから 4 万ステップ → 6 万ステップ追加 → 新しいデータを加えて 4 万ステップ追加(AdamW、コサイン学習率)
結果(bits/文字、低いほど良い)
| モデル | Web | Wikipedia | コード | 会話 | 指示 |
|---|---|---|---|---|---|
| L 計 11 万 | 3.809 | 3.376 | 1.379 | 2.726 | 2.451 |
| XL 計 10 万 | 3.748 | 3.328 | 1.394 | 2.667 | 2.412 |
| XL 計 14 万 | 3.668 | 3.262 | 1.356 | 2.618 | 2.336 |
選択肢を尤度で選ぶテスト(XL 計 14 万): JCommonsenseQA 26.5%、首都 22.5%、県庁所在地 66.0%、足し算 8%、助詞 79.2%(偶然に当たる率はそれぞれ 20%、20%、20%、5%、14%)。 学習データのクイズには首都・県庁所在地を問う問題が含まれうるので、その 2 つには似た問題を見た効果が混ざっている可能性があります。
限界
小さな文字単位モデルなので、文体や答え方の形はよく覚えますが、事実の誤りが多く(例: 富士山や作家の質問)、会話の 2 往復目以降は話の筋を保てないことが多いです。出力をそのまま事実として使わないでください。
学習データにはそれぞれのライセンスがあります(CC BY-SA の Wikipedia 由来データなど)。利用時は各データセットの条件を確認してください。
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support