← AIバイブコーディングTips 一覧へ Quality / Dedup by Content

重複チェックを通った記事ネタが、3週間前に書いた論文だった

筆者は経済学の読み物ブログを、AIの自動化で回しています。論文のRSSを集め、AIが採点し、最高点のものを記事にする流れです。ある朝、採点で10点満点がつきました。執筆に入る前に念のため過去ログを検索すると、3週間前に記事化済みの論文と同じでした。重複チェックはちゃんと動いていたのに、すり抜けていたのです。原因と、その後に入れた安い対策をまとめます。

この記事で手に入るもの

外部IDで重複を判定する仕組みがどういう形で破れるかの実例(同じ論文が別のIDで何度も戻ってきた記録)と、ID照合を作り込む代わりに高コストの処理の直前にだけ内容で再確認するという、安く効く二重チェックの置き方です。

01 — 何が起きたか

10点満点の新ネタは、執筆済みの論文だった

仕組みはシンプルです。収集スクリプトが複数のRSSフィードから論文を集め、まだ見ていないものだけを「受信箱」ファイルに追記します。

「まだ見ていない」の判定は、記事のURLから作ったIDで行います。一度受信箱に入ったIDは二度と追加しません。その後、AIが受信箱を読んで点数をつけ、高得点の論文から記事にしていきます。

2026年10月2日の採点で、チリの小規模事業者向け融資の論文に10点がつきました。「事業者が大きくなると、消費者は得をするのか」という問いで、ブログのテーマにぴったりです。ところが執筆に入る前に過去の執筆ログを検索すると、9月14日に同じ論文を記事にしていました。数値まで完全に一致です。

最初に記事にしたときは、全米経済研究所(NBER)の新着フィードから拾っていました。今回はRePEcという経済学論文のインデックスサービスの、テーマ別新着レポート経由で戻ってきていました。同じ論文でも、URLもIDも別物です。だから重複チェックは「新しい論文」と判定し、AIは正しく10点をつけました。どちらも、与えられた条件の中では間違っていません。

ここが核心。IDは「その情報源の中で、その記録を指す番号」でしかない。同じ作品を指す番号ではない。情報源が増えるほど、同じものが別の番号で戻ってくる。


02 — 一度では終わらなかった

ログを洗うと、すり抜けの経路は4つあった

この件をきっかけに採点ログを見直すと、同じ論文が別IDで戻ってきたケースが他にも見つかりました。

01

同じフィード内のクロスリスト

RePEcは1本の論文を複数のテーマ別レポートに載せます。リンクの末尾にレポート名が付くので、同じ論文が「別URL」になります。これは9月中旬に気づき、URLから論文の識別子(RePEcハンドル)だけを取り出して比べるように直しました。ここまでは、ID照合の改良で解決できる層です。

02

別の論文シリーズで再出版

同じ研究が、IZAやCESifoなど別々の研究機関のディスカッションペーパーとしても出ていました。発行元が違えばハンドルも違います。採点ログには、この型が3件記録されています。2件は記事化済み、1件は採点済みで見送った論文でした。

03

原典サイトとインデックスの二重取得

arXivの論文をarXivのフィードで拾い、数日後にRePEcが独自ハンドルで再掲したものをまた拾う。ハンドルの体系がまったく別なので、正規化では照合できません。採点ログにも「既知の残課題」と書いてありました。

04

今回のNBER→RePEc

03と同じ型で、相手がNBERだっただけです。違ったのは点数でした。それまでの重複は、採点の段階で気づけたものや、低得点の見送り候補だったので、採点時に気づいても実害はありませんでした。今回は最高点だったので、そのまま執筆に進むところでした。

01の正規化を入れたとき、重複問題は片付いたと思っていました。実際に片付いたのは、同じ情報源の中の重複だけです。情報源をまたぐ重複は、IDをどれだけ丁寧に正規化しても原理的に照合できません。ハンドル同士を対応づける表を持っていないからです。


