170 похожих чатов

Всем привет! Подскажите, пожалуйста, для поиска использую e5 с векторами

1024 float32
Качество поиска фича similarity между запросом и документом супер растит, но соответственно векторы довольно большие выходят. Подумал о квантизации e5 в int8, но пока не тестил. Подскажите, пожалуйста, может кто-нибудь сталкивался. Лучше взять квантованную сильную модельку либо маленькую неквантованную. Скажем multilingual e5 против rubert-tiny-2 как будут работать по качеству? Сильно ли оно просядет при квантизации e5 в int8 и сильнее ли, чем выдают более слабые модельки?

21 ответов

29 просмотров

так-то ещё есть вариант старого-доброго PCA

Ростислав-Корст Автор вопроса

А новые векторы, то есть как только запрос пришёл и мы его векторизовали, можно проскорить обученным pca быстро?

Ростислав-Корст Автор вопроса
Ilya Gusev
ну да

Дефолтным pca из sklearn?)

Ростислав Корст
Дефолтным pca из sklearn?)

Если у вас есть обучающие данные (тысячи пар запрос+релевантный документ), то как вариант, можно вместо PCA (который полностью unsupervised) обучить supervised сжималку нужной вам размерности (один линейный слой, прицепленный поверх замороженной E5), которая бы оптимизировала, скажем, MultipleNegativesRankingLoss косинусной близости всех пар запрос-документ в батче. У меня похожая штука хорошо работала в несколько другой задаче (но тоже на сравнение векторов).

А вообще, из текста вопроса не 100% понятно, какую именно проблему вы пытаетесь решить: размер эмбеддингов, из которых вы делаете поисковый индекс (и тогда есть смысл их жать разными способами) или размер модели, эти эмбеддинги извлекающей (ибо rubert-tiny-2 делалась как раз ради того, чтобы сам энкодер был маленький).

Ростислав-Корст Автор вопроса
David Dalé
А вообще, из текста вопроса не 100% понятно, какую...

С временем инференса особо проблемы нет, а вот с размером векторов есть. Векторный поиск пока не делал, кандидаты вбрасываются эластиком а косинусная близость подаётся в бустинг как фича. И вот перенос векторов по сети из базы в сервис ранжирования выполняется очень долго из-за того, что кандидатов много, и векторы весят много. Большие издержки на перенос по сети. Поэтому есть задача, не утратив качество фичи сходства уменьшить размер векторов, между которыми будет считаться сходство.

Ростислав-Корст Автор вопроса
David Dalé
Если у вас есть обучающие данные (тысячи пар запро...

С твоей точки зрения это будет работать лучше, чем PCA?

Ростислав Корст
С твоей точки зрения это будет работать лучше, чем...

С моей точки зрения, это может работать лучше, чем PCA, если повезёт. Ну и в целом, когда есть достаточно много размеченных данных, обычно supervised методы работают лучше, чем unsupervised.

Векторы большие это вы про постоянные симиляри 0.8 и разница в сотых между результатами?

Ростислав Корст
С временем инференса особо проблемы нет, а вот с р...

Если основная проблема - с перегоном векторов по сети, то можно сделать product quantisation, когда каждый фрагмент вектора заменяется на id наиболее похожего фрагмента из словаря. Если, допустим, брать фрагменты длины 16 и кодировать их в uint16, (то есть словарь до размера 2^16), то 1024-мерный вектор можно описать 64 такими айдишками. Если словарь очень большой, то такое сжатие будет весьма точным. А размер словаря в вашем случае может быть большим, ибо его-то по сети гонять не надо.

Ростислав-Корст Автор вопроса

Есть ли готовые реализации такого? Звучит интересно

Ростислав-Корст Автор вопроса
miteigi nemoto
Векторы большие это вы про постоянные симиляри 0.8...

Шапы и фича импортанс этих симилярити в топе относительно других и не такие уж они и константные. У меня в поиске мб несколько релевантных доков. Важно их наверх отранжировать, поэтому мб не так критично

Ростислав Корст
Шапы и фича импортанс этих симилярити в топе относ...

Для е5 надо по формуле симилярити скоре считать, иначе все результаты будут около 0.8. https://t.me/natural_language_processing/71739

miteigi nemoto
Для е5 надо по формуле симилярити скоре считать, и...

Интересно, как вы эту формулу вывели? Чисто интуитивно?

Ростислав Корст
Есть ли готовые реализации такого? Звучит интересн...

Я знаю реализацию в пакете navec. Возможно, есть что-то ещё более оптимизированное.

Ростислав Корст
С временем инференса особо проблемы нет, а вот с р...

Скорее всего еще на сериализацию и десериализацию время тратиться?

Ростислав-Корст Автор вопроса
David Dalé
Я знаю реализацию в пакете navec. Возможно, есть ч...

Походу в faiss это тоже реализовано https://www.pinecone.io/learn/series/faiss/product-quantization/

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
Изменение типа с SomeException на String и правда удобней @cheese_hs . А вот такой вариант насколько некрасив еще? loadConfigDB :: IO (Either String ConfigDataBase) loadConfi...
Camara
7
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта