Как использовать GPT-3 для поиска и рекомендаций текстового контента

Как использовать GPT-3 для поиска и рекомендаций текстового контента


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 для набора документов, вычисления косинусного сходства между ними и поиска наиболее похожих документов вы можете создать высокоэффективную рекомендательную систему, которая поможет пользователям открывать для себя новый и подходящий контент. 



Перевод статьи Moustafa AbdelhamidUsing GPT-3 for Search and Recommendations of Text Content



Report Page