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

LangChain の Embeddings を試す

    LangChain の Embeddings の機能を試したのでまとめました。

    前回

    1. Embeddings

    「Embeddings」は、LangChainが提供する埋め込みの操作のための共通インタフェースです。

    「埋め込み」は、意味的類似性を示すベクトル表現です。テキストや画像をベクトル表現に変換することで、ベクトル空間で最も類似したテキストを探すセマンティック検索などに利用できます。

    現在サポートしている、「Embedding」のプロバイダーは、次の3つです。

    ・OpenAI API
    ・Hugging Face
    ・Cohere API

    現在サポートしている、「Embedding」のメソッドは、次の2つです。
    一部のプロバイダーが、ドキュメントとクエリに対して異なる埋め込みメソッドを持つため、2つに別れています。

    ・embed_query() : 単一のテキストを埋め込みに変換。
    ・embed_documents() : 複数のテキストを埋め込みに変換。

    2. OpenAI API による埋め込み生成

    Google Colabでの埋め込み生成の手順は、次のとおりです。

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

    !pip install langchain
    !pip install openai

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

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

    (3) OpenAI APIによる埋め込みの生成。

    from langchain.embeddings import OpenAIEmbeddings
    
    # テキストの準備
    text = "これは、テストドキュメントです。"
    
    # OpenAI APIによる埋め込みの生成
    embeddings = OpenAIEmbeddings()
    query_result = embeddings.embed_query(text)
    doc_result = embeddings.embed_documents([text])
    
    # 確認
    print(len(query_result))
    print(query_result)
    print(len(doc_result[0]))
    print(doc_result)
    1536
    [-0.007878163829445839, -0.0035345633514225483, ..., -0.006051199045032263]
    1536
    [[-0.007878163829445839, -0.0035345633514225483, ..., -0.006051199045032263]]

    内部的には、「text-embedding-ada-002」が使われており、次元数は、1536になります。

    3. HuggingFace による埋め込み生成

    Google Colabでの埋め込み生成の手順は、次のとおりです。

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

    !pip install langchain
    !pip install sentence_transformers

    (2) HuggingFaceによる埋め込み生成。

    from langchain.embeddings import HuggingFaceEmbeddings
    
    # テキストの準備
    text = "これは、テストドキュメントです。"
    
    # HuggingFaceによる埋め込み生成
    embeddings = HuggingFaceEmbeddings()
    query_result = embeddings.embed_query(text)
    doc_result = embeddings.embed_documents([text])
    
    # 確認
    print(len(query_result))
    print(query_result)
    print(len(doc_result[0]))
    print(doc_result)
    768
    [ 3.66279483e-02 -2.41777413e-02 ... -2.44669598e-02]
    768
    [[ 3.66279483e-02 -2.41777413e-02 ... -2.44669598e-02]]

    内部的には、「sentence-transformers/all-mpnet-base-v2」が使われており、次元数は、768になります。

     4. sbert-jsnli-luke-japanese-base-liteによる埋め込み生成

    HuggingFaceEmbeddingsのmodel_nameで別モデルを指定することもできます。今回は「sbert-jsnli-luke-japanese-base-lite」を使います。

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

    !pip install langchain
    !pip install sentence_transformers

    (2) HuggingFaceによる埋め込み生成。

    from langchain.embeddings import HuggingFaceEmbeddings
    
    # テキストの準備
    text = "これは、テストドキュメントです。"
    
    # HuggingFaceによる埋め込み生成
    embeddings = HuggingFaceEmbeddings(
        model_name="oshizo/sbert-jsnli-luke-japanese-base-lite"
    )
    query_result = embeddings.embed_query(text)
    doc_result = embeddings.embed_documents([text])
    
    # 確認
    print(len(query_result))
    print(query_result)
    print(len(doc_result[0]))
    print(doc_result)
    768
    [-6.99824333e-01 -2.11417049e-01 ...]
    768
    [[-6.99824333e-01 -2.11417049e-01 ...]]


    次回



     
     

    npaka

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

    あなたへのおすすめ