03 — 対策の考え方

ID照合を完璧にするより、高い処理の直前に1回だけ確かめる

完全に直すなら、タイトルの類似度、著者名、DOI、論文番号で横断的に名寄せする仕組みが要ります。ただ、それは割に合いません。

受信箱に入る論文は1回の取得で数十件あり、そのほとんどは低得点で終わります。重複が混じっても、採点のときに少し手間が増えるだけです。困るのは、重複が記事執筆のような高コストの工程まで進んだときだけでした。

そこで運用ルールを1行足しました。「高得点がついた候補は、執筆に着手する前に過去の執筆ログをgrepする」。検索する語は論文タイトルの特徴的な単語と、論文番号(NBERならw35729のような番号)です。

# 着手前チェックの例(PowerShell)
Select-String -Path scored.md, ROADMAP.md, journal.md `
  -Pattern "w35729", "Microenterprises Grow", "business stealing"
# 1件でも当たれば、その執筆記録を開いて同一論文か目で確かめる

このチェックが安く済むのは、対象が1件だけだからです。受信箱の全件に名寄せをかけるのは重いですが、これから書く1本について過去ログを検索するのは数秒で終わります。

✓
入口(収集時)のID照合は「安く、粗く」でよい同じフィード内の明らかな重複を落とすだけ。完璧を目指さない。
✓
出口(高コスト工程の直前)で「内容で」確かめるIDではなく、タイトルの語・数値・論文番号で、自分の作ったもの(執筆ログ)を検索する。
✓
重複を見つけたら、両方の記録に相互の参照を書く「この論文は○月○日に執筆済みのものと同一」と書いておけば、次に同じ論文が3回目に戻ってきたとき、ログ検索で即座に当たる。

04 — AIに任せる仕組みでの意味

AIは、与えられた受信箱が新しいと信じて採点する

この件で、AIは何も間違えていません。受信箱は「新規の論文だけが入っている」という前提で渡されていて、AIはその前提で内容を評価しました。過去3週間分の執筆ログを毎回の採点に全部渡せば気づけたかもしれませんが、それでは採点のたびにコンテキストが膨らみます。

AIに任せる自動化では、前の工程の判定を次の工程がそのまま信じる形になりがちです。そのとき気をつけたいのは、判定の精度を上げることより、間違いが通ったときに一番高くつく場所を見つけて、そこに確認を1つ置くことです。今回の自動化では、それが執筆の直前でした。

筆者の場合、この確認は記事を書くAIセッション自身の手順に入っています。採点ファイルで次のネタを選んだら、執筆前に過去ログを検索し、当たったら破棄して次点に進む。10月2日はこの手順で重複を捕まえ、次点の論文で記事を書きました。

応用先。RSS収集に限りません。問い合わせの重複起票、同じバグの別チケット、同じ画像の別ファイル名。外部のIDで同一性を判定している仕組みは、情報源が増えた時点で同じ形で破れます。


05 — まとめ

IDは情報源のもの。同一性は自分で確かめる

情報源を増やすと、取れるネタは増えます。実際、テーマ別の新着レポートを4本追加した初回の取得では、新規の論文が既存の3ソースを大きく上回りました。その代わり、同じ論文が別の名前で戻ってくる経路も増えます。

まとめ。入口のID照合は粗くてよい。そのかわり、間違いが一番高くつく工程の直前に、IDではなく内容で過去の成果物を検索する。対象が1件なら、その確認は数秒で終わります。

本記事は筆者のブログ運用(論文収集スクリプトと採点ログ、2026年9〜10月)にもとづく一次情報です。RePEc、NBER、IZA、CESifo、arXivの論文の掲載形式は、筆者が受信したフィード上での観察で、各サービスの仕様として保証されたものではありません。コード例は考え方を示すためのもので、検索対象のファイル名は各自の運用に合わせて読み替えてください。