DevGang
Авторизоваться

Быстрый совет: Визуализация векторных вкраплений OpenAI с помощью Plotly Express

В этой статье показано, как визуализировать векторные вкрапления OpenAI для поискового запроса с помощью t-SNE и Plotly Express.

Файл блокнота, использованный в данной статье, доступен на GitHub.

Введение

В замечательной статье автор демонстрирует, как визуализировать векторные вкрапления с помощью нескольких технологий. Мы можем использовать предыдущий набор данных из примера OpenAI, упростить код и использовать Plotly Express для создания аналогичной визуализации. Давайте посмотрим, как это сделать.

Мы будем следовать инструкциям по созданию блокнота.

Заполнение блокнота

Сначала мы установим библиотеку OpenAI:

!pip install openai --quiet

Далее мы определим модель встраивания:

import openai

EMBEDDING_MODEL = "text-embedding-ada-002"

Далее мы зададим наш API-ключ OpenAI:

import os
import getpass

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
openai.api_key = os.environ["OPENAI_API_KEY"]

Теперь мы добавим еще несколько библиотек:

!pip install matplotlib --quiet
!pip install scikit-learn --quiet
!pip install wget --quiet

и импортов:

import numpy as np
import pandas as pd
import wget
import ast

Сейчас мы загрузим из OpenAI CSV-файл, содержащий текст и вкрапления, связанные с зимними Олимпийскими играми 2022 года:

embeddings_path = "https://cdn.openai.com/API/examples/data/winter_olympics_2022.csv"

file_path = "winter_olympics_2022.csv"

if not os.path.exists(file_path):
    wget.download(embeddings_path, file_path)
    print("File downloaded successfully.")
else:
    print("File already exists in the local file system.")

Теперь мы прочитаем файл в Dataframe и преобразуем данные в массив NumPy:

df = pd.read_csv(
    "winter_olympics_2022.csv"
)

# Convert embeddings from CSV str type to NumPy Array
embedding_array = np.array(
    df['embedding'].apply(ast.literal_eval).to_list()
)

Наш поисковый запрос - "золотая медаль по керлингу", и мы получим векторные вкрапления для этого из OpenAI:

from openai.embeddings_utils import get_embedding

query = "curling gold medal"
query_embedding_response = np.array(
    get_embedding(query, EMBEDDING_MODEL)
)

Теперь найдем и сохраним евклидово расстояние между поисковым термином и загруженными ранее векторными вкраплениями:

from scipy.spatial.distance import cdist

df['distance'] = cdist(
    embedding_array,
    [query_embedding_response]
)

и масштабируем значения между 0 и 1, а затем сохраняем их, как показано ниже:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

scaler.fit(df[['distance']])

df['normalised'] = scaler.transform(df[['distance']])

Наконец, мы создадим модель t-SNE и построим график данных с помощью Plotly Express:

import plotly.express as px
from sklearn.manifold import TSNE

# Create a t-SNE model
tsne_model = TSNE(
    n_components = 2,
    perplexity = 15,
    random_state = 42,
    init = 'random',
    learning_rate = 200
)
tsne_embeddings = tsne_model.fit_transform(embedding_array)

# Create a DataFrame for visualisation
visualisation_data = pd.DataFrame(
    {'x': tsne_embeddings[:, 0],
     'y': tsne_embeddings[:, 1],
     'Similarity': df['normalised']}
)

# Create the scatter plot using Plotly Express
plot = px.scatter(
    visualisation_data,
    x = 'x',
    y = 'y',
    color = 'Similarity',
    color_continuous_scale = 'rainbow',
    opacity = 0.3,
    title = f"Similarity to '{query}' visualised using t-SNE"
)

plot.update_layout(
    width = 650,
    height = 650
)

# Show the plot
plot.show()

На выходе должно получиться то, что показано на рисунке 1.

Рисунок 1. Сходство с "золотой медалью по керлингу", визуализированное с помощью t-SNE.
Рисунок 1. Сходство с "золотой медалью по керлингу", визуализированное с помощью t-SNE.

Цвета указывают на сходство с поисковым термином. В данном случае мы видим на графике красные области, которые находятся ближе, и синие области, которые находятся дальше.

Итоги

Визуализация данных может быть использована для получения представления о распределении данных. В этой статье мы рассмотрели, как с помощью векторных вкраплений и поискового запроса создать модель t-SNE и визуализировать ее с помощью Plotly Express. Этот простой пример показал, как можно использовать визуализацию данных для выявления закономерностей и тенденций.

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу