1.2TBのマルチメディアアーカイブをAIで検索するシステムを構築するなら

「この新聞で金正恩が初めて登場した時期はいつですか?その前後で報道の論調はどう変わりましたか?」

この質問に答えるには、数十年分の新聞スキャン画像をOCRでテキスト化し、時系列で整理し、人物を識別し、論調の変化を分析しなければならない。Google検索にキーワードを入力するだけでは解決できない。

1.2TB規模の北朝鮮関連資料がある。新聞スキャン画像、書籍PDF、音楽ファイル、動画、ブログアーカイブなど多様なフォーマットが混在している。13名の研究者がこの資料を基に投げかけうる質問を想定した。キーワード検索、時系列分析、人物写真検索、場所写真検索、翻訳、単語頻度分析、複合条件検索――単純な検索エンジン一つではカバーできない範囲だ。

本稿では、このようなマルチメディアアーカイブをGCP基盤でAI検索システム化する方法論を整理する。アーキテクチャ設計から技術選定、各国事例、コスト、構築期間まで扱う。


なぜ単純な検索エンジンでは不十分なのか

研究者たちが想定した質問の一部を見てみよう。

  • 「1990年代の労働新聞で『自力更生』という単語の年度別頻度変化を見せてください」
  • 「この写真の人物が登場する他の記事を探してください」
  • 「金正日死去前後3ヶ月間の報道論調の変化を分析してください」
  • 「この動画で言及される地名を地図上に表示してください」
  • 「朝鮮中央TVニュースで特定人物が登場するシーンだけ抽出してください」

これらの質問に共通するのは、単一の検索クエリでは答えが出ないということだ。複数のモダリティ(テキスト、画像、音声、映像)を横断し、時間軸分析が必要であり、時には複数段階の推論が求められる。Elasticsearchにテキストを入れてBM25検索するだけでは、この半分も処理できない。

必要なのはマルチモーダルRAG(Retrieval-Augmented Generation)システム――多様な形式のデータを統合インデキシングし、自然言語の質問を分解して段階的に検索・分析し、最終回答を生成するパイプラインだ。


システムアーキテクチャ全体設計

システム全体は4つのレイヤーで構成される。

┌─────────────────────────────────────────────────────┐
│              ユーザーインターフェース                     │
│        (Next.js + Cloud Run, 可視化, フィルタ)          │
├─────────────────────────────────────────────────────┤
│             検索・質疑応答レイヤー                       │
│    (Multimodal RAG, ハイブリッド検索, GraphRAG,          │
│     Agentic RAG, Re-ranking)                        │
├─────────────────────────────────────────────────────┤
│            インデキシング・ストレージレイヤー               │
│    (PostgreSQL+pgvector, Elasticsearch, ベクトルDB,     │
│     CLIPエンベディング, GCS)                            │
├─────────────────────────────────────────────────────┤
│           データ収集・前処理パイプライン                   │
│    (OCR, ASR, キーフレーム抽出, メタデータ構造化)          │
└─────────────────────────────────────────────────────┘

1. データ収集・前処理パイプライン

1.2TBの混合データをAIが検索可能な形に変換する段階だ。システム構築全体の60%以上の労力がここに集中する。

ファイルフォーマット自動検出。 Apache TikaまたはPython-magicでMIMEタイプを判別する。拡張子が間違っているケースが頻繁にあるため、マジックバイト基盤の検出が必須だ。検出されたフォーマットに応じて後続の処理パイプラインが分岐する。

画像/PDF → OCR。 新聞スキャン画像が最大の割合を占める。選択肢は3つだ。

OCRエンジン韓国語/朝鮮語対応特徴コスト
GCP Document AI優秀(韓国語ネイティブ)レイアウト認識、表抽出、GCPネイティブ$0.06(約9円)/ページ(1,000ページ以上)
Tesseract 5普通(韓国語モデルあり、精度は低い)オープンソース、無料、カスタム学習可能無料(GPUインフラコストのみ)
Mistral OCR優秀(多言語に強い)最新モデル、API基盤、複雑なレイアウトに強い~$0.05(約7.5円)/ページ

