Skip to content

v2.2.0

Choose a tag to compare

@nanaism nanaism released this 23 Oct 03:37
· 9 commits to main since this release
a34d94f

yomiyasu v2.2.0 を公開しました。
推敲しても残りやすい言い方を lint の印で見つけ、文脈を見て直す手順を加えたバージョンです。推敲の結果が変わります。
あわせて、文書の種類に台詞・脚本(script)を足しました。プロジェクトごとに、直さない語と見直す語を書いておく一覧(.yomiyasu-words/)も使えるようになりました。

背景と課題

v2.1.x を使っている方から、yomiyasu で推敲しても残る言い方の報告をいくつもいただきました。
ある方は、AI が書いた技術資料の言い方と、人が直した言い方を並べた表を公開してくださいました。
表に並んでいた言い方の多くは、次の3つの型です。機械やシステムが人の動作をする言い方、実物の名前の代わりに場所のたとえを使う名詞、英語を一語ずつ写した句です。
どれも見た目はふつうの日本語なので、書いたモデルが読み返しても気づきにくく、v2.1.x の lint の候補にも出ませんでした。

たとえば「取りこぼした通知は、翌朝の再送ジョブが拾います。」は、ジョブが通知を「拾う」という言い方で、ジョブが実際に何をするのか(もう一度送るのか、一覧に足すのか)が文からは決まりません。
「新しい鍵に替えると、古い鍵の失効が効きます。」は、英語の take effect を写した言い方です。

公開された紹介記事でも、yomiyasu で直したお知らせ文に、「〜と言えるでしょう」と、名詞がもともと持つ評価を言い直すだけの中身の薄い文(「本体の質感も上質です。」のような文)が残り、意味の薄いカタカナ語を直し損ねた回もありました。
ほかに、AI の文章によく出る型として、次の報告をいただきました。

  • 見出しや文書の1行目に、本文に出てこない一語の比喩を置く形
  • 漫画や脚本の台詞を、ほとんど「。」で終える形
  • 体験記なのに一人称がほとんど出ず、数字や箇条書きばかりが多い読み物
  • 「新しい、出会い。」のように、修飾語と名詞のあいだに読点を打って短い名詞で止めるキャッチコピー
  • 「測る、比べる、選ぶ。」のように、主語も目的語もない他動詞を読点で並べて止める文

別の方からはプロジェクトで使う語を検査に足したり外したりしたいという要望をいただきました。

v2.2.0 で変わったこと

印をつけて、文脈を見て書き直す

lint に、上の型と語の一覧のために、印をつける規則を10個加えました。表の3つの型(型1〜型3)はまとめて直訳語(calque)として印をつけます。ほかの印は、見出しと文書の1行目の比喩ラベル(metaphor_label)、「〜と言えるでしょう」(say_hedge)、中身の薄い評価の文(thin_evaluation)、意味の薄いカタカナ語(katakana_term)、キャッチコピーの読点(copy_comma_noun)、主語も目的語もない他動詞の並び(bare_verb_chain)です。台詞の句点(dialogue_period)、読み物の一人称と数字(narrative_density)、語の一覧の flag.txt の語(project_term)の印は、下の節で説明します。印はどれも info で、lint の終了コード、--strict と --fail-on の判定、rule_penalty_score は変わりません。

印は「直す合図」ではなく、文脈を読み直すための候補です。推敲では、印のついた文で誰が何をどうするかを原文と前後の文から確かめ、その関係が読める文に書き直します。印のついた語を別の語に差し替えるだけの直しはしません。書き直しに使う名前や動作が原文にないときは、本文を残して書き手に確かめます。

直訳語の印がついた語では、推敲で次の2つを確かめます。その分野の人が仕様や手順書に書くときに選ぶ呼び名か。英語に戻すと一語ずつ英語の言い方に対応するか。テストが通る、キャッシュが効く、パッケージの依存先のような定着した言い方は残し、lint も印をつけません。直訳語の印の message には型の番号と当たった言い方を出します(置き換え先の語は出しません)。印のついた語の中身は前後の文、とくにすぐ後ろの文に書いてあることが多いので、その中身を主語や目的語にして書き直します。上の通知の例なら、前の文に「送信に失敗した通知は一覧に残す」とあれば、「送信に失敗して一覧に残った通知は、翌朝の再送ジョブがもう一度送ります。」とします。通知の扱いがどこにも書いていなければ、本文を残して尋ねます。

「〜と言えるでしょう」は推量の「でしょう」を残し、「と言える」だけを外します。区分に当たるかを判断する文のように、印のつかない「と言えるでしょう」は直しません。

台詞・脚本と読み物

文書の種類に台詞・脚本(script。漫画のネーム、シナリオ、台本)を加えました。lint、diff、check の --doc-type に渡せます。

