Прогнозирование фраз вместо следующего слова

Для приложения, которое мы создали, мы используем простую статистическую модель для предсказания слов (например, автозаполнение Google) для поиска.

Он использует последовательность нграмм, собранных из большого корпуса соответствующих текстовых документов. Рассматривая предыдущие слова N-1, он предлагает 5 наиболее вероятных "следующих слов" в порядке убывания вероятности, используя отступ Каца.

Мы хотели бы расширить это, чтобы предсказать фразы (несколько слов) вместо одного слова. Однако, когда мы предсказываем фразу, мы бы предпочли не отображать ее префиксы.

Например, рассмотрим вход the cat,

В этом случае мы хотели бы сделать такие прогнозы, как the cat in the hat, но нет the cat in & не the cat in the,

введите описание изображения здесь

Предположения:

  • У нас нет доступа к прошлой статистике поиска

  • У нас нет помеченных текстовых данных (например, мы не знаем части речи)

Каков типичный способ сделать подобные предсказания из нескольких слов? Мы пробовали мультипликативное и аддитивное взвешивание длинных фраз, но наши веса произвольны и соответствуют нашим тестам.

1 ответ

Для этого вопроса вам нужно определить, что вы считаете правильным завершением - тогда должно быть возможно найти решение.

В приведенном вами примере "кошка в шляпе" намного лучше, чем "кошка в шляпе". Я мог бы интерпретировать это как "оно должно заканчиваться существительным" или "оно не должно заканчиваться слишком общими словами".

  1. Вы ограничили использование "текстовых данных с тегами", но вы можете использовать предварительно обученную модель (например, NLTK, spacy, StanfordNLP), чтобы угадать части речи и попытаться ограничить предсказания только полными существительными (или последовательностью) оканчивается на существительное). Обратите внимание, что вам не обязательно помечать все документы, подаваемые в модель, а только те фразы, которые вы храните в своей базе данных автозаполнения.

  2. С другой стороны, вы можете избежать дополнений, заканчивающихся стоп-словами (или словами с очень высокой частотой). И "in", и "the" - это слова, которые встречаются почти во всех английских документах, поэтому вы можете экспериментально найти частоту среза (не может заканчиваться словом, встречающимся в более чем 50% документов), который поможет вам фильтровать. Вы также можете посмотреть на фразы - если конец фразы значительно более распространен как более короткая фраза, то нет смысла отмечать ее, так как пользователь может придумать ее самостоятельно.

  3. В конечном счете, вы можете создать помеченный набор хороших и плохих экземпляров и попытаться создать контролируемый повторный рейтинг, основанный на словесных особенностях - обе идеи выше могут быть сильными функциями в контролируемой модели (частота документа = 2, тег pos = 1), Это обычно, как поисковые системы с данными могут сделать это. Обратите внимание, что вам не нужна статистика поиска или пользователи для этого, просто желание пометить топ-5 завершений для нескольких сотен запросов. Построение формальной оценки (которая может выполняться в автоматическом режиме), вероятно, поможет при попытке улучшить систему в будущем. Каждый раз, когда вы наблюдаете плохое завершение, вы можете добавить его в базу данных и сделать несколько меток - со временем контролируемый подход станет лучше.

Другие вопросы по тегам