nanoGPTで5分で終わるLLMの事前学習をしてみました

********

※LINE対応チャットボット版の
「LINEチャットボット屋」
いろんなチャットボットがあります。
ぜひ、ご覧ください!

***************

***************

nanoGPT 小さなLLMに挑戦した理由

近年、大規模言語モデル(LLM)の進化は目覚ましく、ChatGPTをはじめとする高性能なモデルが次々と登場しています。しかし一方で、「自分の手でLLMを育ててみたい」「中身を理解させながら学びたい」と思うかたも多いでしょう。

そこで選んだのが、比較的小規模で学習しやすいnanoGPTです。

nanoGPTとは

nanoGPT(ナノジーピーティー)とは、OpenAIのGPT系モデルの仕組みをベースにした、シンプルで小規模な言語モデル実装です。(進化版でnanoChatと言うものもあります)

もともとは、Andrej Karpathy氏によって公開された教育・研究目的のプロジェクトで、「最小構成でGPTを再現する」ことを目標に作られています。

最大の特徴は、そのシンプルさと分かりやすさにあります。
実装は数百行程度のPythonコードにまとめられており、GPTのコアとなるTransformer構造や自己注意機構が、非常に読みやすい形で書かれています。

そのため、LLMを「使う」だけでなく、「中身を理解したい」「自分で動かしてみたい」という人にとって、最高の教材になっています。

また、nanoGPTは小さなモデルサイズでも動かせるように設計されているのも大きな魅力です。

数百万〜数千万パラメータ規模のモデルであれば、個人のPCやGoogle Colabといった環境でも学習実験が可能で、「巨大なGPU環境がないと無理」というLLMの敷居を大きく下げてくれます。

本来のGPTは数百億〜数千億パラメータという桁違いの規模ですが、nanoGPTではそのミニチュア版を自分の手で動かすことができます。

これにより、
・データを入れるとどう学習が進むのか
・損失が下がるとはどういうことか
・モデルのサイズや設定で何が変わるのか
といったことを、実体験として学べます。

さらに、nanoGPTはカスタマイズの自由度も高く、データセットやトークナイザ、モデルサイズ、学習ステップ数などを自分で調整しながら、さまざまな実験ができます。

今回のように、日本語テキストを使って独自の小さなLLMを育てるといった使い方も十分可能なのです。

「事前学習」とは?ゼロから言葉を覚えさせるということ

LLM開発の最初のステップが「事前学習(Pre-training)」です。
これは、人間で言えば、まだ何も知らない人に大量の文章を読ませて、言葉や文のつながりを自然に覚えさせる段階にあたります。

質問に答えさせたり、指示に従わせたりする前に、とにかく膨大なテキストを与えて、「次に来そうな単語」を予測する訓練を繰り返します。

今回のnanoGPTの事前学習では、意味を理解させるというよりも、「日本語らしい文字の並び」や「文のリズム」を体に染み込ませることが目的でした。
ここが、その後のファインチューニングの土台になります。

学習データと準備 どんなコーパスをどう集めたか

コーパスとは、AIに言葉を覚えさせるために集めた大量の文章データのこと。

事前学習で最も重要なのがこのデータです。
今回は、日本語テキストとして定番の青空文庫を中心に使いました。

著作権が切れた文学作品が多く、文章量も十分で、日本語の文体を学ばせるには最適です。

取得したテキストは、そのままでは使えないため、不要な記号の削除や文字コードの統一など、簡単な前処理を行いました。

さらに、SentencePieceを使ってサブワード分割し、モデルが扱いやすい形に変換します。

この「データを整える作業」は地味ですが、学習の質を左右する重要な工程で、LLMづくりの裏側を強く実感する部分ですね。

実際にやってみた nanoGPT事前学習の手順と環境

学習環境はGoogle Colabを利用しました。GPUが手軽に使えるのは大きな利点です。

手順としては、

1. リポジトリのセットアップ
2. データの配置とトークナイザ作成
3. モデルサイズやブロック長などの設定
4. 学習スクリプトの実行

という流れです。

ここで重きを置いたのは、事前学習を最後までというよりも、まず実際に体感することだと思ったので、わずか5分で終わる事前学習に設定しました。

モデルは約200万パラメータ程度の小さな構成にし、まずは「最後まで回る」ことを重視しました。
学習ログを眺めながら、損失が少しずつ下がっていくのを見ると、ひとまず安心感。

数分後、ついに事前学習が完了しました。

ここで5分で終了していますが、実際に時間があれば、これを数時間なり数日なりの時間をかけてやると更なる学習の進度が期待できます。

学習が終わって見えたこと モデルは何を覚えたか

学習後、実際に文章を生成させてみると、日本語らしい文字列は出てくるものの、意味はほとんど通っていません。5分しか学習していないので当然です。

漢字とひらがなが混ざった、それっぽい文章が延々と続くだけです。

事前学習の段階では、「日本語の形」を覚えただけで、「質問に答える」能力はまだ無いのです。(おまけにたったの5分)

それでも、最初はランダムだった出力が、だんだんと日本語らしくなっていく過程を見られたのは大きな成果でした。
モデルが言語の空気を掴み始めた瞬間を、自分の環境で体験できたのは、何にも代えがたい経験です。

ファインチューニングと人格づくりへ

事前学習を終えたnanoGPTは、いわば「日本語の音や形を覚えた状態」です。しかし、まだ質問に正しく答えたり、会話らしく受け答えしたりすることはできません。
ここからが本当の意味での育成のスタートだと感じています。

次に取り組みたいのが、SFT(指示追従ファインチューニング)です。

これは、「質問」と「望ましい答え」のペアを大量に与えて、モデルに「こう聞かれたら、こう答える」という振る舞いを教える学習です。
これによって、ある程度事前学習をこなしたマシンなら、少しずつ会話ができるAIに近づいていきます。

さらに、その先にはDPOのような手法を使った「らしさ」の調整があります。

複数の答えの中から、より好ましいものを選ばせることで、丁寧な口調、分かりやすい説明、あるいは関西弁のようなキャラクター性など、「人格」と呼べる部分を形づくっていきたいと考えています。

最終的な目標は、ただ正しい答えを返すだけのAIではなく、「このAIと話したい」と思えるような、自分好みの相棒のような存在を育てることです。

小さなモデルだからこそ、試行錯誤しながら何度も作り直し、少しずつ成長させていけるのも大きな魅力です。

事前学習で作った土台の上に、ファインチューニング。

これらの実験がLLMへの理解を深めてくれるはずです。

まとめ nanoGPT事前学習は最高の教材

今回、nanoGPTを使って事前学習を一通り回してみて感じたのは、「これは最高の教材」ということです。

巨大モデルをAPIで使うだけでは見えない、データ準備の大変さ、学習が進む感覚、そして事前学習の限界。そのすべてを自分の手で実装する。

意味の通る文章を話すAIにはまだ遠いですが、「ゼロから言語モデルを育てる」という経験は、LLMを理解する上で何よりの経験かと思います。

この土台をさらに進化させて、本当に会話できるモデルへと実現させていく。
これこそが知的好奇心を満たす最高の実験ですね。

使用したPythonコード

下記に使用したPythonコードを記します。
google colabにて実装。

5分程度で終わるように作ってあるので、お手軽に実験できるかと思います。
時間のある方はいろいろいじって、数時間、数日間と学習させてもよろしいかと。

※下記コードはインテントがくずれている場合ありです。
くずれていると動きません。

コピーして、GPT5先生に修正を投げれば直してもらえます。
ご了承のほど。


# Commented out IPython magic to ensure Python compatibility.
# -*- coding: utf-8 -*-
# @title nanoGPT 5分体験(青空文庫 BPE版)

import os, re, zipfile, urllib.request, pathlib

# 1. GPUの確認
print("=== 1. GPU環境のチェック ===")
gpu_info = os.popen('nvidia-smi').read()
if 'failed' in gpu_info:
print("⚠️ GPUが見つかりません。Colabのメニュー「ランタイム」>「ランタイムのタイプを変更」でT4 GPUなどを選択してください。")
else:
print(gpu_info)
print("✅ GPU確認OK")

# 2. nanoGPT
print("\n=== 2. nanoGPT をダウンロード中... ===")
if not os.path.exists('nanoGPT'):
!git clone https://github.com/karpathy/nanoGPT.git
# %cd nanoGPT
print("✅ nanoGPT OK")

# 3. 依存
print("\n=== 3. 必要なツールをインストール中... ===")
!pip -q install torch numpy transformers datasets tiktoken sentencepiece
print("✅ インストール完了")

# 4. 青空文庫データ準備(BPE)
print("\n=== 4. 学習用データ(青空文庫)を準備中... ===")

out_dir = pathlib.Path("data/aozora_bpe")
out_dir.mkdir(parents=True, exist_ok=True)

tmp_dir = pathlib.Path("data/_aozora_tmp")
tmp_dir.mkdir(parents=True, exist_ok=True)

# 作品ZIP(必要ならここ増やしてOK。増やすほど“青空っぽさ”が出る)
works = [
("kokoro", "https://www.aozora.gr.jp/cards/000148/files/773_ruby_5968.zip"),
("merosu", "https://www.aozora.gr.jp/cards/000035/files/1567_ruby_4948.zip"),
("rashomon", "https://www.aozora.gr.jp/cards/000879/files/127_ruby_150.zip"),
]

def clean_aozora_text(text: str) -> str:
# 5分体験用:最低限のゴミ取り(ルビ・注記など)
text = re.sub(r"《.*?》", "", text) # ルビ
text = re.sub(r"[#.*?]", "", text) # 注記
text = re.sub(r"|", "", text) # ルビ補助
text = re.sub(r"[  ]+\n", "\n", text) # 行末空白
text = re.sub(r"\n{3,}", "\n\n", text) # 改行詰め
return text.strip()

all_texts = []
for name, url in works:
zip_path = tmp_dir / f"{name}.zip"
if not zip_path.exists():
print(" downloading:", url)
urllib.request.urlretrieve(url, zip_path)

with zipfile.ZipFile(zip_path, "r") as z:
txt_names = [n for n in z.namelist() if n.lower().endswith(".txt")]
if not txt_names:
raise RuntimeError(f"txt not found in {zip_path}")
member = txt_names[0]
raw = z.read(member)

# 青空は Shift_JIS 多め
try:
s = raw.decode("shift_jis")
except UnicodeDecodeError:
s = raw.decode("utf-8", errors="ignore")

s = clean_aozora_text(s)
all_texts.append(s)

data = "\n\n".join(all_texts)
(out_dir / "input.txt").write_text(data, encoding="utf-8")
print(f"✅ input.txt 作成: {out_dir/'input.txt'} 文字数={len(data):,}")

# BPE tokenizer(SentencePiece)を学習
# vocab_sizeは 4000〜8000 が無難(uint16の上限もあるので 65535以下)
vocab_size = 8000

spm_prefix = str(out_dir / "spm")
spm_model = out_dir / "spm.model"
spm_vocab = out_dir / "spm.vocab"

if not spm_model.exists():
import sentencepiece as spm
print("\n--- SentencePiece BPE tokenizer を学習中 ---")
spm.SentencePieceTrainer.train(
input=str(out_dir / "input.txt"),
model_prefix=spm_prefix,
vocab_size=vocab_size,
model_type="bpe",
character_coverage=0.9995, # 日本語寄り
bos_id=1, eos_id=2, unk_id=0, pad_id=3
)
print("✅ tokenizer 作成:", spm_model)

# tokenizerでID化 → train.bin/val.bin 作成
import numpy as np
import sentencepiece as spm

sp = spm.SentencePieceProcessor()
sp.load(str(spm_model))