新聞スキャンのようにレイアウトが複雑な場合、GCP Document AIが最も安定的だ。ただし、1950~60年代の印刷物のように解像度が低く活字体が古い場合、どのOCRでも精度は落ちる。この場合は**前処理(画像二値化、傾き補正、ノイズ除去)→ OCR → 後処理(スペルチェック、辞書基盤補正)**の3段階が必要だ。

音声/動画 → ASR(Automatic Speech Recognition)。 朝鮮中央TVニュース、歌謡、演説などの音声をテキストに変換する。

ASRエンジン韓国語精度特徴
OpenAI Whisper (large-v3)WER ~5%(標準韓国語)オープンソース、ローカル実行可能、朝鮮語アクセントに弱い
GCP Speech-to-Text v2WER ~4%(韓国語)GCPネイティブ、リアルタイム対応、話者分離

北朝鮮の発音とアクセントは韓国の韓国語と異なる。Whisper large-v3は汎用多言語モデルのため、朝鮮語アクセントでは精度が低下する可能性がある。GCP Speech-to-Textも同様だ。現実的な解決策はWhisperを朝鮮語サンプルでファインチューニングするか、ASR結果をLLMで後補正することだ。

動画キーフレーム抽出。 FFmpegでシーン転換検出(scene detection)基盤のキーフレームを抽出する。ニュース映像であればアンカー交代、画面転換のタイミングが自然な分割ポイントだ。抽出されたキーフレームはCLIPでエンベディングして画像検索に活用する。字幕がある場合はSRT/VTTファイルをパースしてテキスト化する。

メタデータ抽出と構造化。 すべての資料に対して以下のメタデータをYAML/JSONで構造化する。

source_id: "rodong-19950315-p2"
source_type: "newspaper_scan"
title: "労働新聞 1995年3月15日 2面"
date: "1995-03-15"
language: "ko-KP"
media_type: "image/tiff"
ocr_engine: "document_ai"
ocr_confidence: 0.87
entities:
  - name: "金正日"
    type: "person"
    mentions: 12
  - name: "平壌"
    type: "location"
    mentions: 5
file_path: "gs://archive-bucket/newspapers/1995/0315_p2.tiff"
text_path: "gs://archive-bucket/texts/1995/0315_p2.txt"

2. インデキシング・ストレージレイヤー

前処理されたデータを検索可能な形で保存する段階だ。単一のストレージでは不可能だ。 クエリの種類に応じて異なる検索方式が必要だからだ。

構造化データ:PostgreSQL + pgvector(またはAlloyDB)。 メタデータ、日付、出典、エンティティ情報を保存する。SQLクエリで「1990年代の労働新聞で…」のような時期・媒体フィルタリングが可能だ。pgvector拡張を使えば同じDBでベクトル類似度検索も可能だ。AlloyDBはGCPマネージドPostgreSQLで、pgvectorよりベクトル検索性能が最大10倍速い。

ベクトルストア:Vertex AI Vector SearchまたはMilvus。 テキストエンベディングと画像エンベディングを保存する。100万件以上のベクトルをミリ秒単位で検索する必要があるため、専用ベクトルDBが必要だ。

ベクトルDB特徴GCP互換性
Vertex AI Vector SearchGCPネイティブ、マネージド、ScaNN基盤最適
Milvusオープンソース、セルフホスティング可能、多様なインデックスGKEにデプロイ
pgvectorPostgreSQL拡張、別途インフラ不要AlloyDBで性能向上

100万ベクトル以下ならpgvectorで十分だ。それ以上ならVertex AI Vector SearchがGCP環境で最も便利だ。

全文検索:Elasticsearch。 BM25基盤のキーワード検索を担当する。「自力更生」という正確な単語を探すクエリ、年度別頻度集計(aggregation)、形態素解析基盤の韓国語検索に必須だ。Elastic Cloud on GCPを使えばマネージドで運用可能だ。ハイブリッド検索(BM25 + ベクトル)をElasticsearch単一システムで実装することもできる(Elasticsearch 8.xのkNN検索対応)。

画像エンベディング:CLIP → ベクトルDB。 OpenAI CLIPモデルは画像とテキストを同じベクトル空間にマッピングする。「軍事パレード写真」とテキストで検索すれば該当シーンの画像が返されるテキスト-画像クロスモーダル検索が可能だ。人物写真検索にはCLIPだけでは不十分だ。**InsightFace(ArcFace)**のような顔認識モデルで顔エンベディングを別途生成し、特定人物の参照写真とコサイン類似度を比較する方式が必要だ。

原本ファイル:GCS(Google Cloud Storage)。 1.2TBの原本ファイルはGCSに保管する。検索結果から原本ファイルへのリンクを提供し、研究者が原文を直接確認できるようにする。Standardストレージ基準で月$25(約3,750円)程度だ。

3. 検索・質疑応答レイヤー

このレイヤーがシステムの核心だ。研究者の自然言語質問を受け取り、適切な検索戦略を選択し、結果を総合して回答を生成する。

Multimodal RAGパイプライン。 テキスト、画像、音声文字起こしを統合して検索する。Gemini 2.0 Flash/Proはマルチモーダル入力をネイティブでサポートするため、検索された画像とテキストを一緒にコンテキストとして渡すことができる。

ハイブリッド検索 + Re-ranking。 BM25(キーワード)とベクトル検索(意味)を同時に実行し、RRF(Reciprocal Rank Fusion)で結果を統合した後、Cross-Encoder Re-rankerで上位結果を再ソートする。エンタープライズデプロイ事例でハイブリッド検索だけで15~30%の精度向上、Re-ranking追加で10~25%のさらなる向上が報告されている。

GraphRAG(人物-組織-事件関係グラフ)。 「金正恩と共に頻繁に登場する人物の変化」のような関係基盤の質問には知識グラフが必須だ。文書から抽出した人物、組織、場所、事件をノードに、それらの間の関係をエッジとして構築する。Neo4jまたはJanusGraphをグラフDBとして使用する。

[金正日] ─(後継者)─→ [金正恩]
[金正恩] ─(出席)─→ [2012年閲兵式]
[2012年閲兵式] ─(場所)─→ [平壌 金日成広場]
[李雪主] ─(同伴出席)─→ [2012年閲兵式]

FalkorDBのベンチマークで、複雑な多段階推論質問の精度が標準RAG 34% に対しGraphRAG 91% となった。人物-組織関係が核心であるこのプロジェクトでは、GraphRAGは選択ではなく必須だ。

Agentic RAG(複合質問分解)。 「金正日死去前後3ヶ月間の報道論調変化を分析してください」は単一検索では答えられない。この質問は以下のように分解される必要がある。

元の質問:「金正日死去前後3ヶ月間の報道論調変化」
    ↓ Agentが分解
ステップ1:金正日の死去日確認 → 2011年12月17日
ステップ2:2011.09~2012.03期間の記事検索
ステップ3:期間別記事のセンチメント分析(肯定/否定/中立)
ステップ4:時系列可視化と論調変化の要約

LangGraphやVertex AI Agent Builderでこのようなエージェンティックワークフローを実装する。エージェントが質問を分解し、各サブ質問に適したツール(検索、集計、分析)を呼び出し、結果を総合する。

4. ユーザーインターフェース

Web UI(Next.js + Cloud Run)。 研究者が自然言語で質問し、結果を確認し、フィルタ(時期、媒体、キーワード)を適用できるインターフェースだ。Cloud Runにデプロイすれば使用量に応じて自動スケーリングされる。

可視化。 研究者が要求する分析の大半は可視化を含む。

  • 時系列チャート:単語頻度の変化、報道量の推移(D3.jsまたはChart.js)
  • ネットワークグラフ:人物-組織関係の可視化(vis.jsまたはCytoscape.js)
  • 地図可視化:言及された地名の地理的分布(MapboxまたはGoogle Maps)
  • 画像ギャラリー:検索された写真/キーフレームのサムネイル + 原本リンク

主要技術選定の詳細

LLM:Gemini 2.0 Flash / Pro

GCPネイティブ環境であればGeminiが最も自然な選択だ。Flashは高速応答が必要な一般クエリに、Proは複雑な分析・要約に使用する。マルチモーダル入力をネイティブでサポートするため、画像とテキストを一緒に処理できる。100万トークンのコンテキストウィンドウも長文書分析に有利だ。

エンベディングモデル

