# OpenAIのEmbeddings APIを使って文章の類似度算出をPythonで実装！

> 当サイト【スタビジ】の本記事では、OpenAIのEmbedding APIについての解説と実際にPythonでEmbeddingAPIを使ってテキストの類似度を測るデモを実装していきます。Embedding APIを使うことで非常に安価に高精度の自然言語処理プログラムが作れるのでぜひ理解しておきましょう！

- URL: https://toukei-lab.com/embedding-api
- 公開: 2023.07.17 / 更新: 2026.10.28
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、OpenAIのEmbeddings APIについての解説と実際にPythonでEmbeddingsAPIを使ってテキストの類似度を測るデモを実装していきます。Embeddings APIを使うことで非常に安価に高精度の自然言語処理プログラムが作れるのでぜひ理解しておきましょう！
:::

こんにちは！

データサイエンティストのウマたん([@statistics1012](https://twitter.com/statistics1012?lang=ja))です！

この記事ではOpenAIのEmbeddings APIについてどんなことができるか実装例とともに見ていきたいと思います！

## OpenAIのEmbeddings APIとは？

EmbeddingsAPIの概要について解説したOpenAIのページが以下です。

:::box
<https://openai.com/blog/new-and-improved-embedding-model>
:::

OpenAIのEmbeddings APIを使うと文章をベクトルに変換することができます。

Embeddingsは以下のようなイメージ

![Embedding](/wp-content/uploads/2023/07/b9d7560d4dcc4a97de3a1c7fb1802af5.png)

このベクトル化というのはOpenAIがEmbeddingsAPIを公開する前から存在し[自然言語処理](/natural-language-python)の分野では一般的な手法です。

ただそれを実装するには容量重めの辞書を用意しなくちゃいけなかったり色々面倒なのですが、OpenAIのEmbeddingsAPIを利用するだけで長文も簡単に安価にベクトル化できるのです！

そして精度もOpenAIのEmbeddingsは高いと言われています。

実際に、いくつかの指標で検証した結果が先ほどの公式アナウンスに載っているので是非チェックしてみてください。

![Embedding](/wp-content/uploads/2023/07/f32d9c0b07e5124ef7231484490a2ef1.png)

## OpenAIのEmbeddings APIをPythonで使って類似度を算出してみよう！

それでは早速そんなOpenAIのEmbeddings APIを利用して類似度を算出してみましょう！

:::talk{who="umatan"}
簡単に実装できるので最後まで付いてきてね！
:::

まず、必要なライブラリをインポートしてOpenAIのAPIキーを記述していきます。

OpenAIのAPIキーを取得していない人は公式サイトから取得しましょう。

:::box
**[OpenAI公式HP](https://openai.com/)**
:::

```python
from openai import OpenAI
import numpy as np

client = OpenAI(api_key="<OpenAIのAPIキー>")

# 文章どうしのCos類似度を計算する関数
def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
```

続いて文章をベクトル化していきます！

以下のように記述してください。

```python
def text_to_embedding(text):
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=[text]
    )

    return response.data[0].embedding
```

ここでは、”text-embedding-3-small″というモデルを指定して文章をベクトル化し返してくれる関数を定義しています。

それでは、文章をベクトル化していきましょう！

```python
texts = ["吾輩は猫である", "私は猫です", "データサイエンスが好きです"]

embeddings = []
for text in texts:
  embeddings.append(text_to_embedding(text))
```

これらの文章は何でも問題ありません。

1つ目と2つ目が類似度が高くなることを想定しています。

類似度はCos類似度という指標を使って計算していきます。

Cos類似度は簡単に言うと、**それぞれのベクトルがどれくらい同じ方向を向いているかを表したもの**。

単語ベクトルにCos類似度を当てはめることで文書の類似度を算出することが出来るのです！

$A=[a_1, a_2]$、$B=[b_1, b_2]$の時、Cos類似度は以下のような式で求めます！

$$
Cos類似度 = \frac{a_1b_1+a_2b_2}{\sqrt{a_1^2+a_2^2}\sqrt{b_1^2+b_2^2}}
$$

これは、高校数学で習うCosとベクトルの関係式そのままです。

先ほどの単語ベクトル

:::box
**\[A,B,B,C]→\[A\:1, B\:0.5, C\:0.5]**\
**\[B,B,C,C]→\[B\:0.5, C\:1]**
:::

を当てはめて見ると計算してみると、**0.5477**となりました。

Pythonであれば以下のように計算できますし、

```python
import math

0.75/(math.sqrt(1.5)*math.sqrt(1.25))
25.5/(math.sqrt(26.5)*math.sqrt(26))
```

関数を作って以下のように計算してもよしです。

```python
import numpy as np

def cos_sim(v1, v2):
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

v1 = [ 1 , 0.5, 0.5]
v2 = [0, 0.5, 1]
cos_sim(v1, v2)
```

ここでは、最初に定義しておいたcosine_similarityという関数を使っていきます！（以前はOpenAIのライブラリにも同じ名前の関数が用意されていましたが、今のライブラリにはないので自分で定義しています）

まずは、1つ目と2つ目を比較してみましょう！

```python
cosine_similarity(embeddings[0], embeddings[ 1 ])
```

:::box
0.9514619587040718
:::

結果は約0.95となりました。

続いて、2つ目と3つ目を比較してみましょう！

```python
cosine_similarity(embeddings[ 1 ], embeddings[ 2 ])
```

:::box
0.8207195033580368
:::

結果は約0.82となりました。

想定どおり、1つ目と2つ目の類似度が非常に高い2つ目と3つ目の類似度はそれよりだいぶ低い結果になりました。

※上の数値は、記事を書いた当時のモデル（text-embedding-ada-002）で計算したものです。今のモデル（text-embedding-3-small）では類似度の値の大きさが変わります。

OpenAIの公式APIドキュメントは以下になりますので参考にしてみてください！

:::box
**<https://developers.openai.com/api/docs/guides/embeddings#embedding-models>**
:::

## OpenAIのEmbeddings API　まとめ

ここまでで、<mark>OpenAIのEmbeddings APIを利用して文章の類似度をベクトル化する方法についてまとめてきました！</mark>

最近話題の生成系AIやLLMの実装方法についてより詳しくは当メディアが運営する[**スタアカ**](https://toukei-lab.com/achademy/)の以下のコースを是非チェックしてみてください！

:::box
**・[スタアカ「14.大規模言語モデル（LLM）・生成系AIコース」](https://toukei-lab.com/achademy/courses/llm/)\
・[スタアカ「プロンプトエンジニアリングコース」](https://toukei-lab.com/achademy/courses/prompt-engeneering/)**
:::

[GPTモデル](/gpt)をはじめとした[大規模言語モデル](/llm)の理論やPythonでの扱い方などを幅広く学んでいきます！

[**スタアカ**](https://toukei-lab.com/achademy/)は業界最安級のAIデータサイエンススクールです。

![スタアカ（スタビジアカデミー）のトップページ](/wp-content/uploads/2026/10/achademy-top.jpg)

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1,280円/月（全コースが受講し放題）<br>
プレミアムプラン：129,800円（通常149,800円・買い切り）</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>統計学・機械学習・ディープラーニングを網羅的に学ぶ<br>
生成AI（LLM・RAG・プロンプトエンジニアリング）を学ぶ<br>
SQLとPythonを組み合わせて実データを使った様々なワークを行う<br>
実践的なビジネスフレームワークを学ぶ<br>
マーケティングの実行プラン策定</td>
</tr>
</tbody>
</table>

:::box
**・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析**\
**・世界最大手小売企業のウォルマートの実データを用いた需要予測**\
**・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定**\
**・生成AIのAPIを使ってチャットボットやAIエージェントを作る**
:::

::button[スタアカの受講はこちら]{href="https://toukei-lab.com/achademy/" note="＼今すぐ試す／"}

<mark>**AIデータサイエンスを学んで市場価値の高い人材になりましょう！**</mark>

データサイエンスやAIの勉強方法は以下の記事でまとめています。

<https://toukei-lab.com/data-scientist>

<https://toukei-lab.com/ai-learning>

PythonでのAPIを開発に[FastAPI](/fastapi)を使った方法を以下の記事でまとめています。

<https://toukei-lab.com/fastapi>