ids = sp.encode(data, out_type=int)
print("✅ トークン数:", len(ids))

n = len(ids)
split = int(n * 0.9)
train_ids = np.array(ids[:split], dtype=np.uint16)
val_ids = np.array(ids[split:], dtype=np.uint16)

train_ids.tofile(out_dir / "train.bin")
val_ids.tofile(out_dir / "val.bin")

# meta.pkl(train.py が vocab_size を知るために必要)
import pickle
meta = {
"vocab_size": int(sp.get_piece_size()),
"sp_model_path": str(spm_model),
}
with open(out_dir / "meta.pkl", "wb") as f:
pickle.dump(meta, f)

print("✅ saved:", out_dir/"train.bin", out_dir/"val.bin", out_dir/"meta.pkl")
print("vocab_size:", meta["vocab_size"])

# Commented out IPython magic to ensure Python compatibility.
# 5. 事前学習(BPE版 / 5分体験)
# %cd /content/nanoGPT/nanoGPT

!python train.py config/train_gpt2.py \
--dataset=aozora_bpe \
--out_dir=out-aozora-bpe \
--device=cuda \
--compile=False \
--eval_interval=50 \
--eval_iters=5 \
--log_interval=10 \
--max_iters=120 \
--lr_decay_iters=120 \
--block_size=128 \
--batch_size=16 \
--n_layer=4 \
--n_head=4 \
--n_embd=128 \
--dropout=0.0 \
--wandb_log=False

# @title 推論(青空BPE / SentencePiece)

import torch
import sentencepiece as spm
from model import GPTConfig, GPT

# ===== 設定 =====
ckpt_path = "/content/nanoGPT/nanoGPT/out-aozora-bpe/ckpt.pt"
spm_model_path = "data/aozora_bpe/spm.model"
device = "cuda" if torch.cuda.is_available() else "cpu"

# ===== tokenizer =====
sp = spm.SentencePieceProcessor()
sp.load(spm_model_path)

# ===== checkpoint =====
checkpoint = torch.load(ckpt_path, map_location=device)
config = GPTConfig(**checkpoint["model_args"])
model = GPT(config)
model.load_state_dict(checkpoint["model"])
model.to(device)
model.eval()

# ===== prompt =====
prompt = "吾輩は猫である。"
ids = sp.encode(prompt)
x = torch.tensor([ids], dtype=torch.long).to(device)

# ===== generate =====
with torch.no_grad():
y = model.generate(
x,
max_new_tokens=120,
temperature=0.8,
top_k=50,
)

text = sp.decode(y[0].tolist())
print("-----")
print(text)

!pwd
!ls -lah /content/nanoGPT/out-aozora-bpe
!ls -lah /content/nanoGPT/nanoGPT/out-aozora-bpe
!find /content/nanoGPT -maxdepth 3 -name ckpt.pt -o -name best.pt

# @title ckpt.pt をローカルにダウンロードする(Colab用)

from google.colab import files
import shutil
import os

# ckpt の場所(今回確定している正しいパス)
ckpt_path = "/content/nanoGPT/nanoGPT/out-aozora-bpe/ckpt.pt"

# 念のため存在チェック
assert os.path.exists(ckpt_path), "❌ ckpt.pt が見つかりません"

# ダウンロードしやすい場所にコピー(名前も分かりやすく)
dst = "/content/aozora_bpe_ckpt.pt"
shutil.copy(ckpt_path, dst)

print("✅ 準備完了。ダウンロードを開始します")

# ダウンロード
files.download(dst)

****************

最近のデジタルアート作品を掲載!

X 旧ツイッターもやってます。
https://x.com/ison1232

インスタグラムはこちら
https://www.instagram.com/nanahati555/

***************

「国産AI開発 3兆円」の投資記事を見て

********

※LINE対応チャットボット版の
「LINEチャットボット屋」
いろんなチャットボットがあります。
ぜひ、ご覧ください!

***************

***************

国産AI開発 3兆円の投資記事とは

下記の読売新聞の記事が面白かったので、思いを書いてみました。

記事の内容の要約はこれです。↓↓↓

***********

「国産AI開発 目標3兆円 来春新会社 ソフトバンクなど」

ソフトバンクを中心に、
国産AI開発のための新会社 を来春つくる計画。

投資規模はなんと最大3兆円レベルを目標。

日本最大級の基盤モデル(いわゆる国産LLM)を開発したい考え。

データセンター、半導体、電力、研究開発までぜんぶまとめてAI基盤を国内で整える構想。

アメリカのOpenAIやGoogleに対抗できる体制を目指す。

「ロボ向けAIに対応 国産開発で産業競争力を強化」

日本の強みである ロボット産業向けのAI を、できるだけ国産で開発していこう、という話。

海外(米国や中国)のAIに頼りすぎると、技術流出・安全保障・コスト面でリスクがある、という危機感。

産業用ロボットや工場の自動化で使える現場特化のAIを育てて、製造業の競争力を守る狙い。

政府も支援して、企業・大学と連携しながら進める方針。

要するに
「金も設備も本気出すから、日本版の最強AIつくろうや!」ってこと。

*************ここまで。2025年12月 読売新聞朝刊の1面他より抜粋要約。

なぜ国産AI賛成の立場なのか

この記事について、大賛成の立場です。
えっ、今から国産LLMの開発?
という発想もあるかと思いますが、今だからチャンスなんです。

理由はひとつ。
今ならまだ追いつけるから。

これはAI、特にLLMを開発している人たち共通の認識ですが、「スケーリング則」って鈍ってるよね。
という意見が前提に立ってます。

スケーリング則とは

スケーリング則とは何か。

AIはサイズや学習量を大きくすればするほど、性能が良くなるという経験則のこと。
ここでいう「大きくする」とは、主に次の3つを増やすことを指している。

モデルのパラメータ数(AIの頭の大きさ)
学習に使うデータ量
学習にかける計算量(GPUなどの計算パワー)