モデル次元韓国語性能特徴
text-embedding-004 (Google)768優秀GCPネイティブ、Vertex AI統合
multilingual-e5-large1024優秀オープンソース、多言語特化
bge-m31024優秀オープンソース、疎+密ハイブリッド

GCP環境ではtext-embedding-004がAPI呼び出し1行で使用可能だ。セルフホスティングが必要ならmultilingual-e5-largeやbge-m3が代替となる。bge-m3は密ベクトルと疎ベクトルを同時に生成するため、ハイブリッド検索に特に有利だ。

グラフDB:Neo4j vs JanusGraph

Neo4jJanusGraph
クエリ言語Cypher(直感的)Gremlin(汎用的)
性能中小規模グラフに最適大規模分散グラフに強い
ホスティングNeo4j AuraDB(マネージド)GKEセルフ運用
コミュニティ大規模、豊富なドキュメント比較的小規模

人物-組織-事件関係グラフが数百万ノード以下ならNeo4jが開発生産性面で有利だ。Cypherクエリが直感的であり、LLMがCypherを生成する精度もGremlinより高い。

顔認識:InsightFace / ArcFace

「この写真の人物が登場する他の記事を探してください」に対応するには顔エンベディングが必要だ。InsightFace(ArcFace基盤)は現在オープンソース顔認識モデルの中で最高水準だ。顔検出 → 整列 → 512次元エンベディング生成 → ベクトルDBに保存するパイプラインを構成する。同一人物の参照写真を複数枚登録すれば、様々な角度・照明での認識率が向上する。

ただし、1950~70年代の白黒新聞写真での顔認識は精度が大幅に低下する。解像度が低く印刷品質が均一でないためだ。この場合、画像超解像(Super-Resolution)前処理 → 顔認識パイプラインが助けになるが、完璧な解決策ではない。


各国事例比較

大規模マルチメディアアーカイブをAIで検索可能にする試みは世界中で進行中だ。

米国:Library of Congress — Chronicling America

米国議会図書館のChronicling Americaプロジェクトは1,600万ページ以上の歴史的新聞をデジタル化した。Tesseract OCRとNVIDIA GPUクラスターで大規模OCRを処理した。最近ではAI基盤の記事分割(article segmentation)と主題分類を追加している。2024年には独自に学習させたレイアウト分析モデルで、新聞ページを個別記事単位で分離する精度を大幅に向上させた。

教訓:OCR精度より記事分割(segmentation)のほうが難しい課題だ。新聞は1ページに複数の記事が複雑に配置されており、どこで一つの記事が終わり次の記事が始まるかを判別することが核心課題だ。

英国:British Library Newspaper Archive

4,000万ページの新聞をデジタル化した世界最大規模の新聞アーカイブの一つだ。ABBYY OCR(商用)とElasticsearch基盤の全文検索を使用している。最近のLiving with Machinesプロジェクトでは、AI基盤の固有表現認識(NER)と時系列分析を追加し、19世紀産業革命期の社会変化を新聞テキストで追跡する研究を実施した。

教訓:クラウドソーシングOCR校正の限界。当初はユーザーがOCRエラーを校正できるようにしたが、4,000万ページ規模では非現実的だった。AI基盤の自動校正に転換した。

オーストラリア:Trove(National Library of Australia)

オーストラリア国立図書館のTroveは3億件以上の新聞記事を保有するデジタルアーカイブだ。最も注目すべきはクラウドソーシングOCR校正システムだ。一般市民がウェブ上でOCRテキストを校正でき、これまでに4億行以上が校正された。世界で最も成功したクラウドソーシングデジタルアーカイブ事例とされている。

教訓:コミュニティ参加がAIより効果的な場合がある。 特にドメイン専門家(このプロジェクトの場合は北朝鮮研究者13名)が校正に参加すれば、専門用語と文脈の精度はAIより高い。システムに校正インターフェースを含めることが推奨される。

ヨーロッパ:Europeana

ヨーロッパ全域の文化遺産を統合するEuropeanaは5,800万アイテム(画像、テキスト、音声、映像)を保有している。IIIF(International Image Interoperability Framework)標準を採用し、異なる機関の画像を統合検索・表示できる。AI基盤のメタデータ自動生成と多言語検索を実装した。

