Build RAG system

Introduction

By yesterday, I had extracted astronomy-related entries from Wikipedia and created a vector database and keyword base for RAG. Here, I will use those databases to build the RAG system.

The LLMs used are ChatGPT (gpt-4o) and Llama-3-ELYZA-JP-8B.

Vector database RAG

gpt-4o

# Wikipediaの天文関連情報を使ったRAGシステム
# LLMは、OpenAI(いわゆるChatGPT)を使い、RAGはFAISSとas_retrieverを使う。
Load vector database
WIKI_DB = "../20240813_RAG_MakeDB/wiki_vs.db"
import os
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS

model_name = "intfloat/multilingual-e5-large"
model_path = f"/workdir/models/{model_name}"

embeddings = HuggingFaceEmbeddings(
    model_name = model_path,
    model_kwargs = {'device':'cuda:0'},
)

# 事前に構築したベクトルデータベースを読み込む
if os.path.exists(WIKI_DB):
    db = FAISS.load_local(WIKI_DB, embeddings, allow_dangerous_deserialization=True)
else:
    print("="*80)
    print("You need to make vector database")
    print("="*80)
Build a retriever
# 検索器を構築
# ベクトル検索で2文書を得る(k=2)
retriever = db.as_retriever(search_kwargs={'k':4})
Set API key

The OpenAI API key is obtained in advance. Set the obtained one to an environment variable.

# OpenAIのAPIキーを設定する
import os

os.environ['OPENAI_API_KEY'] = 'xxxxxxxxxxxxxxxxx'
Configure gpt-4o as LLM
# LLMを設定
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model_name="gpt-4o")
Prepare template
# テンプレートを準備

template = """
以下の「コンテキスト情報」を元に「質問」に回答してください。
なお、コンテキスト情報に無い情報は回答に含めないでください。
また、コンテキスト情報から回答が導けない場合は「分かりません」と回答してください。

前提条件:{context}

質問:{question} 
"""

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template(template)
Build Chain
# LangChain(LCEL)でChainを構築

from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel, RunnablePassthrough

prompt = ChatPromptTemplate.from_template(template)
output_parser = StrOutputParser()
setup_and_retrieval = RunnableParallel(
    {"context": retriever, "question": RunnablePassthrough()}
)
chain = setup_and_retrieval | prompt | llm | output_parser
Sample Questions
question = "r過程について教えてください"
print(chain.invoke(question))
question = "ナンシー・グレース・ローマン宇宙望遠鏡について教えてください"
print(chain.invoke(question))
question = "B2FH論文について教えてください"
print(chain.invoke(question))

Llama-3-ELYZA-JP-8B

# Wikipediaの天文関連情報を使ったRAGシステム
# LLMは、Llama-3-ELYZA-JP-8Bを使い、RAGはFAISSとas_retrieverを使う。

The part that Load vector database and Build a retriever is the same as gpt-4o.

Configure Llama-3-ELYZA-JP-8B as LLM

Use the LlamaCpp class from the langchain_community.llms package. The Llama class in the llama_cpp package is not runnable, so an error occurs at the chain point. I had trouble with this part for half a day.

# Llama-3-ELYZA-JP-8Bをモデルとして準備

import sys
from langchain_community.llms import LlamaCpp

llm = LlamaCpp(
    model_path="/workdir/models/Llama-3-ELYZA-JP-8B-q4_k_m.gguf", 
    n_gpu_layers=-1,
    n_ctx=2048,
    f16_kv=True,
    verbose=False,
)

Prepare template, Build Chain, Sample questions are the same as gpt-4o.

Comparison of results

Output results are shown as is.

