Усі уроки · 44
Шлях 3 · Дорожня карта AI-інженера·Урок 11 з 33

Що таке ембеддинги

Ідея, на якій тримаються семантичний пошук і RAG: перетворення тексту на вектори чисел так, щоб близькі за змістом тексти опинялися поруч. І де ембеддинги застосовують у реальних продуктах.

РівеньНовачокЧас~12 хв

Текст як координати

Уся ідея в одному реченні: ембеддинг присвоює кожному фрагменту тексту набір координат на карті змістів, причому схожі за змістом тексти отримують близькі координати.

Якщо казати технічно: ембеддинг — це спосіб перетворити текст на список чисел (вектор), який передає його зміст.

Ембеддинг передає саме зміст. Речення «Як скинути пароль?» і «Не можу увійти в акаунт» майже не мають спільних слів, але їхні ембеддинги опиняються зовсім поруч. А ось слова «password» і «passport», майже однакові за написанням, потрапляють у віддалені одне від одного місця.

Це важливо, бо саме цей прийом дає комп’ютеру змогу шукати за наміром, а не за написанням. На ньому тримаються «чат із вашими документами», рекомендації та пошук дублікатів — і він лежить в основі всіх технік цього курсу, що йдуть далі.

Картинка в голові

Уявіть, що кожному фрагменту тексту призначено місце на гігантській карті змістів. Близькі за змістом речі стоять поруч, а різні за змістом — далеко одна від одної. Усе інше в цьому уроці — подробиці до цієї єдиної картинки.

Координати з нуля

Якщо ви жодного разу не зустрічали вектор, ось він у три кроки й без математики:

  1. Одне число — це координата на прямій. «Температура: 23» ставить сьогоднішній день десь на прямій від холодного до гарячого.
  2. Два числа — це координата на аркуші паперу. Широта й довгота ставлять місто на карту. Міста, що розташовані поруч на карті, схожі одне на одного єдиним способом, який карта вміє вимірювати: відстанню.
  3. Список чисел — це координата за стількома напрямами. Ембеддинг — той самий прийом: 1536 чисел задають положення в просторі з 1536 напрямами — карті змістів, де «далеко одне від одного» означає «різняться за змістом».

Уявити 1536 напрямів неможливо, і вам це ніколи не знадобиться. Єдине запитання, яке ви ставите цим координатам, — «які з них близькі до цієї?», і воно працює однаково і в 2 вимірах, і в 1536.

Три слова, які зустрічатимуться постійно, — без математики:

  • Вектор — мудровите слово для «списку чисел». І все. Ембеддинг речення — це вектор: кілька сотень чисел, що описують, де це речення «живе» на карті.
  • Розмірність — скільки чисел у списку. 1536-вимірний вектор — це просто список із 1536 чисел. Що більша розмірність, то більше місця для відтінків змісту; на те, як ви цим користуєтеся, це не впливає.
  • Косинусна схожість (cosine similarity) — оцінка «наскільки ці два близькі?», яку обчислює векторний пошук, зазвичай від 0 до 1. Та сама думка — оцінка близько 1. Непов’язані речі — близько 0. Самі ви її не рахуєте — це робить база даних, — але за будь-яким твердженням «ці два тексти пов’язані» стоїть саме це число.

На практиці вектор довгий: сучасні моделі видають від 384 до 3072 чисел на текст. Людина не може уявити 1536-вимірний простір, але математиці це байдуже: «відстань» між векторами досі працює — і слугує замінником схожості за змістом.

Подивіться самі

Нижче — міні-карта звернень до підтримки, розташованих за змістом. Кожен підпис — це звернення; зелений елемент — нове вхідне запитання. Наведіть курсор на будь-яку точку, щоб побачити трьох її найближчих сусідів, — саме це й обчислює семантичний пошук:

Звернення до підтримки на карті змістів
? скинути пароль?
hover any item to see its closest neighbors — this is how semantic search finds related things
акаунтиоплатадоставка

Зверніть увагу, що сталося: запит «скинути пароль?» збігся за наміром зі зверненнями не пам’ятаю пароль і акаунт заблоковано. Пошук за ключовими словами повернув би всі звернення зі словом «пароль» і пропустив би все інше.

