mcpField
K
Keystone

Keystone

リモート
keystone-research.vercel.app科学・教育06 日前に更新
リポジトリ公式サイト

Keystone について

KeystoneはarXiv論文のLaTeXから引用の立場、明示された前提、論文間の関係を抽出し、原文のページ上に結び付けます。LLMではなく決定的なルールで処理し、根拠となる文や手掛かりを確認したい研究者向けです。

主な機能

  1. 01引用文脈の立場の分類
  2. 02著者が明示した前提の抽出
  3. 03ページ上の原文へのアンカー付け
  4. 04論文間のたどれる引用関係
  5. 05LaTeXソース付きarXiv論文の分析

活用シーン

  1. 01論文が採用または異議を唱える手法の追跡
  2. 02前提に示された根拠の確認
  3. 03引用関係を通じた研究の系譜の閲覧
  4. 04判定の根拠となる原文位置の確認

MCP 対応

Keystoneは`/api/mcp`にMCPサーバーを提供します。クライアントから論文分析機能を利用できますが、個別のMCPツールについては入力に記載されていません。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://keystone-research.vercel.app/api/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

Keystone

公開サイト 事例研究 MCP レジストリ ライセンス

この論文は何に支えられているのか?

公開サイト: https://keystone-research.vercel.app

論文は単独では成り立ちません。誰かの手法を採用し、別の誰かに反論し、明示することなくいくつかの事柄を前提として受け入れています。Keystone は、要約でも検索インデックスでも、処理にモデルを介在させることもなく、論文自体の LaTeX からこの3つすべてを読み取り、論文がそう述べているページ上の箇所にそれぞれ結び付けます。

この名前は本プロジェクトの主張そのものであり、方向転換を経てようやくふさわしいものになりました。要石とは、なければアーチが崩れてしまう石のことです。そして、ほとんどの論文でその石は別の誰かのものです。

推測ではなく、すべて引用に基づく3つの要素があります。

  • 何に支えられているか。 引用は中立的な参照先ではありません。「\cite{ba2016layer}に従って各層を正規化する」と「\cite{ba2016layer}とは異なり、バッチ全体にわたって正規化する」は、同じ論文について正反対のことを述べており、その違いは書き記されています。引用箇所はすべて手がかりとなる語句から分類され、その語句も表示されるため、その解釈に異議を唱えることができます。
  • 何を前提として受け入れているか。 論文というジャンル上、著者は前提を明示します。「仮定します」「簡単のために」「よく知られているように」といった表現です。それぞれについて、論文が同じ文の中で根拠として提示しているもの、すなわち引用、自らの証拠への参照、あるいは何もないことを併せて引用します。
  • グラフ。 引用された論文がライブラリにも含まれている場合、そのエッジは双方向にたどれるため、論文が何に支えられているかだけでなく、誰がその論文に支えられているかも分かります。234本の論文にわたって548件のリンクがあり、それぞれにリンクを生んだ文が付いています。つながりの実態は、VGG → ResNet → Transformer → BERT / ViT / LLaMA という連鎖であり、そこにバッチ正規化と層正規化が加わっています。

ライブラリは、論文自身の引用をたどって拡張されます。keystone expand は、ライブラリがすでに arXiv への参照先を解決できているすべての文献を読み取り、それぞれについてどれだけ多くの論文が立場を示しているかで順位付けし、上位のものを取得します。そのため、新しい論文は孤立したノードとしてではなく、少なくとも1つのエッジがすでに付いた状態で追加されます。

ResNet の中心的な仮説、すなわち残差写像は参照先のない写像より最適化しやすいという仮説は、序論で一度述べられていますが、その根拠は何も示されていません。 2ページ。

そして、多くの場合は何も述べず、ときには誤ります。 手がかりとなる語句を文脈から切り離して読むと、曖昧な答えではなく、自信に満ちた正反対の答えが生じます。そのため、エラー率を示唆するのではなく公表しています。また、その測定には他者が付けたラベルを使っています。ルールの作成に使った論文そのもので測った率は、率ではなく単なる言い換えだからです。

手がかりとなる語句を1つも提供していない SciCite(引用文脈11,014件、Cohan ほか、2019年)と ACL-ARC(1,941件、Jurgens ほか、2018年)で評価した結果は次のとおりです。

引用数読み取り率そのうち正解
SciCite11,0144.0%80.0% [76–84%]
ACL-ARC1,9418.3%68.9% [61–76%]
どちらの数値も重要です。Keystoneは、書き留められた手がかりの表現がない場合、判定が報告されていない場合、何も示されていない場合には、回答を差し控えるように作られています。幅広いコーパスでは、これは大半の引用を判定できないことを意味します。「CMet cardiac metric software [12] を使用」というのは、CMetが何かを知っていることだけが根拠となる、実際に導入された事例です。Keystoneのmacro-F1は0.325と0.204で、ACL-ARCで2000年の手がかり表現ベースのシステムが記録した0.273を下回り、学習済みニューラル分類器の0.84~0.889を大幅に下回ります。macro-F1では、沈黙も誤りとまったく同じようにペナルティーを受けるためです。この数値も公開しています。記載しないのが都合のよい選択だったでしょう。

このライブラリから無作為に選んだ引用90件を人手でラベル付けしたところ、正解率は87%[78~92%]、macro-F1は0.84でした。同じ文を対象にした単語袋モデルの分類器では0.59でした。このサンプルが示すのは、ルールに自己一貫性があるということであり、ほかのデータにも適用できるということではありません。公開ラベルとのスコア評価で見つかり、修正された3つの実際の欠陥についても、eval/corpora/README.mdを参照してください。およそ5回に1回は、どちらの方向にも誤読があります。そのため、各行には文と、判定の根拠となった手がかりを示しています。

なぜ算術の監査ではないのですか? 最初のバージョンはそうでしたし、実際に公開しました。論文の数値から報告できるのは、エラーがないということだけです。慎重に書かれた論文にはエラーがありません。基礎となる9本の論文を対象に検証スイートを実行したところ、正しく検出結果はゼロ件でした。つまり、出力できる最善の結果は空白のページでした。数値分析は今もここにあります。主張を表のセルまで追跡し、すべての数値を索引化し、ベースラインを引用元の論文と照合しています。ただし、詳細がふさわしい場所である系譜の下に置いています。方針転換についてはRELEASE.mdを参照してください。

全体像

明確に述べるべきことが2つあります。

主流のツールであるSciSpace、ChatPDF、Elicit、Paperguide、NotebookLMは、どれも同じパイプラインを使っています。チャンク分割し、埋め込みを作成し、検索し、回答して、ページ番号を引用します。競っているのはコーパスの規模と仕上がりであり、機能ではありません。

しかし、論文の批判点をページに紐付けるツールは、Keystoneが初めてではありません。 Loupe(Apache 2.0)は、科学論文を低コストのトリアージで確認した後、ユーザーが選択した場合に詳細分析を行います。また、ビジョンモデルで検証したバウンディングボックスに、すべての検出結果を紐付けます。独立して同じようにピクセル単位で紐付けた検出結果にたどり着いたことは、この方向性が正しい証拠です。Keystoneとの違いは次のとおりです。

LoupeKeystone
判定LLMによる判断決定論的なコード — statcheck/GRIMによる再計算、算術の再導出、要旨と表の照合
位置の特定MinerUからMarkdownへ変換し、ビジョン処理で位置を確認単語のジオメトリ。実測値:検証済みの割合99.94%、捏造された359件のうち根拠箇所に紐付いたものは0件
真実のソースOCR処理したMarkdownarXivのLaTeXソース — 正確な数式、表の数値、\citeキー
引用「引用が必要」と指摘引用先の論文を取得し、含意関係を検証
検出結果の構造重要度順に並べたフラットなリスト重要な主張を優先順位付けしたクレームDAG
重視する点証明と論証の欠陥実証面の欠陥 — ベースラインの公平性、データ漏洩、分散、SOTAの適用範囲

Loupeの問題分類(論理、量化子のスコープ、ステップの欠落)は、証明を対象としています。Keystoneの問題分類は実験を対象としています。ML/CSの論文で実際に問題が生じるのは、まさにこの部分です。

ステータス

https://keystone-research.vercel.app で公開中です。以下の数値は、ビルド時に生成される JSON から読み取っているため、数値が生成元の実行結果と食い違うことはありません。

分析済みの論文234
引用の読み取り1524。そのうち90.7%はページにアンカーされています
前提973。そのうち838件は、裏付けとなる情報を何も示していません
辿れる論文間のエッジ548
テストPython 274件、JavaScript 49件

アンカーレイヤー。 厳密なアンカーは、マッチャー自身のインデックスを介さず、MuPDF による独立した幾何学的な往復検証を通過します。合格基準は≥99%で、これを下回るとテストスイートはビルドを拒否します。実際のスパンは決して拒否されず、捏造された引用は決してアンカーされません。どちらもゼロを基準としています。論文の LaTeX の文のおよそ93%は PDF 内で見つかります。また、サンプリングした文のうち PDF と一致するものが4分の1未満のソースは、公開するのではなく、その時点で拒否されます。

他者のラベルで評価した手がかりルール。 SciCite(11,014件の引用コンテキスト)に対し、このルールが引用のスタンスを示すのは4%で、そのうち約80%が正解です。95%信頼区間は76〜84%です。マクロ F1 は、約0.84のニューラル分類器に対して0.325です。この差は意図的なトレードオフです。マクロ F1 は、沈黙も誤りとまったく同じように減点しますが、このシステムは文に手がかりがない場合に沈黙するよう設計されています。サイトの /method をご覧ください。

稼働中の機能。 ピクセル位置にアンカーされたハイライト付きのリーダー、サインイン済みの読者向けのハイライトとメモ、デバイス間同期に対応した Google サインイン、検索とライブラリーガイド、ライブラリー全体のビュー(/timeline、/contested、/assumptions)、新しい研究のフィード(/news)、LaTeX ソースを公開している arXiv 論文のオンデマンド分析、/api/mcp の MCP サーバー、Cookie を使用しないアナリティクス。

意図的に実装していないもの。 訪問者ごとの追跡と、パーサーがアンカーできない内容についての主張です。決定論的な数値チェックは大部分を廃止しました。慎重にレビューした論文では、最良の結果が空白ページだったためです。このプロジェクトの価値は算術ではなく、系譜にあると分かりました。RELEASE.md をご覧ください。

アンカーレイヤーにこれほど注力した理由

