LangChain の Embeddings を試す
LangChain の Embeddings の機能を試したのでまとめました。
前回
1. Embeddings
「Embeddings」は、LangChainが提供する埋め込みの操作のための共通インタフェースです。
「埋め込み」は、意味的類似性を示すベクトル表現です。テキストや画像をベクトル表現に変換することで、ベクトル空間で最も類似したテキストを探すセマンティック検索などに利用できます。
現在サポートしている、「Embedding」のプロバイダーは、次の3つです。
現在サポートしている、「Embedding」のメソッドは、次の2つです。
一部のプロバイダーが、ドキュメントとクエリに対して異なる埋め込みメソッドを持つため、2つに別れています。
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 ...]]