LoginSignup
11
4

はじめに

ChatGPTで有名なOpenAIですが、文章をベクトル化するEmbeddingというサービスも展開しています。
文章をベクトル化することで、2つの文章の類似度を計算できます。
企業のAIチャットbotなどで、ユーザーが求めている情報を提示する際などに使えるようです。

GooogleColaboratoryを開く

本記事では、試しに使ってみるだけなので、GoogleColaboratoryで十分でしょう。

スクリーンショット 2023-07-10 9.38.59.png

ColabにOpenAIをインストール

まずは、ColabにOpenAIをインストールしましょう。
おなじみのpip installでインストールできます。

!pip install openai

スクリーンショット 2023-07-10 9.41.08.png

OpenAIをインポートし、APIキーを設定

インストールできたので、インポートしましょう。
APIキーは、ご自身のキーを使ってください。

import openai

openai.api_key = "ご自身のAPIキー"

スクリーンショット 2023-07-10 9.43.40.png

ベクトル化

準備ができたので、ベクトル化の機能を使ってみます。

input = "テスト"

response = openai.Embedding.create(
    model='text-embedding-ada-002',
    input=input
)

response

モデルとベクトル化したい文章を投げるだけで、ベクトル化されて返ってきます。
モデルには、text-embedding-ada-002を使っています。
トークンの制限は8191、出力されるベクトルの次元は1536みたいです。
とんでもない次元のベクトルですね^_^
スクリーンショット 2023-07-10 9.56.00.png
↑OpenAIのドキュメントから確認できます。

それでは、実行してみましょう。
スクリーンショット 2023-07-10 9.55.07.png
とてつもない量の出力がありますが、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
)

スクリーンショット 2023-07-10 10.07.37.png

ベクトルが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'])

スクリーンショット 2023-07-10 10.08.45.png

おわりに

本記事では、OpenAIのEmbeddingによるベクトル化と、ベクトル同士の類似度の計算まで行いました。
これらの機能を使って、類似度の高い文章を見つけ出し、ユーザーに適切なレスポンスをすることができます。
それはまた別の記事でやってみることにします。

本記事の内容がどなたかの役に立つとうれしいです。
いいねとストックお願いします!!

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4