Статья рассматривает принцип использования векторов GPT-3 для рекомендательной системы, которая посредством косинусного сходства (англ. cosine similarity) находит похожие документы.
GPT-3 — это языковая модель от OpenAI, обученная на огромных количествах текстовых данных.
В число ключевых особенностей GPT-3 входит способность генерировать высококачественный текст, а также векторные представления входного текста, которые применяются для разных задач обработки естественного языка, например для анализа сходства документов.
Шаг 1. Генерация векторов GPT-3
Работа с векторами GPT-3 для рекомендательной системы начинается с генерации векторов для набора документов. Для этой цели задействуется OpenAI GPT-3 API, который позволяет отправить блок текста и получить в ответ векторное представление.
Чтобы сгенерировать векторы для набора документов, вы должны отправить каждый документ в API и сохранить возвращенные векторы в массиве. Ниже приведен пример генерации векторов GPT-3 для набора документов в Python:
import openai
# Список документов:
docs = ["document1", "document2", "document3"]
# Получение векторных представлений этих документов
vectors = []
model = "text-embedding-ada-002"
for doc in docs:
# Для аутентификации требуется переменная окружения: OPENAI_API_KEY="YOUR-OPEN-AI-KEY"
response = openai.Embedding.create(input = [doc], model=model)
openai.Davinci.create_embedding
vector = response["data"][0]["embedding"]
vectors.append(vector)
Шаг 2. Вычисление косинусного коэффициента
Получив векторы для набора документов, вы применяете показатели косинусного сходства для выявления сходства между ними. Косинусное сходство — это мера подобия между двумя ненулевыми векторами пространства внутреннего произведения, которая измеряет косинус угла между ними. Косинусное сходство между двумя векторами вычисляется по следующей формуле:
cosine_similarity = (A * B) / (||A|| * ||B||)
Где A
и B
— векторы для двух документов, а ||A||
и ||B||
— векторные величины. Ниже приведен пример вычисления косинусного сходства между всеми парами документов в Python:
import numpy as np
# Вычисление косинусного сходства
cosine_similarities = []
for i in range(len(vectors)):
for j in range(i+1, len(vectors)):
cosine_similarities.append(np.dot(vectors[i], vectors[j])/(np.linalg.norm(vectors[i])*np.linalg.norm(vectors[j])))
Шаг 3. Поиск наиболее похожих документов
Вычислив показатели косинусного сходства для всех пар документов, вы находите наиболее похожие документы. Для этого следует расположить результаты в порядке убывания и выбрать N
количество первых из них.
Полученный список документов можно использовать для рекомендации пользователям схожего контента. Ниже представлен пример поиска похожих документов с помощью косинусного сходства в Python:
import numpy as np
# Определение набора документов
docs = ["document1", "document2", "document3", "document4"]
# Генерация GPT-3 векторов для документов
vectors = []
for doc in docs:
# Код для генерации векторных представлений документа с помощью OpenAI GPT-3 API
vector = # ...
vectors.append(vector)
# Поиск наиболее похожих документов
similar_documents = []
for i in range(len(vectors)):
for j in range(i+1, len(vectors)):
cosine_similarity = np.dot(vectors[i], vectors[j]) / (np.linalg.norm(vectors[i]) * np.linalg.norm(vectors[j]))
if cosine_similarity > threshold:
similar_documents.append((docs[i], docs[j], cosine_similarity))
#Расположение документов на основе показателей сходства в порядке убывания
similar_documents.sort(key=lambda x: x[2], reverse=True)
#Вывод N количества первых похожих документов
for doc in similar_documents[:N]:
print(doc[0], "is similar to", doc[1], "with a cosine similarity of", doc[2])
В этом примере docs
— список строк, представляющих набор документов. vectors
— список векторов GPT-3, сгенерированных для каждого документа посредством OpenAI GPT-3 API.
Вложенные циклы перебирают все пары документов и вычисляют косинусное сходство между ними. Документы, чьи показатели сходства превышают определенное пороговое значение, добавляются в список similar_documents
.
Похожие документы располагаются на основе показателей косинусного сходства в порядке убывания, после чего происходит вывод N количества первых похожих документов.
Примечание. Вместо #Код для генерации векторных представлений документа с помощью OpenAI GPT-3 API
подставляется фактический код для генерации векторов GPT-3.
Шаг 4. Практическое применение
Вы можете провести индексацию векторов в Elasticsearch или ArangoDB так, чтобы обеспечить поддержку косинусного сходства.
Например, в Elasticsearch можно использовать тип поля dense_vector
(плотный вектор), как описано здесь. Рассмотрим, как должен выглядеть маппинг (англ. mapping), т.е. процесс определения схемы документа, описывающей свойства его полей:
{
"mappings": {
"properties": {
"my_vector": {
"type": "dense_vector",
"dims": 1024,
"similarity": "l2_norm",
"index": true
},
"document" : {
"type" : "text"
}
}
}
}
Я не вычислял косинусное сходство с помощью ArangoDB, но вы можете самостоятельно это сделать, опираясь на документацию.
Отметим, что поиск векторного сходства требует больших вычислительных затрат. Поэтому для этой цели рекомендуются такие движки, как Faiss и NMSLIB. Они созданы для обработки больших наборов векторных данных с быстрым поиском сходства.
Обратите внимание, что данная статья дает лишь общее представление об обязательных этапах работы. За более подробной информацией по реализации каждого шага можно обратиться к документации Elasticsearch и ArangoDB.
Заключение
Мы рассмотрели принцип использования векторов GPT-3 для рекомендательной системы, которая задействует косинусное сходство для поиска похожих документов.
Посредством генерации векторов GPT-3 для набора документов, вычисления косинусного сходства между ними и поиска наиболее похожих документов вы можете создать высокоэффективную рекомендательную систему, которая поможет пользователям открывать для себя новый и подходящий контент.
Читайте также:
- Как зарабатывать с помощью Python в 2023 году
- Создание приложения ChatGPT в SwiftUI
- Как создать чат-бот ChatGPT с пользовательской базой знаний
Читайте нас в Telegram, VK и Дзен
Перевод статьи Moustafa Abdelhamid: Using GPT-3 for Search and Recommendations of Text Content