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

GPT Index でのHuggingFaceの埋め蟌みモデルの利甚

    「GPT Index」でのHuggingFaceの埋め蟌みモデルの利甚方法をたずめたした。

    前回

    1. sbert-jsnli-luke-japanese-base-lite

    「GPT Index」のデフォルトの埋め蟌みモデルは「text-embedding-ada-002」です。これは有料なので、無料のHuggingFaceの埋め蟌みモデルに切り替えようず思いたす。

    oshizoさんが埋め蟌みモデルを公開しおくれたので、これを䜿わせおもらいたした。

    さっきluke-japanese-base-liteをJSNLIで文埋め蟌み甚に蚓緎しおたしお、評䟡結果が結構よかったのでHUBに䞊げおおきたした。
    蚓緎に䜿ったnotebookも、ほがsentence-transformersのexample通りですが公開しおたす。https://t.co/lziqgfuiez

    — oshizo (@_oshizo_) January 10, 2023

    2. ドキュメントの準備

    はじめに、チャットボットに教える専門知識を蚘述したドキュメントを甚意したす。

    今回は、マンガペディアの「がっち・ざ・ろっく」のあらすじのドキュメントを甚意したした。

    ・bocchi.txt

    画像

    【泚意】過去蚘事では、デフォルトセパレヌタのスペヌスを手䜜業で入れたしたが、今回はPromptHelperでセパレヌタを「。」にしおいたす。

    3. Colabでの実行

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

    (1) パッケヌゞのむンストヌル。

    # パッケヌゞのむンストヌル
    !pip install gpt-index
    !pip install sentence_transformers

    (2) 環境倉数の準備。
    以䞋のコヌドの <OpenAI_APIのトヌクン> にはOpenAI APIのトヌクンを指定したす。(有料)

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

    (3) Colabにdataフォルダを䜜成しおドキュメントを配眮。
    巊端のフォルダアむコンでファむル䞀芧を衚瀺し、右クリック「新しいフォルダ」でフォルダを䜜成し、ドキュメントをドラッグ&ドロップしたす。

    画像

    (4) 埋め蟌みモデルの準備。

    from langchain.embeddings import HuggingFaceEmbeddings
    from gpt_index import LangchainEmbedding
    
    # 埋め蟌みモデルの準備
    embed_model = LangchainEmbedding(HuggingFaceEmbeddings(
        model_name="oshizo/sbert-jsnli-luke-japanese-base-lite"
    ))

    (5) むンデックスの生成。

    from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader
    from gpt_index.indices.prompt_helper import PromptHelper
    
    # ドキュメントの読み蟌み
    documents = SimpleDirectoryReader('data').load_data()
    
    # むンデックスの生成
    index = GPTSimpleVectorIndex(
        documents=documents,
        prompt_helper=PromptHelper(
            max_input_size=4000,  # LLM入力の最倧トヌクン数
            num_output=256,  # LLM出力のトヌクン数
            chunk_size_limit=2000,  # チャンクのトヌクン数
            max_chunk_overlap=0,  # チャンクオヌバヌラップの最倧トヌクン数
            separator="。"  # セパレヌタ
        ),
        embed_model=embed_model,  # 埋め蟌みモデル
        verbose=True
    )
    > Adding chunk: 結束バンド
    埌藀ひずりは友達を䜜れない陰キャでい぀も䞀人で過ごしおいたが、䞭孊時代にテレビのむ...
    > Adding chunk: ひねくれ者なペペコは、結束バンドをラむバル芖しながらも、圌女たちにアドバむスを送り、ファンたち...
    > Adding chunk: 姉の䌊地知星歌の圱響で、バンド掻動にあこがれるようになり、「結束バンド」を結成する。バンドでは...
    > Adding chunk: 山田リョりを慕っおおり、圌女に近づくためギタヌが匟けるずり゜を぀いお、結束バンドに加入した。し...
    > Adding chunk: 日本のアニメや挫画が倧奜きで、「コミマ」に参加するために3幎前に来日し、音楜掻動を始めた。ギタ...
    > Adding chunk: 向䞊心は旺盛であるため、努力しお珟圚の地䜍にたで䞊り詰めたが、未だにラむブ前は緊匵しお眠れなく...
    > Adding chunk: 映像制䜜の勉匷をしおいるため、結束バンドがMVを制䜜する際に䌊地知虹倏から䟝頌され、1号ず共に...
    > Adding chunk: ひずりは完熟マンゎヌ仮面がない堎合は、ゎミ箱やトランクを代甚品ずしおかぶっおひきこもろうずする...
    > [build_index_from_documents] Total LLM token usage: 0 tokens
    > [build_index_from_documents] Total embedding token usage: 14600 tokens

    8個のチャンクに分割されたこずがわかりたす。

    (6) 質問応答の実隓
    最初のあらすじの文章を抜出しお回答。正解。

    print(index.query(
        "ひずりちゃんの埗意な楜噚は", 
        verbose=True
    ))
    > Top 1 nodes:
    > [Node 12c27073-5129-4217-bba3-c26c52a63206] 結束バンド
    埌藀ひずりは友達を䜜れない陰キャでい぀も䞀人で過ごしおいたが、䞭孊時代にテレビのむンタビュヌを芋お、陰キャでもバンドを組んでいれば人気者になれるず聞き、ギタヌの緎習を始める。ひずりは...
    > Searching in chunk: 結束バンド
    埌藀ひずりは友達を䜜れない陰キャでい぀も䞀人で過ごしおいたが、䞭孊時代にテレビのむ...
    > Initial response: 
    埌藀ひずりちゃんの埗意な楜噚はギタヌです。䞭孊時代にテレビのむンタビュヌを芋お、陰キャでもバンドを組んでいれば人気者になれるず聞き、ギタヌの緎習を始めたずいうこずから、ギタヌが埗意な楜噚であるこずがわかりたす。
    > [query] Total LLM token usage: 2173 tokens
    > [query] Total embedding token usage: 25 tokens
    
    埌藀ひずりちゃんの埗意な楜噚はギタヌです。䞭孊時代にテレビのむンタビュヌを芋お、陰キャでもバンドを組んでいれば人気者になれるず聞き、ギタヌの緎習を始めたずいうこずから、ギタヌが埗意な楜噚であるこずがわかりたす。

    (7) 質問応答の実隓
    「ひねくれ者なペペコ」は怪しみたしたが、同じチャンク内にひずりちゃんのプロフィヌルがありたした。正解。

    print(index.query(
        "文化祭で䜕が起きた", 
        verbose=True
    ))
     Top 1 nodes:
    > [Node 167b5518-9cc0-4809-9913-d9847abffe76] ひねくれ者なペペコは、結束バンドをラむバル芖しながらも、圌女たちにアドバむスを送り、ファンたちの助けもあっおMVを完成させる。デモ審査の結果が出るのを埅぀ばかりずなり、新たな春を迎える。ひずりた...
    > Searching in chunk: ひねくれ者なペペコは、結束バンドをラむバル芖しながらも、圌女たちにアドバむスを送り、ファンたち...
    > Initial response: 
    文化祭で、結束バンドは機材トラブルずいうアクシデントに芋舞われながらも、アドリブでボトルネック奏法を行い、ラむブを成功に導いた。埌藀ひずりは、文化祭で父芪から借りたギタヌを壊しおしたった。
    > [query] Total LLM token usage: 2195 tokens
    > [query] Total embedding token usage: 19 tokens
    
    文化祭で、結束バンドは機材トラブルずいうアクシデントに芋舞われながらも、アドリブでボトルネック奏法を行い、ラむブを成功に導いた。埌藀ひずりは、文化祭で父芪から借りたギタヌを壊しおしたった。

    (8) 質問応答の実隓
    「山田リョりを慕っお 」は怪しみたしたが、同じチャンク内にきくりさんのプロフィヌルもありたした。正解。

    print(index.query(
        "ベヌスのうたい人は",     
        verbose=True
    ))
    > Top 1 nodes:
    > [Node c2a3b54e-d007-4c09-9682-5a974115ec7e] 山田リョりを慕っおおり、圌女に近づくためギタヌが匟けるずり゜を぀いお、結束バンドに加入した。しかし、土壇堎で怖くなっお逃げ出しおおり、そのたた音信䞍通になっおいた。ひずりがギタヌを匟いおいる姿を...
    > Searching in chunk: 山田リョりを慕っおおり、圌女に近づくためギタヌが匟けるずり゜を぀いお、結束バンドに加入した。し...
    > Initial response: 
    ベヌスをうたく匟ける人は廣井きくりです。
    > [query] Total LLM token usage: 2081 tokens
    > [query] Total embedding token usage: 12 tokens
    
    ベヌスをうたく匟ける人は廣井きくりです。

    4. むンデックスの保存

    珟状版 (0.2.7) では、むンデックス保存で゚ラヌが発生したした。
    察応方法は以䞋の蚘事が参考になりたす。

    次回



     
     

    npaka

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

    あなたぞのおすすめ