これらをバランスよく増やしていくと、AIの能力もあがっていくという考え。
もっとわかりやすく言うと、単純にお金をかければかける程、AIの実力は上がっていくよねって言う考え方。

しかし、これが徐々に頭打ちになりつつあります。

先行していたOpenAIのchatGPTが先日googleのGemini3に追いつかれたのが有名な話。

まだまだスケーリング則でLLMの発展はできますが、以前のような爆発的な伸びが鈍ってきたと。

某有名なAI研究者もスケーリング則に変わる何かを求めて、「また研究の時代がやってきた」という方もいます。

なので、停滞している今が大チャンス。この機会に一気に差を縮めていくのが得策かと思われます。

そんなこんなで、下記の記事をどうぞ。

なぜ今「国産AI」が必要なのか?

新聞記事を読んでまず感じたのは、「いよいよ日本も本気で国産AIに取り組む段階にきたという強いメッセージです。

これまでAIといえば、アメリカのOpenAIやGoogle、中国の巨大IT企業の話題が中心で、日本はどこか使う側の立場に見えがちでした。

しかし、AIはこれからの社会や産業の基盤になる技術。

もしその心臓部をすべて海外に依存してしまえば、コスト、セキュリティ、そして国家としての主導権の面で大きなリスクを抱えることになる。

今回の新聞記事は、そうした危機感を背景に「自分たちのAIを自分たちで持つ」ことの重要性を、はっきり示している。

国産AIは単なる技術開発ではなく、日本の未来を守るための戦略的な一手だと感じた。

ロボット×AIは日本の十八番

日本といえば、やはりロボットと製造業です。

これは世界に誇れる強みです。工場の産業ロボット、精密機械、品質管理のノウハウは、長年積み上げてきた貴重な財産です。
これにAIが本格的に組み合わされば、競争力は一気に高まるでしょう。

海外製AIをそのまま使うだけでは、日本の現場特有の細かな要求や安全基準、職人技のような感覚まで十分に活かしきれないことも少なくありません。

だからこそ、日本の産業現場を知り尽くした企業や研究者がつくる「現場目線の国産AI」が必要なのです。

ロボット×AIという日本の強みを磨き直すことは、製造業の復活だけでなく、次世代の雇用や技術者育成にもつながります。
ここに国産AIの大きな価値があると思います。

3兆円投資のインパクト 本気度が違う国産AI構想

ソフトバンクなどが中心となって進める、最大3兆円規模の国産AI投資。

正直に言って、この数字を見たとき「始めるのが遅いけど、ついに本気を出したか」と思いました。

AIの基盤モデル開発、データセンター整備、半導体、電力インフラまで含めた構想は、もはや一企業のプロジェクトを超えた国家レベルの次元です。

この規模の投資があれば、世界と競える研究環境を国内につくることも夢ではありません。
(とは言え、世界レベルで見たら、まだまだ投資額は少ないでしょう)

しかし、人材が集まり、技術が蓄積され、次のスタートアップや新産業が生まれる土壌にはなるでしょう。

「どうせ海外には勝てない」と最初から諦めるのではなく、「勝ちに行く舞台を自分たちで用意する」。
この姿勢こそが、今回の構想の最大の価値だと感じます。

製造業・医療・インフラ 広がる国産AIの可能性

国産AIの活躍の場は、工場だけにとどまりません。

医療では診断支援や病院業務の効率化、インフラでは老朽化した設備の点検や災害対策、農業では収穫予測や自動化など、日本ならではの課題は数多くあります。

特に高齢化が進む日本にとって、AIによる省力化や支援は社会を支える重要な鍵になります。

日本の制度、言語、文化、現場の実情に合ったAIを国内で育てられれば、その効果は計り知れません。

国産AIは単なる技術競争ではなく、「日本の社会課題を日本の知恵で解く」ための道具です。そこに大きな意味があるのではないでしょうか。

まとめ

今回の新聞記事が伝えているのは、「日本はもう一度、技術で世界と勝負する」という宣言だと思います。

国産AIは、失われた30年と言われてきた停滞を抜け出し、日本が再び成長するためのエンジンになり得ます。

もちろん課題は多くあります。
人材不足、コスト、スピード感、国際競争。決して簡単な道ではありません。

しかし、ここで挑戦しなければ、日本はずっと使うだけの国のままでしょう。
一部の企業や研究者だけの話ではなく、日本全体の未来を形づくるものです。

「AIを制するものは、世界を制す」
多分これは間違いないものだと思っています。

国産AIが育ち、産業と社会を支え、日本から世界にLLMの発信する日を、心待ちにしたいものです。

****************

最近のデジタルアート作品を掲載!

X 旧ツイッターもやってます。
https://x.com/ison1232

インスタグラムはこちら
https://www.instagram.com/nanahati555/

*************

AI消費者100人に聞いちゃう 「聞いちゃった君」を作りました

********

※LINE対応チャットボット版の
「LINEチャットボット屋」
いろんなチャットボットがあります。
ぜひ、ご覧ください!

***************

***************

下記の論文に興味があったので、Pythonコードに落とし込んでみました。(簡易版ですが)
https://arxiv.org/abs/2510.08338

以前にも似たようなシステムをチャットボットで作ったのですが、今回はPythonコードとGoogle colabで作ってみました。

仮想顧客300人に聞く! 「アンケ太郎君」
https://chatgpt.com/g/g-68d4ff88f0f481919387480d17e9d9da-jia-xiang-gu-ke-300ren-niwen-ku-anketai-lang-kun-ver1-5

「聞いちゃった君」とは?AIが100人の消費者を一瞬でつくる時代へ

マーケティングの現場では、商品を作るにも広告を打つにも、まず最初に「ターゲットの声」が必要らしい。

しかし実際の消費者調査は、時間も費用もかかり、しかも調査票の設計や回答の質にも悩まされることが多いとの事。

