はじめに
おはようございます。こんにちは。こんばんは。GMOアドマーケティングのY-Kです。
前にBERTを使って文をベクトルに変換してからなんやかんやする記事を書いてから約半年が経過したのですが、その間にChatGPTが大きく流行り、言語生成系AIに大きな風が吹きました。
というわけで今回は、OpenAIのEmbeddings APIを利用し、記事タイトルの類似度を見てみようと思います。
準備
今回も例のごとくGoogle Colab上で行います。https://colab.research.google.com/?hl=ja
OpenAIのEmbeddings APIを利用できる様にAPIキーは事前に取得しておいてください。
まずは必要なライブラリを使えるようにします。
1 |
!pip install openai |
1 2 3 |
import torch import openai openai.api_key = "XXXX" |
tokenizerによる文の分割などもAPI側で行なってくれるので、前回と比べてとても楽になりました。
文のベクトル化
Embeddingsモデルはいくつかあるのですが、今回はtext-embedding-ada-002モデルを利用します。入力1000トークンあたり、$0.0004 ドルかかります。
OpenAIのEmbeddingsモデルのページ
1 2 3 4 5 6 7 |
def sentence_to_vector(sentence): res = openai.Embedding.create( model='text-embedding-ada-002', input=sentence ) return torch.tensor(res['data'][0]["embedding"]) |
これで文をベクトルに変換できる様になりました。
記事タイトルの類似度計算
前回は文の類似度を計算して終わりましたが、今回は応用として記事のタイトルの類似度を算出していきたいと思います。まずは、使用するデータをChatGPTに生成してもらいます。 今回は記事タイトル「AIが医療診断の精度を大幅に向上させる」に対して類似度が高い記事タイトルを探していこうと思います。
対象の記事タイトルをベクトル化します。
1 2 |
sentence = "AIが医療診断の精度を大幅に向上させる" TARGET_VECTOR = sentence_to_vector(sentence) |
1 2 3 4 5 6 7 8 9 10 11 |
import pandas as pd article_df = pd.DataFrame({"title": ["AI技術の進展により、医療診断の正確性が飛躍的に向上", "サイバーセキュリティの脅威がますます増加、対策の重要性が高まる", "最新AIテクノロジーが医療診断に革命をもたらす", "テクノロジーがもたらす教育の変革:デジタル学習の普及と課題", "AIの登場により、医師の診断能力が向上する可能性", "宇宙探査の新たな時代:民間企業の参入と宇宙開発の可能性", "AIが医療診断のエラーレートを劇的に減少させる", "人工知能が医療診断における新たな道を開く", "持続可能なエネルギーの未来:再生可能エネルギーの普及と課題", "都市の未来:スマートシティの実現と利益、課題"]}) |
1 2 3 4 5 |
def calc_similarity(sentence): sentence_vector = sentence_to_vector(sentence) score = torch.nn.functional.cosine_similarity(TARGET_VECTOR, sentence_vector, dim=0).detach().numpy().copy() return score |
1 |
article_df["similarity"] = article_df["title"].apply(lambda title: calc_similarity(title)) |
1 |
article_df.sort_values('similarity', ascending=False) |
1 2 3 4 5 6 7 8 9 10 11 |
title similarity 0 AI技術の進展により、医療診断の正確性が飛躍的に向上 0.960519 4 AIの登場により、医師の診断能力が向上する可能性 0.951519 6 AIが医療診断のエラーレートを劇的に減少させる 0.942112 2 最新AIテクノロジーが医療診断に革命をもたらす 0.936036 7 人工知能が医療診断における新たな道を開く 0.925062 1 サイバーセキュリティの脅威がますます増加、対策の重要性が高まる 0.818200 3 テクノロジーがもたらす教育の変革:デジタル学習の普及と課題 0.809778 9 都市の未来:スマートシティの実現と利益、課題 0.801115 5 宇宙探査の新たな時代:民間企業の参入と宇宙開発の可能性 0.796085 8 持続可能なエネルギーの未来:再生可能エネルギーの普及と課題 0.766240 |
さいごに
今回はOpenAIのEmbeddings APIを利用して文の意味の類似度を算出するタスクを行いました。利用にお金はかかりますが、手軽に高精度で文をベクトル化することができるので、さまざまなサービスに応用が効くと思います。