← ブログに戻る

「リズムの単調化は日本語だけか」を英語・ポルトガル語×7モデルで検証したら、70セル全部でAIは単調だった

昨日、3本目の論文をZenodoに出しました。日本語のAI生成文書は文長の揺れが人間より小さく、その単調化は7モデル全部で同じ方向に出る。この現象を私は「機械の訛り」と呼びました。

公開した直後から、頭に引っかかっていた問いがあります。訛りと呼ぶからには、それは話者(モデル)に付いて回る性質のはずです。ところが手元にあるのは日本語の測定だけでした。もし英語やポルトガル語で消えるなら、あれは訛りではなく、日本語という言語の側の現象だったことになります。

呼び名の正しさは、言語を跨いで初めて検証できます。

それで今日、4本目の論文として出しました。この記事はその実験ノートです。前回と同じく、踏んだ地雷も書きます。

検証の設計

仮説は2つです。

  • H1(方向の普遍性): 訛りが本物なら、AIの単調化はEN/PTでも全モデルで同じ方向(d < 0)に出る
  • H2(程度の言語依存): 方向は揃っても、程度は言語ごとに違ってよい

人間側のコーパスはpre-ChatGPT窓で集めました。英語はDev.toのall-time人気記事853本(2019年1月〜2022年10月)。ポルトガル語はTabNewsの403本です。

TabNewsの窓には運が絡んでいます。開設が2022年5月、ChatGPT公開が同年11月30日。つまり「ChatGPT以前のポルトガル語技術文書」が確実に取れる期間は7ヶ月しかありません。短い代わりに、その全域を取りました。ブラジルのエンジニアコミュニティがフォーラムを丸ごと残してくれていたおかげです。

AI側は7モデル×10テーマ×5試行×2言語で、プロンプトは第3論文と同一のゼロショット依頼を英訳・ポルトガル語訳したものです。指標の定義もburstiness、文長CV、段落CVまで第3論文と同一にしました。言語適応が要ったのは2箇所だけです。日本語のモーラは概念ごと持ち出せないので、pyphenによる音節近似に置き換えました。文分割は定番のpysbdを使わず、両言語共通の自前regexで統一しています。pysbdはポルトガル語非対応で、言語ごとに分割方式が違うと「言語の差」と「方式の差」が結果の中で見分けられなくなるからです。

新規計測はEN 1,202文書+PT 751文書の計1,953文書。日本語側は第3論文の公開結果をそのまま使います。

地雷1: 使ったモデルが引退していた

生成を始めてすぐ、Claude 3 Haiku / Sonnet 4 / Opus 4が全部404を返してきました。第3論文で使った3モデルが、APIから引退していたのです。

再現研究の教科書的には痛い事態です。同じモデルで言語だけ変える設計が崩れました。代替として現行の3ティア(Haiku 4.5 / Sonnet 5 / Opus 4.8)を入れ、日本語との直接比較は両方の研究に共通する4モデル(GPT-3.5 Turbo / GPT-4o / GPT-OSS 20B / Llama 3.2 1B)に限定する。この構成変更は論文にそのまま書きました。

悔しい変更でしたが、後で一番面白い発見を連れてきます。

地雷2: GPT-4oは文書を丸ごとフェンスで包む

計測を回すと、GPT-4oの文書だけ「文が0個」と判定されるものが35本ありました。中を見ると、文書全体が ```markdown フェンスで包まれています。コードブロックを計測から除外する実装が、本文まるごとをコードとして捨てていました。対策は外殻だけの展開です。冒頭が ```markdown タグで末尾がフェンスの場合のみ1枚剥がし、タグなしの素のフェンスは本物のコードかもしれないので触りません。

小さい話に見えますが、放置するとGPT-4oのサンプルの3分の1(100本中35本)が黙って消えます。ポルトガル語に限れば半分近く。多言語計測の前処理は、モデルの癖のカタログでもあります。

結果: 70セル全部で単調だった

中核5指標(burstiness 3種+文長CV 2種)×7モデル×2言語で70セル。そのすべてでd < 0、つまりAIが人間より単調でした。文書の長さで残差化しても方向は全セルで維持されます。例外はゼロ。

pooledの効果量を日本語と並べるとこうなります。

burstiness (char)日本語英語ポルトガル語
Cohen’s d−0.96−1.12−1.03

3言語とも−1前後の同じ帯です。日本語で見た単調化は、日本語の現象ではありませんでした。H1は成立、そして程度の差は思ったより小さかった。おまけに序列まで保存されています。日本語と共有する4モデルで比べると、どの言語でもGPT-3.5 Turboが最も単調で、GPT-OSS 20Bが最も人間に近い。モデルの「訛りの強さ」は、話す言語が変わっても順位ごと付いてきました。

訛りは言語を旅していました。

カンマだけが言語で割れた

きれいに揃った話の中で、1つだけ符号が割れた指標があります。1文あたりのカンマ数です。英語ではAIが人間より多く(d = +0.45)、ポルトガル語では逆に少ない(d = −0.83)。

種明かしは人間側にあります。ポルトガル語の人間は1文に平均1.14個のカンマを打ちます。英語人間の0.58個のほぼ2倍です。AIはどちらの言語でも0.6〜0.7個の「教科書的な中庸」に寄ってくるので、カンマ少なめの英語人間と比べれば過剰に、カンマたっぷりのブラジル人と比べれば不足に見える。同じ挙動が、比較相手の慣習次第で逆の符号になるわけです。

リズムは言語を跨いで同じ方向に出る。句読点は言語ごとに現れ方が変わる。この対比が、次の枠組みにつながりました。

三層指紋: 署名・訛り・方言

第3論文では、語彙を「モデル固有の署名」、リズムを「全モデル共通の訛り」とする二層で整理しました。今回のカンマの符号割れは、そのどちらでもない第3の層です。

三層指紋: 語彙は署名、リズムは訛り、句読点は方言

  • 署名(語彙): モデルごとに分化する。どのモデルが書いたかを教える
  • 訛り(リズム): 全モデル共通で、言語を跨いで持続する。機械が書いたことを教える
  • 方言(句読点): 挙動は共通でも、言語の慣習との相対位置で現れ方が反転する

機械の書いた文章を1枚のテキストとして見たとき、そこには3種類の痕跡が別々の層で残っている。これが第4論文の中心的な主張です。

訛りは薄まりつつある

地雷1の置き土産の話をします。モデル構成が変わったせいで、今回のデータには「2023年のGPT-3.5」と「2026年の現行Claude 3ティア」が同居しています。並べると世代差がはっきり出ました。

英語のburstiness (char) でGPT-3.5 Turboはd = −2.59。現行Claude世代は−0.59〜−0.96で、平均すればおよそ3分の1です。ポルトガル語でも同じ比率でした。新しい世代ほど、リズムが人間の帯域に近づいています。

つまりリズムによるAI検出には、おそらく寿命があります。

訛りは世代とともに矯正されていく。一方で、執筆改善の道具としてのリズム指標は、モデルが人間の帯域に近づけば近づくほど「直すべき残り」を正確に指すようになるわけですから、こちらはむしろ使いやすくなっていきます。検出と改善で価値の向く先が逆になるのは、第3論文の結論とまったく同じ構図でした。

リズムlintは言語を跨いで使い回せる。しきい値以外は

実務への持ち帰りはシンプルです。リズム指標の「方向」は3言語で共通なので、lintのロジックはそのまま流用できます。ただし分布は言語ごとに違うため、しきい値だけは言語別に較正が要ります。

先日公開したrhythm-lensは、v0.2.0でこの検証の英語・ポルトガル語baselineを同梱しました。

pip install rhythm-lens
rhythm-lens draft.md            # 言語は自動判定 (ja/en/pt)
rhythm-lens --lang en draft.md  # 明示指定

自分の運用でも、公開前のリズム計測を日本語記事限定から3言語に広げます。この記事自身も公開前に計測を通しました。

論文とデータ

論文はZenodoで公開しています(本文CC-BY 4.0、コード・データはMITでGitHubにあります)。人間コーパスの本文はライセンス上再配布せず、metadataと再収集スクリプトを同梱する方式にしました。

第3論文から24時間での続編になりました。問いが残っているうちに手を動かすと、コーパス収集の泥臭さも含めて全部が温かいまま使えます。研究のリズムにも、たぶんburstinessがあった方がいい。