Алгоритм определения того, какие слова делают фразу популярной - PullRequest
4 голосов
/ 04 декабря 2010

Предположим, у меня был список лозунгов (короткие фразы из нескольких слов), и люди голосовали за те, которые им нравились больше всего, и я хотел оценить, какие слова, если таковые имеются, сделали одни лозунги более популярными, чем другие.Каков наилучший способ достичь этого?Моей первой мыслью было просто найти все уникальные слова в наборе лозунгов и набрать каждое из них как среднее количество голосов всех лозунгов, в которых есть упомянутое слово, но я думаю, что частота также должна войти в игру каким-то образом.что следующее должно быть правдой:

  • Если Слово A встречается только в слогане, набравшем наибольшее количество голосов, а Слово B встречается только в слогане, получившем второе место, Word A становится более популярным-генерирующее "
  • Однако, если Слово А встречается только в слогане высшего ранга, а Слово В встречается как в слоганах второго, так и третьего ранга, Слово В должно победить, поскольку оно выдвинуло больше слоганов.
  • Тем не менее, единственное вхождение Слова A в верхнем слогане должно все же превзойти три появления Слова B в других лозунгах, если они, скажем, в средней или нижней половине пакета (то естьто есть должен быть баланс между получением голосов и периодичностью в подсчете очков).

Я также хочу исключить слова, которые обычноmmon (например, "the" или "of").Это как-то связано с вопросами об определении популярных слов, которые задавались в прошлом, но они разные, потому что изменение со временем не является фактором.Я был бы счастлив, если бы меня указали в правильном направлении в том, что касается литературы, но я не совсем уверен, что искать.Это класс проблем, с которыми сталкиваются другие люди?

Ответы [ 3 ]

2 голосов
/ 04 декабря 2010

Это вопрос машинного обучения. Вы пытаетесь изучить модель на основе контролируемых данных. Для этого вы можете запустить простой алгоритм, такой как Perceptron или SampleRank ( pdf ):

Сначала вы определяете особенности, которые применяются к словам в слогане. Функции могут быть разделены между словами, например, Особенности слова "мир" могут быть:

  • "мир",
  • "существительное",
  • "абстрактный-существительное",
  • "короткое существительное",
  • "начинается с p",
  • "оканчивается на 's'-звук",
  • ...

Первая функция «мир» - это уникальная функция, которая срабатывает только на «мире», тогда как другие функции могут срабатывать и на других словах.

Каждая функция имеет вес (чем выше, тем лучше). Таким образом, у вас есть вектор признаков и вектор весов. Это позволит вам присвоить вес (оценку) любому слогану (просто сумму всех взвешенных функций, которые включаются в слова в слогане). Все веса инициализируются до 0,0.

Теперь вы начинаете тренироваться:

Вы перебираете все пары лозунгов. Для каждой пары вы знаете истинный рейтинг (согласно уже имеющимся у вас голосам). Затем вы вычисляете рейтинг в соответствии с функциями и их текущим весом. Если истинное ранжирование и ранжирование в соответствии с вашими текущими характеристиками (то есть в соответствии с вашей текущей моделью) совпадают, вы просто переходите к следующей паре. Если вашей модели присвоено неправильное ранжирование, вы исправляете веса объектов: вы добавляете 1,0 к весам функций, которые запускаются в лучшем слогане (тот, который лучше по мнению людей) и вычитаете 1,0 из весов функций, которые запускают на худшем лозунге (его оценка была явно слишком высокой, поэтому вы понижаете его сейчас). Эти обновления веса влияют на оценки, которые ваша модель присваивает следующим парам и т. Д.

Вы запускаете этот цикл несколько раз, пока ваша модель не получит правильное большинство пар (или какой-либо другой критерий сходимости).

Как правило, вы на самом деле не прибавляете и не вычитаете 1,0, а eta times 1.0, где eta - скорость обучения, которую вы можете установить экспериментально. Как правило, оно выше в начале тренировки и постепенно снижается во время тренировки, поскольку ваши веса движутся в правильном направлении. (См. Также случайный градиентный спуск.) Чтобы начать, вы можете просто установить его на 0,1 в качестве константы.

Эта процедура заботится о стоп-словах ("the", "of", ...), поскольку они должны встречаться одинаково часто в хороших и плохих лозунгах (и если они действительно не будут, вы тоже это узнаете) .

После тренировки вы можете вычислить оценку для каждого слова в соответствии с изученными весами признаков.

0 голосов
/ 04 декабря 2010

Я думаю, что я бы использовал алгоритм, который делает это:

  1. Устраняет стоп-слова (общие слова) (http://en.wikipedia.org/wiki/Stop_word)
  2. Нормализовать и стволовые слова (http://en.wikipedia.org/wiki/Stemming)
  3. Рассчитать нормализованные частоты слов и голосов
  4. Упорядочить нормализованные слова по голосам / частоте
0 голосов
/ 04 декабря 2010
...