Усі уроки · 44
Моделі ембеддингів і провайдери
OpenAI, Cohere, Gemini, Jina чи відкриті Sentence Transformers? Розмірність, вартість, багатомовність — і практичний спосіб вибрати модель ембеддингів.
Одна ідея — багато моделей
Ембеддинг — це просто вектор чисел, але які саме числа отримає текст, цілком залежить від моделі, якою ви його обробляєте. А моделей багато. Вони різняться якістю, ціною, охопленням мов, розміром вектора та тим, де працюють. Вибір моделі — одне з перших серйозних рішень у будь-якому проєкті із семантичним пошуком чи RAG.
Якщо ви тут уперше: ембеддинг — це список чисел, що замінює зміст тексту, тобто координати на карті змістів. Схожий зміст — схожі числа. Якщо це досі здається магією, спершу прочитайте урок Що таке ембеддинги. Адже погана модель розміщує ваші тексти не там, де треба, і жоден хитрий код далі по ланцюжку цього не виправить.
Одне правило
Ембеддинги порівнянні лише в межах однієї моделі. Спершу виберіть модель, побудуйте нею всі ембеддинги, а якщо коли-небудь змінете модель — перерахуйте всю колекцію. Жодного змішування.
Основні варіанти
| Модель / провайдер | Тип | Типова розмірність | Ціна | Багатомовність |
|---|---|---|---|---|
| OpenAI text-embedding-3-small / -large | API | 1536 / 3072 | низька / помірна | хороша |
| Cohere embed-v3 / embed-v4 | API | 1024 / до 1536 | помірна | сильна, 100+ мов |
| Gemini embedding (gemini-embedding-001) | API | 3072 (можна зменшувати) | щедрий безкоштовний тариф | сильна |
| Jina embeddings v3 | API | 1024 | помірна | сильна, довгий контекст |
| Sentence Transformers | відкритий код, локально | 384–1024 | безкоштовно, на вашому обладнанні | залежить від моделі |
Два стовпці, які варто розшифрувати:
- Тип. «API» означає, що модель працює на комп’ютерах провайдера: ви надсилаєте текст інтернетом і отримуєте числа назад — налаштовувати нічого не треба, але текст залишає вашу інфраструктуру, а платити доводиться за використання. «Відкритий код, локально» означає, що модель працює на вашій власній машині: нічого не йде назовні й немає плати за використання, але обладнання — ваше.
- Розмірність. Єдиний стовпець, що на вигляд лякає, хоча боятися нічого: одна розмірність — це просто одне число в списку. 1024-вимірний ембеддинг — це список із 1024 чисел, що описують один текст. Більше чисел — більше місця для відтінків змісту; менше чисел — менше місця на диску й швидший пошук. У вашому коді від цього нічого не змінюється: що означають числа, визначає сама модель.
Короткий огляд:
- OpenAI Embeddings API — вибір за замовчуванням для багатьох команд: два рядки коду, добра якість, оплата за токени. Мала модель настільки дешева, що перерахунок ембеддингів усієї бази знань обходиться в центи.
- Cohere орієнтована саме на пошук і вилучення інформації: сильна багатомовна підтримка та окремі режими для пошуку, класифікації й реранкінгу (коли беруть короткий список знайдених кандидатів і заново оцінюють їх, щоб найкращі опинилися зверху).
- Gemini Embedding пропонує якість найвищого рівня та щедрий безкоштовний тариф — чудово підходить для прототипів і побічних проєктів.
- Jina — сильний незалежний варіант, популярний для довгих документів.
- Sentence Transformers — бібліотека для Python з відкритим кодом. Моделі працюють локально — на вашому ноутбуці чи сервері. Жодних рахунків за API, дані не залишають вашу інфраструктуру, а для багатьох класичних завдань (схожість коротких текстів, кластеризація) якості достатньо.
Один зміст — різні мови
Багатомовні ембеддинги тримаються на одній властивості: модель навчено так, що той самий зміст опиняється в тому самому місці незалежно від мови. Поводіть курсором по карті: у кожному кластері одне поняття чотирма мовами, а запит «merci» знаходить свій кластер, хоча в усіх даних немає жодного французького слова:
Наведіть курсор спочатку на «hello», потім на «thank you»: сусіди лишаються всередині кластера — одразу всіма мовами. Уся суть — в одній картинці.
Це означає, що багатомовна модель дає змогу шукати в англомовній базі знань із запитом українською — або побудувати один індекс для користувачів із трьох країн. Уже тільки це варто перевірити насамперед, якщо ваш продукт не лише англомовний.
Перевірте свої мови
Якщо ваш контент не англійською, перевірте модель саме на ваших мовах, перш ніж на неї покладатися. На практиці заяви про багатомовність сильно різняться, а «підтримує 100 мов» рідко означає «однаково добре».
Як вибирати на практиці
Не ускладнюйте: на це рішення вистачить кількох годин.
- Спершу — чутливість даних. Якщо текст не може залишати вашу інфраструктуру, вибір уже звузився до Sentence Transformers або моделі на власних серверах.
- Потім — мови. Якщо контент не англійською, складіть короткий список із Cohere, Gemini, Jina або багатомовної відкритої моделі — і перевірте на ваших реальних даних.
- Потім — вартість у вашому масштабі. Прикиньте кількість токенів: ембеддинги для бази знань із 10 тис. документів, побудовані дешевою API-моделлю, — це похибка округлення. Величезні корпуси текстів схиляють до локальних моделей.
- Потім — розмірність. Великі вектори трохи виразніші, але дорожчі в зберіганні та пошуку. Для більшості проєктів вистачає 384–1536.
- І нарешті, перевірте на своєму завданні. Візьміть 20 реальних запитів, побудуйте ембеддинги документів і перегляньте очима найкращі результати. Десять хвилин такої перевірки цінніші за будь-який рейтинг.
І пам’ятайте: вибір оборотний. Зміна моделі означає перерахунок усіх ембеддингів, тому обгорніть виклик ембеддингів в одну функцію у вашій кодовій базі. Тоді модель стає звичайним значенням конфігурації:
# embed.py — ЄДИНЕ місце, яке знає, яку модель ви використовуєте
MODEL = "text-embedding-3-small"
def embed(texts: list[str]) -> list[list[float]]:
"""Turn texts into vectors. Swap the provider here, nowhere else."""
response = client.embeddings.create(model=MODEL, input=texts)
return [item.embedding for item in response.data]
# Переходите на локальну модель? Міняйте тіло функції, сигнатуру залиште:
#
# from sentence_transformers import SentenceTransformer
# _m = SentenceTransformer("all-MiniLM-L6-v2")
# def embed(texts): return _m.encode(texts).tolist()Де потім зберігаються вектори й як шукати серед мільйонів із них — розповідає наступний урок. А причина, з якої все це варто налаштовувати, — RAG: передача потрібних фрагментів LLM у момент, коли вони їй потрібні.
Ви вибираєте модель ембеддингів для лікарні: записи пацієнтів за жодних умов не можуть залишати корпоративну мережу. З чого починається вибір?
Ви переводите проєкт з ембеддингів OpenAI на модель із відкритим кодом. Що потрібно зробити?
Що дає багатомовна модель ембеддингів?
Що таке «розмірність» ембеддингу?