Семантический поиск на эмбеддингах
Вопрос
Нужно сделать семантический поиск по базе знаний компании (200 тыс. документов). Как устроите систему на эмбеддингах?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Нарезка документов на фрагменты с перекрытием, метаданные
Модель эмбеддингов: готовая мультиязычная, при необходимости дообучить контрастивно на своих парах
Векторный индекс (HNSW), гибрид с BM25
Переранжирование кросс-энкодером топ-кандидатов
Оценка: размеченные запросы, recall@k, NDCG, онлайн-клики; обновление индекса
Что могут спросить следом
- Почему кросс-энкодер точнее би-энкодера, но не годится для первого этапа?
- Как собрать обучающие пары без разметчиков?
Разбор
Документы режу на фрагменты по 200-500 токенов с перекрытием, сохраняю заголовки и метаданные для фильтров. Беру хорошую мультиязычную модель эмбеддингов (би-энкодер): вопрос и фрагмент кодируются отдельно, поэтому фрагменты можно закодировать заранее. Векторы нормирую и кладу в ANN-индекс, например HNSW. Чисто векторный поиск плохо ловит точные термины, артикулы и коды, поэтому делаю гибрид с BM25 и объединяю списки, например через reciprocal rank fusion. Топ-50 кандидатов переранжирую кросс-энкодером: он видит вопрос и документ вместе и точнее, но слишком дорог для всей базы. Качество оцениваю на наборе размеченных запросов: recall@k первого этапа и NDCG после переранжирования, онлайн смотрю клики и успешные сессии. Если качество не устраивает, дообучаю модель эмбеддингов контрастивно на своих парах: их можно собрать из логов поиска, заголовков и разделов, сгенерировать вопросы к фрагментам. Индекс обновляю инкрементально при изменении документов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.