そこで生まれたのが、今回紹介する AI消費者100人メーカー「聞いちゃった君」である。

これは、大規模言語モデル(LLM)を使って 100人分の仮想消費者の自由回答を生成し、購買意向をスコア化する仕組みだ。
調査パネルを用意する必要はなく、日本語で商品説明を投げるだけで、一瞬で100人の「声」が返ってくる。

最大の特徴は、回答が単なる数字ではなく、すべて自然な文章の自由記述で返ってくるところ。
ユーザー心理や購買理由、懸念点まで読み取れるため、「生の声」に近い市場感覚をつかむことができる。

自由回答 × AI が生むリアルすぎる声とは

「聞いちゃった君」の特徴は、AIが適当に文章を作っているわけではない点だ。

まず、年齢・性別・収入などから 100パターンのペルソナを自動生成する。
たとえば「53歳・女性・高所得」「22歳・女性・中間所得」「47歳・男性・高所得」といった具合だ。

次に、それぞれのペルソナに対して、商品説明を読んだ上での “気持ち” を自然文で書かせる。

このとき AI は「数字で答えるな」「1〜3文の自然な文章で答えろ」といった制約のもと、実際の消費者らしいニュアンスを出す。

驚くべきは、年齢や所得によって微妙に反応が変わることだ。

高所得者は「興味はあるが成分を調べたい」、低所得者は「価格次第」など、消費者行動そのものと近い形で返る。

これは現実のアンケートの「生の声」にかなり近く、マーケティングの1次評価としては十分使えるレベルだろう。

日本語で質問するだけでOK  裏側では英語に変換して高精度解析

「聞いちゃった君」は見た目は日本語のシステムだが、裏側では高度な工夫が施されている。

実は、市場調査系のAIアルゴリズムは、英語で処理したほうが精度が高い。

大規模言語モデルは英語で学習されているデータ量が圧倒的に多く、埋め込みモデル(意味ベクトル)も英語での安定性が高いためだ。

そこで「聞いちゃった君」は、

・日本語の商品説明を英語へ翻訳
・英語で消費者回答を生成
・英語で意味類似度を計算し、1〜5 にスコア化(SSR方式)
・最終的に日本語へ再翻訳して出力

という構造を採用している。

ユーザーは日本語しか触らないが、内部では常に英語の高精度処理が走っているため、回答の安定性とニュアンスの豊かさが保たれる。

消費者100人が同時に答える仕組み AI自由回答 → 類似度分析 → スコア化

「聞いちゃった君」の核心技術は、論文でも紹介されている SSR(Semantic Similarity Rating)方式だ。

これは、文章と5段階評価の「アンカー文」(例:買いたい・買いたくない)を意味の距離で比較し、買いたい度を数値化する手法である。

処理の流れは次のとおり:

・100人分のペルソナから自由回答(英語)を生成
・その回答文を埋め込み(embedding)に変換
・アンカー文(5段階)も同じく embedding に変換
・コサイン類似度 → Softmax → 確率分布(pmf)を算出
・期待値スコア(1〜5)を自動計算
・文章内容は日本語に翻訳して出力

これにより、数値と自由記述の両方を同時に得られる。

従来のアンケートでは「3」とだけ答えていた人が、AIの自由記述では理由まで書く。
これで極めてマーケティング価値が高くなるだろう。

本物の消費者データと相関90%以上 論文級の手法を軽量化した仕組み

「聞いちゃった君」の基盤になっているSSR手法は、実験で実際の消費者データと90%近い一致率を示している。

つまり、AIが作る仮想消費者の反応が、人間がもう一度回答したときの再現性(再テスト信頼性)と同じレベルということだ。

今回の仕組みは、その論文の数理的な核だけを抜き出し、Colab上で実用的に動くように調整したもの。

アンカー文の設計、翻訳ループ、embedding の統一、Softmax 温度の調整など、実用上のチューンも施してある。

コンセプト検証・初期仮説チェック・A/Bテストの方向性出しとしては十分すぎる精度を持つのではないか。

なぜ100人の仮想消費者がマーケ施策に役立つのか

なぜ、実在しない「仮想消費者100人」で意味があるのか?
その理由は次の3点にある。

1. 初期の方向性を高速で掴める
2. 文章で理由が見えるため改善点が明確
3. 年齢や所得によるバラつきが分析できる

商品説明文を少し変えて再度100人で回せば、それだけでA/Bテストが成立する。
初期マーケティングのスピードが圧倒的に変わるだろう。

まとめ AI消費者100人に聞いちゃう 「聞いちゃった君」

AI消費者100人メーカー「聞いちゃった君」は、市場調査の入り口を軽く、速く、理由付きで手に入れられるツールだ。

・日本語で商品説明を投げるだけ
・100人分の自由回答が返ってくる
・購買意向スコアも自動計算
・年齢や収入による差も見える
・A/B テストも瞬時に可能

「聞いちゃった君」は、これからのマーケターの瞬間テストエンジンになる可能性を秘めているでしょう。

今回の出力結果

下記に今回の出力の結果の一部を記します。
CSVでの出力なので、読みづらいです。

出力長さは調整してあります。長文でもOK.自在に可能です。

Pythonコードについてはここでは伏せておきます。興味のある方はLINEにてご連絡ください。

*********

●入力

「24時間うるおいが続く新しいフェイス用保湿クリームです。
無香料で敏感肌にも使える処方で、植物由来の成分を中心に配合しています。」
この商品についてのアンケートに答えてください。

 

●出力

id age gender income expected_score free_text_en free_text_ja

0 0 22 woman high income 3.176441

I find the idea of a moisturizer that offers 24-hour hydration very appealing, especially since it’s fragrance-free and designed for sensitive skin. The use of plant-derived ingredients aligns wit…