下流の主張はすべて、これに依存しています。「要約では94.2%と報告されているが、表3では93.8%と記載されている」という知見も、読者がクリックして両方の数値に移動できなければ価値がありません。そこにたどり着くまでに何度か測定を繰り返しました。興味深いことに、最初の3つの失敗はコードではなく、テストにありました。

  • 往復検証の成功率は**67.6%**から始まりました。原因は、表示数式の背の高い ( が本文の行にはみ出すのは正当な動作であり、文字列の完全一致判定を破っていたことです。
  • 和集合のバウンディングボックスでは、背の高い字形(→∞)が1つあるだけで、行のハイライトが次の行全体にまで広がることがありました。実際の不具合であり、行のバウンディングボックスの中央値を使って修正しました。
  • コンテンツストリームの単語順とクリップされたテキストの順序は、段組みや表の行によって実際に異なるため、スパン全体の順序を検証するアサーションは無効です。現在は順序が明確な各矩形ごとに検証しています。これは緩いテストではなく、より厳格なテストです。
  • ファジーマッチングは、実際のスパン1846件のうち1件も一致しなかった一方で、捏造された引用の5.9%を受け入れていました。 partial_ratio は最良のウィンドウをスコア化するため、単語を1つ置き換えてもスコアはほとんど変わりません。"Trade, feature 9-50" は "Trade, pages 9-50" に対して93.6というスコアになりました。論文に何が書かれているかを検証するツールにとって、これは最悪の失敗モードです。現在、ファジーマッチングはオプトイン方式で、単語置換ガードを設けています。

アンカーは精度(tight / approximate)を自己申告し、検証ではそれぞれの契約に従って扱います。積み重なった幾何学形状、たとえば分数の分子が分母の上にある場合、軸に平行な矩形では厳密なアンカーを作れません。そのためアンカーは、実現できない精度があるかのように示すのではなく、そのことを明示します。

チェックから学んだこと

このテストスイートでこれまでに発生した誤検出は、すべて算術エラーではなく、判定条件のエラーでした。これは決定論的なチェック特有の危険性です。正しく計算していても、誤った前提で実行されるチェックは、確信を持って誤った結論を断言するため、モデルの慎重な推測よりも有害です。実際の論文で発生した4つのケースを紹介します。

  • 部分文字列によるラベル照合。 "sum" in "summarization" と "avg" in "avg pool" によって、手法名とレイヤー名が集計行として扱われ、正しい表に対して重大度の高い指摘が21件生成されました。現在はラベル全体を照合します。
  • 向きの決めつけ。 表によっては列の下方向に太字で最良値を示し、別の表では行方向に示します。最初の方式だと決めつけた結果、正しいInstructGPTの表1つに対して、確信度の高い指摘が31件生成されました。現在は表ごとに向きを推定し、検証します。
  • 区分構造の無視。 結果表が「先行研究、規則、著者の行」のように区分されており、「最良」は区分内での主張です。TransformerのTable 2を列全体で評価したところ、アンサンブルの最良値が平凡な値として報告されました。現在は\midruleを単なる書式として取り除かず、構造として保持します。
  • 異なる量の比較。 2つのデータセットについて[email protected]とmAP@[.5,.95]を持つResNetの行を端から端まで比較し、値が小さい方を最良ではないと報告しました。現在は、最も内側の列見出しが繰り返されている場合、行の比較をその見出しごとにグループ化します。

いずれの場合も、共通する対処法は同じです。チェックは結論を述べる前に、自身の前提を検証しなければなりません。 合計行が誤りとして報告されるのは、別の列では正しく合計できる場合に限ります。強調表示が「最良」と解釈されるのは、その解釈によって論文内のほかのマーカーも説明できる場合に限ります。

再現率を制限しているのは算術ではなく、枠組みです。表が列方向と行方向のどちらを比較しているか、またどの行同士を比較対象とするかが問題です。まさにその種の判断を、計画ではモデルに割り当てています。つまり、抽出と振り分けはモデルが担い、判定は算術に委ねます。

レイアウト

services/core/keystone/ingest/
├── normalize.py      skeleton projection: ligatures, accents, dashes, hyphenation
├── pdf.py            MuPDF word geometry — the ground truth
├── anchors.py        quote -> rectangles, with the rejection path
├── verify.py         independent round-trip through MuPDF, per precision contract
├── regions.py        stacked geometry, rotated lines, maths classification
├── furniture.py      running heads, page numbers, the rotated arXiv stamp
├── latex.py          arXiv source: equations, tables, citations, sentence runs
├── arxiv_source.py   e-print fetch, unpack, main-file resolution
├── tables.py         LaTeX tabular -> typed cells, with emphasis and bands
├── assemble.py       ingested sources -> Paper
└── sampling.py       span sampling for the anchor audit

services/core/keystone/
├── lineage/stance.py       the cue rules: adopts / extends / disputes / compares
├── lineage/assumptions.py  what a paper takes on faith, and what it offers for it
├── lineage/graph.py        paper-to-paper edges, for the library views
├── audit/numbers.py        number parsing that preserves reported precision
├── audit/registry.py       check registration and the runner
├── audit/checks/tables.py  table consistency checks
├── graph/models.py         the typed structures checks reason over
├── eval/external.py        scoring the cue rules on SciCite and ACL-ARC
└── eval/planted.py         planting known defects to measure detection

リーダーと、そこから提供されるすべてのもの:

apps/web/
├── app/                    routes: the reader, the library views, /news, /stats
├── app/api/                account, marks, chat, guide, feed, mcp, track
├── app/api/ingest.py       Python function: analyse any arXiv paper on request
├── components/             the reader, the page view, the graph, the timeline
├── lib/                    marks geometry, anchors, analytics, feeds, the store
├── test/                   node --test, no framework
└── public/dossiers/        the built library, committed so the site needs no database

実行方法

cd services/core && uv sync

テスト用コーパス(公開arXiv PDF 10本)を取得します:

./eval/fetch_corpus.sh

ゲートを実行します:

cd services/core && uv run pytest -q

コーパス全体のアンカー精度を監査します:

cd services/core && uv run keystone audit ../../eval/corpus/pdf/*.pdf --samples 150 --hyphen-samples 40

arXivのLaTeXソースのアンカーのうち、各PDFに対応付けられる割合を測定します:

cd services/core && uv run keystone source-audit ../../eval/corpus/pdf/*.pdf

決定論的なチェックを実行し、意図的に埋め込んだ不具合に対する性能を測定します:

cd services/core && uv run keystone check 1706.03762 1810.04805
cd services/core && uv run keystone planted-audit 1706.03762 1512.03385 1810.04805 --verbose

引用箇所を1つ確認し、ハイライトを画像にレンダリングして目視で確かめます:

cd services/core && uv run keystone probe ../../eval/corpus/pdf/1706.03762.pdf "The Transformer allows for significantly more parallelization"

arXivソースの処理経路

arXiv論文では、実際のLaTeXをarxiv.org/e-print/{id}から取得できます。これにより、正確な数式、著者が記したとおりの表番号、実際の\citeキーが得られます。これらはいずれも、レンダリングされた字形からは確実に復元できません。ソースから抽出したテキストをPDFに再度アンカー付けすることで、これらの情報にもピクセル座標を対応付けます。

文単位のアライメントは、測定によって判明した4つの修正を経て93.5%に達しました。引数のないユーザーマクロ(\etalや手法の略記)を展開すること。これをしないと、PDF上ではテキストがある箇所に欠落が生じます。ネストした波括弧は正規表現では処理できないため、波括弧を対応付けてマクロの定義を削除すること。ページ上の定型情報を除外すること。そして、連続したテキストを文単位に分割することです。

コンパイル済みPDFを\includepdfでラップしている投稿では、空の文書を返すのではなく、SourceUnavailableを発生させます。「数式なし、表なし」と報告するのは、情報が得られないことではなく、論文そのものについて誤った主張をすることになるためです。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。