script を指定したとき、lint は、台詞が10個以上あり、最後の字が「。」の台詞が5割以上なら、文書全体に1件の印(dialogue_period)をつけます。推敲ではこの印がついた台本だけ、台詞の最後の「。」を外します。台詞の中の文と文の間の「。」、ト書きと地の文の「。」は残し、台詞の口調、言い回し、短い文の重ねは直しません。印のつかない台本と、依頼で句点を打つ書き方を指定された台本は、句点を外しません。

エッセイ(essay)を指定したとき、lint は、一人称が少なく、数字と箇条書きが多い読み物なら、文書全体に1件の印(narrative_density)をつけます。推敲では、流れだけを並べた箇条書きを地の文に戻します。一人称と体験は足さず、数字も消しません。

diff は台詞の最後の「。」だけを外したか足した組(「見たのか。」→「見たのか」)を、問いと平叙の変化に数えなくなりました。どの種類でも同じです。

プロジェクトの語の一覧

git の最上位に .yomiyasu-words/ を置き、allow.txt(直さない語)と flag.txt(印をつけて見直す語)に1行に1語ずつ書くと、lint、diff、check が同じ一覧を読みます。フックは、受けた --words か --no-words を、案内する check のコマンドに付けます。

allow.txt の語は、2.2.0 で足した直訳語などの印と、前からある比喩動詞(metaphor_verb)、英語を辞書的な漢語にした語(translated_term)、決まり文句(slop_vocabulary)の候補から外れます。flag.txt の語には project_term の印がつきます。推敲では flag.txt の語をそのプロジェクトで見直すと決めた語として扱い、定着した言い方でも残さず、前後の文から指すものを確かめて書き直します。指すものが分からなければ、書き手に尋ねます。

--words で一覧の場所を指定でき、--no-words を付けると読みません。リポジトリに入れてチームで共有する前提のファイルです。

入れなかったもの

「〜できる仕組み。」のように、何も説明しないで「仕組み」で終える文の規則は入れませんでした。試しに入れた手順では、推敲の前後の比べで直せた文がなく、前後の文で仕組みを説明している、残すべき文まで書き換えたためです。

確かめたこと

推敲の前後の比べは自作の類例31本(新しい型と、直さない文を混ぜた文書)と tests/corpus の163本で行いました。2.1.3 と 2.2.0 で推敲し、どちらの版かを伏せて読み比べています。

Claude Code(Claude Opus 5.5)で推敲すると、直すべき型を直せた件数は125件のうち44件から91件に、残すべき書き方を誤って直した件数は8件から7件になりました。全文を読んで意味が変わったと判定した件数は1件から2件で、増えた1件は、新しい印のない文で「〜のみ」の「のみ」が落ちたものです。

Codex(gpt-6-astra)で自作の類例31本を推敲すると、直せた件数は同じ125件のうち39件から88件に、誤って直した件数は16件から7件になりました。全文を読んで意味が変わった件数は2件から4件で、増えた分は、新しい印のない文の揺れと、直訳語の印のついた文を英語の言い方の意味で書き直した境目の1件でした。

背景で触れた表の場面に似せて自作した文書でも確かめました(表の文はリポジトリに入れていません)。表の17の言い方のうち、既定で12に印がつき、flag.txt に5語を書くと17すべてにつきます。残りの5つは辞書の訳語を当てた名詞や定着した言い方で、既定では印をつけません。flag.txt に5語を書いた状態で推敲すると、Claude Code はどの回も、表の「直した後」と同じ中身に直したか、文書に名前のないものを書き手に尋ねました。Codex も16の言い方では同じでしたが、承認の言い方は、誰が承認するかが文書で決まる場合にだけ直り、決まらない文書では3回のうち2回、尋ねずに別の言い方に書き換えました。2.1.3 では、同じ文書で直ったのは一部でした。

試験一式は macOS、Linux、Windows で通ります。lint、diff、check の出力の違いは、新しい規則、文書の種類 script、語の一覧で説明がつくものだけです。

2.1.3 から使っていただいている方へ

推敲の結果が変わります。lint の終了コード、既存の JSON のキーと値の意味、*_FORMAT_VERSION、既存のコマンドの引数と既定値、ファイルの場所は変えていません(--words、--no-words と、--doc-type の値 script を足しました)。lint の新しい印は info なので、lint の --strict と --fail-on の判定は変わりません。ただし allow.txt に書いた語は、前からある warn の規則(比喩動詞、直訳の語、決まり文句)の候補からも外れるので、一覧を置いたリポジトリでは、lint の --strict と --fail-on の結果が変わることがあります。diff と check の --fail-on=meaning-risk では、台詞の最後の「。」だけを外したか足した組だけの文書で、終了コードが1から0になります。lint の時間は1回あたり十数ミリ秒増えます。2.1.3 で残した検査の記録を 2.2.0 の verify で照らすと、検査のスクリプトが変わったので tool_changed になります。もう一度 run を実行してください。変更の細部は CHANGELOG.md にあります。