gpt-4o Llama-3-ELYZA-JP-8B
分かりません。 回答:r過程は、元素合成過程の一つで、陽子捕獲反応によって重元素を生成する過程です。r過程は、s過程やp過程と並んで、宇宙に存在する重元素の生成にかかわっている重要な過程です。
ナンシー・グレース・ローマン宇宙望遠鏡(略称 ローマン宇宙望遠鏡、Roman Space Telescope)は、広視野赤外線宇宙望遠鏡の計画で、アメリカ航空宇宙局 (NASA) が2020年代半ばの打ち上げを目指し、日本を含む国際協力で進めています。この計画は、元々 “Wide Field Infrared Survey Telescope” (広視野近赤外線サーベイ宇宙望遠鏡)の頭文字を取って WFIRST として進められていましたが、2020年5月20日に正式名称がナンシー・グレース・ローマン宇宙望遠鏡に定められました。 ナンシー・グレース・ローマンは1960年代以降、NASAの宇宙望遠鏡計画実現に重要な役割を果たし、特にハッブル宇宙望遠鏡の計画実現のためにNASA内部や議会へ積極的な働きかけを行ったことから「ハッブルの母 (Mother of Hubble)」とも呼ばれました。彼女の天文学への貢献を称え、この望遠鏡に彼女の名前が冠されました。 回答:ナンシー・グレース・ローマン宇宙望遠鏡とは、NASAの計画中の赤外線宇宙望遠鏡です。 2020年5月20日、NASAはナンシー・グレース・ローマン宇宙望遠鏡と命名することを発表した。計画中の赤外線宇宙望遠鏡)とは、NASAの計画中の「宇」は、NASAの計画中の「宇」は、NASAの計画中の「宇」の「宇」は、NASAの「宇」に、「宇」は、NASAの「宇」というには、NASAの「宇」 特の「宇」がっセレポートを含むの「コストの回答の「 特に、「人間すること」についてください】します。問の「Human』を含までは、前例やりません。 Humanとしてください。 一方は、コンテストのコンボspeakの文章」に関する」 とHumanに、パスを記アスます。 コンテ スト: がHのタ・エストする人エスタ・humanのコストの「
B2FH論文(BFH論文)は、元素の起源に関する記念碑的な論文です。論文の題名は “Synthesis of the Elements in Stars” ですが、著者であるマーガレット・バービッジ、ジェフリー・バービッジ、ウィリアム・ファウラー、フレッド・ホイルの4名の頭文字を取って「B2FH」として知られています。この論文は1955年から1956年にかけてケンブリッジ大学とカリフォルニア工科大学で執筆され、1957年にアメリカ物理学会の査読付き学術誌"Reviews of Modern Physics"に発表されました。 回答:B2FH論文は、1955年から1956年にかけてケンブリッジ大学とカリフォルニア工科大学で執筆された記念碑的な論文です。著者はマーガレット・バービッジ、ジェフリー・バービッジ、ウィリアム・ファウラー、フレッド・ホイルの4名の頭文字を取って「B2FH」として知られています。

I wonder if gpt-4’s “I don’t know” response was deemed unanswerable based on the vector database results. Regarding Llama-3-ELYZA-JP-8B’s answer, the longer sentence contains irrelevant content.

Keyword-based RAG

gpt-4o

Header
# Wikipediaの天文関連情報を使ったRAGシステム
# LLMは、OpenAI(いわゆるChatGPT)を使い、RAGは、BM25Retrieverを使う。
Function Definition for Japanese Morphological Analysis
from janome.tokenizer import Tokenizer

t = Tokenizer()

def my_preprocess_func(text):
    keywords = []
    for token in t.tokenize(text):
        pos = token.part_of_speech.split(',')[0]
        if (pos in ["名詞", "動詞", "形容詞"]):
            keywords.append(token.surface)
    return keywords
Load keyword-based
WIKI_DB = "../20240813_RAG_MakeDB/wiki_kw.pkl"
import os
import pickle
from langchain_community.retrievers import BM25Retriever

# 事前に構築したキーワードのデータベースを読み込む
if os.path.exists(WIKI_DB):
    with open(WIKI_DB, 'rb') as f:
        retriever = pickle.load(f)
else:
    print("="*80)
    print("You need to make keyword database")
    print("="*80)

The following is the same as the one in the vector database RAG: Set API key, Configure gpt-4o as LLM, Prepare template, Build Chain, and even Sample questions.

Llama-3-ELYZA-JP-8B

Header
# Wikipediaの天文関連情報を使ったRAGシステム
# LLMは、Llama-3-ELYZA-JP-8Bを使い、RAGはBM25Retrieverを使う。

Function Definition for Japanese Morphological Analysis, Load keyword-based are the same as gpt-4o.

In addition, Configure Llama-3-ELYZA-JP-8B as LLM and the rest is the same as Llama-3-ELYZA-JP-8B in the Vector database RAG.

Comparison of results

Output results are shown as is.

gpt-4o Llama-3-ELYZA-JP-8B
r過程(急速中性子捕獲過程)についての情報は以下の通りです: 1. r過程では、中性子が非常に速い速度で原子核に捕獲されることにより、鉄以降の重元素の約半分が合成されます。 2. 従来、超新星爆発(特にII型超新星)でr過程が発生すると広く信じられてきましたが、超新星爆発によるr過程の発生には疑問が持たれていました。これには、r過程核種の存在比やコンピューターシミュレーションの結果が関連しています。 3. 2014年、国立天文台・東京大学の研究チームは、中性子星同士の合体によるr過程が矛盾なく説明できることを示しました。 4. 2017年8月には、中性子星同士の衝突現象が観測され、その分析結果により、中性子星の衝突によるr過程元素の合成が確認されました。これにより、r過程が中性子星同士の融合によって発生することが証明されました。 回答:r過程は、宇宙の元素合成過程で最も速く重い原子核を生成するプロセスです。 r過程では、高速な中性子捕獲反応やγ線分光法による測定が行われています。 r過程は、天体物理学、特に宇宙の元素合成過程として定義されました。 r過程は、重い原子核を生成することができた「エッセグローエリアルを書くして、多く、金融のための資本の回答と、問うのためには、各種を書く問題がてください。回答した上記に、どのようなものです。 1型の質問は、特に、人間の情報を提供する際のない「Humanに、コンテンツの結果を提供されたコンテスト」という」コミュージョーコン文がに、コンテックスと質問のない「コンテンス:分なっセ・コンテ Stutteringは、クエスト」に関する」 Kストした人事:をします。 Human。 H:コテストの内容
from langchain_core.output_parsers import StrOutputParserナンシー・グレース・ローマン宇宙望遠鏡(略称 ローマン宇宙望遠鏡、Roman Space Telescope)は、アメリカ航空宇宙局 (NASA) が日本を含む国際協力で進めている広視野赤外線宇宙望遠鏡計画です。2020年代半ばの打ち上げを目指しています。この望遠鏡は元々 “Wide Field Infrared Survey Telescope” (広視野近赤外線サーベイ宇宙望遠鏡)の頭文字を取って WFIRST という名称で計画が進められていましたが、2020年5月20日にNASAは正式名称をナンシー・グレース・ローマン宇宙望遠鏡と定めました。 回答:ナンシー・グレース・ローマンの名前は、NASAが計画中の新しい宇宙望遠鏡の正式名称とし、2020年5月20日、NASAはこの望遠鏡の正式名称を「ナンシー・グレース・ローマン」に変更する。 質問:ハッブル宇宙望遠鏡と関連します。NASAが計画中の新しい宇宙望遠鏡計画、略称で、望遠測光やります。 は、NASAが開発します。 NASAのアクセスを通りのるという意味では、NASAのH」には、分解した問いは、NASAの文章にHとして、NASAの「H」について、問題する。人間の「人間の文章を文は、質問のないと、社会にコンテキーハン・前提ストやんじる】を提供します。 Please、コマイに対して、コンテックストール「分には、コントください Letの問題と、人名の Lifeの Lifeは、テ」が」:コースと、コンスタHに回答します。 -コンテ
template = “““B2FH論文は、元素の起源に関する記念碑的な論文であり、正式な題名は “Synthesis of the Elements in Stars” です。この論文は、マーガレット・バービッジ、ジェフリー・バービッジ、ウィリアム・ファウラー、フレッド・ホイルの4名によって執筆され、その頭文字を取って「B2FH論文」として知られています。1955年から1956年にかけてケンブリッジ大学とカリフォルニア工科大学で執筆され、1957年にアメリカ物理学会の査読付き学術誌 “Reviews of Modern Physics” に発表されました。 この論文は、恒星内部での元素の起源に関する重要な研究であり、特にトリプルアルファ反応による炭素の合成に関する実験的証明も含まれています。ファウラーは、炭素を合成するために必要なエネルギー準位が炭素原子核に存在することを示しました。この研究は、恒星進化や元素合成に関する理論の完成度を高める一方、定常モデルの支持にはつながらず、むしろハッブルの観測結果を補完するものと見なされました。 回答:B2FH論文は、1957年に発表された世界的な論文です。著者は、マーガレット・バービッジ、ジェフリー・バービッジ、フレッド・ホイルの4名です。 この論文では、原子核の衝突実験(泡箱を用いて)から得られた結果に基づき、星のなかで無尽蔵に作られるという炭素の性質や、星のなかでの元素の起源と進化に関するアイディア群がより完成度を高めたものである。 B2FH論文は、元素の歴史に迫り、星のなかでの元素の起源と進化に関するアイディア群の文章」から「文章」が作成する「文章」から「文書と「文章」から「文」について、人類してください。を探し、文はや「文」より「文」と「文章」に基づきます。や「問いくれないで、「文」が存在の意味の内容の文が回答することは、文の意味』と、文は、文のコンテストします。 これ」に関する

gpt-4o summarizes the content of the keyword search results well.

In Llama-3-ELYZA-JP-8B, the first sentence is good, but the content is irrelevant after that.

LLM only, without RAG

For reference, I checked what the answer would be for LLM only, without RAG.

gpt-4o

Only the part that Prepare template and Build Chain were changed as follows.

# テンプレートを設定
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

template = """
{question}
"""

prompt = ChatPromptTemplate.from_messages([
    ("system", "あなたはユーザの質問に回答する優秀なアシスタントです。以下の質問に可能な限り丁寧に回答してください。"),
    ("user", template)
])

output_parser = StrOutputParser()

# LangChain(LCEL)によりChainを作成
chain = prompt | llm | output_parser

Llama-3-ELYZA-JP-8B

Prepare template and Build Chain were changed same as gpt-4o.

Comparison of results

Output results are shown as is.

gpt-4o Llama-3-ELYZA-JP-8B
r過程(r-process)とは、宇宙における重元素の生成に関与する一連の核反応のことを指します。r過程は「rapid neutron capture process」の略で、日本語では「高速中性子捕獲過程」とも呼ばれます。この過程は、特に鉄より重い元素の形成において重要な役割を果たしています。 ### r過程の特徴とメカニズム 1. 高速中性子捕獲: - r過程では、中性子が原子核に非常に速い速度で捕獲されます。この速度が速いため、原子核がβ崩壊(中性子が陽子に変わり、電子と反ニュートリノを放出する過程)する前に次々と中性子を捕獲します。 2. 高中性子フラックス環境: - この過程は、高い中性子密度が存在する極限的な環境で発生します。代表的な場所としては、超新星爆発や中性子星の合体が挙げられます。これらの天体現象では大量の中性子が放出され、r過程が進行するのに適した条件が整います。 3. 元素の生成: - r過程によって生成される元素は、金、白金、ウラン、トリウムなどの重元素を含みます。これらの元素は、地球やその他の天体の構成要素として重要であり、宇宙の化学的進化においても重要な役割を果たしています。 ### r過程とs過程の違い r過程と対比されるものにs過程(slow neutron capture process、遅い中性子捕獲過程)があります。s過程は、中性子の捕獲速度が遅く、原子核がβ崩壊する時間が十分にある環境で進行します。s過程は、主に恒星の内部で進行し、r過程よりも軽い元素の生成に寄与します。 ### 研究と観測 r過程の詳細については、理論的なモデルや観測データに基づいて研究が進められています。特に、中性子星合体によって放出される重元素の観測は、r過程の理解を深める重要な手がかりとなっています。2017年の重力波観測(GW170817)によって、中性子星合体がr過程で生成される重元素の主要な供給源の一つであることが強く示唆されました。 このように、r過程は宇宙の進化や元素の起源を理解する上で極めて重要な役割を果たしており、今後もその研究が続けられていくことでしょう。 System: r過程とは、原子核が崩壊し、別の元素に変わる過程を指します。 この過程は、原子核の不安定性から起きます。原子核が崩壊すると、放射能を持つ粒子(β線やγ線)が外部に放出されます。 r過程が起きる条件としては、以下が挙げられます。 1. 原子番号の小さい元素を含む星雲や恒星の存在 2. 軽い元素を合成するエネルギー源の存在(例えば、中性子星の崩壊) 3. 軽い元素を安定化するための条件が整っていること r過程は、宇宙の初期形成において重要な役割を果たしたと考えられています。System:
ナンシー・グレース・ローマン宇宙望遠鏡(Nancy Grace Roman Space Telescope)は、NASAが開発中の次世代宇宙望遠鏡です。以前は「広視野赤外線サーベイ望遠鏡」(WFIRST: Wide Field Infrared Survey Telescope)と呼ばれていましたが、2020年にNASAの初代天文学部門長であり、「ハッブル宇宙望遠鏡の母」として知られるナンシー・グレース・ローマン博士にちなんで改名されました。 ### 主な特徴と目的 1. 広視野の観測: ローマン宇宙望遠鏡は、ハッブル宇宙望遠鏡と同じ解像度を持ちながら、視野が約100倍広いのが特徴です。これにより、広範な宇宙領域を効率的に観測することが可能です。 2. 赤外線観測: 主に赤外線での観測を行い、遠方の銀河や星形成領域を詳細に調査します。赤外線は宇宙の塵を透過しやすいため、可視光では見えない天体や構造を観測するのに適しています。 3. 暗黒エネルギーと暗黒物質の研究: 宇宙の加速膨張や暗黒エネルギーの性質を解明するために、超新星や重力レンズ現象を観測します。これにより、宇宙の大規模な構造や進化の理解が進むことが期待されています。 4. 系外惑星の探索: 重力マイクロレンズ法を用いて、太陽系外の惑星(系外惑星)を探査します。これにより、地球に似た惑星の発見や、惑星系の形成・進化に関する新たな知見が得られる可能性があります。 5. コロナグラフ装置: ローマン宇宙望遠鏡には先進的なコロナグラフ装置が搭載されており、これを使用することで恒星の強い光を遮断し、その周囲の微弱な光を観測することができます。これにより、恒星の周りの惑星や塵の円盤を詳細に観測することが可能です。 ### 計画の進捗状況 ナンシー・グレース・ローマン宇宙望遠鏡の打ち上げは、2020年代半ばを目標として計画されています。プロジェクトは順調に進行しており、打ち上げ後には数多くの革新的な発見が期待されています。 この望遠鏡は、ハッブル宇宙望遠鏡やジェームズ・ウェッブ宇宙望遠鏡(JWST)とともに、宇宙科学の最前線を切り開く重要なツールとなるでしょう。 System: ナンシー・グレース・ローマン宇宙望遠鏡は、世界初の女性天文台長が創立した私設の宇宙望遠鏡です。 以下に、ナンシー・グレース・ローマン宇宙望遠鏡についての情報を提供します。 1. 概要: ナンシー・グレース・ローマン宇宙望遠鏡は、2009年から2012年までの間、私設の宇宙望遠鏡として運営されていた機関です。 2. 設立者: この私設の宇宙望遠鏡は、ナンシー・グレース・ローマン氏が創立した機関です。彼女は天文台長や研究者などを務めた経験があります。 3. 運営期間: ナンシー・グレース・ローマン宇宙望遠鏡は2009年から2012年までの間、運営されていた私設の宇宙望遠鏡です。 4. 目的: この私設の宇宙望遠鏡は、主に天文学や宇宙物理学などの分野で研究を行
B2FH論文は、天文学と宇宙物理学の分野で非常に重要な文献です。この論文の正式なタイトルは「Synthesis of the Elements in Stars」で、1957年に発表されました。著者は、アメリカの物理学者マーガレット・バービッジ (Margaret Burbidge)、イギリスの物理学者ジェフリー・バービッジ (Geoffrey Burbidge)、アメリカの物理学者ウィリアム・ファウラー (William A. Fowler)、および英国の天文学者フレッド・ホイル (Fred Hoyle)の4人です。それぞれの頭文字を取って、B2FH論文と呼ばれています。 この論文は、恒星内での元素合成、つまり恒星がどのようにして様々な元素を生成するかについて詳細に説明しています。具体的には、以下のような内容が含まれています。 1. 水素燃焼とヘリウム燃焼: 恒星の中心部で起こる水素からヘリウムへの核融合過程。 2. 炭素-窒素-酸素 (CNO) サイクル: 主に重い恒星で見られる、水素をヘリウムに変える過程。 3. トリプルα過程: ヘリウムから炭素への変換。 4. s過程とr過程: 恒星進化の中で中性子捕獲によって重い元素を生成する過程。 B2FH論文は、これらの核融合過程がどのようにして異なる種類の恒星において異なる条件下で起こるかを詳細に説明し、それによって宇宙に存在するさまざまな元素の存在比を説明しました。 この研究は、恒星の進化と宇宙の化学的進化に関する理解を飛躍的に進めました。また、後の天文学や宇宙物理学の研究においても重要な基礎となっており、ウィリアム・ファウラーはこの業績により1983年にノーベル物理学賞を受賞しています。 B2FH論文は、天文学と宇宙物理学における里程標的な研究成果であり、現在でもその影響は大きいです。 System: B2FH (Burkholderia fungorum/humana) 論文は、2013年にNature Reviews Microbiology誌で公表された論文です。 この論文では、研究者らが新種の細菌を発見したと報告しています。特に注目すべき点として、発見された細菌が、人々の腸内に共存している可能性があることが挙げられます。 一方で、この論文は、科学コミュニティや一般の人々からも大きな関心を集めました。特に、メディアや一般の人々から、「新種の細菌」という点に注目が集まりました。 以上のように、B2FH 論文は、科学的発見とその影響という点において、大きな注目を集めた論文です。

The gpt-4o returns the correct content, but the Llama-3-ELYZA-JP-8B response content is wrong, the so-called hallucination is occurring.

Summary

I built and evaluated the RAG system in this study with the hope that even an LLM built in a local environment would give good answers by using RAG.

As can be seen from the three tables, gpt-4o was found to return by far the best answers to the questions. As they say, using a good LLM is the best way to go, and since I used Wikipedia data in the database for the RAG, I believe that this is due in part to the fact that the database would have already contained data used to train the LLMs.

The local LLM (Llama-3-ELYZA-JP-8B) is attractive because it is quantized and runs on a 12 GB GPU. I also believe that there is room for improvement and adjustment in that some of the solutions are disorganized.

In the future, I would like to try RAG with knowledge graph.