Views
No views yet
transformers の Auto クラスには当てはまらない構成なので、同梱の modeling_evex.py を使う。pip install torch safetensors sentencepiece1# huggingface_hub を使う
2pip install huggingface_hub
3hf download tako080614/evex-1 --local-dir evex-11# git clone でも取れる。ただし git-lfs が必要
2git lfs install
3git clone https://huggingface.co/tako080614/evex-1model.safetensors が 133 バイトの
ポインタファイルになり (tok.model も同じ)、読み込もうとしても壊れる。
ls -la して 22MB あるか確かめるのが早い。1import json, sys, torch, sentencepiece as spm
2from safetensors.torch import load_file
3
4sys.path.insert(0, "evex-1")
5from modeling_evex import Config, MicroLM
6
7cfg_json = json.load(open("evex-1/config.json"))
8cfg = Config(
9 vocab_size=cfg_json["vocab_size"], n_layers=cfg_json["n_layers"],
10 d_model=cfg_json["d_model"], n_heads=cfg_json["n_heads"],
11 context=cfg_json["context"], dropout=0.0, attn_dropout=0.0,
12)
13
14model = MicroLM(cfg)
15state = load_file("evex-1/model.safetensors")
16state["head.weight"] = state["embed.weight"] # weight tying を結び直す
17model.load_state_dict(state)
18model.eval()
19
20sp = spm.SentencePieceProcessor(model_file="evex-1/tok.model")
21end_id = sp.piece_to_id("<|end|>")
22
23prompt = "<|conv|><|s3|>これバグってる?<|other|>"
24ids = torch.tensor([sp.encode(prompt, out_type=int)])
25out = model.generate(ids, max_new_tokens=60, temperature=0.9, top_k=40, stop_id=end_id)
26print(sp.decode(out[0].tolist()))head.weight は入っていない。weight tying で embed.weight と同じテンソルを指しており、
safetensors はストレージを共有したテンソルを保存できないので落としてある。上のように結び直す。<|conv|><|s3|>今日ひま?<|s7|><|re|>ひま<|end|>| トークン | 意味 |
|---|---|
| `< | conv |
| `< | end |
| `< | s0 |
| `< | other |
| `< | re |
<nl> | 発言内の改行 |
<url> <mention> <channel> <time> <file> | 正規化した URL / メンション / チャンネル / 時刻 / 添付 |
<code> </code> | コードブロック |
speakers.json に各話者の
発言数と表示名が入っている。
Discord の user ID は入れていない (モデルの動作に要らず、実アカウントへの手がかりになる)。草・www・顔文字は正規化せず残してあるので、そのまま出る。| パラメータ | 5,868,800 |
| 学習トークン | 6,685,152 (train 6.50M / val 0.19M) |
| 語彙 | 4,096 (SentencePiece BPE / byte fallback) |
| context | 512 |
| 構成 | decoder-only / 6 層 / d_model 256 / 4 head / d_ff 704 |
| RoPE + RMSNorm + SwiGLU + weight tying | |
| 学習 | 10 epoch / AdamW / cosine / CPU のみで 194 分 |
| train / val loss | 3.8685 / 4.2404 |
> これバグってる?
これでいいです
> Cloudflare Containers ってどうなん
AGPLだったら
CTFが終わってる<file> や <url> ばかり返るとき<file> (添付だけの発言) と <url> は学習データで非常に頻出なので、5.87M では
そちらに落ちることが普通にある。同じプロンプトでも乱数の引きで変わる。seed 1000 -> これでいいです
seed 1001 -> <url>
seed 1002 -> おしえて / おk / <url>
seed 7 -> <file><file><file>generate に外す機能が入っている。実測で使えない返答が 38% から 12% に下がる。1ban = [sp.piece_to_id(t) for t in ("<file>", "<url>", "<mention>", "<channel>", "<time>")]
2out = model.generate(ids, max_new_tokens=60, temperature=0.9, top_k=40,
3 stop_id=end_id, ban_ids=ban, min_new_tokens=2)min_new_tokens はそれまで <|end|> を出させない (何も言わずに終わるのを防ぐ)。
残る 12% は「これ」のような 2 文字なので、短すぎたら引き直すとよい。speakers.json で公開している。Discord の user ID は公開していない