製品

業務部門向け

HOZEN保全記録をもとに、原因調査と再発防止を支援。提供中 · 実証相談Millwright業務の手順を定め、AIをその範囲で動かす。AI-RPAは設計・検証段階

開発チーム向け

Hemkar人とAIの開発作業を、検証できる成果にまとめる。設計・開発段階FlashRouter複数のAIモデルの接続・版・利用量をまとめて管理。企業向けは個別相談IngaDB自社システムに組み込める因果分析データベース。v0.1.0 · セルフホスト · 提供中
ソリューション保全・品質改善過去の記録を、原因調査と再発防止に活かす。関連:HOZEN業務自動化・AI協働業務の手順と、人・AIの役割をそろえる。関連:Millwright · Hemkar企業AI基盤AIを使う条件を決め、構成と運用に反映する。関連:FlashRouterロボティクス・制御現場の条件に合わせて、ロボットと制御を設計する。関連:研究・開発テーマ
技術会社情報ニュース 導入を相談する
技術コラム

Heir-RAG技術解説|カテゴリ・文書・チャンクをつなぐ階層型データベース

カテゴリ・文書・チャンクを階層的につなぎ、検索対象と文脈を整理するHeir-RAGのデータベース設計を解説します。

記事について

2024年公開時点の設計・開発方針を紹介した記事です。現在の機能・対応形式・導入構成は、製品案内またはお問い合わせでご確認ください。

今回の記事では、弊社のHeir-RAGシステムのデータベーススキーマに焦点を当てます。目的、構造、および実装の理論を詳細に説明していきたいと思います。

はじめに

Retrieval-Augmented Generation(RAG)システムは、大規模な言語モデル(LLM)の能力を強化するために、リトリーバルメカニズムを統合します。このメカニズムは、広範な文書コーパスから関連するコンテキストを提供し、生成された応答の正確性と関連性を向上させます。弊社のHeir-RAG(階層構造)は、データを階層的に構造化することで、RAGのプロセスをさらに最適化し、効率的なリトリーバルを可能にします。

階層型リレーションシップとは

データにおける階層型リレーションシップは、データを複数のレベルに分割して整理する方法です。これにより、データの検索やリトリーバルが効率的になり、特定のコンテキストや関連情報を迅速に見つけることができます。

階層型リレーションシップの例として、メーカーの商品マニュアルを取り上げます。この場合、データは「カテゴリ→マニュアルファイル→チャンク」のレベルに整理されます。

カテゴリ
広範なトピックまたは文書のタイプを表すトップレベルのグループです。今回の例で言うと商品の分類と言ってもいいでしょう。
マニュアルファイル
カテゴリ内の個々の文書を表します。各ファイルは、カテゴリ内の主要なコンテンツを含みます。例えば、仕様書やデータシートなどを指します。
チャンク
マニュアルファイルを小さなセクションに分割したもので、詳細なリトリーバルを可能にします。例えば、電子レンジの仕様書の中で、注意事項セクションを一つのチャンクとして保存するなどです。

なぜ階層構造を使用するのか?

  1. 01効率性

    各レベルで検索スペースを減らし、リトリーバルを高速化します。階層的にデータを整理することで、関連する情報に素早くアクセスできるようになります。

  2. 02関連性

    より正確で文脈的に関連する情報のリトリーバルを目指します。階層構造により、特定のトピックやコンテキストに関連する情報を効果的に検索できます。

  3. 03スケーラビリティ

    大規模なデータセットを効果的にクエリできます。階層的なデータ整理により、システムは拡張性を持ち、大量のデータを効率的に処理および検索できます。

データベースの設計

  • カテゴリ、ファイル、チャンクなどの階層的なリレーションシップで表現する。
  • ベクター埋め込みを効率的に保存およびリトリーバルする。
  • データの整合性を目指し、複雑なクエリをサポートする。

1. カテゴリノード

category_id: 各カテゴリの一意の識別子
category_name: カテゴリの名前
category_summary: カテゴリの説明文
embedding_id: VectorDBにあるカテゴリの説明文のベクター埋め込みへのID

カテゴリノードは、クエリのエントリーポイントとして機能し、クエリに関連する広範なトピックや文書タイプを特定することで検索スペースを絞り込みます。ここに保存された埋め込みIDを使って効率的な類似性検索を可能にします。

2. ファイルノード

file_id: 各ファイルの識別子
category_id: 親カテゴリへのキー
file_name: ファイルの名前
file_type: ファイルの種類
file_summary: ファイルの説明短文
embedding_id: VectorDBにあるファイルの説明短文のベクター埋め込みへのID

ファイルノードはカテゴリ内のコンテンツをグループ化し、特定の文書の管理とリトリーバルを容易にします。各ファイルの埋め込みは文書の意味内容を捉え、カテゴリの広範な文脈内での類似性に基づくリトリーバルを可能にします。

3. チャンクノード

chunk_id: 各チャンクの一意の識別子
file_id: 親ファイルへのキー
chunk_text: チャンクの実際のテキストコンテンツ
embedding_id: VectorDBにあるチャンクの意味内容を表すベクター埋め込みへのID

チャンクノードは文書の小さな、管理しやすい部分を表し、詳細なリトリーバルを可能にします。このレベルの埋め込みは特定のテキストセクションの意味を捉え、文脈に関連するクエリ応答を可能にします。

4. リレーションシップ

CATEGORY_HAS_FILE: カテゴリノードをそれぞれのファイルノードに接続し、階層を構築
FILE_HAS_CHUNK: ファイルノードをそれぞれのチャンクノードに接続し、文書内の詳細なリトリーバルを可能に

これらのリレーションシップは階層構造の中核を成し、システムが広範なカテゴリから特定のテキストチャンクまでナビゲートできるようにします。この構造は効率的なクエリ処理をサポートし、最も関連性の高い情報が迅速にリトリーバルされることを目指します。

具体的な実装ではNeo4jなどGraph Databaseを使ってリレーションシップを管理し、ChromaDBなどVectorDBでベクター埋め込みを処理することで、大規模なデータセットを精密に処理およびクエリできます。

社内情報の活用について相談する

検索結果や生成された回答は原資料と照合してご利用ください。検索の品質はデータの内容・整理方法・更新状況に依存します。

ニュース一覧へ戻る