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

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

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

21 ответов

68 просмотров

так-то ещё есть вариант старого-доброго 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/

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта