Chuyển đến nội dung chính

レッスン5:ベトナム語テキストのインジェスト、チャンキング&ベクトルインデキシング

Markdown/PDFを処理し、技術文書構造でチャンキングし、完全なメタデータを保存し、 ベトナム語ドキュメント向けのエンベディングパイプラインを最適化する。

🧠 AI & ML — L0 レッスン5:インジェスト、チャンキング& ベトナム語向けベクトルインデキシング Gemma 4 ローカルAIエンジニアリング on Mac パート3:内部データ向けRAGエンジニアリング xdev.asia

はじめに

RAGの品質はモデルだけでなく、データがどのようにインジェスト・チャンキング・インデキシングされるかに大きく依存します。このレッスンでは、パイプライン全体を基礎から構築します。

1. ソースドキュメントの種類

内部ナレッジベースの一般的なソース:

  • Markdown技術ドキュメント
  • PDF運用手順書
  • Wiki/Confluenceエクスポート
  • Slackスレッドのエクスポート

各ソースには独自のパーサーとクリーンアップステップが必要です。

2. テキスト正規化

チャンキング前にクリーンアップ:

  • ヘッダー/フッター/ページ番号の除去
  • Unicodeの正規化(NFC)
  • テーブルのフラット化またはスキップ
  • コードブロックの保持

ベトナム語テキストの場合、声調記号の正しい処理を確認してください。

3. チャンキング戦略

推奨パラメータ:

  • チャンクサイズ:600〜1000トークン
  • オーバーラップ:50〜100トークン
  • セクション見出しで優先的に分割
  • コードブロックは分割しない

見出しベースの分割は、ランダムな文字数分割よりも検索品質が良くなります。

4. メタデータの保存

各チャンクに付加:

  • doc_id
  • section_title
  • chunk_index
  • source_path
  • last_updated
  • language

メタデータが豊富であれば、あとでフィルタリングやデバッグが容易になります。

5. エンベディングパイプライン

ローカル推奨モデル:

  • nomic-embed-text(Ollama経由)
  • bge-m3(多言語対応)

バッチ処理でエンベディングを生成し、ベクトルDBにupsertします。

import chromadb

client = chromadb.PersistentClient(path="./vectordb")
collection = client.get_or_create_collection("internal-docs")

collection.upsert(
    ids=[chunk["id"] for chunk in chunks],
    documents=[chunk["text"] for chunk in chunks],
    metadatas=[chunk["metadata"] for chunk in chunks],
)

6. インデックスのライフサイクル管理

  • ステージングインデックスで検証してからプロダクションにプロモーション
  • 古いドキュメントの定期的な再インデキシング
  • バージョニングでロールバック可能に

デモコード

インジェストパイプラインの実行結果 — 127チャンク処理:

インジェスト結果

ChromaDBコレクションの状態確認:

ChromaDBステータス

ソースコード:04-rag-ingestion

まとめ