Семантический поиск по тексту
Строим поисковик по отзывам на продукты: embed запроса → cosine similarity со всеми документами → топ-N результатов. Полный рабочий пример на датасете Amazon Fine Food Reviews.
Реализуйте search_reviews на собственном небольшом датасете (≥20 записей). Протестируйте запросы, которые не содержат ни одного слова из документов, но семантически релевантны.
Проверка задания
Скопируйте и адаптируйте под свой контекст. Текст в треугольных скобках — то, что нужно заменить.
import pandas as pd
import numpy as np
from ast import literal_eval
from openai import OpenAI
client = OpenAI()
def get_embedding(text, model="text-embedding-3-small"):
return client.embeddings.create(
input=[text], model=model
).data[0].embedding
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def search_docs(df, query, n=3):
q_emb = get_embedding(query)
df["sim"] = df["embedding"].apply(lambda x: cosine_similarity(x, q_emb))
return df.sort_values("sim", ascending=False).head(n)