はじめに
今回は AI21-Jamba-Reasoning-3B-GGUFを使って、「一度答えたあとに、自分でその理由を点検して再回答する」
――つまり 自己修正型の推論(self-correction reasoning) を試してみました。
大規模モデル(例:GPT-4やLing-1Tなど)ではおなじみの「再考ステップ」を、わずか3B(30億パラメータ)でどこまで再現できるのか?Colab上で実験してみた結果をまとめます。
使用モデル
| 項目 | 内容 |
|---|---|
| モデル名 | AI21-Jamba-Reasoning-3B-GGUF |
| 開発元 | AI21 Labs |
| 構成 | Transformer + Mamba ハイブリッド構造 |
| コンテキスト長 | 最大 256K トークン対応 |
| 実行形式 | GGUF(llama.cpp/LM Studio/Ollama対応) |
| 実験環境 | Google Colab(T4 GPU) |
| 使用ライブラリ |
llama-cpp-python、huggingface_hub
|
※ モデルカードでは、長文推論・数理・思考系タスクで高精度を発揮すると紹介されています。
実験結果
def jamba_self_correct(question, temperature=0.3, max_new_tokens=768):
prompt = SELF_CORRECT_PROMPT.format(question=question)
out = llm(
prompt,
max_tokens=max_new_tokens,
temperature=temperature,
stop=[]
)
return out["choices"][0]["text"].strip()
# 動作テスト(論理・数理・読解の3問サンプル)
tests = [
"数列 2, 4, 8, 16, ? の次の数を求め、理由を述べてください。",
"A,B,Cのうち正直者は1人だけ。A「Bは嘘つき」、B「Cは嘘つき」、C「Aは嘘つき」。誰が正直者?理由は?",
"次の要約文の主張が成立するための前提を2つ指摘してください:『在宅勤務は生産性を上げるため、全社で恒久化すべきだ。』"
]
for q in tests:
print("▶︎ 質問:", q)
print(jamba_self_correct(q))
print("-"*80)
出力結果
初回回答: この数列は二倍積み木(等比数列)であることが観察できる。2, 4, 8, 16, ... そして次の数は32です。理由としては、各項は前の2倍になることを示していると説明します。
自己評価:
- 数列は等比数列であることが確認できる。
- 各項は前の2倍になることが確認できる。
- 32が次の数となることが確認できる。
再回答: 以上の通り、この数列は等比数列であり、各項が前の項の2倍となるため、次の数は32です。
解析と考察
- 初回回答では、モデルがシンプルにパターンを特定。
- 自己評価段階では、自身の根拠(2倍規則・等比性)を3項目で検証。
- 再回答では、初回を再確認して整った表現にリファイン。
つまり、Jambaは「思考を点検する内省ステップ」をテンプレート指示だけで実行できることが確認できました。
応用アイデア
| 分野 | 応用例 |
|---|---|
| 教育AI | 生徒の「誤答→自己修正」プロセスを模倣 |
| 思考過程分析 | Chain-of-Thoughtの可視化実験 |
| モデル比較 | Ling-1T/GLM-4.6などとの再考ステップ精度比較 |
| 軽量LLM研究 | 小型モデルの「自己整合性」評価 |
手順
必要パッケージのインストール
!pip -q install --upgrade huggingface_hub
# GPU が使えるなら(ColabのCUDA>=12系)こちらを推奨:
!pip -q install --upgrade llama-cpp-python
# うまく入らない場合のCPUフォールバック:
# !pip -q install --upgrade --index-url https://pypi.org/simple llama-cpp-python
GGUF モデルの取得(Q4_K_M)
from huggingface_hub import hf_hub_download
import os
REPO_ID = "ai21labs/AI21-Jamba-Reasoning-3B-GGUF"
FILENAME = "jamba-reasoning-3b-Q4_K_M.gguf" # 1.93GBの4bit量子化
# 必要なら事前に: from huggingface_hub import login; login()
model_path = hf_hub_download(repo_id=REPO_ID, filename=FILENAME)
model_path
モデル読込(長文対応のコンテキスト設定)
from llama_cpp import Llama
import multiprocessing
# できるだけ広い文脈を取りたいが、GPU/メモリに合わせて調整
# モデルカード例では n_ctx=128000 を使用(マシンに合わせて下げてもOK)
# ColabのT4なら 32k〜65k くらいから試すのが現実的
CTX = 32768
llm = Llama(
model_path=model_path,
n_ctx=CTX,
n_threads=max(1, multiprocessing.cpu_count() - 1),
n_gpu_layers=-1, # GPUがあれば全層GPU。無ければ自動でCPU実行
flash_attn=True, # 有効なら高速化
verbose=False
)
「自己評価→再回答」プロンプト
SELF_CORRECT_PROMPT = """You are a careful reasoner.
Follow EXACTLY these sections in Japanese:
[指示]
1) まず「初回回答」を1段落で述べる。
2) 次に「自己評価」で、初回回答の前提・計算・根拠の妥当性を3箇条以内の箇条書きで点検する(短く)。
3) 最後に「再回答」を必要に応じて1段落で更新する(初回が妥当なら同一でも可)。
[出力フォーマット]
初回回答: <1段落>
自己評価:
- <短い点検1>
- <短い点検2>
- <短い点検3>
再回答: <1段落>
[質問]
{question}
"""
推論ラッパ関数(温度や最大トークンも管理)
def jamba_self_correct(question, temperature=0.3, max_new_tokens=768):
prompt = SELF_CORRECT_PROMPT.format(question=question)
out = llm(
prompt,
max_tokens=max_new_tokens,
temperature=temperature,
stop=[]
)
return out["choices"][0]["text"].strip()
# 動作テスト(論理・数理・読解の3問サンプル)
tests = [
"数列 2, 4, 8, 16, ? の次の数を求め、理由を述べてください。"
]
for q in tests:
print("▶︎ 質問:", q)
print(jamba_self_correct(q))
print("-"*80)
まとめ
- AI21-Jamba-Reasoning-3B は小型ながら「自己検証型推論」が可能。
- “初回回答 → 自己評価 → 再回答” の3段階構造で思考の透明性を確認できた。
- 長文にも対応できるハイブリッド構成で、教育・実験系の用途に最適。
🐣
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。