手元の軽いモデルに下書きを任せると、最初の二段落くらいまではそれなりに読めます。ところが少し長くなるだけで、急に文末が崩れます。内容より先にそこが目に入るので、私は公開前にまず文末だけを見ます。
以前、ミニPCでブログの下書きを長めに書かせたことがあります。スペックはRyzen 7 5700UにRAM 12GBです。途中までは大丈夫でしたが、後半で「止まる」「変わる」「思う」がそのまま出てきました。言っていることは普通でも、そこだけで読む気がかなり落ちます。日本語のAIっぽさは、難しい比喩より先に文末から漏れます。
文末だけで読む気が消える
敬語の記事は、論理が少しくらい荒くても最後まで読めることがあります。逆に、一文だけ常体が混ざると、その瞬間に手触りが変わります。特に技術記事は説明の温度が低いぶん、文末の乱れがそのままノイズになります。
ここで厄介なのは、全文を気合いで読み直しても意外と見落とすことです。頭は内容を追っているのに、目のほうは「だいたい敬語だから大丈夫だろう」と勝手に流します。だから私は、意味を読む前に怪しい終わり方だけ拾う雑なチェッカーを先に通します。完璧な校正ではありませんが、公開前の一回としてはかなり仕事をします。
雑でも効くチェッカー
下のスクリプトは、ありがちな崩れ方だけを見ます。精度の高い日本語校正ではありません。自分がよく踏む地雷だけを先に拾う道具です。
import re
import sys
from pathlib import Path
text = Path(sys.argv[1]).read_text(encoding="utf-8")
patterns = [
r"進んでいる$", r"かかる$", r"増している$", r"増える$", r"残る$", r"止まる$",
r"終わる$", r"使い分ける$", r"変わる$", r"述べる$", r"まとめる$", r"覚える$",
r"続ける$", r"関わる$", r"足りる$", r"話せる$", r"できる$", r"思う$", r"感じる$", r"考える$",
r"遅い$", r"弱い$", r"強い$", r"うるさい$"
]
sentences = [s.strip() for s in re.split(r"(?<=[。!?\n])", text) if s.strip()]
for i, s in enumerate(sentences, 1):
body = s.rstrip("。!?\n")
if any(re.search(p, body) for p in patterns):
print(f"NG {i}: {body}")
Dockerで雑に試すだけなら、これで足ります。
docker run --rm -v "$PWD:/work" -w /work python:3.12-alpine python check_keigo.py draft.md
例えば、次のような下書きです。
この文章は敬語です。
速度は十分に出ます。
でも最後で止まる
それでも公開します。
この場合は でも最後で止まる を拾います。私はまずこの手の行だけ潰して、それから全体を読みます。最初から最後まで気合いで読むより、先にノイズ源を減らしたほうが楽です。
直す場所がわかれば手で仕上げられる
AIの下書きは、全部を信用しないほうが気が楽です。構成の叩き台や言い換え候補としては使えますが、最後の肌触りは人間が触らないと残ります。特に日本語は、語彙の賢さより文末の揃い方で正体が出ます。
私は最近、下書きを作る段階だけAIに任せて、公開前の数分は自分で文末を揃えるようにしています。そのほうが速いです。フレームワークの流行語を覚えるより、こういう小さい手入れのほうが文章の品質に効きます。AIに全部を投げるより、雑務だけ引き受けさせて最後は自分で締めるくらいがちょうどいいです。
文末だけを見るのは地味です。けれど、公開したあとに残る違和感はだいたいそこから始まります。だから私は、本文の意味を磨く前に、まず最後の一語を疑います。