24時間保湿を提供するモイスチャライザーのアイデアはとても魅力的です。特に香料が含まれておらず、敏感肌向けに設計されている点が気に入っています。植物由来の成分が使われているのも、より自然な製品を好む私の好みに合っていますので、ぜひ購入を検討したいと思います。ただし、実際に肌にどのように感じるかを確認するために、レビューを調べたり、サンプルを試してみたりしたいです。

1 1 53 woman high income 3.136645 As someone who values high-quality skincare,

I find the promise of 24-hour hydration appealing, especially since it’s suitable for sensitive skin and fragrance-free. The use of plant-derived ingre…

高品質なスキンケアを重視する私にとって、24時間の保湿効果は魅力的です。特に、敏感肌にも適していて香料が含まれていない点が気に入っています。植物由来の成分が使われていることも、自然な処方を好む私の好みに合っており、このモイスチャライザーを試してみたいと思っています。ただし、購入する前に具体的な成分やレビューを調べて、自分のスキンケアニーズに合っているか確認したいです。

2 2 37 non-binary person high income 3.187053

I would be quite interested in this moisturizer, especially since it offers 24-hour hydration and is fragrance-free, which aligns well with my preference for gentle products on sensitive skin. The…

このモイスチャライザーにはとても興味があります。特に、24時間の保湿効果があり、香料が含まれていない点が私の敏感肌に優しい製品を好む好みに合っています。また、植物由来の成分が使われているのも魅力的で、私はスキンケアにおいて自然な処方を重視しています。全体的に、予算内であれば購入を検討したいと思いますし、レビューやおすすめを通じてその効果を確認できればなおさらです。

3 3 35 woman high income 3.182247

I would be quite interested in this face moisturizer, especially since it offers 24-hour hydration and is formulated for sensitive skin, which is a priority for me. The fact that it’s fragrance-fr…

このフェイスモイスチャライザーにはとても興味があります。特に、24時間の保湿効果があり、敏感肌用に処方されている点が私にとっては重要です。香料不使用で、植物由来の成分が含まれているのも、優しい自然派の製品を好む私の好みに合っています。もしその効果が本当であれば、私のスキンケアルーチンに加えることを考えられます。

4 4 61 woman low income 3.049169

As a 61-year-old woman with sensitive skin, I appreciate that this moisturizer is fragrance-free and made from plant-derived ingredients, as these features are important for my skin’s health. Howe…

敏感肌の61歳女性として、この保湿クリームが無香料で植物由来の成分で作られていることを評価しています。これらの特徴は私の肌の健康にとって重要です。しかし、私の収入が少ないため、購入を決定する前に価格を確認し、予算に合うかどうかを考慮する必要があります。もし価格が手頃であれば、試してみる意欲が高まるでしょう。

5 5 20 man middle income 3.192976

I would be somewhat interested in buying this face moisturizer, especially since it’s designed for sensitive skin and is fragrance-free, which is important to me. The promise of 24-hour hydration …

このフェイスモイスチャライザーには少し興味があります。特に敏感肌用で香料が含まれていない点が私にとって重要です。24時間の保湿効果というのも魅力的ですが、購入する前に具体的な植物由来の成分を調べて、自分の肌タイプに合っているか確認したいと思います。全体的に見て、試してみる価値のある製品だと考えています。

6 6 54 woman low income 3.138376

I would be quite interested in this face moisturizer because it promises 24-hour hydration, which is important for my skin’s dryness. The fact that it’s fragrance-free and designed for sensitive s…

このフェイスモイスチャライザーには非常に興味があります。24時間の保湿効果があるとされており、私の肌の乾燥には重要です。香料が含まれておらず、敏感肌用に設計されている点も魅力的です。私は強い香りや刺激の強い成分に反応しやすいので、その点が特に嬉しいです。ただし、購入を決める前に価格や予算に合うかどうかを考慮する必要があります。

7 7 33 man middle income 3.166876

I would be quite interested in this face moisturizer, especially since it offers 24-hour hydration and is designed for sensitive skin. The fact that it is fragrance-free and uses plant-derived ing…

このフェイスモイスチャライザーにはとても興味があります。特に24時間の保湿効果があり、敏感肌向けに設計されている点が魅力的です。香料不使用で植物由来の成分を使用しているのも、優しい自然派スキンケア製品を好む私の好みに合っています。もし良いレビューがあれば、ぜひ購入を検討したいと思います。

8 8 42 non-binary person middle income 3.145704

I find this moisturizer appealing because it offers 24-hour hydration and is fragrance-free, which is important for my sensitive skin. The use of plant-derived ingredients also aligns with my pref…

このモイスチャライザーは、24時間の保湿効果があり、香料が含まれていないため、敏感肌の私にはとても魅力的です。また、植物由来の成分が使われている点も、より自然な製品を好む私の好みに合っています。全体的に、特に良いレビューがあれば購入を検討する可能性が高いです。

9 9 47 man low income 3.097881

I would be somewhat interested in this face moisturizer since it offers 24-hour hydration and is designed for sensitive skin, which is important for me. However, my budget is tight, so I would nee…

このフェイスモイスチャライザーには少し興味があります。24時間の保湿効果があり、敏感肌向けに設計されているのは私にとって重要です。ただ、予算が厳しいので、他の選択肢と比べて手頃かどうかを考慮する必要があります。香料不使用で植物由来の成分が使われているのはプラスですが、決定する前にレビューやおすすめを探すと思います。

*********

以上、アンケートの一部のご紹介でした。
参考にしてください。

 

 

****************

最近のデジタルアート作品を掲載!

X 旧ツイッターもやってます。
https://x.com/ison1232

インスタグラムはこちら
https://www.instagram.com/nanahati555/

***************

仮説思考をビジネスに応用した「ビジネス仮説ジェネレーター」を作った話

********

※LINE対応チャットボット版の
「LINEチャットボット屋」
いろんなチャットボットがあります。
ぜひ、ご覧ください!

***************

***************

仮説思考をビジネスに生かせないか

