Оффлайн способ поиска трудных негативных примеров¶
При обучение моделей использовался оффлайн способ поиска трудных негативных примеров.
Сначала модель обучается с использованием случайных негативных примеров, которые оказываются в мини-батче.
Первоначальное обучение происходит с максимально возможным размером мини-батча, чтобы увеличить количество случайных негативных примеров.
Также параметр model.margin, model.sent.margin устанавливается равным 0.2 и 0.3 соответственно.
Поиск сложных негативных примеров может проходит на уровне предложений и на уровне документов.
В обоих случаях процесс одинаковый, в качестве примера рассмотрим уровень предложений.
Все предложения из обучающей выборке из файлов {train,dev}.tgt
кодируются первой версией энкодера и индексируются с помощью библиотекой Faiss в индекс HNSWFlat.
После этого для предложений из файлов {train,dev}.src проводится поиск k (использовалось значение k==30) наиболее близких предложений.
При выборе трудных отрицательных примеров нужно отсечь положительные похожие предложения, которые могут оказаться нечеткими дубликатами.
Поэтому для каждого предложения-запроса \(src_i\) выбирались 4 предложения, удовлетворяющие условию, заданному формулой:
где \(hns\) — глобальный счетчик всех трудных отрицательных примеров, введенный для ограничения количества раз, когда предложение может выступать в качестве трудного отрицательного примера.
Чтобы наполнить мини-батчи сложными примерами для всех предложений-запросов, предложения-запросы предварительно кластеризуются. Для векторизации предложений используется первая версия энкодера. В качестве алгоритма кластеризации используется метод K-means, реализованный в библиотеки Faiss. Все предложения-запросы сортируются по номеру присвоенного кластера.