watsonx.governanceを利用したRAGの検証

# はじめに
近年、Retrieval-Augmented Generation（RAG）を活用した文書検索や情報生成が注目されています。しかし、RAGモデルの性能を適切に評価し、改善することは容易ではありません。

そこで、IBMの watsonx.governance を利用し、RAGの性能を可視化・評価する方法を検証しました。本記事では、その手順と結果について詳しく解説します。

:::note warn
2025年03月時点、watsonx.governance は日本語に対応していない可能性があるため、本検証は英語を対象としました。
:::

# 検証データの準備
まず、評価用のテストデータを準備します。Hugging Faceの [neural-bridge/rag-dataset-12000](https://huggingface.co/datasets/neural-bridge/rag-dataset-12000) から、テストデータの先頭100件をCSVファイルとして保存しました。
以下のPythonスクリプトを使用します。

```python
from datasets import load_dataset
import pandas as pd
import csv

# データセットのロード
ds = load_dataset("neural-bridge/rag-dataset-12000")

# DataFrameに変換
test_df = pd.DataFrame(ds['test'])

# 列名を変更
test_df.rename(columns={test_df.columns[2]: 'reference'}, inplace=True)

# 先頭100件をCSVとして保存
test_df.head(n=100).to_csv('test.csv', index=False, quoting=csv.QUOTE_ALL)
```
このCSVファイルには、以下のような context（コンテキスト）, question（質問）, reference（参照回答） の3列×100行のデータが含まれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/9eee6d17-ed54-407f-843b-4e201205b5b2.png)

# RAG向けのプロンプト設計
watsonx.ai の プロンプトラボ を利用し、Mistral Largeを利用した RAG 向けのプロンプトを作成し、テンプレートとして保存します。

```plaintext


 

You are an excellent AI assistant. Please answer the question based on the given context.



# Context:
{context}

# Question:
{question}



# Answer:
```

また、モデルのパラメータは以下のように設定しました。

- デコード方式：Greedy
- 反復ペナルティ：1.02
- 停止シーケンス：`
`
- 最小トークン数：1
- 最大トークン数：16,384
- プロンプト変数：`context` と `question`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/19028b09-d0f5-4ab3-95cf-9631b483be20.png)

# 検証手順

1. Evaluate（評価）をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/f9186f81-c03f-4f7d-936e-92bf38575cb0.png)

2. 質問（question）とコンテキスト（context）を指定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/9a5e5b97-3671-488c-93c4-c4c9b307930e.png)

3. 作成したCSVファイルをアップロード（制約：最大サイズ8MB、最小10行、最大1000行）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/8e073a91-e117-4c93-99da-96dba7c14d6d.png)

4. 列名を適切にマッピング（context, question, reference）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/438a3e82-93e4-449c-8390-9cc16c5a62ab.png)

5. 評価を開始

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/6fbb8a74-bbf5-4c43-98a6-7106b796738a.png)

# 検証結果

評価が完了すると、以下のような指標が得られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/327a815e-fbe0-42ee-8021-bede66709283.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/4f2da8ba-b791-4bef-ae67-476cb4ef0599.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756172/c9d14031-37a3-4bc1-9678-69d0d40ea8c0.png)

## 全体の概要

| 指標 | 値 |
|---|---|
| **テストデータセット** | test.csv |
| **実行したテスト数** | 1 |
| **合格 / 不合格** | 0 / 1 |
| **レコード数** | 100 |
| **合計入力トークン数** | 99,216 |
| **合計出力トークン数** | 9,608 |
| **処理時間（秒）** | 1,254.5 |
| **アラート** | 7 |

## 生成AI品質・検出指標（RAG）

| 指標 | スコア | 基準 |
|---|---|---|
| **Coverage（カバレッジ）** | 0.27 | 0.43 |
| **Density（密度）** | 0.09 | - |
| **Abstractness（抽象度）** | 0.16 | なし |

カバレッジが基準値（0.43）を下回っており、取得した情報の範囲が不十分な可能性があります。
また、密度が低いため、情報が分散しており、内容がまとまりに欠ける傾向が見られます。

## ROUGEスコア（類似度評価）

| 指標 | スコア | 基準 |
|---|---|---|
| **ROUGE-1** | 0.50 | 0.30 |
| **ROUGE-2** | 0.41 | 0.39 |
| **ROUGE-L** | 0.46 | 0.34 |
| **ROUGE-Lsum** | 0.48 | 0.32 |

ROUGEスコアは概ね基準を上回っており、テキストの類似度が一定水準を維持していることが確認できます。

## BLEUスコア（翻訳品質指標）

| 指標 | スコア | 基準 |
|---|---|---|
| **BLEU** | 0.21 | 0.19 |

BLEUスコアも基準値（0.19）を上回っており、一定の適合性が確認されました。

## 完全一致率

| 指標 | スコア | 基準 |
|---|---|---|
| **完全一致** | 0.13 | 0.67 |

完全一致率は 0.13 と低く、回答の正確性に課題があることが分かります。

# 考察

## 改善が必要な点
- カバレッジの低さ
    - 検索結果が期待した情報を十分にカバーできていない
    - 検索クエリのチューニング や データセットの見直し が必要

- 完全一致率の低さ
    - 生成モデルの出力が期待する正解と一致していない
    - 検索精度向上やファインチューニング が求められる

- 7件のアラート発生
    - 情報の誤りや不適切な回答の可能性
    - 問題の特定と対策の実施が必要

## 改善の方向性
- 検索精度の向上
    - ベクトルデータベースの検索パラメータ（Top-K, スコア閾値）を調整
    - Embeddingモデルの最適化
- 回答の精度向上
    - RAGモデルのファインチューニング
    - 追加情報（文脈）の増強
- アラートの詳細分析
    - どのアラートが発生したかを確認し、適切な対策を講じる

# おわりに
watsonx.governance を活用することで、RAGの性能を客観的に評価し、改善の方向性を明確にすることができます。今回の検証結果を基に、 検索精度の最適化 や モデルの改善 を進めることで、より精度の高いRAGシステムの構築が可能になります。