Как рекламируется большинством поставщиков векторных поисковых систем,Система семантического поискаиз Есть две основные конструкцииПростой(это ирония) шаг:
Конечная производительность семантического поиска зависит от вашей модели внедрения.но Модель выбора часто считается недосягаемой для большинства первых пользователей.из Объем возможностей。Так что каждый выбирает, как только появится. sentence-transformers/all-MiniLM-L6-v2,И надеяться на лучший результат.
Однако этот подход создает больше проблем, чем дает ответов:
Исходную архитектуру Transformer можно рассматривать как черный ящик, который преобразует входной текст в выходной текст. Но сами нейронные сети не понимают текст, они понимают только числа — все внутренние преобразования происходят в форме чисел.
Трансформатор состоит из двух основных модулей:
Следовательно, между кодером и декодером существует встроенное представление входа. И входные данные, и внедрение представляют собой числовые векторы, но между ними все же есть существенные различия:
Несколько лет спустя появилось активное семейство различных моделей обработки текста на основе преобразователей с двумя основными независимыми ветвями:
На картинке выше вы можете видеть BERT и GPT между подсемействами моделейизразделять。Традиционно потомки BERT чаще всего использовались в области семантического поиска.。
Модель BERT кажется очень подходящей для нашей задачи семантического поиска, поскольку ее можно упростить до задачи двоичной классификации конкретных запросов, релевантных и нерелевантных документов.
но BERT Вложения изначально не были предназначены для семантического сходства.:Модель обучена прогнозировать большие текстовые массивы.из Блокировать слова。фактически,Похожие тексты имеют схожие вложения,Это хороший естественный побочный эффект.
но «изначально не предполагалось семантическое сходство» — это всего лишь мнение. Есть ли способ объективно оценить, насколько хорош набор справочных данных?
научные статьи “ BEIR: гетерогенный тест для нулевой оценки моделей поиска информации” предложенный IR Метод изэталони Набор данных из набора ссылок. И это делает битву за качество моделей менее интересной: теперь существование имеет Рейтинговый список может сравнить вашу встроенную модель с конкурентами.
Тест BEIR предложенный SET 19 другой IR Набор данных и используется для оценки качества поиска всеми механизмами.
оригинальный Диссертация такжесуществовать Ко всему набору данных было применено несколько базовых методов.эталонтест。2021Год Приходите виз Главный вывод заключается в том,BM25 – вневременная технологияимощныйизбазовый уровень。
позже BEIR быть объединены в более широкуюизэталонв комплекте:MTEB, крупномасштабный тест для встраивания текста。Запустить его очень просто(если у тебя есть 128GB оперативная память, современная GPU и 8 часов свободного времени):
from mteb import MTEB
from sentence_transformers import SentenceTransformer
# load the model
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# run a subset of all benchmarks
evaluation = MTEB(tasks=["MSMARCO"])
results = evaluation.run(model, output_folder="results")
Как мы уже говорили ранее, давайте вернемся к центральной идее статьи: «исходное встраивание BERT нельзя использовать для семантического поиска». если мы будем bert-base-uncased(языковая модель)ина высшем уровнеиз Модель преобразования предложений all-MiniLM-L6-v2 а также all-mpnet-base-v2 Собрав все это вместе и протестировав на бенчмарке BEIR/MTEB, мы получаем следующие цифры:
Из этой таблицы можно сделать два очевидных вывода:
но почему производительность аналогичных моделей встраивания настолько различна в задачах семантического поиска?
Текущий (2023 г.) Год 6 月)МТЕБ/БЭИР эталон Рейтинговый Список выглядит полным неизвестных имён:
Мы можем Подвести итоги на данный момент самый продвинутый из семантического поиска:
Мы можем рассматривать эти четыре семейства моделей через призму двух философий построения моделей семантического поиска:
Поиск баланса между размером и размером имеет решающее значение для создания отличных моделей внедрения.
Встраивание — один из многих способов проведения поиска. старый BM25 По-прежнему сильная база, и есть несколько новых «редких» методов поиска, например. SPLADEv2 и ColBERT - 结合了分词术语搜索инейронная сетьиз Преимущества。
В таблице ниже мы попытались объединить все общедоступные оценки BEIR из нескольких источников:
Если эта таблица опубликована два года назад BEIR таблица для сравнения, вы можете заметить BM25 Считается сильной базой - ноBM25 существует 2023 Год больше не является явным победителем。
另一个观察结果даразреженный (например, ELSER и SPLADev2) и интенсивный (E5) методы поиска качественно существуют очень близко。поэтому,В этой области нет явного победителя,но здорово видеть такую большую конкуренцию.
Личный взгляд автора на спор между разреженными и плотными методами поиска:
но дебаты продолжаются, и мы будем держать вас в курсе последних событий.
Принято считать, что чем больше модель, тем лучше качество ее поиска. от MTEB Рейтинговый Это хорошо видно по списку,но它忽略了服务这些Модельизпростотаидешевый Секс – это важно и практично.изособенность。
По сути, вам нужно запустить модель внедрения дважды:
картина SBERT и E5 Таким образом, маленькая модель может разумно существовать без задержек и легко существовать в рамках бюджета. CPU Запустить но, если параметры превышают 500M(SGPT ситуации), вы не можете избежать использования графический процессор. сейчас GPU Дорогой.
Чтобы увидеть реальные цифры задержки, мы существуем https://github.com/shuttie/embed-benchmark, обеспечивающий JMH маленьких ONNX Основа рассуждений:
Как видно из таблицы:
Не только мир говорит на английском языке, но и большинство моделей и оценочных систем работают только на английском языке:
Это происходит, если вы передаете в токенизатор BERT текст не на английском языке:
from transformers import BertTokenizer, AutoTokenizer
bert = BertTokenizer.from_pretrained("bert-base-uncased")
e5 = AutoTokenizer.from_pretrained('intfloat/multilingual-e5-base')
en = bert.encode("There is not only English language")
print(bert.convert_ids_to_tokens(en))
# ['[CLS]', 'there', 'is', 'not', 'only', 'english', 'language', '[SEP]']
de = bert.encode("Es gibt nicht nur die englische Sprache")
print(bert.convert_ids_to_tokens(de))
# ['[CLS]', 'es', 'gi', '##bt', 'nic', '##ht', 'nur', 'die', 'eng', '##lis', '##che', 'sp', '##rac', '##he', '[SEP]']
de2 = e5.encode("Es gibt nicht nur die englische Sprache")
print(e5.convert_ids_to_tokens(de2))
# ['<s>', '▁Es', '▁gibt', '▁nicht', '▁nur', '▁die', '▁englische', '▁Sprache', '</s>']
Токенизатор BERT не может правильно обрабатывать немецкие слова как отдельные токены и должен быть разделен на подслова. Для сравнения, многоязычный токенизатор XLM обрабатывает то же предложение гораздо лучше.
К счастью, большинство моделей, упомянутых в этой статье, доступны на нескольких языках:
Подводя итог, основные выводы этой статьи заключаются в следующем:
Источник этой статьи: https://blog.metarank.ai/from-zero-to-semantic-search-embedding-model-592e16d94b61.