Семантический поиск и обогащённые эмбеддинги

Введение в эмбеддинги с OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Семантический поиск

  • Используйте эмбеддинги, чтобы возвращать наиболее похожие результаты на поисковый запрос
  • Пример: семантический поиск для новостного сайта

Принцип работы семантического поиска: текст запроса преобразуется в эмбеддинг, затем вычисляется расстояние между эмбеддингом запроса и эмбеддингами заголовков. Возвращается ближайший заголовок.

Введение в эмбеддинги с OpenAI API

Семантический поиск

Принцип работы семантического поиска: текст запроса преобразуется в эмбеддинг, затем вычисляется расстояние между эмбеддингом запроса и эмбеддингами заголовков. Возвращается ближайший заголовок.

  1. Преобразуйте поисковый запрос и другие тексты в эмбеддинги
  2. Вычислите косинусные расстояния
  3. Извлеките тексты с наименьшим косинусным расстоянием
Введение в эмбеддинги с OpenAI API

Обогащённые эмбеддинги

articles = [
    {"headline": "Economic Growth Continues Amid Global Uncertainty",
     "topic": "Business",
     "keywords": ["economy", "business", "finance"]},
    ...
    {"headline": "1.5 Billion Tune-in to the World Cup Final",
     "topic": "Sport",
     "keywords": ["soccer", "world cup", "tv"]}
]
Headline: Economic Growth Continues Amid Global Uncertainty
Topic: Business
Keywords: economy, business, finance
Введение в эмбеддинги с OpenAI API

Объединение признаков с помощью f-строк

articles = [..., {"headline": "1.5 Billion Tune-in to the World Cup ",
                  "topic": "Sport",
                  "keywords": ["soccer", "world cup", "tv"]}]


def create_article_text(article):
return f"""Headline: {article['headline']} Topic: {article['topic']} Keywords: {', '.join(article['keywords'])}"""
print(create_article_text(articles[-1]))
Headline: 1.5 Billion Tune-in to the World Cup Final
Topic: Sport
Keywords: soccer, world cup, tv
Введение в эмбеддинги с OpenAI API

Создание обогащённых эмбеддингов

article_texts = [create_article_text(article) for article in articles]

article_embeddings = create_embeddings(article_texts)
print(article_embeddings)
[[-0.019609929993748665, -0.03331860154867172, ...],
 ...,
 [..., -0.014373429119586945, -0.005235843360424042]]
Введение в эмбеддинги с OpenAI API

Вычисление расстояний

from scipy.spatial import distance

def find_n_closest(query_vector, embeddings, n=3):

distances = [] for index, embedding in enumerate(embeddings): dist = distance.cosine(query_vector, embedding) distances.append({"distance": dist, "index": index})
distances_sorted = sorted(distances, key=lambda x: x["distance"])
return distances_sorted[0:n]
Введение в эмбеддинги с OpenAI API

Возврат результатов поиска

query_text = "AI"

query_vector = create_embeddings(query_text)[0]
hits = find_n_closest(query_vector, article_embeddings)
for hit in hits: article = articles[hit['index']] print(article['headline'])
Tech Giant Buys 49% Stake In AI Startup
Tech Company Launches Innovative Product to Improve Online Accessibility
India Successfully Lands Near Moon's South Pole
Введение в эмбеддинги с OpenAI API

Давайте потренируемся!

Введение в эмбеддинги с OpenAI API

Preparing Video For Download...