RAGを実装してみた

# はじめに
近年、大規模言語モデルの臨床現場や医療現場への適用に対する期待が高まっています。しかし、実際に現場の課題に適用しようとすると、大規模言語モデルが専門性の高い医療用語を十分に理解できず、理想的な価値を生み出すのが難しいという課題があります。

そんな中、以下の論文「大規模言語モデルに臨床知識をファインチューニングし、医療従事者レベルで臨床知識をエンコードさせる」という内容に触れたことをきっかけに、大規模言語モデルのファインチューニングを検証したことがあります。
[ファインチューニングを実施してみた](URL "https://qiita.com/takeru-kashiwagi/items/1dff416c305355fdbf19")

この検証では、ファインチューニング前後で出力の違いを比較しました。しかし、現場で一般的に採用されているのはRAG（Retrieval-Augmented Generation）であり、ファインチューニングは最終手段とされることが多いです。その理由として、学習用データの収集や学習コストの高さが挙げられます。

そこで、RAGの仕組みを実装し、前回のファインチューニングの検証結果と比較したいと考えました。

# 検証概要
今回の検証では、Amazon Bedrockのナレッジベースを活用してRAGの仕組みを実装します。ただし、前回の検証（ファインチューニング）と比較するため、同じデータを使用してナレッジベースを作成します。

その後、医療専門用語を含む質問をいくつか設定し、ファインチューニングとRAGの出力を比較します。
# 対象データ
今回の検証で使用するデータは、PubMedQAです。PubMedQAは、生物医学分野の専門知識を問う質問応答データセットであり、AIモデルの性能評価や、医療AIの開発に広く利用されています。

このデータセットは、深層学習モデルが専門的なテキストを理解し、複雑な質問に対して正確な回答を生成できるかを評価するための重要なベンチマークとなっています。

データセットは以下で公開されています。
[Pub Med QA](URL"https://pubmedqa.github.io/index.html")

# 検証内容
### データの前処理
PubMedQAのデータセットは、以下の構成でJSON形式のデータとして提供されています。
```json:Original.data
{
"21645374": {
"QUESTION": "XXX?",
"CONTEXTS": [
"XXX."
 ],
"LABELS": [
"XXX"
],
"MESHES": [
"XXX"
 ],
"YEAR": "xxx",
"reasoning_required_pred": "xxx",
"reasoning_free_pred": "xxx",
"final_decision": "xxx",
"LONG_ANSWER": "xxx."
 },
 ```
このデータセットを、前回の検証と同様にJSONL形式に変換します。
```jsonl:Processing.data
{"messages": [{"role": "user", "content": "ユーザーの入力"}, {"role": "assistant", "content": "アシスタントの応答"}]}
{"messages": [{"role": "user", "content": "別のユーザー入力"}, {"role": "assistant", "content": "対応する応答"}]}
```
### ナレッジベースの作成
#### S3バケットへの学習用データの配置
S3バケットを作成し、先ほど準備した学習用データをアップロードします。
![スクリーンショット 2024-12-11 12.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3942647/2603235c-1316-85fd-7b7a-bcd32cb7bdb6.png)
#### Bedrockのナレッジベースの作成
先ほど配置した学習用データをデータソースに選択します。
![スクリーンショット 2024-12-13 22.23.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3942647/19d092c5-e08e-ef99-2e7c-439daa13087f.png)
埋め込みモデルに「Titan Embeddings G1 – Text v1.2 」を選択し、ベクトル化されたS3のデータが配置されるベクトルDBとして、「Amazon OpenSearch Serverless」を選択します。
![スクリーンショット 2024-12-13 22.52.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3942647/80882bad-e5f9-ff51-67cd-26dd877f964a.png)


### 評価の実施
Fine tuning modelとRAGで３つの質問の回答を比較し、その結果を整理します。

Q1. What is mitochondria?
>**Fine tuning model**
>>Mitochondria are organelles found in the cells of most eukaryotic organisms, including plants, animals, and fungi. They are often referred to as the "powerhouses" of the cell because they are responsible for the production of the majority of the cell's energy in the form of adenosine triphosphate (ATP) through the process of oxidative phosphorylation.
>>
>>Some key facts about mitochondria:
>>
>>1. Structure: Mitochondria have a unique double-membrane structure, with an outer membrane and an inner membrane. The inner membrane is highly folded, forming cristae, which increase the surface area for the metabolic processes that occur within the mitochondria.
>>
>>2. DNA: Mitochondria have their own circular DNA, which is separate from the DNA in the nucleus of the cell. This mitochondrial DNA (mtDNA) is thought to have originated from a bacterial ancestor that was engulfed by a primitive eukaryotic cell during evolution.
>>
>>3. Function: The primary function of mitochondria is to generate ATP through the process of oxidative phosphorylation, which involves a series of enzymatic reactions that convert the energy stored in organic molecules (such as glucose) into ATP, the universal energy currency of the cell.
>>
>>4. Other functions: In addition to ATP production, mitochondria also play important roles in other cellular processes, such as calcium homeostasis, ap
>
>**RAG**
>>Mitochondria are organelles found within the cells of most eukaryotic organisms, including plants and animals. They are often referred to as the "powerhouses" of the cell because they are responsible for producing the majority of the cell's supply of adenosine triphosphate (ATP), which is the primary energy currency of the cell.

**Fine tuning modelは、専門用語を正確に使用し、技術的な深さが際立っています。一方、RAGはミトコンドリアの基本的な役割（ATPの生成）に焦点を絞り、非常に簡潔な出力を生成していることが分かります。**

Q2. What is steatohepatitis?
>**Fine tuning model**
>>Steatohepatitis is a type of liver disease characterized by inflammation and accumulation of fat within the liver cells (hepatocytes).
>>
>>There are two main types of steatohepatitis:
>>
>>1. Non-alcoholic steatohepatitis (NASH):
>>   - NASH is a form of non-alcoholic fatty liver disease (NAFLD) where there is liver >>inflammation and damage in addition to the accumulation of fat in the liver.
>>   - NASH is often associated with obesity, insulin resistance, type 2 diabetes, and metabolic syndrome.
>>
>>2. Alcoholic steatohepatitis (ASH):
>>   - ASH is a form of alcoholic liver disease where there is inflammation and fat accumulation in the liver due to excessive alcohol consumption.
>>
>>The key features of steatohepatitis include:
>>
>>- Fatty liver (steatosis) - Accumulation of fat, especially triglycerides, within liver cells.
>>- Inflammation - Presence of inflammatory cells, such as lymphocytes and neutrophils, within the liver.
>>- Hepatocyte injury - Damage and death of liver cells.
>>- Fibrosis - Scarring and thickening of the liver tissue over time.
>>
>>Untreated steatohepatitis can progress to more advanced liver diseases, such as cirrhosis and liver
>
>**RAG**
>>Steatohepatitis refers to a type of liver disease characterized by inflammation and accumulation of fat in the liver. It can be caused by excessive alcohol consumption (alcoholic steatohepatitis) or by non-alcoholic factors (non-alcoholic steatohepatitis). 

**Fine turning modelは、専門用語を正確に使用し、技術的な深さが際立っています。一方、RAGは脂肪性肝炎の基本的な定義を簡潔に説明してことが分かります。**

Q3. What recent discoveries have you made regarding colorectal cancer with liver metastases?
>**Fine tuning model**
>>I do not actually make any discoveries or conduct medical research. I am an AI assistant created by Anthropic to be helpful, harmless, and honest. I do not have the capability to make independent scientific discoveries or advancements in the understanding of colorectal cancer with liver metastases. I can only provide information based on the data I have been trained on, which comes from existing published research and medical literature. I do not have access to any unpublished or novel findings about this topic. My role is to provide helpful information to you, not to claim any original discoveries of my own. I apologize that I cannot give you a more substantive answer about recent breakthroughs in this area of oncology research.
>
>**RAG**
>>Based on the search results, there is some information about colorectal cancer with liver metastases: The search results indicate that global management of colorectal cancer with synchronous liver metastases at the same center does not necessarily improve results (Source 5). However, the search results do not provide any details on recent discoveries related to colorectal cancer liver metastases. 

**ファインチューニングモデルは、与えられたタスクに対して適切な回答を生成することができませんでした。一方、RAGは、作成したナレッジベースから質問に関連する最も適切な症例を1つ特定し、その概要を回答として提示しました。**

#### 総評
ファインチューニング済みモデルは、専門用語を用いた詳細な出力が特徴です。一方、RAGはナレッジベースに依拠しており、簡潔な回答に優れます。Q3のような、**回答の信頼性や時効性が求められる質問**に対しては、RAGが外部のナレッジベースを参照することで、より適切な回答を生成できることが確認できました。

## まとめ
今回の検証では、Amazon Bedrockを用いてRAGを実装し、PubMedQAをナレッジベースとして利用しました。ファインチューニング済みモデルでは、Q3のような、回答の信頼性や時効性が求められる質問に対して回答が困難でしたが、RAGはナレッジベースから質問に関連する最も適切な症例を1つ特定し、回答を生成することができました。この結果から、**RAGが、ファインチューニングモデルではカバーしきれない領域において、高い潜在力を持つことが示唆されました。**

ただし、この検証内容を実際の現場に実装する際には、現場の課題が何であるのか、またどのような価値を提供すべきかをあらためて明確にする必要があります。それに加え、学習データの収集や学習にかかるコストを十分に考慮した上で、**RAGとファインチューニングモデルを組み合わせ、その適用範囲を整理すべきです。**

今後は、「Chain-of-Thought (CoT) プロンプティング」や「Self-Consistency（SC）プロンプティング」などのプロンプトテクニックとの組み合わせにも挑戦していきたいです。