テキストの類似度

OpenAI API で学ぶ埋め込み入門

Emmanuel Pire

Senior Software Engineer, DataCamp

ここまでの振り返り

  • 意味的に類似したテキストは、ベクトル空間内で近くに埋め込まれる
  • 距離を測定することで、類似度を測定できる
  • 埋め込みの応用例:
    • セマンティック検索
    • レコメンデーション
    • 分類

A plot of the 2D vector space showing that reviews with the same sentiment and topic are mapped more closely together in the vector space.

OpenAI API で学ぶ埋め込み入門

類似度の測定

コサイン距離

from scipy.spatial import distance

distance.cosine([0, 1], [1, 0])
1.0
  • 範囲:0~2
  • 数値が小さい = 類似度が高い

Two vectors with a straight line drawn between them.

OpenAI API で学ぶ埋め込み入門

例: 見出しの類似性の比較

A list of dictionaries containing the headlines and their embeddings.

OpenAI API で学ぶ埋め込み入門

例: 見出しの類似度の比較

def create_embeddings(texts):
  response = client.embeddings.create(
    model="text-embedding-3-small",
    input=texts
  )
  response_dict = response.model_dump()

  return [data['embedding'] for data in response_dict['data']]
print(create_embeddings(["Python is the best!", "R is the best!"]))

print(create_embeddings("DataCamp is awesome!")[0])
[[0.0050565884448587894, ..., , -0.04000323638319969],
 [-0.0018890155479311943, ..., -0.04085670784115791]]

[0.00037010075175203383, ..., -0.021759100258350372]
OpenAI API で学ぶ埋め込み入門

例: 見出しの類似性の比較

from scipy.spatial import distance
import numpy as np

search_text = "computer"
search_embedding = create_embeddings(search_text)[0]
distances = []
for article in articles:
dist = distance.cosine(search_embedding, article["embedding"])
distances.append(dist)
min_dist_ind = np.argmin(distances)
print(articles[min_dist_ind]['headline'])
Tech Company Launches Innovative Product to Improve Online Accessibility
OpenAI API で学ぶ埋め込み入門

練習しましょう!

OpenAI API で学ぶ埋め込み入門

Preparing Video For Download...