Правильный ответ будет зависеть от ваших данных и поведения пользователя, поэтому вы захотите попробовать несколько вариантов.
Чтобы получить первые результаты, я бы предложил объединить все поля в один документ ', для каждого потенциального результата запроса и с использованием режима (быстрого обучения) PV-DBOW (dm=0
). Это позволит вам начать видеть результаты, либо проводить некоторую неформальную оценку, либо начинать собирать некоторые автоматические c оценочные данные (например, списки пробных запросов и документов, которые «должны» иметь высокий рейтинг).
Затем вы могли бы попробуйте проверить идею создания отдельных полей в документах - либо вместо, либо в дополнение к подходу single-do c.
Другой вариант может заключаться в создании специализированных токенов слов для каждого поля. То есть, когда в заголовке появляется «Джон», вы фактически предварительно обрабатываете его как «title: John», а когда в author, «author: John» и т. Д. c. (Это может быть вместо или в дополнение к голому оригинальному токену.) Это могло бы улучшить модель, чтобы также понять смещение смысла каждого токена, в зависимости от поля.
Затем, если у вас есть Достаточно обучающих данных и хорошо выбрать другие параметры модели, ваш интерфейс поиска может также предварительно обрабатывать запросы аналогичным образом, когда пользователь указывает определенное поле, и получать улучшенные результаты. (Или, может быть, нет: это просто идея, которую стоит попробовать.)
Во всех случаях, если вам нужны точные результаты - точное совпадение четко определенных пользовательских запросов - более традиционные поисковые запросы, такие как точный Соответствие DB / greps или полнотекстовые обратные индексы будут превосходить Doc2Vec
. Но когда запросы более приблизительны, а результаты необходимо заполнить результатами, близкими по значению, даже если не в буквальном смысле, может оказаться полезным более нечеткое векторное представление документа.