У каждого подхода есть свои преимущества и недостатки:
bi-encoder-ы обеспечивают приемлемое качество работы и гораздо более эффективны для вычислений, в то же время
cross-encoder-ы показывают значительно лучшие результаты при оценке схожести текстов, но требуют вычислений для каждой пары рассматриваемых текстов.
В подходе Reranking (или иначе Two-Stage Retrieval) последовательно применяются два и более алгоритмов поиска и ранжирования релевантных документов.
Например, на первой стадии можно выполнить поиск классическим эмбедером, отобрать топ-100 документов, а затем применить cross-encoder, переранжировать 100 документов и выделить из них топ-5 самых релевантных.
В GigaChain рализована нативная поддержка
Cohere Reranker — это платный API, с помощью которого можно реализовать переранжирование документов, отобранных на первом этапе.
Впрочем, существуют и open-source cross-encoder-ы, позволяющие достичь схожих результатов, например, модель
bge-reranker-large, доступная на
HuggingFace.
Рассмотрим пример её реализации. Мы инициализируем модель
bge-reranker-large и с её помощью посчитаем расстояние от запроса до каждого из подаваемых на вход документов. Затем документы ранжируются по убыванию близости, и в результате нам возвращается топ-5 самых близких запросов: