SONUB ホーム JA English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

通知を有効にする方法

このブラウザーまたはアドレスでは通知を利用できません。対応ブラウザーで安全な接続のSONUBサイトを開いてください。

通知がブロックされている場合は、ブラウザーの設定で許可してください。

  1. アドレスバー横のサイト設定、またはブラウザーのサイト設定を開き、このサイトの通知を許可に変更してください。
  2. 端末の設定でブラウザーの通知を許可し、おやすみモードや集中モードを確認してください。
  3. SONUBに戻ってページを再読み込みし、ベルから通知を有効にしてください。

iPhoneやiPadではSONUBをホーム画面に追加し、そこから開いて通知を許可してください。

XSML · 最初のコードから会話まで

さあ、あなただけの人工知能を作ってみましょう。

このブラウザーで言語モデルを手入力します。データ、小さなGPTの学習、Runner、XChatまで完成させます。学習済みの重みや外部AI APIは使いません。

3

プロジェクト構成

フォルダーとデータを作ります。

~/xsmlにソース、dataに資料、checkpointsに重みを置きます。常にこのフォルダーで実行します。

原文は一行にQ:質問とA:回答。prepare.pyは重複を除き5件ごとに1件を検証用に分けます。検証資料をの学習に混ぜず、個人情報でなく自作の例を使います。

入力して実験

フォルダーを作り、下の各ソースをnanoで同名ファイルに入力して保存します。の句読点に注意してprepare.pyを実行します。

mkdir -p ~/xsml/data ~/xsml/checkpoints
cd ~/xsml
nano settings.json
nano data/raw.txt
nano prepare.py
python3 prepare.py
wc -l data/train.txt data/val.txt
settings.json — 手入力する完全なソース

widthはベクトル幅、contextは文脈長、learning_rateは更新量です。

{
    "width": 8,
    "context": 12,
    "merges": 12,
    "steps": 20,
    "learning_rate": 0.03,
    "seed": 7,
    "tokens": 24,
    "max_tokens": 64,
    "port": 8765
}
data/raw.txt — 手入力する完全なソース

一行に質問と回答を一組。短い自作の英語例です。

Q: hello | A: hello friend.
Q: hi | A: hi friend.
Q: name | A: i am xsml.
Q: sun | A: the sun is warm.
Q: cat | A: a cat can nap.
Q: dog | A: a dog can run.
Q: red | A: red is a color.
Q: blue | A: blue is a color.
Q: learn | A: i learn from text.
Q: code | A: i can learn code.
Q: moon | A: the moon is in the sky.
Q: rain | A: rain is water.
Q: book | A: i can read a book.
Q: tea | A: tea is warm.
Q: bye | A: bye friend.
prepare.py — 手入力する完全なソース

UTF-8読込、重複除去、文単位分割、学習・検証の保存を行います。

from pathlib import Path


lines = [line.strip() for line in Path('data/raw.txt').read_text(encoding='utf-8').splitlines() if line.strip()]
lines = list(dict.fromkeys(lines))
assert len(lines) >= 5, 'write at least five different Q/A lines'
assert all(' | A:' in line and line.startswith('Q:') for line in lines)
train = [line for i, line in enumerate(lines) if i % 5 != 0]
val = [line for i, line in enumerate(lines) if i % 5 == 0]
for name, rows in [('train', train), ('val', val)]:
    text = '\n'.join(row.replace(' | A:', '\nA:') for row in rows) + '\n'
    Path('data/' + name + '.txt').write_text(text, encoding='utf-8')
    print(name, len(rows))

理解を確認

pwdとlsを確認。例は学習12件、検証3件になります。

困ったとき

FileNotFoundErrorならcd ~/xsmlとls dataを確認。Pythonは空白4個。~/xsml-referenceは比較用で自動入力されません。