メインコンテンツへスキップ
見出し画像

LlamaIndex の埋め込みモデルを Multilingual-E5-large に切り替える

    「LlamaIndex」の埋め込みモデルを「Multilingual-E5-large」に切り替える手順をまとめました。

    ・LlamaIndex v0.7.9

    1. Multilingual-E5-large

    「Multilingual-E5-large」は、多言語のテキスト埋め込み用のモデルです。シーケンス長は「514」、埋め込みの次元数は「1024」です。

    デフォルトの「text-embedding-ada-002」と切り替えることで、埋め込みAPIの使用料金なしと、性能向上を期待できます。

    2. ドキュメントの準備

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

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

    ・bocchi.txt

    画像

    3. Colabでの実行

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

    (1) パッケージのインストール。

    # パッケージのインストール
    !pip install llama-index
    !pip install sentence_transformers

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

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

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

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

    (4) Colabにdataフォルダを作成してドキュメントを配置。
    左端のフォルダアイコンでファイル一覧を表示し、右クリック「新しいフォルダ」でdataフォルダを作成し、ドキュメントをドラッグ&ドロップします。

    画像

    (5) ドキュメントの読み込み。

    from llama_index import SimpleDirectoryReader
    
    # ドキュメントの読み込み
    documents = SimpleDirectoryReader("data").load_data()
    print("documents :", documents)

    (6) インデックスの作成。
    埋め込みモデルに「intfloat/multilingual-e5-large」を設定します。

    from langchain.embeddings import HuggingFaceEmbeddings
    from llama_index import GPTVectorStoreIndex, ServiceContext, LangchainEmbedding
    
    # 埋め込みモデルの準備
    embed_model = LangchainEmbedding(HuggingFaceEmbeddings(
        model_name="intfloat/multilingual-e5-large"
    ))
    
    # ServiceContextの準備
    service_context = ServiceContext.from_defaults(
        embed_model=embed_model
    )
    
    # インデックスの生成
    index = GPTVectorStoreIndex.from_documents(
        documents, # ドキュメント
        service_context=service_context, # ServiceContext
    )

    (7) クエリエンジンの作成。
    コンテキストとして取得するチャンク数に「3」を指定します。

    # クエリエンジンの作成
    query_engine = index.as_query_engine(
        similarity_top_k=3  # 取得するチャンク数 (default:2)
    )

    (8) 質問応答。
    3つのチャンクをコンテキストと指定しようし、正解を導きだしました。

    # 質問応答
    response = query_engine.query("ぼっちちゃんの髪の色は?")
    print(response)
    DEBUG:llama_index.indices.utils:> Top 3 nodes:
    > [Node f1c8d99c-eba5-489e-8d5a-0e0659798f3b] [Similarity score:             0.793081] 秀華高校に通う女子。桃色の髪を無造作に伸ばし、いつもジャージを身につけている。自他共に認める引きこもり一歩手前の「陰キャ」で、承認欲求が人一倍強いにもかかわらず、臆病な性格で人と接するのを極度に...
    > [Node 48757bed-c249-44d4-b6ce-a0610b9a9bf0] [Similarity score:             0.791189] ばし放題で前髪で目をつねに隠している。それに加えて野暮ったいジャージ姿でいるため気づかれていないが、実は同性すら見とれるほどの美少女。黙って着飾っていれば「アイドル事務所に入れる」「ビジュアル担...
    > [Node 1245dda8-1f92-4ca9-a60c-563c4f3b0a29] [Similarity score:             0.785498] 下北沢高校に通う女子。後藤ひとりより1学年上。ライトイエロー色の髪をサイドテールにセットし、派手目のファッションを好んで着ている。幼い頃に母親と死別しており、父親も多忙なためさびしい日々を送って...
    DDEBUG:openai:message='Request to OpenAI API' method=post path=https://api.openai.com/v1/completions
    DEBUG:openai:api_version=None data='{"prompt": "Context information is below.\\n---------------------\\n\\u79c0\\u83ef\\u9ad8\\u6821\\u306b\\...", "stream": false, "model": "text-davinci-003", "temperature": 0.0, "max_tokens": 2785}' message='Post details'
    DEBUG:urllib3.connectionpool:https://api.openai.com:443 "POST /v1/completions HTTP/1.1" 200 None
    DEBUG:openai:message='OpenAI API response' path=https://api.openai.com/v1/completions processing_ms=1110 request_id=32c98637be561ef4b8a98d585c5d656e response_code=200
    DEBUG:llama_index.llm_predictor.base:
    桃色
    
    桃色

    関連



     
     

    npaka

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

    あなたへのおすすめ