LLM RAGを用いた社内検索体験の向上 [前編]

# はじめに
LLM RAGを活用したアプリケーションの一般的な用途の一つは、一連の文書に対する質問に回答することです。
この記事では、LLMを用いた社内情報検索アプリケーションで重要な機能について解説します。

# 重要な機能
- 検索
- 回答の合成

本記事では、「検索」機能に重点を置いて説明します。

# 検索

## セマンティック検索

社内の文書をもとにユーザーへの回答を行うためには、まず該当の情報を含む文書を検索HITさせなければいけません。検索HIT率を向上させるために、「セマンティック検索」という手法を使用します。

### セマンティック検索とは
セマンティック検索（Semantic Search）は、単にキーワードの一致を探すのではなく、ユーザーの意図や文脈を理解して関連性の高い情報を提供する検索技術です。

### 他の検索手法との比較

| 検索手法 | キーワード検索 | セマンティック検索 | ファセット検索 |
|---------------|------------------------------|------------------|----------------|
| **方法**         | キーワードの出現頻度やリンクに基づく | 自然言語処理を用いた意味解析に基づく | カテゴリや属性に基づくフィルタリング | キーワードベースとセマンティック検索の組み合わせ |
| **主な機能**     | 単純なマッチング | 意味の理解と文脈の考慮 | 検索結果の分類と絞り込み | 広範な検索と精度の高い結果 |
| **利点**         | 実装が比較的簡単 | より精度の高い検索結果 | 複雑なデータセットの効果的なナビゲーション | 広範囲の検索と精度の向上 |
| **制限**         | 文脈や意味の理解が不足 | 複雑なアルゴリズムが必要 | 単独での使用では検索の幅が限られる | システムの複雑さとリソースの要求 |
| **適用例**       | 一般的なウェブ検索 | 知識ベースの問い合わせ、FAQシステム | オンラインショッピング、カタログ | 情報検索システム、企業内検索 |

## ハイブリッド検索(セマンティック検索を含む)

検索精度UPのために、セマンティック検索のみを行うわけではなく、ハイブリッド検索という手法を用います。
ハイブリッド検索は、従来のキーワードベースの検索とセマンティック検索の技術を組み合わせた検索手法です。この手法の目的は、キーワード検索のシンプルさと直接性、セマンティック検索の文脈理解と精度を兼ね備えることにあります。

- **組み合わせの利点**: キーワード検索の効率性とセマンティック検索の深い文脈理解を組み合わせることで、より関連性の高い検索結果を提供します。

- **柔軟性**: ユーザーのクエリに対して、単純なキーワードマッチングだけでなく、クエリの意味内容や背景を考慮することで、より柔軟な検索が可能になります。


Azure AI Search ではハイブリッド検索をサポートしています。

https://learn.microsoft.com/ja-jp/azure/search/hybrid-search-overview

## その他の手法：メタ検索エンジン

**メタ検索エンジン**
- 方法: 複数の検索エンジンの結果を集約して、一つのインターフェースで表示
- 特徴: 複数のデータソースから情報を取得し、幅広い視点からの検索結果を提供
- 制限: 単一の検索エンジンの詳細な分析能力には劣ることがある

社内にサブシステムが分かれており、そのシステムが検索エンジンを持っている場合は、そちらを使用する方針が考えられます。例えばSharepointやServiceNowやBoxやCYDASにはそれ自身に検索エンジンとインデックス化済のデータがあります。

改めてデータを一箇所に集約しインデックス処理を行うより、それらのサービスの検索エンジンをAPIで呼び出しをバックエンドで行い、フロントのユーザーインタフェースをChatUIに統一する方が開発効率もユーザー体験も良いでしょう。

https://learn.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service?tabs=csom

https://docs.servicenow.com/ja-JP/bundle/tokyo-application-development/page/build/applications/concept/api-rest.html

https://ja.developer.box.com/reference/

https://developer.cydas.com/


## ハイブリッド検索の中で行われること

```mermaid
graph 
    A[1.ユーザークエリの受け取り] --> B[2'.キーワード解析]
    A --> C[2'.セマンティック解析]
    B --> D[3.関連性の評価]
    C --> D
    D --> E[4.検索結果の生成と最適化]
```

**1.ユーザークエリの受け取り**:
最初にユーザーからの検索クエリを受け取ります。
この段階では、クエリは単純なキーワードの組み合わせかもしれませんし、より複雑な自然言語の文かもしれません。

**2.キーワード解析とセマンティック解析**:
キーワード解析とセマンティック解は並行して行われ、キーワードの識別とセマンティック内容の理解が同時に進行します。

　**キーワード解析**:
　クエリ内のキーワードを識別し、それらの重要性を分析します。
　キーワードの出現頻度、位置、組み合わせなどを考慮して、基本的な検索インデックスを使用します。

　**セマンティック解析**:
　自然言語処理（NLP）技術を使用して、クエリの意味内容や文脈を解析します。
　クエリ内の同義語、文脈、意図などを理解し、より深いレベルでの意味解析を行います。

**3.関連性の評価**:
解析したキーワードとセマンティック情報を基に、データベースまたはインデックス内の情報との関連性を評価します。検索結果の関連性を決定するため、さまざまなアルゴリズムや評価基準が使用されます。

**4.検索結果の生成と最適化**:
関連性が高いと評価された結果を提示します。
必要に応じて、検索結果を過去の検索履歴や好みに基づいて調整・最適化します。

## 使用されるアルゴリズム
検索結果の関連性を決定するために使用されるアルゴリズムや評価基準は多岐にわたります。
これらのアルゴリズムや基準は、検索結果がユーザーのクエリにどれだけ適切かを評価するために重要です。

以下は、そのようなアルゴリズムの具体例です。

### アルゴリズム

**TF-IDF（Term Frequency-Inverse Document Frequency）**:
   - 文書内の単語の出現頻度と、その単語がいくつの文書で出現するかの逆頻度を考慮し、単語の重要性を評価します。
   - キーワードが特定の文書でどれだけ重要かを示します。

**PageRank**:
   - ウェブページの重要性をリンク構造を基に評価するアルゴリズム。
   - 多くの高品質なページからリンクされているページは、高いランクを得ます。

**コサイン類似度**:
   - 文書やクエリをベクトルとして表現し、その間の角度のコサインを計算して類似度を測定します。
   - 類似度が高いほど、文書がクエリに関連していると見なされます。

**機械学習アルゴリズム**:
   - ランダムフォレスト、サポートベクターマシン（SVM）などのアルゴリズムが、検索結果の関連性を予測するために使用されます。
   - ユーザーの行動や以前の検索から学習して、関連性を評価します。

## 評価の進め方

システム開発プロジェクトにおいて、検索エンジンの評価を行う際の順序は以下のようになります。
初期の機能評価から実際のユーザー体験の評価へ段階的に進行します。

### ステップ 1: リコールとプレシジョンの評価

初期段階では、システムの基本的な機能性を評価します。

**リコール (Recall)**:
   - テストデータセットを使用して、検索システムが関連するすべての項目をどれだけ検出できるかを測定します。
   - 高いリコール値は、システムが関連する情報を見逃さないことを示します。

**プレシジョン (Precision)**:
   - 検索結果の中で、実際に関連がある項目の割合を測定します。
   - 高いプレシジョン値は、システムが精度の高い結果を提供していることを示します。

### ステップ 2: レスポンス評価

- レスポンスは取得したコンテキストと一致しているか？
- クエリとも一致するか？
- 基準となる回答やガイドラインにマッチしているか？

LLM（GPT-4など）を使用し、予測された答えが正しいかどうかを判定するレスポンス評価を行うことができます。
LlamaIndexを例に、評価指標を示します。

- **正しさ**：生成された答えが、クエリで指定された参照答えと一致するかどうか（ラベルが必要）
- **意味的類似性**：予測された答えが参照された答えと意味的に類似しているかどうか (ラベルが必要)
- **忠実さ**：答えが検索された文脈に忠実かどうか（言い換えれば、幻覚があるかどうか）
- **コンテキストの関連性**：検索されたコンテキストがクエリに関連しているかどうか
- **回答の関連性**：生成された回答がクエリに関連しているかどうか
- **ガイドラインの遵守**：予測された回答が特定のガイドラインに準拠しているかどうか

### ステップ 3: クリックスルーレート（CTR）の評価

システムが実際のユーザーによって使用され始めたら、CTRを測定します。

**クリックスルーレート (CTR)**:
   - ユーザーが検索結果をどれだけクリックするかを測定します。
   - 高いCTRは、検索結果がユーザーにとって関連性が高く、興味を引いていることを示します。

### ステップ 4: ユーザーエンゲージメントの評価

最終段階では、実際のユーザー体験を詳細に評価します。

**ユーザーエンゲージメント**:
   - ユーザーが検索結果とどのように相互作用するか（例：滞在時間、ページ閲覧数、再訪問率）を分析します。
   - 高いエンゲージメントは、ユーザーが提供された情報に満足しており、システムが有用であることを示します