Наведіть курсор на звернення про оплату й на звернення про доставку: сусідами кожного виявляються інші звернення з його ж групи. Цю кластеризацію ніхто не програмував — вона сама виходить із карти змістів.

Ось увесь продукт в одній дії: користувач питає своїми словами, а ви повертаєте найближчі точки на карті. Зробити те саме для мільйона документів замість дванадцяти — це вже завдання зберігання, і розв’язують його векторні бази даних.

Як вектор виглядає в коді

Ці числа ви ніколи не читаєте — ви лише порівнюєте їх. Але один раз побачити вектор корисно: так ідея краще запам’ятовується:

Отримайте реальний вектор
from openai import OpenAI
client = OpenAI()

text = "How do I reset my password?"
vector = client.embeddings.create(
  model="text-embedding-3-small", input=text
).data[0].embedding

print(len(vector))   # 1536 — по одній координаті на кожен вимір
print(vector[:4])    # [0.0231, -0.0412, 0.0167, -0.0084]

# Інше речення з тим самим змістом → майже ті самі числа
other = client.embeddings.create(
  model="text-embedding-3-small",
  input="I can't log in to my account",
).data[0].embedding

Від того, яка модель видала ці числа, залежить багато — цьому присвячено наступний урок.

Чому близькі за змістом тексти опиняються поруч?

Модель ембеддингів — це нейромережа, навчена на величезних обсягах тексту. Під час навчання вона дізнається, які слова й фрази трапляються в схожих контекстах, а контексти несуть зміст. «Скинути пароль» і «не пам’ятаю пароль» трапляються в одних і тих самих розмовах, тому мережа вчиться розміщувати їх майже в тих самих координатах.

З цього випливають дві корисні властивості:

  • Пов’язані тексти розташовані поруч. Відстань перетворюється на оцінку схожості, за якою можна ранжувати.
  • Напрям теж несе зміст. Відомий приклад: вектор від «король» до «королева» приблизно такий самий, як від «чоловік» до «жінка» — стосунки зберігаються у вигляді геометрії.

Для чого використовують ембеддинги

На цій одній ідеї тримається безліч сучасних ШІ-продуктів:

Сценарій Як це працює
Семантичний пошук Порахуйте ембеддинги всіх документів і запиту та поверніть найближчих сусідів. Так знаходяться документи про «скидання пароля», навіть якщо в запиті написано «не можу зайти»
Рекомендації Порахуйте ембеддинги товарів чи статей і рекомендуйте те, що лежить поруч із тим, що сподобалося користувачеві
Пошук аномалій Порахуйте ембеддинги подій: усе, що далеко від усіх звичайних кластерів, підозріле — шахрайство, помилки, викиди
Класифікація Порахуйте ембеддинг тексту й віднесіть його до того класу, чиї розмічені приклади лежать поряд, — навчати модель не потрібно
RAG Порахуйте ембеддинги бази знань; коли надходить запитання, візьміть найближчі фрагменти й передайте їх LLM як контекст

Останній рядок таблиці — генерація, доповнена пошуком (retrieval-augmented generation), техніка, що стоїть за «чатом із вашими даними», — працює на ембеддингах. Їй присвячено окремий урок, Що таке RAG, і на ембеддингах тримається все інше в цьому курсі.

Кілька застережень

  • Ембеддинги створює модель, а в моделей є упередженість і сліпі зони. Рідкісні предметні галузі (юридичний жаргон, вузькоспеціальне обладнання) можуть кластеризуватися гірше.
  • Карта вище двовимірна — для людей; реальні ембеддинги живуть у сотнях вимірів, і деякі важливі для нас відмінності при цьому стискаються.
  • Різні моделі видають несумісні вектори: порівнювати можна лише ембеддинги однієї й тієї самої моделі. Як вибрати модель, розповідає урок Моделі ембеддингів і провайдери.

Одна модель — один простір

Ніколи не змішуйте вектори двох різних моделей ембеддингів. Кожна модель задає власний простір змістів, і координати з одного простору в іншому нічого не означають. Якщо ви змінюєте модель, перерахуйте ембеддинги всіх даних заново.

Перевірте себе

Що саме передає ембеддинг?

У двох речень немає жодного спільного слова. Де опиняться їхні ембеддинги?

Що тут називають «розмірністю»?

Ви побудували ембеддинги документів моделлю A, а запиту користувача — моделлю B. Що станеться?