Багатовекторні моделі вбудовувань (із пізньою взаємодією) із Sentence Transformers
MultiVectorEncoder для пошуку з пізньою взаємодією у стилі ColBERT. Будь-який чекпойнт PyLate і будь-який чекпойнт Stanford-NLP ColBERT завантажується безпосередньо в нього, а моделі colpali-engine для пошуку у візуальних документах також можна використовувати через той самий знайомий API, який ви вже застосовуєте для щільних, розріджених моделей і моделей переранжування.
Якщо звичайна модель вкладень стискає весь текст в один вектор, багатовекторна модель зберігає по одному вектору на токен і оцінює відповідність запиту документу за допомогою оператора MaxSim. Це зберігає інформацію про зіставлення на рівні токенів, яку один вектор змушений усереднювати, що зазвичай забезпечує кращий пошук ціною більшого індексу. Це також найсучасніший підхід для пошуку у візуальних документах, де текстовий запит зіставляється безпосередньо із зображеннями сторінок без проміжного етапу OCR.
У цій статті ми покажемо, як користуватися цими моделями: завантажувати різні формати чекпойнтів, кодувати й оцінювати дані, підключати моделі до пошукового стеку, запускати їх на зображеннях сторінок і підтримувати доступну вартість індексу. Усе нижче працює після звичайної команди pip install -U sentence-transformers.
Зміст
- Що таке багатовекторні моделі?
- Оператор MaxSim
- Переваги та вартість
- Встановлення
- Завантаження моделі
- Перевірка конфігурації чекпойнта
- Кодування запитів і документів
- Оцінювання за допомогою MaxSim
- Величина оцінки та MeanMaxSim
- Семантичний пошук
- Пошук і переранжування
- Індексація
- Пошук у візуальних документах
- Пошук аудіо
- Пошук відео
- Інтерпретованість
- Об’єднання токенів
- Прискорення інференсу
- Оцінювання моделі
- Перехід із PyLate або colpali-engine
- Підтримувані моделі
- Подяки
- Додаткові ресурси
Що таке багатовекторні моделі?
Щільна модель вкладень читає текст і повертає один вектор фіксованого розміру. Усе, що помітила модель, має вміститися в цих 384, 768 або 1024 числах, а схожість визначається одним скалярним добутком двох таких узагальнень. Це працює надзвичайно добре, але стискання має специфічний недолік: рідкісна сутність, точний ідентифікатор або важливе речення в довгому уривку змушені конкурувати за місце в одному векторі. Запит із кількома вимогами одразу стикається з тією самою проблемою. Для «зеленого дивана з дерев’яними ніжками та округлими подушками» один вектор має змішати всі чотири ознаки в одну точку, тому зелений диван із неправильними ніжками опиняється поруч із тим, який ви насправді шукали.
Багатовекторна модель (її також називають моделлю з пізньою взаємодією або моделлю у стилі ColBERT — за назвою статті про ColBERT) уникає такого стискання. Вона використовує той самий трансформер, але замість об’єднання вкладень токенів в один вектор проектує кожне вкладення токена до невеликої розмірності (класично 128) і зберігає їх усі. Документ із 9 токенів стає матрицею 9x128, а не вектором 1x128.
Взаємодія між запитом і документом відкладається до моменту оцінювання — звідси й назва «пізня взаємодія». Крос-енкодер взаємодіє рано: обидва тексти проходять через модель разом, що забезпечує точність, але не залишає нічого для попереднього обчислення, оскільки кожен документ потрібно повторно кодувати для кожного нового запиту. Бі-енкодер, яким є описана вище щільна модель вкладень, майже не взаємодіє (один скалярний добуток двох готових узагальнень), і саме це дає змогу один раз закодувати колекцію та швидко виконувати запити. Пізня взаємодія розташована між цими підходами: документи й далі кодуються незалежно та можуть індексуватися офлайн, але під час оцінювання кожен токен запиту порівнюється з кожним токеном документа, залишаючи значно більше можливостей для взаємодії.
Оператор MaxSim
Оцінювання використовує MaxSim: для кожного токена запиту береться його найбільша схожість із будь-яким токеном документа, після чого ці максимуми підсумовуються для всього запиту.
Оскільки вкладення токенів нормалізовано за L2-нормою, кожен із цих скалярних добутків є косинусною схожістю в [-1, 1], тому вся сума лежить у межах [-num_query_tokens, num_query_tokens].
Цей оператор можна розуміти як м’яке вирівнювання: кожен токен запиту вказує на токен документа, який найкраще його пояснює, а оцінка показує, наскільки добре документ загалом підтверджує запит.
Встановлення
Багатовекторні моделі працюють зі звичайним встановленням:
pip install -U sentence-transformers
Для візуального пошуку у документах у стилі ColPali також потрібні залежності для роботи із зображеннями (див. Встановлення для всіх додаткових компонентів і Мультимодальні моделі вкладень і переранжування для загальної підтримки мультимодальності):
pip install -U "sentence-transformers[image]"
Sentence Transformers v6.0 потребує
transformersv5.x,torch2.2+ іhuggingface-hubv1.x. Якщо ви фіксуєте будь-яку з цих залежностей на нижчій версії, спершу заплануйте оновлення. Повний список несумісних змін дивіться в посібнику з міграції.
Перекладено автоматично з англійської. Оригінал статті — за посиланням нижче.