RAG における埋め込みモデルの比較
LLM を使った RAG を行う際に埋め込みモデルが必要となりますが、どの程度差がでるのか 4 種類ほどの埋め込みモデルを使って検証してみたいと思います。
今回試す埋め込みモデル:
こちらの記事内のベンチマークの結果でいうと各モデルはこのような比較となります。
前回の記事で試したコードを活用します。LLM にはElyza 7B Instructを、Chain には Langchain の QAChain を使ってみました。
必要なライブラリをインストール
# 必要なライブラリをインストール
!pip install transformers langchain accelerate bitsandbytes pypdf tiktoken fugashi[unidic-lite] sentence_transformers faiss-gpu trafilatura openai -Uqq
コードを実行
必要なライブラリをロードします。
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.llms.huggingface_pipeline import HuggingFacePipeline
from langchain import PromptTemplate
データソースを準備
今回はウィキペディア上にある「ONE PIECE」のページをデータソースとして、それに関連する質問をしていきたいと思います。
今回はウェブページのテキストだけを抽出してくれる `trafilatura` というライブラリを用いました。
from trafilatura import fetch_url, extract
url = "https://ja.m.wikipedia.org/wiki/ONE_PIECE"
filename = 'textfile.txt'
document = fetch_url(url)
text = extract(document)
print(text[:1000])
with open(filename, 'w', encoding='utf-8') as f:
f.write(text)
ONE PIECE
『ONE PIECE』(ワンピース)は、尾田栄一郎による日本の少年漫画作品。『週刊少年ジャンプ』(集英社)にて1997年34号から連載中。略称は「ワンピ」[2]。
|ONE PIECE
|ジャンル
|少年漫画・海賊・冒険
ファンタジー・バトル
|漫画
|作者
|尾田栄一郎
|出版社
|集英社
|
|掲載誌
|週刊少年ジャンプ
|レーベル
|ジャンプ・コミックス
|発表号
|1997年34号 -
|発表期間
|1997年7月22日[1] -
|巻数
|既刊106巻(2023年7月4日現在)
|テンプレート - ノート
|プロジェクト
|漫画
|ポータル
|漫画
概要 編集
海賊王を夢見る少年モンキー・D・ルフィを主人公とする、「ひとつなぎの大秘宝(ワンピース)」を巡る海洋冒険ロマン。
夢への冒険・仲間たちとの友情といったテーマを前面に掲げ、バトルやギャグシーン、感動エピソードをメインとする少年漫画の王道を行く物語として人気を博している[3]。また、長年にわたりながら深く練り込まれた壮大な世界観・巧緻な設定のストーリーも特徴。
2023年7月の時点で単行本は第106巻まで刊行されており、『週刊少年ジャンプ』歴代作品の中では『こちら葛飾区亀有公園前派出所』(1976年 - 2016年)に次ぐ長期連載となっている。国内累計発行部数は2022年時点で日本の漫画では最高となる4億1000万部を突破している[4]。また、第67巻は初版発行部数405万部[5]の国内出版史上最高記録を樹立し、第57巻(2010年3月発売)以降の単行本は初版300万部以上発行を継続する[6]など、出版の国内最高記録をいくつも保持している。
2015年6月15日には "Most Copies Published For The Same Comic Book Series By A Single Author(最も多く発行された単一作者によるコミックシリーズ)" 名義でギネス世界記録に認定された[7][8]。実績は発行部数3億2,086万6,000部(2014年12月時点)[7]。なお、このギネス世界記録は2022年7月付で同作品によって更新され[9]、日本では同年8月に「日本国内累計発行部数4億1656万6000部」と報道された[4]。
本作とともに長年ジャンプの看板作品であった『
抽出したテキストをテキストファイルに保存出来ました。このテキストファイルを Langchain の TextSplitter を使って小口のチャンクに切っていきます。
こうして生成したチャンクから embedding を生成し、質問の embedding に一番近いトップkのチャンクを抽出。そのテキストをプロンプト内に突っ込み、質問と同時に LLM に投げて回答を得る。といった流れとなります。
私は少なくともそういう理解です。
loader = TextLoader(filename, encoding='utf-8')
documents = loader.load()
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
separator = "\n",
chunk_size=300,
chunk_overlap=20,
)
texts = text_splitter.split_documents(documents)
print(len(texts))
どんな構造をしているのか知るために、何個か見てみましょう。
texts[30:33]
[Document(page_content='アラバスタ編 編集\n- 【12巻 - 23巻】\n-\n- 偉大なる航路突入(12巻)\n- 麦わらの一味はついに「偉大なる航路」に突入する。リヴァース・マウンテンを降りた場所にある「双子岬」で、仲間の帰還を待ち続けるクジラ・ラブーンと出会う。ルフィはラブーンと、「偉大なる航路」一周後に再戦する約束を交わす。\n- ウイスキーピーク編(12巻 - 13巻)', metadata={'source': 'textfile.txt'}),
Document(page_content='- ルフィ達は、最初の島「サボテン島」の町「ウイスキーピーク」で大歓迎を受ける。だがその町は、秘密犯罪会社「バロックワークス」(B・W)の社員である賞金稼ぎ達の巣であった。そこで一味は、B・Wエージェントの一人の正体が、「偉大なる航路」にある大国「アラバスタ王国」の王女ネフェルタリ・ビビであると知る。B・Wに潜入していた彼女から、ルフィ達はB・Wによるアラバスタ王国乗っ取り計画を知る。ビビを一行に加えた麦わらの一味は、B・Wからの追手を振り切りつつ、計画を阻止すべく一路アラバスタを目指す。', metadata={'source': 'textfile.txt'}),
Document(page_content='- リトルガーデン編(13巻 - 15巻)\n- ウイスキーピークを出港したルフィ達は、ジャングルの中で恐竜達が生きる太古の島「リトルガーデン」に上陸する。ルフィ達はその島で、巨人族の二人の戦士・ドリーとブロギーに出会う。彼らは「誇り」を守るため、100年間も決闘を続けてきたという。だがその決闘が、B・Wからの追手による卑劣な策略で邪魔される。ルフィ達はB・Wエージェントにして姑息な美術家・Mr.3らを破り、巨人族の誇りを守る。\n- ドラム島編(15巻 - 17巻)', metadata={'source': 'textfile.txt'})]
Embedding の生成と FAISS を使ったベクトル DB の用意
小口のチャンクに切ったテキストを、Embedding モデルを使って embedding に変換していきます。テキストの類似性をもとに検索をできるようにするためです。類似するテキストの抽出数は 5 に設定しました。
今回3種類の埋め込みモデルを試して最終的な結果を比較していきたいと思います。
下記は `cl-nagoya/sup-simcse-ja-large` を使ったコードとなりますが、それぞれ同じ設定で試しました。
ベクトル DB には `FAISS` のライブラリを用います。(今回は GPU のある環境で走らせてみているため、 faiss-gpu をロードしています。)
%%time
# embeddings = HuggingFaceEmbeddings(model_name="intfloat/multilingual-e5-large")
embs_model = HuggingFaceEmbeddings(model_name="cl-nagoya/sup-simcse-ja-large")
# embs_model = HuggingFaceEmbeddings(model_name="pkshatech/GLuCoSE-base-ja")
# import openai
# from langchain.embeddings import OpenAIEmbeddings
# import getpass
# openai_api_key = getpass.getpass("OpenAI API keyを入力: ")
# embs_model = OpenAIEmbeddings(openai_api_key=openai_api_key, model="text-embedding-ada-002")
db = FAISS.from_documents(texts, embs_model)
# 一番類似するチャンクをいくつロードするかを変数kに設定出来ます。
retriever = db.as_retriever(search_kwargs={"k": 5})
モデルの用意
LLM には Elyza-7b-instruct を用います。
今回も BitsandBytes で 4bit に量子化したもので試していきます。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
model_id = "elyza/ELYZA-japanese-Llama-2-7b-instruct"
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
quantization_config=quantization_config,
).eval()
次に、Elyza-7b-instruct 用のプロンプトテンプレートを用意します。
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "参考情報を元に、ユーザーからの質問にできるだけ正確に答えてください。"
text = "{context}\nユーザからの質問は次のとおりです。{question}"
template = "{bos_token}{b_inst} {system}{prompt} {e_inst} ".format(
bos_token=tokenizer.bos_token,
b_inst=B_INST,
system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
prompt=text,
e_inst=E_INST,
)
LLM と Chain の指定
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=512,
)
PROMPT = PromptTemplate(
template=template,
input_variables=["context", "question"],
template_format="f-string"
)
chain_type_kwargs = {"prompt": PROMPT}
qa = RetrievalQA.from_chain_type(
llm=HuggingFacePipeline(
pipeline=pipe,
model_kwargs=dict(
temperature=0.0,
do_sample=True,
max_length=512,
top_k=50,
top_p=0.95,
repetition_penalty=1.1
)
),
retriever=retriever,
chain_type="stuff",
return_source_documents=True,
chain_type_kwargs=chain_type_kwargs,
verbose=True,
)
お試し
ようやく質問ができる状態が整いました。では実際に質問をしてみましょう。
質問1
result = qa("ニコ・ロビンの職業は何ですか?")
print('回答:', result['result'])
print('='*10)
print('ソース:', result['source_documents'])
intfloat/multilingual-e5-large を使った場合
回答:
ソース:
[Document(page_content='空島編 編集\n- 【24 巻 - 32 巻】\n-\n- ジャヤ編(24 巻 - 25 巻)\n- アラバスタを後にしたルフィ達は、B・W 社副社長であった考古学者ニコ・ロビンを仲間に加える。次の島に向かう航海中、突如空から巨大なガレオン船が落下し、「記録指針(ログポース)」の指す進路が上向きに変更される。それは伝説とされる空に浮かぶ島「空島」への指針を意味していた。', metadata={'source': 'textfile.txt'}), Document(page_content='- 「THE 8TH LOG "SKYPIEA"」2008 年 4 月発行、ISBN 978-4-08-111027-8\n- 「THE 9TH LOG "GOD"」2008 年 5 月発行、ISBN 978-4-08-111028-5\n- 「THE 10TH LOG "BELL"」2008 年 6 月発行、ISBN 978-4-08-111029-2\n- 「THE 11TH LOG "WATER SEVEN"」2009 年 4 月発行、ISBN 978-4-08-111009-4\n- 「THE 12TH LOG "ROCKET MAN"」2009 年 5 月発行、ISBN 978-4-08-111010-0\n- 「THE 13TH LOG "NICO ROBIN"」2009 年 7 月発行、ISBN 978-4-08-111011-7\n- 「THE 14TH LOG "FRANKY"」2009 年 8 月発行、ISBN 978-4-08-111012-4', metadata={'source': 'textfile.txt'}), Document(page_content='- 日清食品「カップヌードル」のテレビ CM シリーズ「HUNGRY DAYS」のアニメ作品。第 1 弾「ゾロ篇」が 2019 年 5 月、第 2 弾「ナミ篇」が 2019 年 9 月、第 3 弾「ビビ篇」が 2019 年 12 月、最終回「頂上騎馬戦篇」が 2020 年 2 月に公開[424]。「もし ONE PIECE のキャラクターが高校生活を送っていたら?」というコンセプトのもと、麦わらの一味の高校生活を、各キャラクターを中心に描く内容となっている。キャラクターデザインは窪之内英策、音楽を BUMP OF CHICKEN、ナレーションを林原めぐみが手がけ、集英社と元々のアニメシリーズを制作している東映アニメーションの監修の元、シャフトがアニメーション制作を担当。声優陣はルフィ役の田中真弓やゾロ役の中井和哉といったアニメシリーズのキャストが出演している[425]。', metadata={'source': 'textfile.txt'}), Document(page_content='- サンジ\n- 声 - 平田広明\n- 麦わらの一味コック。コックの命である手を傷つけないように、足技で戦う。無類の女好き。伝説の海「オールブルー」を探す。\n- トニートニー・チョッパー\n- 声 - 大谷育江\n- 麦わらの一味船医。「ヒトヒトの実」を食べ人の能力を持った人間トナカイ。万能薬(何でも治せる医者)を目指している。\n- ニコ・ロビン\n- 声 - 山口由里子', metadata={'source': 'textfile.txt'}), Document(page_content='|ロビン像\n|2021 年 10 月 9 日\n|南阿蘇村大字河陽 5435 番 1\n|旧東海大学 阿蘇キャンパス\n|[367]\n|ゾロ像\n|2022 年 1 月 22 日\n|菊池郡大津町大字大津 1156-3\n|大津中央公園\n|[368]\n|ジンベエ像\n|2022 年 7 月 23 日\n|宇土市住吉町 3162-1\n|住吉海岸公園\n|[369]\n その他のイベント・企画 編集\n- ONE PIECE グランドラインの冒険\n- 2002 年に東京・サンリオピューロランドで上映された初のフル CG アニメ。\n- ONE PIECE お台場の冒険', metadata={'source': 'textfile.txt'})]
考察: 必要な文章は抽出できましたが、4つ目に抽出されたテキストが主にチョッパーに関する文章だったところ、一番最後に「ニコ・ロビン」が出てきていることから、ロビンの職業を「船医」と回答してしまったと考えられます。
cl-nagoya/sup-simcse-ja-large を使った場合
回答:
ソース:
[Document(page_content='|ロビン像\n|2021 年 10 月 9 日\n|南阿蘇村大字河陽 5435 番 1\n|旧東海大学 阿蘇キャンパス\n|[367]\n|ゾロ像\n|2022 年 1 月 22 日\n|菊池郡大津町大字大津 1156-3\n|大津中央公園\n|[368]\n|ジンベエ像\n|2022 年 7 月 23 日\n|宇土市住吉町 3162-1\n|住吉海岸公園\n|[369]\n その他のイベント・企画 編集\n- ONE PIECE グランドラインの冒険\n- 2002 年に東京・サンリオピューロランドで上映された初のフル CG アニメ。\n- ONE PIECE お台場の冒険', metadata={'source': 'textfile.txt'}), Document(page_content='|2020 年 11 月 7 日\n|熊本市東区健軍 5 丁目 14-2\n|熊本市動植物園正面入口多目的広場\n|[364]\n|ブルック像\n|2020 年 11 月 8 日\n|上益城郡御船町辺田見 100 番地\n|ふれあい広場\n|[364]\n|フランキー像\n|2020 年 11 月 21 日\n|阿蘇郡高森町 1526-5\n|高森駅前\n|[365]\n|ナミ像\n|2021 年 7 月 31 日\n|阿蘇郡西原村小森 2115-3\n|俵山交流館 萌の里\n|[366]\n|ロビン像\n|2021 年 10 月 9 日', metadata={'source': 'textfile.txt'}), Document(page_content='- ^ アニメでは第 46 話・第 47 話(2000 年 11 月 1 日・11 月 8 日放送)。\n- ^ アニメでは第 68 話・第 69 話(2001 年 5 月 13 日・5 月 20 日放送)。\n- ^ 映画『ジャンゴのダンスカーニバル』(同時上映の短編)の原案としてアニメ化。\n- ^ アニメでは第 778 話(2017 年 2 月 26 日放送)で、ワポル本人の回想という形でアニメ化。\n- ^ アニメでは第 510 話・第 514 話(2011 年 8 月 14 日・9 月 11 日放送)。', metadata={'source': 'textfile.txt'}), Document(page_content='- ^ "AMD アワード、優秀賞に「ウタ」「ELDEN RING」「きつねダンス」など 10 件". INTERNET Watch. 2023 年 2 月 14 日. 2023 年 3 月 21 日閲覧。\n- ^ "H.I.S.プレゼンツ ONE PIECE メモリアルログ in ハウステンボス". ハウステンボス. 2010 年 5 月 24 日. 2011 年 1 月 10 日閲覧。\n- ^ "ハウステンボス、1 億 7000 万円の黒字". YOMIURI ONLINE. 読売新聞社. 2010 年 9 月 2 日. 2010 年 9 月 6 日時点のオリジナルよりアーカイブ。2011 年 1 月 10 日閲覧。\n- ^ ソウルのワンピース展、一転開催へ 26 日から 朝日新聞、2014 年 7 月 25 日', metadata={'source': 'textfile.txt'}), Document(page_content='- 〜あらゆる世界を見学せよ〜潜入!リアルスコープ\n- 2010 年 6 月 26 日、2011 年 1 月 8 日、2012 年 8 月 25 日にアニメの制作現場が、2011 年 3 月 19 日にはジャンプの製作現場が特集された。\n- めざましテレビ\n- 2014 年 8 月 25 日から 30 日の 6 日間、番組内の名物コーナー「めざましじゃんけん」に日替わりでルフィ・ゾロ・ナミ・ウソップ・サンジ・チョッパーが登場した[410]。\n- 世にも奇妙な物語', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に必要な文章を抽出出来ませんでした。
pkshatech/GLuCoSE-base-jap を使った場合
回答:
ソース:
[Document(page_content='- ロビンの真意は、「世界政府の強大すぎる力が仲間に向けられるのが怖い」というものであった。彼女の想いを聞いたルフィは世界政府に宣戦布告し、一味は CP9 との全面対決に挑む。CP9 最強の男ロブ・ルッチらとの激戦の末、ロビン奪還に成功した一味は、「バスターコール」による海軍の猛攻が迫る窮地の最中、戦場に現れたメリー号の助けもあり、エニエス・ロビーからの脱出に成功する。しかし、ついにメリー号が限界に達してしまう。ルフィ達はメリー号を火葬し、東の海から航海を共にしたメリー号に別れを告げた。', metadata={'source': 'textfile.txt'}), Document(page_content='- ルフィ達はロビンを奪還するため、ガレーラカンパニー社員・フランキー一家らと協力し、司法の島「エニエス・ロビー」に乗り込む。その中には、仮面を被り謎のヒーロー「そげキング」と名乗るウソップの姿もあった。\n- エニエス・ロビー編(39 巻 - 46 巻)', metadata={'source': 'textfile.txt'}), Document(page_content='イタリア・セリエ A 所属のバレーボールクラブ『パッラヴォーロ・モデナ』のリベロ用のユニフォームのデザインに採用された[253]。\n 北アメリカ 編集\n カナダの 2010 年オタワ国際アニメーションフェスティバルにおいて長編作品部門に日本から『ONE PIECE FILM STRONG WORLD』と『緑子』の 2 作品がノミネートされた。『ONE PIECE FILM STRONG WORLD』は日本のエンタテイメント作品としては異例となる連続出品を果たした[254]。また 2010 年第 12 回スペイン・バルセロナアジア映画祭において観客賞(オーディエンスアワード)を受賞した。', metadata={'source': 'textfile.txt'}), Document(page_content='- 船を求め立ち寄った「シロップ村」で、ルフィはウソつきの少年ウソップと出会う。ウソップは、シャンクスの部下ヤソップの息子であった。ルフィ達は村の富豪の娘カヤの屋敷を訪れるが、執事クラハドールに追い返される。しかしルフィとウソップはしばらくして、クラハドールがかつて処刑されたはずの海賊〝キャプテン・クロ〟であることを知ってしまう。クロは自分の海賊団に村を襲わせ、カヤを殺して財産を手に入れようと企んでいた。ルフィ達はウソップと共にクロネコ海賊団を迎え撃ち、クロの計画を阻止する。ルフィ達は、新たに狙撃手ウソップを仲間に加え、さらにカヤから海賊船「ゴーイングメリー号」を譲り受ける。', metadata={'source': 'textfile.txt'}), Document(page_content='登場人物 編集\n ここでは、主人公とその仲間「麦わらの一味」のみを紹介する。\n- モンキー・D・ルフィ\n- 声 - 田中真弓\n- 本作の主人公。麦わらの一味船長。「ゴムゴムの実」の能力者のゴム人間。麦わら帽子がトレードマーク。夢は「ひとつなぎの大秘宝(ワンピース)」を見つけて「海賊王」になること。\n- ロロノア・ゾロ\n- 声 - 中井和哉', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に必要な文章を抽出出来ませんでしたが、回答は正解と言えるかと思います。
OpenAIEmbeddings を使った場合
回答:
ソース:
[Document(page_content='- ロビンの真意は、「世界政府の強大すぎる力が仲間に向けられるのが怖い」というものであった。彼女の想いを聞いたルフィは世界政府に宣戦布告し、一味は CP9 との全面対決に挑む。CP9 最強の男ロブ・ルッチらとの激戦の末、ロビン奪還に成功した一味は、「バスターコール」による海軍の猛攻が迫る窮地の最中、戦場に現れたメリー号の助けもあり、エニエス・ロビーからの脱出に成功する。しかし、ついにメリー号が限界に達してしまう。ルフィ達はメリー号を火葬し、東の海から航海を共にしたメリー号に別れを告げた。', metadata={'source': 'textfile.txt'}), Document(page_content='- ルフィ達はロビンを奪還するため、ガレーラカンパニー社員・フランキー一家らと協力し、司法の島「エニエス・ロビー」に乗り込む。その中には、仮面を被り謎のヒーロー「そげキング」と名乗るウソップの姿もあった。\n- エニエス・ロビー編(39 巻 - 46 巻)', metadata={'source': 'textfile.txt'}), Document(page_content='- 朝日新聞\n- 2009 年 12 月 4 日朝刊で、ルフィ・ゾロ・ナミ・ウソップ・サンジ・チョッパー・ロビン・フランキー&ブルックがそれぞれ 1 面ずつ合計 9 面に全面広告で登場した[419]。これは、56 巻の初版発行部数が 285 万部を達成したことと、2009 年 12 月 14 日発売の 2010 年 02 号の週刊少年ジャンプが 300 万部発行されることを記念したものである。\n- 日経エンタテインメント!', metadata={'source': 'textfile.txt'}), Document(page_content='- サンジ\n- 声 - 平田広明\n- 麦わらの一味コック。コックの命である手を傷つけないように、足技で戦う。無類の女好き。伝説の海「オールブルー」を探す。\n- トニートニー・チョッパー\n- 声 - 大谷育江\n- 麦わらの一味船医。「ヒトヒトの実」を食べ人の能力を持った人間トナカイ。万能薬(何でも治せる医者)を目指している。\n- ニコ・ロビン\n- 声 - 山口由里子', metadata={'source': 'textfile.txt'}), Document(page_content='- 麦わらの一味は、損傷が激しいゴーイングメリー号を修繕し、さらに船大工を仲間に加えるため、世界一の造船都市「ウォーターセブン」を訪れる。だがそこで、造船会社ガレーラカンパニーから、メリー号が航海不能状態であるという衝撃的な宣告を突き付けられてしまう。ルフィはメリー号から別の船に乗り換える決断を下すが、ウソップが反発し、ルフィとの決闘の末一味を離脱する。さらに、ロビンが一味脱退を宣言する。ロビンの宣言の真相を知るべく、ルフィ達はガレーラカンパニー本社に乗り込む。しかし、政府の諜報機関 CP9 に阻まれ、ロビンは連行されてしまう。', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に必要な文章を抽出出来ませんでした。
質問2
result = qa("エネルは何者ですか?")
print('回答:', result['result'])
print('='*10)
print('ソース:', result['source_documents'])
intfloat/multilingual-e5-large を使った場合
回答:
ソース:
[Document(page_content='- ルフィ達は上空 1 万メートルにある空島に辿り着く。そこには今まで全く見たことがない未知の文化が広がっていた。ルフィ達は、神の国「スカイピア」で上陸した「神の島(アッパーヤード)」が、かつて地上に存在した伝説の黄金郷であることをつきとめる。しかし、そこは神の軍団を率いる〝神・エネル〟が支配する土地であり、空の民と島の先住民シャンディアが 400 年に渡り争い続けている土地であった。黄金捜しに乗り出したルフィ達は、神の軍団とシャンディアとの過酷なサバイバルに巻き込まれる。エネルの圧倒的な力に多くの戦士たちが倒れていき、エネルによって空島は消滅の危機に陥る。だが、唯一エネルに対抗できるルフィによって空島の危機は防がれ、400 年に渡る空の民とシャンディアの争いに終止符が打たれた。', metadata={'source': 'textfile.txt'}), Document(page_content='- 一方、サニー号は巨大なロボットに捕まってエッグヘッドに連行される。ゾロたちはベガパンクの分身の「悪(リリス)」と「正(シャカ)」により、研究所に通されることになる。研究所に着くと、一味はジンベエそっくりの新型パシフィスタ「セラフィム」の襲撃を受け戦闘データが収集されるが、セラフィムを破壊される前に正(シャカ)が戦闘を中止させる。正(シャカ)は、この島が「過去」であり、この島のような高度な文明を持った王国が 900 年前に実在していたと語る。', metadata={'source': 'textfile.txt'}), Document(page_content='ノベライズ作品 編集\n 集英社の新書レーベル「JUMP j BOOKS」より発売されている、アニメオリジナルストーリーや劇場版のノベライズ作品。一部は児童文学レーベル「集英社みらい文庫」でも刊行されている。\n その他の小説作品 編集\n- ONE PIECE novel A(エース)\n- エースを主人公とし、スペード海賊団時代の冒険を描く。ムック『ONE PIECE magazine』Vol.1 から Vol.3 まで連載され[160][161]、後に第 1 巻として書籍化された。著者はひなたしょう。', metadata={'source': 'textfile.txt'}), Document(page_content='- ^ "ワンピースが新聞に!週刊で 4 週連続発行". 日刊スポーツ. 2012 年 11 月 13 日. 2012 年 11 月 25 日閲覧。\n- ^ "『ONE PIECE』とコラボで実写 CM ルフィに斎藤工、ゾロに池内博之、サンジに窪塚洋介 ナミを泉里香". オリコンニュース. オリコン. 2018 年 12 月 31 日. 2019 年 1 月 1 日閲覧。\n- ^ "夏木マリ、『ONE PIECE』Dr.くれは完全再現 139 歳役に嘆きも「ハッピー? ガキ共!!」". オリコンニュース. オリコン. 2019 年 2 月 14 日. 2019 年 2 月 22 日閲覧。', metadata={'source': 'textfile.txt'}), Document(page_content='|2003 年 5 月\n|8200 万部[194][信頼性要検証]\n|2005 年 2 月\n|1 億部[17][12]\n|2007 年 7 月\n|1 億 4000 万部[195]\n|2009 年 10 月\n|1 億 7000 万部[196]\n|2010 年 11 月\n|2 億部[17][197]\n|2011 年 5 月\n|2 億 3000 万部[198]\n|2011 年 8 月\n|2 億 4000 万部[199]\n|2011 年 11 月\n|2 億 5000 万部[179]\n|2012 年 2 月\n|2 億 6000 万部[180]\n|2012 年 11 月\n|2 億 8000 万部[182]\n|2013 年 6 月\n|2 億 9000 万部[184]\n|2013 年 11 月\n|3 億部[17]\n|2014 年 5 月\n|3 億 1000 万部[187]', metadata={'source': 'textfile.txt'})]
考察: 最適な文章を抽出できました。回答も正解と言えるかと思います。
cl-nagoya/sup-simcse-ja-large を使った場合
回答:
ソース:
[Document(page_content='|ロビン像\n|2021 年 10 月 9 日\n|南阿蘇村大字河陽 5435 番 1\n|旧東海大学 阿蘇キャンパス\n|[367]\n|ゾロ像\n|2022 年 1 月 22 日\n|菊池郡大津町大字大津 1156-3\n|大津中央公園\n|[368]\n|ジンベエ像\n|2022 年 7 月 23 日\n|宇土市住吉町 3162-1\n|住吉海岸公園\n|[369]\n その他のイベント・企画 編集\n- ONE PIECE グランドラインの冒険\n- 2002 年に東京・サンリオピューロランドで上映された初のフル CG アニメ。\n- ONE PIECE お台場の冒険', metadata={'source': 'textfile.txt'}), Document(page_content='|2020 年 11 月 7 日\n|熊本市東区健軍 5 丁目 14-2\n|熊本市動植物園正面入口多目的広場\n|[364]\n|ブルック像\n|2020 年 11 月 8 日\n|上益城郡御船町辺田見 100 番地\n|ふれあい広場\n|[364]\n|フランキー像\n|2020 年 11 月 21 日\n|阿蘇郡高森町 1526-5\n|高森駅前\n|[365]\n|ナミ像\n|2021 年 7 月 31 日\n|阿蘇郡西原村小森 2115-3\n|俵山交流館 萌の里\n|[366]\n|ロビン像\n|2021 年 10 月 9 日', metadata={'source': 'textfile.txt'}), Document(page_content='- ^ アニメでは第 46 話・第 47 話(2000 年 11 月 1 日・11 月 8 日放送)。\n- ^ アニメでは第 68 話・第 69 話(2001 年 5 月 13 日・5 月 20 日放送)。\n- ^ 映画『ジャンゴのダンスカーニバル』(同時上映の短編)の原案としてアニメ化。\n- ^ アニメでは第 778 話(2017 年 2 月 26 日放送)で、ワポル本人の回想という形でアニメ化。\n- ^ アニメでは第 510 話・第 514 話(2011 年 8 月 14 日・9 月 11 日放送)。', metadata={'source': 'textfile.txt'}), Document(page_content='- ^ "AMD アワード、優秀賞に「ウタ」「ELDEN RING」「きつねダンス」など 10 件". INTERNET Watch. 2023 年 2 月 14 日. 2023 年 3 月 21 日閲覧。\n- ^ "H.I.S.プレゼンツ ONE PIECE メモリアルログ in ハウステンボス". ハウステンボス. 2010 年 5 月 24 日. 2011 年 1 月 10 日閲覧。\n- ^ "ハウステンボス、1 億 7000 万円の黒字". YOMIURI ONLINE. 読売新聞社. 2010 年 9 月 2 日. 2010 年 9 月 6 日時点のオリジナルよりアーカイブ。2011 年 1 月 10 日閲覧。\n- ^ ソウルのワンピース展、一転開催へ 26 日から 朝日新聞、2014 年 7 月 25 日', metadata={'source': 'textfile.txt'}), Document(page_content='- 〜あらゆる世界を見学せよ〜潜入!リアルスコープ\n- 2010 年 6 月 26 日、2011 年 1 月 8 日、2012 年 8 月 25 日にアニメの制作現場が、2011 年 3 月 19 日にはジャンプの製作現場が特集された。\n- めざましテレビ\n- 2014 年 8 月 25 日から 30 日の 6 日間、番組内の名物コーナー「めざましじゃんけん」に日替わりでルフィ・ゾロ・ナミ・ウソップ・サンジ・チョッパーが登場した[410]。\n- 世にも奇妙な物語', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に必要な文章を抽出出来ませんでした。ハルシネーションとなってしまいました。
pkshatech/GLuCoSE-base-jap を使った場合
回答:
ソース:
[Document(page_content='- ワノ国を出港した麦わらの一味は、とある海域で巨大な暖水渦に遭遇し、渦に巻き込まれていた女を助ける。その女は、最悪の世代の一人のジュエリー・ボニーであった。しかしその直後、サニー号が武装した巨大な鮫に襲われ、一味は離れ離れになってとある島に漂着。ボニーによると、そこは Dr.ベガパンクが研究拠点にしている政府の島「エッグヘッド」だという。ルフィ達はボニーと共に島を散策するが、そこは途轍もなく高度な技術で作られた未来都市そのものであった。散策の最中、ルフィ達はパシフィスタに遭遇し、戦おうとするがボニーに妨害される。ボニーは、バーソロミュー・くまは自分の父親で、ベガパンクによって改造人間にされ自我を失ったと語る。彼女は、ベガパンクに父を改造人間にした理由を問いただすためにエッグヘッドを訪れたのであった。', metadata={'source': 'textfile.txt'}), Document(page_content='- ロビンの真意は、「世界政府の強大すぎる力が仲間に向けられるのが怖い」というものであった。彼女の想いを聞いたルフィは世界政府に宣戦布告し、一味は CP9 との全面対決に挑む。CP9 最強の男ロブ・ルッチらとの激戦の末、ロビン奪還に成功した一味は、「バスターコール」による海軍の猛攻が迫る窮地の最中、戦場に現れたメリー号の助けもあり、エニエス・ロビーからの脱出に成功する。しかし、ついにメリー号が限界に達してしまう。ルフィ達はメリー号を火葬し、東の海から航海を共にしたメリー号に別れを告げた。', metadata={'source': 'textfile.txt'}), Document(page_content='- 深海 1 万メートルにある海底の楽園「魚人島」に到着した麦わらの一味は、島を治める「リュウグウ王国」の国王ネプチューンの招待を受ける。王宮でルフィが出会った王女・しらほし姫は、彼女を付け狙う海賊バンダー・デッケン九世から身を守るため、軟禁状態に置かれていた。一方、ホーディ・ジョーンズ率いる「新魚人海賊団」が、デッケンの一味と手を組み、リュウグウ王国崩壊を目論み動き出す。新魚人海賊団は、かつてルフィが倒した魚人の海賊アーロンの意志を継ぎ、人間たちへの復讐を企てていた。ホーディは、魚人島の新たな王となり、人間との友好を望む者を排除するため王国の乗っ取りを宣言する。', metadata={'source': 'textfile.txt'}), Document(page_content='- 女ヶ島編(53 巻 - 54 巻)\n- ルフィが飛ばされたのは、「凪の帯」にある女ヶ島「アマゾン・リリー」。そこは、七武海の紅一点ボア・ハンコックが治める、男子禁制の女人国であった。一時は処刑されそうになるが、彼の恐れを知らぬ度胸と器量の大きさに惚れ込み、ルフィはハンコックに恋心を抱かれるようになる。', metadata={'source': 'textfile.txt'}), Document(page_content='- ルフィ達は上空 1 万メートルにある空島に辿り着く。そこには今まで全く見たことがない未知の文化が広がっていた。ルフィ達は、神の国「スカイピア」で上陸した「神の島(アッパーヤード)」が、かつて地上に存在した伝説の黄金郷であることをつきとめる。しかし、そこは神の軍団を率いる〝神・エネル〟が支配する土地であり、空の民と島の先住民シャンディアが 400 年に渡り争い続けている土地であった。黄金捜しに乗り出したルフィ達は、神の軍団とシャンディアとの過酷なサバイバルに巻き込まれる。エネルの圧倒的な力に多くの戦士たちが倒れていき、エネルによって空島は消滅の危機に陥る。だが、唯一エネルに対抗できるルフィによって空島の危機は防がれ、400 年に渡る空の民とシャンディアの争いに終止符が打たれた。', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に 5 つ目の結果として関連した文章を抽出できましたが、他の結果が関連性の低い文章となってしまい、最終的な回答がズレました。
OpenAIEmbeddings を使った場合
回答:
ソース:
[Document(page_content='- 頂上戦争で白ひげとエースが戦死したことで、世界各地は大きく揺れ動いた。一方、目の前でエースを失い、自暴自棄に陥ったルフィは幼少時代を思い出す。エースともう一人の兄・サボと過ごした、ルフィの過去が明らかになる。', metadata={'source': 'textfile.txt'}), Document(page_content='- 一方、サニー号は巨大なロボットに捕まってエッグヘッドに連行される。ゾロたちはベガパンクの分身の「悪(リリス)」と「正(シャカ)」により、研究所に通されることになる。研究所に着くと、一味はジンベエそっくりの新型パシフィスタ「セラフィム」の襲撃を受け戦闘データが収集されるが、セラフィムを破壊される前に正(シャカ)が戦闘を中止させる。正(シャカ)は、この島が「過去」であり、この島のような高度な文明を持った王国が 900 年前に実在していたと語る。', metadata={'source': 'textfile.txt'}), Document(page_content='- ルフィはハンコックの助力を得て、深海の大監獄・インペルダウンに潜入する。獄内でかつて敵対したバギーや Mr.3、Mr.2 と再会し脱獄のため共闘。途中で監獄署長マゼランの毒に冒され息絶えかけたところを、革命軍幹部エンポリオ・イワンコフに救われ、その協力を受ける。', metadata={'source': 'textfile.txt'}), Document(page_content='- ルフィ達はロビンを奪還するため、ガレーラカンパニー社員・フランキー一家らと協力し、司法の島「エニエス・ロビー」に乗り込む。その中には、仮面を被り謎のヒーロー「そげキング」と名乗るウソップの姿もあった。\n- エニエス・ロビー編(39 巻 - 46 巻)', metadata={'source': 'textfile.txt'}), Document(page_content='- ワノ国を出港した麦わらの一味は、とある海域で巨大な暖水渦に遭遇し、渦に巻き込まれていた女を助ける。その女は、最悪の世代の一人のジュエリー・ボニーであった。しかしその直後、サニー号が武装した巨大な鮫に襲われ、一味は離れ離れになってとある島に漂着。ボニーによると、そこは Dr.ベガパンクが研究拠点にしている政府の島「エッグヘッド」だという。ルフィ達はボニーと共に島を散策するが、そこは途轍もなく高度な技術で作られた未来都市そのものであった。散策の最中、ルフィ達はパシフィスタに遭遇し、戦おうとするがボニーに妨害される。ボニーは、バーソロミュー・くまは自分の父親で、ベガパンクによって改造人間にされ自我を失ったと語る。彼女は、ベガパンクに父を改造人間にした理由を問いただすためにエッグヘッドを訪れたのであった。', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に必要な文章を抽出出来ませんでした。ハルシネーションとなってしまいました。
質問3
result = qa("チョッパーの特殊能力は何ですか?")
print('回答:', result['result'])
print('='*10)
print('ソース:', result['source_documents'])
intfloat/multilingual-e5-large を使った場合
回答:
ソース:
[Document(page_content='- チョッパーマン\n- パラレルワールドを舞台に、チョッパーを主人公にしたスピンオフ漫画。作画は武井宏文。『最強ジャンプ』2012 年 1 月号から 2014 年 2 月号まで連載された。\n- ワンピースパーティー\n- SD 化したキャラたちが繰り広げる、スピンオフギャグ漫画。作画は安藤英。『最強ジャンプ』2015 年 1 月号より連載中。\n- CHIN PIECE[36]', metadata={'source': 'textfile.txt'}), Document(page_content='- 11 月 11 日 - 単行本国内累計発行部数が 2 億冊を突破(第 60 巻)[14]。\n- 2011 年(平成 23 年)\n- 4 月 - 『週刊少年ジャンプ』2011 年 17 号に島袋光年の『トリコ』とのクロスオーバー作品『実食! 悪魔の実!!』が掲載される。\n- 12 月 3 日 - 『最強ジャンプ』2012 年 1 月号より、スピンオフ漫画『チョッパーマン』が連載開始。\n- 2012 年(平成 24 年)', metadata={'source': 'textfile.txt'}), Document(page_content='- リトルガーデン出港後、ナミが急病に倒れてしまう。急遽進路を変更し、雪の島「ドラム島」に立ち寄った麦わらの一味は、悪魔の実を食べ人の能力を持ったトナカイ、トニートニー・チョッパーと出会う。ルフィはチョッパーを仲間に誘うが、彼には悲しき過去があった。そこへ、かつて島で悪政を敷いた元ドラム王国国王ワポルが帰還する。ルフィ達はチョッパーと共闘してワポルを撃退し、船医チョッパーを仲間に迎える。\n- アラバスタ編(17 巻 - 23 巻)', metadata={'source': 'textfile.txt'}), Document(page_content='- オリコンの「最も友達になりたいテレビアニメのキャラは?」では 1 位の「ドラえもん」に次ぎ 2 位に「モンキー・D・ルフィ」、5 位に「トニートニー・チョッパー」がランクインし、同じくオリコンの「漫画の"名脇役"ランキング」では 2 位に「ロロノア・ゾロ」、5 位に「トニートニー・チョッパー」がランクインした。どちらもトップ 5 に同作から 2 キャラクターランクインしたのは『ONE PIECE』のみとなっている。\n- TSUTAYA online が行った「子供に観せたいアニメ映画ランキング」で『ONE PIECE』の劇場版シリーズが 7 位にランクインした[242]。', metadata={'source': 'textfile.txt'}), Document(page_content='- 笑う犬の発見\n- 番組冒頭に、「犬!PIECE」というパロディコーナーが設けられ、主人公のルフィもアニメのまま登場した(コーナー内では原田泰造がウソップ、名倉潤が『ピピプー』という番組オリジナルキャラクター、チョッパーが着ぐるみで登場した)。\n- FNS 地球特捜隊ダイバスター\n- 特番「ダイバスター特別編 ONE PIECE の裏側 本当にちょっとだけ見せますスペシャル」(2006 年 9 月 25 日放送)で本作のスタッフ、アフレコスタジオなどが登場した。', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に必要な文章を抽出出来ませんでした。ハルシネーションとなってしまいました。
cl-nagoya/sup-simcse-ja-large を使った場合
回答:
ソース:
[Document(page_content='- ルフィ達はロビンを奪還するため、ガレーラカンパニー社員・フランキー一家らと協力し、司法の島「エニエス・ロビー」に乗り込む。その中には、仮面を被り謎のヒーロー「そげキング」と名乗るウソップの姿もあった。\n- エニエス・ロビー編(39 巻 - 46 巻)', metadata={'source': 'textfile.txt'}), Document(page_content='- ^ "「ワンピース・プレミアショー 2014」第 2 弾 本日、満員御礼でスタート!!". 財経新聞. 2014 年 7 月 4 日. 2018 年 11 月 14 日閲覧。\n- ^ a b "仏のマンガ・アニメグランプリ 「FAIRY TAIL」「べるぜバブ」等が受賞". アニメ!アニメ!. イード. 2012 年 4 月 9 日. 2022 年 9 月 10 日閲覧。\n- ^ "ワンピ × パリ水族館企画レポ、館内に存在感抜群の巨大チョッパーも。". ナリナリドットコム. 2013 年 5 月 2 日. 2013 年 7 月 6 日閲覧。', metadata={'source': 'textfile.txt'}), Document(page_content='- 11 月 11 日 - 単行本国内累計発行部数が 2 億冊を突破(第 60 巻)[14]。\n- 2011 年(平成 23 年)\n- 4 月 - 『週刊少年ジャンプ』2011 年 17 号に島袋光年の『トリコ』とのクロスオーバー作品『実食! 悪魔の実!!』が掲載される。\n- 12 月 3 日 - 『最強ジャンプ』2012 年 1 月号より、スピンオフ漫画『チョッパーマン』が連載開始。\n- 2012 年(平成 24 年)', metadata={'source': 'textfile.txt'}), Document(page_content='- サンジ\n- 声 - 平田広明\n- 麦わらの一味コック。コックの命である手を傷つけないように、足技で戦う。無類の女好き。伝説の海「オールブルー」を探す。\n- トニートニー・チョッパー\n- 声 - 大谷育江\n- 麦わらの一味船医。「ヒトヒトの実」を食べ人の能力を持った人間トナカイ。万能薬(何でも治せる医者)を目指している。\n- ニコ・ロビン\n- 声 - 山口由里子', metadata={'source': 'textfile.txt'}), Document(page_content='ウォーターセブン編 編集\n- 【32 巻 - 46 巻】\n-\n- ロングリングロングランド編(32 巻 - 34 巻)\n- 空島から帰還したルフィ達は、ロングリングロングランドで、フォクシー海賊団から仲間をかけた海賊のゲーム「デービーバックファイト」を挑まれる。度重なる妨害に遭い、一時チョッパーを奪われるも、フォクシーとの直接対決を制し勝利を収めた。その直後、海軍本部大将〝青雉〟が現れ、世界政府最高戦力の実力を見せつけられた。', metadata={'source': 'textfile.txt'})]
考察: ベクトル検索時に 4 つ目の結果として必要な文章を抽出できましたが、サンジの説明文の最後に「チョッパー」のテキストが入ってしまったことで誤った回答となってしまいました。RAG のセットアップの問題ですね。
pkshatech/GLuCoSE-base-jap を使った場合
回答:
ソース:
[Document(page_content='- サンジ\n- 声 - 平田広明\n- 麦わらの一味コック。コックの命である手を傷つけないように、足技で戦う。無類の女好き。伝説の海「オールブルー」を探す。\n- トニートニー・チョッパー\n- 声 - 大谷育江\n- 麦わらの一味船医。「ヒトヒトの実」を食べ人の能力を持った人間トナカイ。万能薬(何でも治せる医者)を目指している。\n- ニコ・ロビン\n- 声 - 山口由里子', metadata={'source': 'textfile.txt'}), Document(page_content='- 声 - 山口由里子\n- 麦わらの一味考古学者。「ハナハナの実」の能力者。歴史上の「空白の 100 年」の謎を解き明かすため旅をしている。\n- フランキー\n- 声 - 矢尾一樹\n- 麦わらの一味船大工。体中に武器を仕込んだサイボーグ。自分の作った船に乗り、その船が海の果てに辿り着くのを見届けることが夢。\n- ブルック\n- 声 - チョー', metadata={'source': 'textfile.txt'}), Document(page_content='- 11 月 11 日 - 単行本国内累計発行部数が 2 億冊を突破(第 60 巻)[14]。\n- 2011 年(平成 23 年)\n- 4 月 - 『週刊少年ジャンプ』2011 年 17 号に島袋光年の『トリコ』とのクロスオーバー作品『実食! 悪魔の実!!』が掲載される。\n- 12 月 3 日 - 『最強ジャンプ』2012 年 1 月号より、スピンオフ漫画『チョッパーマン』が連載開始。\n- 2012 年(平成 24 年)', metadata={'source': 'textfile.txt'}), Document(page_content='- チョッパーマン\n- パラレルワールドを舞台に、チョッパーを主人公にしたスピンオフ漫画。作画は武井宏文。『最強ジャンプ』2012 年 1 月号から 2014 年 2 月号まで連載された。\n- ワンピースパーティー\n- SD 化したキャラたちが繰り広げる、スピンオフギャグ漫画。作画は安藤英。『最強ジャンプ』2015 年 1 月号より連載中。\n- CHIN PIECE[36]', metadata={'source': 'textfile.txt'}), Document(page_content='- 笑う犬の発見\n- 番組冒頭に、「犬!PIECE」というパロディコーナーが設けられ、主人公のルフィもアニメのまま登場した(コーナー内では原田泰造がウソップ、名倉潤が『ピピプー』という番組オリジナルキャラクター、チョッパーが着ぐるみで登場した)。\n- FNS 地球特捜隊ダイバスター\n- 特番「ダイバスター特別編 ONE PIECE の裏側 本当にちょっとだけ見せますスペシャル」(2006 年 9 月 25 日放送)で本作のスタッフ、アフレコスタジオなどが登場した。', metadata={'source': 'textfile.txt'})]
考察: 正解が出ました。ベクトル検索時に一番関連性の高い文章が抽出できました。
OpenAIEmbeddings を使った場合
回答:
ソース:
[Document(page_content='- チョッパーマン\n- パラレルワールドを舞台に、チョッパーを主人公にしたスピンオフ漫画。作画は武井宏文。『最強ジャンプ』2012 年 1 月号から 2014 年 2 月号まで連載された。\n- ワンピースパーティー\n- SD 化したキャラたちが繰り広げる、スピンオフギャグ漫画。作画は安藤英。『最強ジャンプ』2015 年 1 月号より連載中。\n- CHIN PIECE[36]', metadata={'source': 'textfile.txt'}), Document(page_content='- リトルガーデン出港後、ナミが急病に倒れてしまう。急遽進路を変更し、雪の島「ドラム島」に立ち寄った麦わらの一味は、悪魔の実を食べ人の能力を持ったトナカイ、トニートニー・チョッパーと出会う。ルフィはチョッパーを仲間に誘うが、彼には悲しき過去があった。そこへ、かつて島で悪政を敷いた元ドラム王国国王ワポルが帰還する。ルフィ達はチョッパーと共闘してワポルを撃退し、船医チョッパーを仲間に迎える。\n- アラバスタ編(17 巻 - 23 巻)', metadata={'source': 'textfile.txt'}), Document(page_content='生活様式や科学技術などは、基本的に現実世界における海賊の黄金時代(17 世紀から 18 世紀ごろ)がモデルと思われる[要出典]。しかし、現実世界から大きくかけ離れた、作中世界固有の設定も多々ある(「偉大なる航路」と「赤い土の大陸」、電伝虫など)。悪魔の実という食べると特殊な能力が身に付く実が存在し、能力の有無を問わず多くの登場人物は超人的な戦闘力を備えている。海王類を始めとする特殊な動物や、巨人や魚人のような亜人種もおり、普通の人間でも身長 2m を越える人物が多数登場する。', metadata={'source': 'textfile.txt'}), Document(page_content='- サンジ\n- 声 - 平田広明\n- 麦わらの一味コック。コックの命である手を傷つけないように、足技で戦う。無類の女好き。伝説の海「オールブルー」を探す。\n- トニートニー・チョッパー\n- 声 - 大谷育江\n- 麦わらの一味船医。「ヒトヒトの実」を食べ人の能力を持った人間トナカイ。万能薬(何でも治せる医者)を目指している。\n- ニコ・ロビン\n- 声 - 山口由里子', metadata={'source': 'textfile.txt'}), Document(page_content='- 作中に隠れキャラクターとして登場しているパンダマンは、作者が『ジャンプ』で一番好きな作品としている漫画『キン肉マン』の超人募集に応募した際に誕生させたキャラクターであり、実際に『キン肉マン 77 の謎』に掲載されている。ゲームソフト『キン肉マン II 世 新世代超人 VS 伝説超人』には隠しキャラクターとしてゲスト出演している。', metadata={'source': 'textfile.txt'})]
考察: 違和感はありますが、一応正解がと言えるかと思います。
まとめ
今回 Wikipedia 記事を LangChain の CharacterTextSplitter を使って、4種類の埋め込みモデルを使ってベクトル化し、RAG による質問応答を試しました。
今回たった3つの質問ではありましたが、埋め込みモデルによって抽出される文章はかなり変わってくることがわかりました。
今回 `CharacterTextSplitter` の設定を `chunk_size=300, chunk_overlap=20` で行ったのが、結果の悪化に寄与してしまいました(チョッパーの説明の最後にニコ・ロビンの名前がたまたま入ってしまった)本番環境で使う上では eval セットを作成してハイパーパラメーターのチューニングが必要です。
主観ですが、今回の RAG におけるベクトル検索のクオリティは、`intfloat/multilingual-e5-large` >= `pkshatech/GLuCoSE-base-jap` > `cl-nagoya/sup-simcse-ja-large` >= `openai/text-embedding-ada-002` というような感触でした。使い方が間違っていたり、適したフォーマットになっていない等あるのかもしれませんが、埋め込みモデル作成時のデータの分布によるところも大きいのかもしれません。
RAG 用のセットアップのチューニングがかなり重要だというのは、今回の実験で改めて感じました。埋め込みモデルを変える度に細かなチューニングが必要とそうです。
今回使った Colab:
以上、お読みいただきありがとうございます。少しでも参考になればと思います。
もし似たようなコンテンツに興味があれば、フォローしていただけると嬉しいです。
https://twitter.com/alexweberk
関連
もう少し定量的に比較をしているツイートがありました:
こちらのノートブックを作成するにあたり、下記を参考にさせていただいております。
この記事が気に入ったらサポートをしてみませんか?