メむンコンテンツぞスキップ
芋出し画像

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では情報たざらず正解したした。

    画像
    画像



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