BGE M3-Embedding разработан BAAI и Китайским университетом науки и технологий. Это модель BAAI с открытым исходным кодом. Соответствующий документ находится по адресу https://arxiv.org/abs/2402.03216. В документе предлагается новая модель внедрения под названием M3-Embedding, которая является многоязычной (многоязычность) и многофункциональной (отличная многофункциональность). производительность в мультигранулярности. M3-Embedding поддерживает более 100 рабочих языков, поддерживает входной текст длиной 8192, а также поддерживает плотный поиск (Dense Retrival), многовекторный поиск (Multi-Vector Retrival) и разреженный поиск (Sparse Retrival), обеспечивая поиск информации в реальном времени. world. (IR) обеспечивает унифицированную модельную основу, и за счет комбинации этих методов поиска достигаются хорошие смешанные эффекты отзыва.
Мы можем проверить сравнение официальной модели и модели openai. В целом, BGE-M3 (ALL), который использует три метода совместного поиска, лидирует в трех оценках, в то время как плотный поиск BGE-M3 (плотный) работает лучше в многоязычных и межъязыковый поиск имеет очевидные преимущества.
1. Многоязычность,Обучающий набор содержит более 100+ языков. 2. Многофункциональность,Поддержка плотного поиска (Dense Извлечение), также поддерживает разреженный поиск (Sparse Поиск) и многовекторный поиск (Multi-vector Retrieval) 3. Многоуровневая детализация BGE-M3 в настоящее время может обрабатывать максимальную длину 8192. входной текст, поддерживающий входной текст различной детализации, такой как «предложение», «абзац», «глава», «документ» и т. д.
Состав обучающих данных модели M3-Embedding является ключевым инновационным моментом, который делает модель лучше, поскольку она предназначена для поддержки многоязычности, многофункциональности и многогранности. Данные обучения разделены на три части:
Что инновационного в этих обучающих данных:
Состоит из этих инновационных обучающих данных,M3-Embedding
Способен эффективно учиться и поддерживать более чем100Встраивание текста в языки,Одновременная обработка документов, начиная от коротких предложений и заканчивая длинными документами длиной до 8192 токенов.,Он добился прорыва в многоязычности, многофункциональности и многогранности.
С точки зрения отрасли,M3-Embedding
、E5-mistral-7b
,LLM, такие как GPT, используются для синтеза большого количества многоязычных языков.,Это должно стать основным решением в будущем.
M3-Embedding объединяет три общие функции поиска моделей внедрения, а именно: плотный поиск, лексический поиск и многовекторный поиск. Ниже приведены шаблонные описания этих методов:
def dense_embedding(self, hidden_state, mask):
if self.sentence_pooling_method == 'cls':
return hidden_state[:, 0]
elif self.sentence_pooling_method == 'mean':
s = torch.sum(hidden_state * mask.unsqueeze(-1).float(), dim=1)
d = mask.sum(axis=1, keepdim=True).float()
return s / d
def sparse_embedding(self, hidden_state, input_ids, return_embedding: bool = True):
# sparse_linear линейный слой = torch.nn.Linear(in_features=self.model.config.hidden_size, out_features=1)
# Рассчитать токен через relu weight
token_weights = torch.relu(self.sparse_linear(hidden_state))
if not return_embedding: return token_weights
# Форма (input_ids.size(0), input_ids.size(1), нулевой тензор self.vocab_size)
sparse_embedding = torch.zeros(input_ids.size(0), input_ids.size(1), self.vocab_size,
dtype=token_weights.dtype,
device=token_weights.device)
# Раскидываем значения в token_weights по соответствующим позициям sparse_embedding, а позиции индекса предоставляются согласно input_ids
sparse_embedding = torch.scatter(sparse_embedding, dim=-1, index=input_ids.unsqueeze(-1), src=token_weights)
# CLS,PAD Подождите бесполезный токен
unused_tokens = [self.tokenizer.cls_token_id, self.tokenizer.eos_token_id, self.tokenizer.pad_token_id,
self.tokenizer.unk_token_id]
sparse_embedding = torch.max(sparse_embedding, dim=1).values
# Бесполезный токен вес установлен на 0
sparse_embedding[:, unused_tokens] *= 0.
return sparse_embedding
Благодаря универсальности встроенной модели,Процесс извлечения может выполняться во время процесса смешивания. первый,Результаты-кандидаты могут быть получены индивидуально каждым методом (из-за его высокой стоимости).,Этот этап многовекторного метода можно исключить)。Окончательные результаты поиска переоцениваются на основе интегрированного показателя релевантности.:s_{\text{rank}} \leftarrow s_{\text{dense}} + s_{\text{lex}} + s_{\text{mul}}。
Обучение модели BGE-M3 разделено на три этапа:
1. Самообучающаяся дистилляция
Люди могут вычислять результаты и исправлять ошибки разными способами. Модель также может достичь лучших результатов, чем один режим поиска, путем объединения результатов нескольких методов поиска. Поэтому BGE-M3 использует метод самовозбуждающейся дистилляции для улучшения производительности поиска. В частности, выходные данные трех режимов поиска объединяются для получения нового показателя сходства текста, который используется в качестве стимулирующего сигнала, позволяющего каждому отдельному режиму изучить сигнал для улучшения эффекта одного режима поиска.
2. Оптимизация эффективности обучения
Группируя текстовые данные по длине, он гарантирует, что длина текста в пакете будет относительно одинаковой, тем самым уменьшая заполнение. Чтобы уменьшить потребление памяти при текстовом моделировании, пакет данных разделяется на несколько небольших пакетов. Для каждого мини-пакета модель используется для кодирования текста, выходные векторы собираются, отбрасывая все промежуточные состояния при прямом распространении, и, наконец, векторы агрегируются для расчета потерь, что может значительно увеличить размер обучающего пакета.
3. Оптимизация длинного текста
BGE-M3 предлагает простой и эффективный метод: MCLS (множественный CLS) для расширения возможностей модели без тонкой настройки длинных текстов.
Подход MCLS направлен на использование нескольких токенов CLS для совместного захвата семантики длинных текстов. Вставьте токен cls для каждого фиксированного количества токенов, каждый токен cls может получать семантическую информацию из соседних токенов и, наконец, получить окончательное встраивание текста путем усреднения последних скрытых состояний всех токенов cls.
Для задач многоязычного поиска разреженный поиск (Sparse) значительно превосходит традиционный алгоритм разреженного сопоставления BM25. Многовекторный поиск (мультивекторный) достиг наилучшего эффекта среди трех методов поиска.
Возможность межъязыкового поиска (MKQA)
BGE-M3 по-прежнему имеет лучший эффект поиска при выполнении межъязыковых задач. Разреженный поиск не подходит для сценариев межъязыкового поиска, где перекрытие словарного запаса очень мало. Таким образом, преимущества разреженного поиска сами по себе и в сочетании с другими методами относительно невелики.
Возможность поиска длинных документов (MLRB: многоязычный тест длинного поиска)
BGE-M3 может поддерживать входные документы длиной до 8192 раз. Из экспериментальных результатов видно, что эффект разреженного поиска (Sparse) значительно выше, чем эффект плотного поиска (Dense), что показывает, что информация по ключевым словам чрезвычайно важна. для длительного поиска документов.
Сначала нужно установить,
pip install -U FlagEmbedding
git clone https://github.com/FlagOpen/FlagEmbedding.git
cd FlagEmbedding
pip install -e .
Формат набора данных для точной настройки модели — это файл формата строки json. Формат json следующий:
{"query": str, "pos": List[str], "neg":List[str]}
query — это запрос, pos — список положительных текстов, а neg — список отрицательных текстов.
Модельное обучение:
torchrun --nproc_per_node {number of gpus} \
-m FlagEmbedding.BGE_M3.run \
--output_dir {path to save model} \
--model_name_or_path BAAI/bge-m3 \
--train_data ./toy_train_data \
--learning_rate 1e-5 \
--fp16 \
--num_train_epochs 5 \
--per_device_train_batch_size {large batch size; set 1 for toy data} \
--dataloader_drop_last True \
--normlized True \
--temperature 0.02 \
--query_max_len 64 \
--passage_max_len 256 \
--train_group_size 2 \
--negatives_cross_device \
--logging_steps 10 \
--same_task_within_batch True \
--unified_finetuning True \
--use_self_distill True