だいぶ昔に読んだ本が書棚にあったので、思い出しながら、今のLLMと組み合わせるとどうなるのか。
そこに興味があったので、この記事を書いてみました。
「ビジネススクールで身につける仮説思考と分析力―ポケットMBA〈5〉 (日経ビジネス人文庫) 」

***

成功か失敗かを左右するものは何なのだろうか。
アートにしろ、スポーツにしろ、ビジネスなどなど。

各種いろんなジャンルがあるが、今回はビジネスの観点で。

ビジネス分野だと、商品力、マーケティング、立地、チーム力──いろいろあるが、実はその前段階にある「仮説思考」がとても重要ではないかと。

どれだけ情報を集めても、それをどう理解し、どう未来を予測し、どう選択肢をつくるか。
この仮説を立てる力が弱いと、戦略はふわっとしたままで終わってしまう。

ただ、多くの人は「仮説を立てろと言われても難しい」と感じるでしょう。

情報は増え続けるのに、整理する時間は減るばかり。そんな状況で、もっとスピーディーに、論理性のある仮説を生み出す方法はないのか。

「仮説思考 × LLM」を組み合わせたらどうなる?

人間は経験や直感から仮説を立てるのは得意だが、どうしても偏りが出る。

一方、LLMは膨大な情報を一瞬で統合し、構造的に文章を生成することができる。
しかし、AIは「何が重要か」「なぜそれが成功につながるか」の文脈理解は弱いこともある。

では、この2つを組み合わせたらどうなるのか?

人間が「問題の切り口」「見るべき観点」を定義する
LLMが「情報統合」「長文の分析」「定量的な推測」を行う

このコラボが成立すれば、かなり強力な“仮説生成エンジン”になる。

そこで私は、プロンプトによる観点指定、JSONによる回答構造化、そしてデータ(スクレイピングや統計情報)の注入を組み合わせて、AIに「ビジネス仮説」を書かせるプロトタイプを作ってみることにした。

自作ツール「ビジネス仮説ジェネレーター」誕生

作ったシステムはシンプルだが、かなり汎用性が高い。

現地の競合データをスクレイピング
統計データを入力
プロンプトを指定
LLMが仮説を生成
JSON Schemaで構造化された出力を返す

こうすることで、「成功率の高い戦略仮説」「狙うべきターゲット像」「立地戦略」「成功要因の根拠」などを、自動で5つ提示してくれる。

さらに面白いのは、プロンプトを書き換えるだけで業種をいろいろ変えられることだ。

埼玉県のカフェ開業
美容室開業
ゴルフスクール
不動産賃貸事業
スタートアップの戦略立案

全部、プロンプト変更だけで別ツールに変身する。

つまりこのツールは、一言で言えば
「仮説思考をエンジン化したもの」と言える。

「仮説作成の自動化」がメイン

何事もそうだが、仮説を作る作業は時間と知識が必要だ。

情報を集め、分析し、論理的な文章に落とし込むのは手間がかかる。
特に、複数の要素を同時に扱うと、どうしても抜け漏れが出てしまう。

このツールは、そのプロセスをAIに肩代わりさせる。

文章化はAI
観点の選択と全体の方向性は人間

この役割分担が圧倒的に効率的なのだ。

AIは、構造的な文章生成や複数要因の統合が得意なため、
論理的で抜けの少ない仮説を短時間で作れる。

実際に生成される成果物は、1番下に置いておくので参照ください。

「プロンプトを変えるだけ」で異業種にも適用できる

今回のツールは埼玉県のカフェで検証したが、本質はそこではない。

前の章でも書いたが、本当に面白いのは、プロンプトを書き換えるだけで、全く別のビジネスにも適用できる点だ。

たとえば──

美容室版
AIサービス立ち上げ版
観光事業版
不動産賃貸版

こういったまったく異なる業種でも、
「プロンプト × データ」
という最小構成だけで、高品質な仮説を生成できる。

つまり、業種に依存した専用システムではなく、どんな事業でも仮説を生める汎用フレームになっている。

この柔軟性は、従来のテンプレ型の分析ツールにはない大きな強みだ。

まとめ AIは文章生成から戦略生成へ

今回、仮説思考をAIに応用してみて一番強く感じたのは、
LLM は「文章を作る道具」から「戦略を作る道具」へも進化している点だ。

これまでAIに任せていたのは、メールや文章作成といった生成作業が中心だった。

しかし、仮説という思考をプロンプトで指定し、構造化されたJSONで出力させることで、AIは一段上の役割を果たし始める。

ビジネス戦略の下書きを作り
多角的な視点で要因を整理し
定量的な成功率まで付けてくれる

これはすでに、単なる文章生成の範囲を超えている仮説思考のパートナーとして使える時代が来たのだと実感した。

今回の「ビジネス仮説ジェネレーター」は、今後、外部APIや商圏データを統合すれば、もっと高精度になる。
そして、事業計画書や市場分析レポートをほぼ自動で作ることも可能だ。

ビジネスにおける仮説思考は、もはや個人スキルだけの話ではない。
AIと組み合わせることで、「仮説の質」も「速度」も大きく伸ばせるはずだ。

 

出力されたレポート

下記が今回出力したレポートです。
前回のレポートと同様に、いくらでも詳しく長文生成が可能です。
今回のはほんの一例です。

コードはPythonで作ってあります。コンサル系の方で興味のある方は、LINEにてお問い合わせください。

入力されたデータはかなり絞り込んだものです。
実際は、この数倍のデータを入れた方が良いでしょう。

*********

●入力データ
埼玉県での新規カフェ開業の成功確率が高い順に仮説生成してください。
他、各種統計データいろいろ

●出力データ

✅ 生成された仮説 (成功率が高い順) —

## 1. 仮説: 成功率 85.0%

☕ コンセプト: 地元食材を活用したファミリー向けカフェ
🧑‍🤝‍🧑 ターゲット顧客: ファミリー層
📍 立地戦略: 大宮駅東口徒歩5分、周辺に公園と商業施設が多いエリア
🧠 根拠 (Rationale): 埼玉県はファミリー層が多く、特に大宮駅周辺は昼間人口が高いため、家族連れの集客が見込めます。平日は通勤客、週末は家族での利用が期待でき、特に子供向けのメニューや遊び場を設けることで、リピーターを増やすことが可能です。地元の新鮮な野菜や果物を使用したメニューを提供することで、健康志向の高い親たちのニーズにも応えられます。価格帯は800〜1,200円で、家族で気軽に利用できる価格設定を行い、特に子供向けのメニューを充実させることで、顧客満足度を高めます。また、SNSを活用したプロモーションや地域イベントへの参加を通じて、初回の集客を図ります。リピーターを増やすためには、スタンプカードや季節限定メニューを導入し、常に新しい体験を提供することが重要です。競合との差別化としては、地元食材の使用とファミリー層向けの特化を挙げられますが、原材料の高騰などのリスクに対しては、地元農家との直接取引を進めることでコストを抑えることができます。

## 2. 仮説: 成功率 80.0%

☕ コンセプト: 勉強・交流ができるカフェ
🧑‍🤝‍🧑 ターゲット顧客: 学生層
📍 立地戦略: 浦和駅西口徒歩3分、大学や専門学校が近くにあるエリア
🧠 根拠 (Rationale): 浦和駅周辺は学生が多く、特に大学や専門学校が近いため、勉強や友人との交流の場として利用されるカフェが求められています。昼間は学生が多く訪れるため、Wi-Fiや電源を完備した快適な空間を提供することで、長時間の滞在を促すことができます。メニューはドリンク450〜800円、軽食500〜1,000円とし、学生にとって手頃な価格設定を行います。初回の集客にはSNSを活用し、学生向けのキャンペーンや割引を実施することで、認知度を高めます。また、リピーターを増やすためには、勉強会やイベントを定期的に開催し、コミュニティを形成することが重要です。競合との差別化としては、学びや交流の場としての機能を強調し、他のカフェとは異なる独自のブランドを築くことが求められます。リスクとしては、競合の増加が考えられますが、独自のイベントやメニューで差別化を図ることで対策を講じます。

## 3. 仮説: 成功率 75.0%

☕ コンセプト: 落ち着いた雰囲気の健康志向カフェ
🧑‍🤝‍🧑 ターゲット顧客: シニア層
📍 立地戦略: 川越駅近く、住宅街に囲まれた静かなエリア
🧠 根拠 (Rationale): 川越は高齢化が進んでおり、シニア層に特化したカフェの需要が高まっています。落ち着いた雰囲気で、健康志向のメニューを提供することで、シニア層のニーズに応えることができます。メニューは低糖質やビーガン対応の食事を中心に据え、価格は800〜1,200円程度で設定します。初回の集客には地域の健康イベントやシニア向けのワークショップを開催し、地域密着型のプロモーションを行います。リピーターを増やすためには、定期的なイベントや健康に関するセミナーを開催し、コミュニティを形成することが重要です。競合との差別化としては、シニア層に特化したメニューとサービスを提供することで、他のカフェとは異なる独自性を持たせます。リスクとしては、競合カフェの増加や原材料の高騰が考えられますが、地元の農家との提携を強化することでコストを抑え、安定したメニューを提供することができます。

## 4. 仮説: 成功率 70.0%

☕ コンセプト: ビーガン・グルテンフリー専門カフェ
🧑‍🤝‍🧑 ターゲット顧客: 健康志向の若年層
📍 立地戦略: 所沢駅近く、若年層が多く集まるエリア
🧠 根拠 (Rationale): 所沢は若年層の人口が多く、健康志向の高まりに伴い、ビーガンやグルテンフリーのメニューを提供するカフェが求められています。特に、SNSでの情報発信が活発な世代であるため、インスタ映えするメニューや内装が集客につながります。価格帯は1,000〜1,500円で、健康に気を使う若者にとっては「ちょうどいい」と感じられる設定です。初回の集客にはSNSを駆使し、インフルエンサーとのコラボレーションやイベントを開催して認知度を高めます。リピーターを増やすためには、季節ごとの新メニューや特別イベントを企画し、常に新しい体験を提供することが重要です。競合との差別化としては、ビーガン・グルテンフリー専門という明確なコンセプトを持つことが挙げられますが、リスクとしては原材料の高騰や競合の増加が考えられます。これに対しては、サプライヤーとの長期契約を結ぶことで安定した原材料供給を確保し、コスト管理を徹底します。

## 5. 仮説: 成功率 65.0%

☕ コンセプト: 埼玉の文化を体験できるカフェ
🧑‍🤝‍🧑 ターゲット顧客: 観光客と地元住民
📍 立地戦略: 川越の観光地近く、アクセスが良い場所
🧠 根拠 (Rationale): 川越は観光地としても知られており、観光客と地元住民が交わる場所にカフェを開業することで、双方のニーズに応えることができます。埼玉の伝統や文化を感じられる内装やメニューを提供することで、観光客にとっては新しい体験を、地元住民にとっては親しみを感じられる場所となります。メニューは地元の食材を使用した料理や飲み物を中心に、価格は1,000〜1,500円程度で設定します。観光シーズンには特別メニューを用意し、リピーターを増やすためには、地域イベントやワークショップを開催することが重要です。競合との差別化としては、埼玉の文化をテーマにしたカフェという独自性を持たせることが挙げられますが、リスクとしては観光客の流入が季節によって変動することが考えられます。これに対しては、地元住民向けのプロモーションを強化し、観光客だけでなく地元の人々にも愛されるカフェを目指します。

****************

****************

最近のデジタルアート作品を掲載!

X 旧ツイッターもやってます。
https://x.com/ison1232

インスタグラムはこちら
https://www.instagram.com/nanahati555/

***************

PAGE TOP