本記事の概要
私は、公開前の記事の本文と素材の文面を文字列で照合する検査を運用しています。素材とは、記事のネタ元にしている非公開の開発リポジトリのことです。
2026年7月18日、この検査で公開待ちの記事3本が不合格になりました。原因は、記事が素材の内部の文面を写したことではありませんでした。素材にあった、このブログの公開記事を分析した1ファイルに、公開済みの本文の引用が含まれていたためです。写した文書と写された文書が逆でした。
同じ検査には、反対向きの見落としも残ります。自分のリポジトリを照合の対象から外している以上、自分の内部文書をなぞった原稿は機械の照合では見つかりません。
向きを取り違えた偽陽性では照合の対象を見直し、許可した語の不具合では一致の数え方を直しました。どちらの直しも、判定の基準そのものは緩めていません。自分のリポジトリの範囲にある写しは、いまも意味を読むAIのレビューで見つけています。
記事から得られること
自分の運用に文字列の照合による検査を置いている方に向けて、次の3つを説明します。
- 一致の向き、つまりどちらが原本かを決める材料を、設計するときに選べるようになります。私は文字列ではなく時間の情報で決めており、その判定に使う3つの日付を書きます
- 自分自身を照合の対象から外した検査に、どこまで見落としが残るかを見積もれるようになります。機械の照合では見つからず、意味を読むAIだけが見つけた実例と、対象へ戻す案を見送った理由を書きます
- 判定を終えた一致をどう記録すると再判定が必要になるかを、あらかじめ運用に織り込めるようになります。同じ位置をもう一度判定することになった実例を書きます
この記事は、私が個人の研究として続けている運用の一次記録に基づく考察です。
文字列の一致では決まらないもの
結論から書きます。2つの文書で文字列が一致しても、どちらが原本かは決まりません。片方がもう片方を写したのか、双方が同じ公開の識別子や命名の習慣を使っただけなのかも、一致そのものからは分かりません。
私がこの検査で起こした誤りは3つあります。向きを取り違えた偽陽性、自分自身を対象から外したことによる偽陰性、許可した語の扱いの不具合です。偽陽性は写していないものを写しと判定する誤り、偽陰性は写しを見逃す誤りを指します。3つとも、一致した文字列だけから原本の向きと自他の別を決めようとした、同じ1つの性質から出ています。
私は向きを、文字列の一致ではなく時間の情報から判定しています。gitで照会した3つの日付を比べます。記事の本文の最終変更日と、直前に全数を照合して一致が0件だった日と、素材にその文面が入った日です。
外部の盗用検知でも前提は同じです。次の3件は、2026年9月16日に原文で確認しました。英語版ウィキペディアの項目Content similarity detectionによると、外部の検知の系は、疑わしい文書を参照の集合と比較するものと定義されています。その集合は真正とみなされた文書の集合です。PAN at CLEF 2025の生成された盗用の検知の課題でも、疑わしい文書と原本の文書は、データの構成として先に分けられています。歴史資料の文の再利用を扱う研究Reception Readerによると、2つずつ照合する類似の比較では、時間の中での再利用の向きは説明されないと報告されています。同じ研究によると、今後の開発として、文の断片の最も早い出現へつなぎ直す処理で向きを与えることが挙げられています。
写しを検出する検査の構成
誤りの中身に入る前に、この検査が何をどう照合しているかを示します。次の表が2026年9月16日の時点の設定です。
| 項目 | 現在の設定 |
|---|---|
| 照合の対象 | 公開済みと公開待ちと下書きの各記事の本文。記録メタデータのyamlとコードブロックは除く |
| 照合する相手 | 素材のリポジトリの作業ツリーとコミットメッセージ |
| 一致とみなす長さ | 連続16文字以上 |
| 出力の内容 | どのファイルのどの位置に長さいくつの一致があったかと、一致した素材の識別子だけ |
| 判定できないとき | 実行を停止し、通過させない |
| 対象から外すもの | このプラットフォーム自身のリポジトリ |
| 規模 | 対象98ファイル、相手12リポジトリ |
切り出す長さが16文字なのは実測の結果です。8文字では一般的な技術日本語やコマンドの文字列が大量に偶然一致して、判定に使えませんでした。一致した文字列そのものを出力しないのは、検査の出力自体が新しい漏洩の経路になるためです。
このプラットフォーム自身を対象から外すのは、記事のファイルがその作業ツリーに存在するからです。外さなければ、記事は必ず自分自身に一致します。素材にあって、このプラットフォームからの引用を含む文書も、パスを指定して照合から外せます。ただし外してよいのはこちら由来の内容を引く文書だけです。素材本来の内部文書を入れると、本来止めるべき一致が何も検出されなくなります。
素材の文書の引用による逆向きの誤作動
最初の誤作動は2026年7月18日でした。一括の照合で、公開待ちの在庫にあった記事3本が不合格になりました。一致の長さは16文字と24文字と16文字で、同じ1ファイルが公開済みの8つの記事ディレクトリにも一致しました。
一致の相手は、素材の1つである研究予稿と研究運営のリポジトリにあるファイルです。このファイルは、このブログの公開記事を分析したものでした。2026年9月16日にあらためて読み取りだけで確認しました。このファイルは2026年7月16日に追加され、その日から変わっていません。私が記事へ素材の内部の文面を写したのではなく、素材の文書の中にこちらの公開済みの本文が引用されていました。
このときは、素材ごとに照合から外すパスを指定する仕組みを追加しました。あわせて、外してよいのはこのプラットフォーム由来の内容を引く文書だけ、という制限をルールの文書へ書きました。
この誤作動は2026年9月16日にも再現しました。再現は、本番と同じ状態にそろえた複製の作業ディレクトリで私が実行し、元のリポジトリは読み取りだけで参照しました。除外を1件だけ外すと、同じ1ファイルに対して公開済みの9記事から29件の一致が出ます。うち21件は、2026年7月7日から7月11日に公開した6記事の本文です。この1ファイルが作られた7月16日より前に公開しているので、素材の文書へこちらの散文が取り込まれた逆向きの一致です。最長は65文字でした。残る8件は、2026年8月6日から9月3日に公開した3記事の断片です。中身は、公開済み記事のディレクトリのパスと、公開しているスキルの名前でした。除外を9件すべて外すと58件になります。この29件と58件は除外を外した再現の条件での数なので、後で述べる本番の構成の件数とは並べて比べられません。
自分のリポジトリの除外で残る見落とし
ある日の執筆で、私は下書きの文面を2か所なぞっていました。なぞった相手は、このリポジトリ自身のルールの文書と、読者向けチャットの実装です。長さはそれぞれ34文字と19文字です。機械の照合では検出できず、意味を読むAIだけがなぞりを見つけました。自分のリポジトリを対象から外している以上、自分の内部文書のなぞりは機械の照合では見つかりません。
単純に対象へ戻す案は、検討して見送りました。このリポジトリのルールの文書には、指摘の実例として記事の文そのものが引用されています。引き継ぎの記録と運用データには、記事の内容の要約が入っています。記事から文書への引用と、文書から記事への写しを、機械では区別できません。対象へ戻すと除外の列挙が広くなりすぎて、検査が形だけになります。
いま採ろうとしている方向は、記事の引用を構造的に含まない場所だけを照合の相手にする自己照合です。サーバ処理とサイトの実装とスクリプトのコードが、その場所に当たります。コードに記事を引用する箇所は無いので、向きの曖昧さが出ません。この範囲の写しは、当面は意味を読むAIのレビューで見つけます。
許可した語の扱いの不具合
3つ目の誤り、すなわち許可した語の扱いの不具合は、一致の中身の数え方の不具合でした。この検査には、公開してよいと登録済みの一般的な呼び名と、一般に知られた技術語を並べた許可の一覧があります。一致からそれらを除いた残りの文字が、固有の中身です。2026年8月13日に、許可した語が一致の切れ目で語の途中から始まると、その語を取り除けない不具合を修正しました。修正の前は、公開されているAIモデルの製品名の断片が固有の中身として数えられていました。直し方は、行の全文の上で許可語が占める範囲を先に求め、覆われていない文字だけを数える形へ変えることです。変更の前後で公開済みと下書きの全体を実行し、判定を終えた一致が引き続き検出されることを確かめました。
判定を終えた一致の記録と向きの再判定
一致の向きを判定し終えたら、その結果を理由と日付つきで記録して、以後の実行では通します。この記録への登録を、以下では受理と呼びます。受理の記録は2026年8月11日に作りました。2026年9月16日の時点で26行あります。受理が付いている記事は公開済みの17本です。下書きと公開待ちの一致は受理できません。
26行に書かれた向きの根拠は、すべて時間の情報です。文字列の一致そのものでは1件も決めていません。26行の性質は4つに分かれます。20行は、素材の文書へ後からこちらの言い回しが取り込まれた逆向きの重なりです。3行は、公開されているAPIのフィールド名やリポジトリの構造のパス名を双方が共有した一致です。1行は、公開されている技術記事の一文を双方が引いた共有です。残る2行は、助詞を含む一般的な言い回しが偶然そろった一致です。本来止めるべき向き、つまり記事が素材の内部の文面をなぞった一致は1件もありません。
向きの判定は一度では終わりません。2026年9月16日、本番の構成のまま全数を照合すると、公開済みの3記事にまたがる7件が不合格になりました。7件はすべて同じ一文の型で、和欧混植の組版のルールを述べる定型の言い回しです。不合格になった3記事は、どれもそのルールそのものを主題にした記事でした。このルールの由来は、和文と英数字の間の半角スペースは誰が決めたのかという記事で辿っています。向きをgitで照会した結果は逆向きで、素材の文書へ9月16日と9月2日に同じ言い回しが取り込まれていました。
この7件の位置については、2026年8月26日と9月7日に向きを判定し、受理していました。もう一度不合格になったのは、当時、一致した素材を1つしか記録していなかったためです。この日は同じ位置が別の素材にも一致しました。受理の記録は、断片の文面だけでなく、そのとき一致した素材の識別子の集合まで含めて固定されます。同じ文面が別の素材へ後から取り込まれるたびに、判定を終えた一致がもう一度不合格に戻ります。
件数は素材が進むたびに増えます。2026年9月7日に全数を照合したときは、公開済み8記事にまたがる新規の一致が出ました。件数は実行の時点で17件から24件の幅がありました。素材の作業ツリーが実行のたびに動いているためです。全件の向きを判定した結果、本来止めるべき向きは0件でした。
下書きでは別の直し方をします。2026年9月8日と9月11日の一致は、どちらも素材の文書が後から重なった逆向きでした。それでも下書きの該当の一文を、意味を変えずに言い換えて解消しています。この記事を書くために作った事実の一覧も、書き上げた直後に照合すると7件の一致が出ました。6件は、外部の一次情報から引いた英語の引用の、語をつなぐだけの部分です。引用の核になる語は、どの素材とも一致していません。残る1件は、取り下げた原稿を置くディレクトリの名前でした。素材の側も同じ言葉で同じ種類のディレクトリを名づけていました。だから、私が素材の文面を写したのではなく、双方が同じ命名の習慣を使っただけです。下書きの一致は受理できないので、英語の引用を核になる語だけへ短くしました。あわせて、ディレクトリの名前を出さずに日本語の説明へ書き換えて、一致を解消しました。書き直してもう一度照合すると、0件になりました。同じ日に本番の構成で全数を照合したときも、ほかの下書き4記事8ファイルは0件で通過しています。
検査を緩めずに照合の対象を見直す設計
この照合の検査のスクリプトを2026年7月12日に新設してから、2か月と1週間で18回書き換えました。直近の変更は2026年9月7日です。書き換えでは、許可語を追加し、逆向きの一致を除外の対象に加え、受理の記録を新設し、許可語の不具合を直しました。判定の基準そのものを緩める変更は1件もありません。向きの取り違えと許可語の不具合では、判定できないときに通さない設計のまま検査が止まりました。私は原因を確かめてから、照合の対象と一致の数え方を直しました。自分のリポジトリを対象から外していることによる見落としでは検査は止まらず、意味を読むAIがなぞりを見つけました。判定できないときに通さない設計は、この検査だけのものではありません。同じ設計を2か所で別々に作った経緯は、判定できないものを通過にしない評価器を、二つの場所で別々に作ったに書きました。
同じ検査を自分の運用に置く方へ、要点を3つ書きます。向きは文字列の一致ではなく時間の材料で決めます。自分自身を照合から外すなら、その範囲の写しは意味を読むAIのレビューで見つけると最初に決めておきます。そして受理の記録は一致した素材の集合まで含めて固定されるので、素材が増えるたびに向きをもう一度判定することになります。
断定の射程は自分から限ります。この運用では、観察する私の記事と、観察される素材の文書が、引用でつながって循環しています。その構成で偽陽性が必ず生まれる、という一般化は、2026年9月16日の検索では裏づけられませんでした。外部の一次情報で支えられるのは2点までです。外形的な検知が参照の集合を真正とみなす前提を持つことと、一致が時間の向きを説明しないことです。循環の話は、私の運用の実測に閉じた考察として書いています。
参考にした研究
- 歴史資料の文の再利用を扱う研究です。2つずつ照合する類似の比較が時間の中での再利用の向きを説明しないことと、今後の開発として、文の断片の最も早い出現へつなぎ直す処理で向きを与えると述べていることを、2026年9月16日に原文で確認しました。Reception Reader: Exploring Text Reuse in Early Modern British Publications (David Rosson、Eetu Mäkelä、Ville Vaara、Ananth Mahadevan、Yann Ryan、Mikko Tolonen。Journal of Open Humanities Data 9、2023年4月17日。DOI 10.5334/johd.101) https://openhumanitiesdata.metajnl.com/articles/10.5334/johd.101
参考にした資料
- 外部の検知の系が、疑わしい文書を真正とみなされた参照の集合と比較するものと定義されていることを、2026年9月16日に確認しました。Content similarity detection (英語版ウィキペディア) https://en.wikipedia.org/wiki/Content_similarity_detection
- 文書の役割が、再利用を含みうる疑わしい文書と、照合の相手である原本の文書に、課題の構成であらかじめ分けられていることを、2026年9月16日に確認しました。Generative Plagiarism Detection (PAN at CLEF 2025) https://pan.webis.de/clef25/pan25-web/generated-plagiarism-detection.html