見出し画像

LlamaIndex のハイブリッド検索を試す

「LlamaIndex」の「ハイブリッド検索」を試したので、まとめました。

1. ハイブリッド検索

情報検索では、文書全体を対象にした「粗 (Sparse) な検索」と、特定のキーワードに焦点を当てた「密 (Dense) な検索」の2つの手法があります。粗な検索は広い範囲の情報をカバーすることができますが、必要な情報が見つけにくいことがあります。一方、密な検索は、キーワードに関連する情報を重点的に収集することができますが、情報が不十分であることがあります。

粗と密の「ハイブリッド」検索では、両方の手法を組み合わせることで、広範囲かつ重点的に検索を行うことができます。

2. Colabでの実行

Google Colabでの実行手順は、次のとおりです。

(1) 新規のColabのノートブックを開く。

(2) パッケージのインストール。
ハイブリッド検索には「Pinecone」が必要なので、「pinecone-client」と「transformers」もインストールします。

# パッケージのインストール
!pip install llama-index==0.5.12
!pip install pinecone-client
!pip install transformers

(3) 環境変数の準備。
以下のコードの <OpenAI_APIのトークン> にはOpenAI APIのトークンを指定します。(有料)

import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIのトークン>"

(4) ログレベルの設定。

import logging
import sys

# ログレベルの設定
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, force=True)

(5) ドキュメントの読み込み。
今回は、BeautifulSoupのデータコネクタで、「ぼっち・ざ・ろっく」のWikipediaページを読み込みます。

from llama_index import download_loader

# ドキュメントの読み込み
BeautifulSoupWebReader = download_loader("BeautifulSoupWebReader")
loader = BeautifulSoupWebReader()
documents = loader.load_data(urls=["https://ja.wikipedia.org/wiki/ぼっち・ざ・ろっく!"])

(6) Pineconeのインデックスの準備。
以下のコードの <PineconeのAPIキー> にはPineconeのAPIキーを指定します。(無料)

import pinecone

# Pineconeのインデックスの準備
api_key = "<PineconeのAPIキー>"
pinecone.init(api_key=api_key, environment="us-west1-gcp")
pinecone.create_index("quickstart", dimension=1536, metric="dotproduct", pod_type="p1")
pinecone_index = pinecone.Index("quickstart")

「Pinecone」の使い方については、以下で紹介しています。

(7) インデックスの生成。
GPTPineconeIndex.from_documents()で作成します。add_sparse_vector=Trueを指定すると、ハイブリッド検索できるようになります。

from llama_index import GPTPineconeIndex

# インデックスの生成
index = GPTPineconeIndex.from_documents(
    documents, 
    pinecone_index=pinecone_index, 
    add_sparse_vector=True,
)

(8) ハイブリッド検索なしで質問応答。

# インデックスへの質問応答
print(index.query("ひとりちゃんの得意な楽器は?"))
> Initial prompt template: Context information is below. 
---------------------
    :
ギターヒーロー
ひとりが動画投稿サイトで活動する際に用いるハンドルネーム。ひとりが普段人前に出せないが内面に抱えている承認欲求の象徴とも言えるもので、現実のひとりからはかけ離れた「バスケ部エースの彼氏持ち」や「ラインの友達数は1000人超え」といった設定がつけられている[注 11][38]。顔を隠すアングルから撮影された人気バンドのカバー動画を投稿しており、投稿サイトでの登録者数は8万人近く[39]。ぽいずん♡やみのような音楽関係者からも注目を集めている。動画は直樹によって収益化されており、文化祭ライブで壊れたギターを新調する費用等に充てられた[40]。
ライブでの現在の自身の実力ではギターヒーローの名前でファンを集めても満足させるだけの演奏ができないというひとりの考えから、正体が「結束バンドの後藤ひとり」であることは公にはされていない[注 12]。
    :
---------------------
Given the context information and not prior knowledge, answer the question: ひとりちゃんの得意な楽器は?

> Initial response: 
ひとりちゃんの得意な楽器はギターです。

ギターヒーローの情報が含まれるチャンクを取得して、正解を導き出しました。

(9) ハイブリッド検索ありで質問応答。
ハイブリッド検索するには、vector_store_query_mode="hybrid"を指定します。

# インデックスへの質問応答
print(index.query("ひとりちゃんの得意な楽器は?", vector_store_query_mode="hybrid"))
> Initial prompt template: Context information is below. 
---------------------
    :
ギターヒーロー
ひとりが動画投稿サイトで活動する際に用いるハンドルネーム。ひとりが普段人前に出せないが内面に抱えている承認欲求の象徴とも言えるもので、現実のひとりからはかけ離れた「バスケ部エースの彼氏持ち」や「ラインの友達数は1000人超え」といった設定がつけられている[注 11][38]。顔を隠すアングルから撮影された人気バンドのカバー動画を投稿しており、投稿サイトでの登録者数は8万人近く[39]。ぽいずん♡やみのような音楽関係者からも注目を集めている。動画は直樹によって収益化されており、文化祭ライブで壊れたギターを新調する費用等に充てられた[40]。
ライブでの現在の自身の実力ではギターヒーローの名前でファンを集めても満足させるだけの演奏ができないというひとりの考えから、正体が「結束バンドの後藤ひとり」であることは公にはされていない[注 12]。
    :
---------------------
Given the context information and not prior knowledge, answer the question: ひとりちゃんの得意な楽器は?

> Initial response: 
ひとりちゃんの得意な楽器はギターです。

> Refined prompt template: The original question is as follows: ひとりちゃんの得意な楽器は?
We have provided an existing answer: 
ひとりちゃんの得意な楽器はギターです。
We have the opportunity to refine the existing answer (only if needed) with some more context below.
------------
アルト(おとぎ アルト)」の名前でバーチャルYouTuberとして活動しており、ゲーム実況動画などを公開している[71]。具体的な名前については作中で言及されず、主に「PAさん」と呼ばれる[注 21]。
大山 猫々(おおやま ねね)
作中2年目から登場。16歳で秀華高校1年生[72]。大学受験準備に入って忙しくなった虹夏の代わりとして2年目秋よりSTARRYでアルバイトするようになる。
スポーツ好きで中学時代はバスケ部所属だったこともあり雰囲気は体育会系そのもので、いつもはきはきとして声が大きい。ひとりとリョウはそのノリを苦手にしている。
身長が低いこともあってバスケではあまり活躍できなかったところ、ロックフェスでのひとりを見て憧れ、バンドを始めようと考え[72]、虹夏と喜多に付き合ってもらってギターを購入。以後は学校でもバイト先でも、ひとりにギターを教えてもらおうとまとわりつく[32]。
日向 恵恋奈(ひなた
------------
Given the new context, refine the original answer to better answer the question. If the context isn't useful, return the original answer.
> Refined response: 

ひとりちゃんの得意な楽器はギターで、それはロックフェスでのひとりを見て憧れ、バンドを始めようと考えたことから始まりました。

ギターヒーローの情報が含まれるチャンクを取得して正解を導き出しましたが、次のリファイン時に、別キャラの情報がまざって誤った情報になってしまいました。

Playgroundで確認したところ、GPT-3.5では情報まざり、GPT-4では情報まざらず正解しました。



この記事が気に入ったらサポートをしてみませんか?