教訓:標準化されたメタデータスキーマの重要性。 複数機関の資料を統合する際、メタデータ形式が一致しないと検索品質が急落する。

日本:国立国会図書館デジタルアーカイブ

日本の国立国会図書館は独自のOCRモデル(NDL OCR)を開発した。日本語特有の縦書き、漢字・ひらがな・カタカナ混用、歴史的書体に最適化されたモデルだ。数百万ページの古書・新聞をデジタル化し、2023年からAI基盤の全文検索を導入している。IIIFビューアを通じて原本画像とOCRテキストを並べて表示できる。

教訓:ドメイン特化OCRモデルが汎用モデルを圧倒する。 朝鮮語活字体、1950~60年代の印刷品質など特殊な条件がある場合、ファインチューニングは必須だ。

韓国:国家記録院、韓国学中央研究院

国家記録院は政府記録物のデジタルアーカイブを運営しており、韓国学中央研究院は韓国学関連の古文書・族譜などのデジタル化を進行中だ。AI検索よりは従来型のメタデータ基盤検索にとどまっているケースが多い。最近は韓国語特化LLMとOCR技術の発展により、AI検索の導入が加速している。

イスラエル:National Library of Israel

ヘブライ語、アラビア語、イディッシュ語など多言語・多文字資料をAIで検索可能にするプロジェクトを進行中だ。多言語OCRとクロスリンガル検索が核心課題であり、本プロジェクトと類似した挑戦(韓国語/朝鮮語の混用、様々な時期の印刷体)を共有している。

ウクライナ:Osavul

Osavulは北朝鮮を含む権威主義国家のプロパガンダメディアをリアルタイムで監視・分析するAIシステムだ。テキスト・画像・映像を収集してプロパガンダパターンを検出し、ナラティブの変化を追跡する。本プロジェクトと最も類似した目的を持つ事例だ。

教訓:リアルタイム監視とアーカイブ分析は異なるアーキテクチャが必要だ。 Osavulはストリーミングパイプライン中心であり、本プロジェクトはバッチ処理 + 検索中心だ。ただし、プロパガンダ分析手法(ナラティブ抽出、センチメント分析、人物ネットワーク分析)は参考にする価値が大きい。


コスト見積もり

初期構築コスト(6~12ヶ月)

項目見積もりコスト算出根拠
OCR処理~$60,000(約900万円)100万ページ × $0.06/ページ(Document AI)
ASR処理~$5,000(約75万円)動画/音声 数百時間分
エンベディング生成~$3,000(約45万円)数百万チャンク × text-embedding-004
顔エンベディング生成~$2,000(約30万円)GPUインスタンスコスト(InsightFace処理)
グラフ構築(NER + 関係抽出)~$10,000(約150万円)LLM APIコスト(エンティティ/関係抽出)
インフラセットアップ + 開発人件費$150,000~300,000(約2,250万~4,500万円)フルタイムエンジニア2~3名 × 6~9ヶ月
初期コスト合計$230,000~$380,000(約3,450万~5,700万円)

OCRコストを削減するには、1次Tesseract(無料)→ 低信頼度ページのみDocument AIで再処理する2段階戦略が可能だ。Tesseractで全体を処理し、OCR信頼度が0.7以下のページのみDocument AIに送れば、コストを40~60%削減できる。

月間運用コスト

項目月額コスト備考
GCSストレージ(1.2TB)~$25(約3,750円)Standardストレージ
Vertex AI Vector Search$500~2,000(約7.5万~30万円)インデックスサイズ・クエリ量により変動
Elasticsearch(Elastic Cloud)$500~1,000(約7.5万~15万円)3ノードクラスター基準
Cloud Run(APIサーバー + UI)$100~300(約1.5万~4.5万円)使用量ベース課金
Neo4j AuraDB$200~500(約3万~7.5万円)グラフDB
LLM API(Gemini)$500~2,000(約7.5万~30万円)日次クエリ数により変動
モニタリング + ロギング$100~200(約1.5万~3万円)Cloud Monitoring
月間コスト合計$1,900~$6,000(約28.5万~90万円)

研究者13名が日平均20~50回のクエリを送る水準であれば、月間$2,000~3,000(約30万~45万円)程度で運用可能だ。クエリ量が急増するとLLM APIコストが最大の変数となる。Gemini Flashをデフォルトで使用し、複雑な分析クエリのみProにルーティングすればコストを最適化できる。


構築期間

Phase 1(1~2ヶ月):データ前処理パイプライン
├── ファイルフォーマット検出 + 分類自動化
├── OCRパイプライン構築(Document AI + Tesseract)
├── ASRパイプライン構築(Whisper)
├── キーフレーム抽出パイプライン
└── メタデータスキーマ設計 + 抽出

Phase 2(2~3ヶ月):インデキシング + 検索エンジン
├── PostgreSQL + pgvectorセットアップ
├── Elasticsearchインデックス設計 + データロード
├── ベクトルエンベディング生成 + Vertex AI Vector Search構築
├── CLIP画像エンベディング + 顔エンベディング
├── Neo4jグラフ構築(NER + 関係抽出)
└── ハイブリッド検索 + Re-rankingパイプライン

Phase 3(1~2ヶ月):RAG + LLM質疑応答
├── Multimodal RAGパイプライン実装
├── Agentic RAG(質問分解 + 段階的検索)
├── GraphRAGクエリルーティング
└── 評価体系構築(RAGAS)

Phase 4(1~2ヶ月):UI + 可視化 + テスト
├── Next.js Web UI開発
├── 可視化コンポーネント(時系列、ネットワーク、地図)
├── 研究者フィードバック反映
└── 性能最適化 + 負荷テスト

総見込み:6~9ヶ月

Phase 1が最も重要だ。OCR品質がシステム全体の精度を決定する。 OCRが誤読したテキストは、エンベディング、検索、回答生成のすべての段階でエラーを増幅させる。Phase 1に十分な時間を投資し、OCR結果のサンプル検査を研究者と共に行うことが推奨される。

Phase 2とPhase 3は部分的に並行進行が可能だ。ElasticsearchのインデキシングとベクトルDB構築は独立しているため、同時に進行できる。


核心的教訓

1. データ前処理が全体の60%を占める。 どのLLMを使うか、どのベクトルDBを使うかより、OCR精度、メタデータ品質、チャンキング戦略が最終精度により大きな影響を与える。Gartnerが警告した通り「AI対応データがないAIプロジェクトの60%が廃棄される。」データパイプラインに先に投資すべきだ。

2. マルチモーダルはパイプラインが複雑になる。 テキストだけのRAGに比べ、画像、音声、映像まで含めると前処理パイプラインが3~4倍複雑になる。各モダリティ別の前処理 → エンベディング → インデキシング経路がすべて異なる。初期にすべてのモダリティを一度に実装しようとせず、テキスト検索を先に完成 → 画像検索を追加 → 音声/映像検索を追加の順序で段階的に拡張するのが現実的だ。

3. 研究者フィードバックループが精度を決定する。 OCR校正、検索結果評価、エンティティ検証にドメイン専門家のフィードバックは必須だ。Troveのクラウドソーシング校正モデルのように、研究者がシステムを使いながらエラーを校正できるインターフェースを最初から含めるべきだ。13名の研究者が校正に参加すれば、システム精度は時間の経過とともに向上する。

4. 評価なくして改善なし。 RAGAS基盤の自動評価 + 研究者の主観的評価を併用すべきだ。検索精度(Context Precision)、回答根拠性(Groundedness)、回答関連性(Answer Relevance)を継続的にモニタリングしなければ、システムがどの段階で失敗しているか診断できない。

5. コストはクエリパターンにより大きく変動する。 13名の研究者が日に数十件のクエリを送る水準なら月$2,000~3,000(約30万~45万円)で運用可能だ。しかし大規模バッチ分析(例:全アーカイブ対象のセンチメント分析)を頻繁に実行するとLLM APIコストが急増する。バッチ分析はGemini Flash + バッチAPIでコストを最適化し、結果をキャッシングして再利用する戦略が必要だ。

1.2TBのマルチメディアアーカイブをAI検索システムにすることは、技術的に十分可能な時代となった。OCR、ASR、マルチモーダルエンベディング、GraphRAG、Agentic RAG――個別技術はすべて成熟している。真の挑戦は、これらを一つのシステムに統合し、継続的に精度を改善するエンジニアリングと運用にある。


参考資料