2. Попробовать таки unsupervised модель, обученную по аналогии с рекомендательными системами или word2vec'ом.
Она может работать примерно так:
1. Берём "мешок наименований", входящих в один список.
2. Выбираем одно из наименований, назовём его Y. Остальные наименования в этом мешке назовём X. С вероятностью 50% заменяем Y на какое-то другое наименование из другого мешка.
2. Каждое наименование по-отдельности энкодим. Например, запускаем в BERT и забираем эмбеддинг CLS токена.
3. Делаем нейросетку, с двумя входами. В одном входе постэканные векторы Х, в другом входе вектор Y. Усредняем X с какими-то атеншнами, полученный усредненный вектор конкатенируем с Y, пропускаем всё это через полносвязную сетку с одномерной сигмоидой на конце.
4. Обучаем эту сигмоиду предсказывать, был ли Y на шаге 2 заменён на случайный, или нет. Градиенты прокидываем вплоть до берта.
В результате берт должен научиться выучивать такие представления наименований, которые показывают их сочетаемость друг с другом. И, наверное, это как раз то, что вам нужно.