歪正規分布で見るLLM生成テキスト ~平均は同じなのに形が違う~
はじめに
皆さんはLLMの出力について、こんなことを聞いたことはありませんか?
「LLMの生成は人間より均質だ」「人間の文章の方が多様性がある」
確かに先行研究 (Zanotto & Aroyehun 2024など) でも、そのように示されています。しかしこれらの研究は基本的に 平均 (文ペアのコサイン類似度の平均) で人間とLLMを比較しています。
私はここでひとつ疑問を持ちました。「平均で見えない違いはないのか?」 と。実際にいくつかの文書で実験してみると、平均と分散はほぼ同じなのに分布の形 (歪度) が逆向きに分離するケースが見つかりました。
本記事ではこの観察を、特に法令ドメインを取り上げて検証していきます。
(nは小さめです。故に実証の話として全く適切ではありませんが、面白半分で読んでもらえると幸いです)
想定読者
- LLMの評価指標に興味がある方
- 統計の話と自然言語処理が混ざった話題が好きな方
- 「人間とLLMの違い」を定量化したい方
何を測るか
まず文書を「単位 (項や段落)」に分けます。法令なら「項」、一般文書なら「段落」を単位として扱えばいいでしょう。これで例えば30個の項を持つ条例なら、ペアの数は 文書内 pairwise 類似度分布」です。
def compute_pairwise_similarity(embeddings):
n = len(embeddings)
sim_matrix = embeddings @ embeddings.T # コサイン類似度行列
i_idx, j_idx = np.triu_indices(n, k=1) # 上三角のインデックス
return sim_matrix[i_idx, j_idx] # 全ペアの類似度
普通はこの分布の 平均 だけ見て「人間 vs LLM」を比較するのですが、今回は分布の 形 にも踏み込んでみます。
平均と分散がほぼ同じなのに歪度が違う?
具体例から見ていきましょう。福岡県飲酒運転撲滅条例 (実在) とClaude生成の飲酒運転撲滅条例を比較すると、
| 実在 (福岡) | Claude生成 | |
|---|---|---|
| 平均 | 0.437 | 0.476 |
| 標準偏差 | 0.133 | 0.145 |
| 歪度 | +0.20 | -0.21 |
平均と標準偏差はほぼ同じです。しかし歪度の符号が逆になっています。「右裾が長い分布」と「左裾が長い分布」 という違いがあるのです。
この観察を出発点に検証を進めていきます。
「平均が違えば歪度もずれるのでは?」という当然の疑問
ここでこう思った方もいるはずです。
「いやいや、コサイン類似度は [0, 1] に範囲が制限されているのだから、平均が違えば歪度も自動的にずれるのでは?」
これは検証すべき重要な論点です。順に確認していきます。
正規分布の場合の歪度の振る舞い
まず正規分布
シミュレーションで確認してみましょう。
import numpy as np
from scipy import stats
np.random.seed(42)
for mean in [0.40, 0.45, 0.50, 0.55, 0.60]:
skews = []
for _ in range(100):
x = np.random.normal(mean, 0.13, 5000)
x = np.clip(x, 0, 1) # コサイン類似度の範囲
skews.append(stats.skew(x))
print(f"mean={mean}: 歪度={np.mean(skews):+.4f} ± {np.std(skews):.4f}")
結果はこうなりました。
mean=0.40: 歪度=+0.0036 ± 0.0339 mean=0.45: 歪度=-0.0030 ± 0.0364 mean=0.50: 歪度=-0.0044 ± 0.0322 mean=0.55: 歪度=-0.0026 ± 0.0308 mean=0.60: 歪度=-0.0080 ± 0.0330
平均を 0.4 から 0.6 まで動かしても、歪度はすべて 0 近辺 (絶対値 0.01 以下) に留まっています。つまり 「正規分布の枠組みなら、平均がずれても歪度はずれない」 ということです。
私たちのデータの平均レンジ (0.4〜0.6) ではこの効果が無視できることが確認できました。
歪正規分布の場合
「とはいえ実データが正規分布でない可能性もあるよね?」という疑問もあるでしょう。そこで歪正規分布 (Skew-Normal Distribution) も検討します。
歪正規分布 SN(\xi, \omega, \alpha) は3つのパラメータを持ちます。
- (loc): 位置\xi
- (scale): スケール\omega
- (shape): 歪度を決めるパラメータ\alpha
ここで大事なのは、独立に推定される ということです。つまり「位置が違うが形は同じ」も「位置は同じだが形が違う」も自然に表現できる、ということですね。
実際、後で見るように、私たちのデータは歪正規分布が最良フィットになります。この枠組みなら、「形そのものの差」 として解釈できます。
実験設計
検証したい問いを整理すると、
- 実在条例と LLM 生成条例で、本当に歪度が逆向きに分離するか?
- それは平均や分散の差では説明できないものか?
- この現象は法令ドメインだけのものか? それとも一般文書でも見えるのか?
これを検証するために、以下のデータを集めました。
| カテゴリ | 文書 | 単位数 |
|---|---|---|
| 法令 × 実在 | 福岡県飲酒運転撲滅条例 | 100項 |
| 法令 × 実在 | 沖縄県飲酒運転根絶条例 | 28項 |
| 法令 × 実在 | 和歌山県飲酒運転撲滅条例 | 32項 |
| 法令 × 実在 | 福岡県統計条例 | 27項 |
| 法令 × 実在 | 福岡県屋台基本条例 | 75項 |
| 法令 × 実在 | 福岡県行政条例 | 104項 |
| 法令 × LLM | Claude生成 飲酒運転撲滅条例 | 23項 |
| 法令 × LLM | Claude生成 屋台条例 | 29項 |
| 法令 × LLM | Gemini生成 屋台条例 | 10項 |
| 一般 × 人間 | Wikipedia「自然言語処理」 | 19段落 |
| 一般 × 人間 | Wikipedia「日本の歴史」 | 20段落 |
| 一般 × 人間 | 新聞社説 | 9段落 |
| 一般 × 人間 | 筆者のZenn記事 | 17段落 |
| 一般 × LLM | Claude生成エッセイ | 23段落 |
| 一般 × LLM | Gemini生成エッセイ | 22段落 |
埋め込みモデルは Qwen3-Embedding-4B を使用しています。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Qwen/Qwen3-Embedding-4B", device="cuda")
def analyze_document(text):
segments = split_into_segments(text)
embeddings = model.encode(segments, normalize_embeddings=True)
sims = compute_pairwise_similarity(embeddings)
return {
"n": len(sims),
"mean": sims.mean(),
"std": sims.std(),
"skew": stats.skew(sims),
"sn_alpha": stats.skewnorm.fit(sims)[0],
}
法令ドメインでの結果
まずは基本統計から
| 文書 | n | 平均 | std | 歪度 |
|---|---|---|---|---|
| 福岡県飲酒運転 (実在) | 4950 | 0.437 | 0.133 | +0.20 |
| 沖縄県飲酒運転 (実在) | 378 | 0.574 | 0.130 | -0.41 |
| 和歌山県飲酒運転 (実在) | 496 | 0.432 | 0.163 | +0.47 |
| 福岡県統計 (実在) | 351 | 0.460 | 0.143 | +0.28 |
| 福岡県屋台 (実在) | 2775 | 0.454 | 0.146 | +0.14 |
| 福岡県行政 (実在) | 5356 | 0.405 | 0.120 | +0.76 |
| Claude生成 飲酒運転 | 253 | 0.476 | 0.144 | -0.21 |
| Claude生成 屋台 | 406 | 0.534 | 0.159 | -0.51 |
| Gemini生成 屋台 | 45 | 0.585 | 0.115 | -0.62 |
実在条例6つのうち5つは歪度が正、LLM生成3つはすべて負です。ほぼ綺麗に分離していますね。
(沖縄だけ実在なのに歪度が負になっているのですが、これは後でちゃんと議論します)
「平均が違うから歪度が違う」を排除する
ここで先ほどの疑問に立ち返ります。「平均がずれているから歪度もずれる」という説明は本当に成立しないのか? を実データで検証しましょう。
実在条例とLLM生成条例のペアを比較し、平均と分散がほぼ同じ (差が小さい) ペアを抽出してみます。
pair_df = pair_shape_comparison(results)
similar_position = pair_df[
(pair_df["mean_diff"].abs() < 0.05) &
(pair_df["std_diff"].abs() < 0.02)
]
結果がこちらです。
| ペア | mean_diff | std_diff | skew_diff |
|---|---|---|---|
| Claude生成 vs 福岡統計 | +0.016 | +0.002 | -0.49 |
| Claude生成 vs 福岡屋台 | +0.022 | -0.002 | -0.35 |
| 福岡 vs Claude生成 | -0.038 | -0.012 | +0.41 |
| 和歌山 vs Claude生成 | -0.043 | +0.019 | +0.67 |
平均と分散の差は 0.04 以下なのに、歪度の差は 0.35 以上 あります。これは「位置シフトでは説明できない構造的形状差」を示しているといえます。
歪正規分布フィットで確認
さらに各文書を歪正規分布でフィットさせて、
| 文書 | カテゴリ | \alpha |
|---|---|---|
| 和歌山 | 法令×実在 | +5.73 |
| 福岡行政 | 法令×実在 | +3.10 |
| 福岡統計 | 法令×実在 | +1.57 |
| 福岡飲酒運転 | 法令×実在 | +1.32 |
| 福岡屋台 | 法令×実在 | +1.03 |
| 沖縄 | 法令×実在 | -1.47 |
| Claude 飲酒運転 | 法令×LLM | -2.39 |
| Gemini 屋台 | 法令×LLM | -2.66 |
| Claude 屋台 | 法令×LLM | -4.96 |
カテゴリ別の平均は次のようになりました。
- 法令 × 実在: = +1.88 (n=6)\alpha
- 法令 × LLM: = -3.34 (n=3)\alpha
- 差: +5.22
ヌル分布検定でさらに念押し
「観測された歪度は、本当に正規分布の境界効果で説明できないのか?」をもう一段念押ししておきましょう。各文書と同じ平均・分散・サイズの正規分布から1000回サンプリングして、歪度の経験分布を求めます。
def simulate_null_skew(mean, std, n, n_trials=1000):
skews = []
for _ in range(n_trials):
x = np.random.normal(mean, std, n)
x = np.clip(x, 0, 1)
skews.append(stats.skew(x))
return np.percentile(skews, [2.5, 97.5])
結果はこちらです。
| 文書 | 観測歪度 | null 95% 区間 | z_score | 判定 |
|---|---|---|---|---|
| 福岡飲酒運転 | +0.20 | [-0.06, +0.07] | +5.95 | 形状差あり |
| 和歌山 | +0.47 | [-0.17, +0.22] | +4.53 | 形状差あり |
| 福岡行政 | +0.76 | [-0.06, +0.07] | +22.99 | 形状差あり |
| 沖縄 | -0.41 | [-0.23, +0.22] | -3.49 | 形状差あり |
| Claude 飲酒運転 | -0.21 | [-0.27, +0.31] | -1.44 | 境界内 |
| Claude 屋台 | -0.51 | [-0.23, +0.20] | -4.47 | 形状差あり |
特に大規模な実在条例 (福岡行政の z_score = +22.99 !) は、正規分布のサンプリング揺らぎでは絶対に説明できないレベルの逸脱を示しています。
一般文書ではどうか?
さて、この現象が法令ドメインだけのものなのか確かめるために、一般文書でも同じ実験をしてみました。
| 文書 | カテゴリ | |
|---|---|---|
| 筆者のZenn記事 | 一般×人間 | +7.67 |
| 新聞社説 | 一般×人間 | +2.85 |
| Wikipedia「日本の歴史」 | 一般×人間 | +1.90 |
| Wikipedia「自然言語処理」 | 一般×人間 | +1.24 |
| Gemini エッセイ | 一般×LLM | +1.64 |
| Claude エッセイ | 一般×LLM | +1.59 |
これを法令ドメインの結果と並べてみると、
$
| ドメイン | 実在/人間 の | LLM の | 差 |
|---|---|---|---|
| 法令 | +1.88 | -3.34 | +5.22 |
| 一般 | +3.41 | +1.62 | +1.80 |
一般文書でも「人間 > LLM」の関係は確認できます。これはZanotto & Aroyehun (2024) などの先行研究と整合する結果です。
しかし注目すべき点が2つあります。
1つめ: 法令ドメインの方が約2.9倍大きい (5.22 / 1.80 ≈ 2.9)
2つめ: 一般LLMの 正のまま (+1.6前後) ですが、法令LLMの 負まで振り切っています (-2.4 ~ -5.0)
つまり、LLMは一般文書ではある程度の機能的反復を維持できるけれど、法令を生成するときはその能力が完全に失われる、ということなのです。
なぜこんな違いが生まれるのか
仮説として、「LLMの冗長性回避ポリシー」 が考えられます。
一般文書では「同じ話題を別の角度から論じる」程度の反復は許容されるでしょう。しかし法令には独特の反復構造があります。具体的には、
- 構造同型ペア: 「県は〜するものとする」と「市町村は〜するものとする」のような主体差し替え
- 規制強度の書き分けペア: 義務規定と努力義務規定の併存
- 参照型反復: 前条規定を引用しつつ別主体に適用
これらは法令の 機能的な本質 を成すものなのですが、LLMはこれを「無駄な繰り返し」と判断して生成しない、という仮説です。
実際、Claude生成の飲酒運転撲滅条例には、実在条例にあった「飲酒運転撲滅宣言企業」「立入調査」「連絡会議」のような複数主体を巻き込む制度規定が大幅に欠落していました。
沖縄条例という例外
ここで触れておきたいのが、唯一実在なのに
| 沖縄 | 値 |
|---|---|
| 項数 | 28 |
| 同条内 cosine 平均 | 0.747 (異常に高い) |
| 全体平均 | 0.574 |
| -1.47 |
これを見ると、沖縄県条例は「項数が少なく、テーマが極端に集中している」ことが分かります。実は LLM 生成条例も同様に小規模 (10〜29項) で、結果として分布形状が近くなっているのです。
ここから示唆されるのは、「条例の規模が大きく、機能的反復が発達するほど、LLM との差が広がる」 ということです。短い条例なら LLM でも実在に近い特性を示せるが、長くて複雑な規範体系を持つ条例はLLMでは再現できない、ということになります。
これは今後「規模を統制した比較実験」が必要ということを示唆しているので、宿題として残しておきます。
おまけ: 筆者のZenn記事の \alpha が異常に高かった話
検証データに私自身の Zenn 記事 (積率母関数と特性関数の記事) を入れたところ、
高類似度ペアを見てみると、
[0.81] 「積率母関数には少し問題があります。存在しない(積分が発散する)ことがある」 vs 「積率母関数の弱点は存在しないこと」
[0.76] 「『積率母関数』と『特性関数』はtとitを置き換えただけ?」 vs 「積率母関数と特性関数はどのように使い分けるのでしょうか」
つまり同じ概念を 問題提起 → 説明 → 結論で繰り返す という、教育的説明文の構造が、法令の機能的反復に似た高類似度ペアを生んでいたのです。
これはこれで興味深い観察です。「規範文書だけが特殊なのではなく、構造的反復を必要とする文書全般に共通する特性」かもしれない、ということが示唆されます。
まとめ
本記事の主張をまとめます。
- 平均では区別できない人間とLLMの差が、文書内 pairwise 類似度の分布の歪度で見えることがあります
- 「平均が違うから歪度も違う」という疑問は、正規分布シミュレーションと歪正規分布の数学的性質で否定できます
- 実データは歪正規分布が最良フィットし、shape パラメータ で実在 vs LLM が分離します\alpha
- この分離は法令ドメインで特に顕著で、一般文書の約2.9倍の差があります
- LLMが 文書内の機能的反復を再現できないことが、規範文書ドメインで特に顕著に現れます
法令という規範文書を扱うとき、平均で「LLM は人間より均質」という議論は、実は本質を捉え損ねている可能性があります。歪度のような分布形状を見ないと見えない違い があるのです。
今後の検証課題
- LLMのプロンプトを工夫すれば が改善するか?\alpha
- モデルサイズと の関係は?\alpha
- 「機能的反復」を意図的に生成させたら は正に転じるか?\alpha
- 法令以外の規範文書 (社内規程、契約書、利用規約) でも同じパターンが見えるか?
- 一般LLMの は本当に正なのか? (n=2では弱いので追加サンプルが必要)\alpha
これらは現在進行中の研究テーマとして、時間があれば検証したいです。興味がある方は是非検証してみてください!
参考文献
- Zanotto & Aroyehun (2024). Human Variability vs. Machine Consistency. arXiv:2412.03025
- Coupette et al. (2021). Simplify Your Law: Using Information Theory to Deduplicate Legal Documents.
- Kakuta et al. (2025). Ordinance Template Composition System. ICAIL 2025.
- Crossley et al. (2018). The Tool for the Automatic Analysis of Cohesion 2.0 (TAACO 2.0). Behavior Research Methods.