はじめに
ChatGPTで有名なOpenAIですが、文章をベクトル化するEmbedding
というサービスも展開しています。
文章をベクトル化することで、2つの文章の類似度を計算できます。
企業のAIチャットbotなどで、ユーザーが求めている情報を提示する際などに使えるようです。
GooogleColaboratoryを開く
本記事では、試しに使ってみるだけなので、GoogleColaboratoryで十分でしょう。
ColabにOpenAIをインストール
まずは、ColabにOpenAIをインストールしましょう。
おなじみのpip install
でインストールできます。
!pip install openai
OpenAIをインポートし、APIキーを設定
インストールできたので、インポートしましょう。
APIキーは、ご自身のキーを使ってください。
import openai
openai.api_key = "ご自身のAPIキー"
ベクトル化
準備ができたので、ベクトル化の機能を使ってみます。
input = "テスト"
response = openai.Embedding.create(
model='text-embedding-ada-002',
input=input
)
response
モデルとベクトル化したい文章を投げるだけで、ベクトル化されて返ってきます。
モデルには、text-embedding-ada-002
を使っています。
トークンの制限は8191
、出力されるベクトルの次元は1536
みたいです。
とんでもない次元のベクトルですね^_^
↑OpenAIのドキュメントから確認できます。
それでは、実行してみましょう。
とてつもない量の出力がありますが、1546次元のベクトルが出力されるので、ミスではありません。
実行結果から、ベクトルにアクセスするには、response["data"][0]["embedding"]
です。
類似度を計算してみる
ベクトル化はできたので、次は類似度を計算してみましょう。
まずは、ベクトルを2つ用意します。
input1 = "テスト"
input2 = "試験"
response1 = openai.Embedding.create(
model='text-embedding-ada-002',
input=input1
)
response2 = openai.Embedding.create(
model='text-embedding-ada-002',
input=input2
)
ベクトルが2つ用意できたので、類似度を求めてみましょう。
Embeddingには、類似度を求めるツールが用意されています(cosine_similarity
)。
cosine_similarity
では、内積計算を行うことで、ベクトルの類似度を算出します。
もし内積がわからない方がいらっしゃいましたら、高校数学ですので復習してみて下さい^_^
cosine_similarity
の使い方は簡単で、2つのベクトルを与えるだけです。
from openai.embeddings_utils import cosine_similarity
cosine_similarity(response1["data"][0]['embedding'], response2["data"][0]['embedding'])
おわりに
本記事では、OpenAIのEmbeddingによるベクトル化と、ベクトル同士の類似度の計算まで行いました。
これらの機能を使って、類似度の高い文章を見つけ出し、ユーザーに適切なレスポンスをすることができます。
それはまた別の記事でやってみることにします。
本記事の内容がどなたかの役に立つとうれしいです。
いいねとストックお願いします!!