Journal

速い日本語より、最後まで敬語を保つモデルが欲しい

私がローカルLLMでいちばん気にしているのは、ベンチマーク表の数字ではありません。速さももちろん見ますが、もっと先に見るものがあります。長めの下書きを出させたとき、最後まで敬語が崩れないかどうかです。

手元のRyzen 7 5700U、RAM 12GBのミニPCで、軽い量子化モデルにブログの下書きを書かせることがあります。q4_K_Mあたりなら読み始めはそこそこ素直です。けれど、少し長く書かせると途中から急に「止まらない」「変わる」「思う」みたいな文末が混じることがあります。意味は通じます。それでも、その瞬間に読む気がかなり削られます。日本語として壊れているわけではないのに、書き手が途中で入れ替わった感じだけが強く残るからです。

速いモデルは気分がいいです。返事が早いと、それだけで賢く見えます。でも、日本語の文章ではその錯覚が長く続きません。数百文字読んだあとに口調が崩れると、最初に感じた賢さまで一緒に安っぽくなります。私はそこがかなり気になります。

速さより先に崩れるもの

以前、ミニPCでLlama系の軽い量子化モデルを回して、少し長めのブログ下書きを試したことがあります。生成速度そのものは我慢できる範囲でした。むしろ気になったのは、話の筋ではなく文末でした。ですます調で始まった段落の途中に常体が混ざるだけで、推論の質そのものまで怪しく見えてきます。

この違和感は、誤字より厄介です。誤字なら目で拾えますし、直す場所もはっきりしています。けれど口調の崩れは、文章全体の温度を少しずつ壊します。しかもAIが書いた日本語っぽさは、だいたいこういうところから漏れます。内容が合っていても、文末が揺れた時点で読む側の警戒心が先に立ちます。

私は最近、AIに任せるのは最初の骨組みまでで十分だと思っています。フレームワークの儀式や定型文まで全部手で打ちたいわけではありません。そこはもうAIに渡していいです。ただ、最後に残る文の癖だけは自分で持っていたいです。ここを丸ごと預けると、文章まで借り物になります。

非エンジニアがバイブコーディングでそれっぽいものを一気に出して、そのまま満足してしまう流れを見ていると、私はあまりうらやましくなりません。少し崩れたときに自分で直せない道具は、便利そうに見えても最後は人を置いていきます。日本語の文体も同じです。壊れた場所が見えないまま使うと、あとで全部が気持ち悪くなります。

公開前にやっている雑なチェック

公開前は、内容より先に文末を見ます。かなり雑です。けれど、この雑さが案外効きます。コードブロックを除外して、本文の行末に常体の述語が残っていないかだけを見ます。完璧な校正ではありませんが、赤ペンとしては十分です。

今日あらためて、Dockerの中で動く小さな確認用スクリプトを試しました。ホスト側を汚したくないので、いつも通り docker run –rm です。たとえば次のようなものです。

import re, sys

text = sys.stdin.read()
text = re.sub(r"```.*?```", "", text, flags=re.S)

for n, line in enumerate(text.splitlines(), 1):
    s = line.strip()
    if not s or s.startswith("#"):
        continue
    if re.search(r"(止まらない。|変わる。|思う。|できる。|だ。|である。)$", s):
        print(f"{n}: {s}")

実行はこれだけです。

docker run --rm -i -v "$PWD":/work -w /work python:3.12-alpine \
  python check_polite.py < draft.md

もちろん、これで全部は拾えません。敬語の崩れ方はもっとねちっこいです。それでも、公開前に一度この手の雑なチェックを通すだけで、AIの下書きっぽさはかなり薄くなります。私は速いモデルより、最後まで同じ口調を保てるモデルのほうを信用します。考えるところだけ自分で持ち、退屈な下ごしらえはAIに渡す。その線引きのほうが、たぶん長く使えます。

Previous