Какой хороший набор эвристик для создания твитов?

Все знают, что если вы хотите создать поток электронных писем, вы используете алгоритм Джейми Завински. Но это новый век, и появилась новая служба обмена сообщениями.

Каков наилучший алгоритм для обновления сообщений о статусах в Twitter?

Вещи, с которыми я бы определенно хотел справиться:

  • Легкая часть: использование in_reply_to_status_id, in_reply_to_user_id а также in_reply_to_screen_name, (Между прочим, поиск надлежащей документации этих значений был бы сам по себе полезен! Например, такая документация явно не связана отсюда.)

  • Хорошая эвристика для вывода отношения "ответа" из сообщений, в которых упоминается пользователь с @ соглашение, но не в явном виде в ответ на конкретное сообщение. Эти "упоминания" теперь содержатся в элементе "сущностей" статусов, если вы запрашиваете это. Эта эвристика может учитывать (а) время между двумя обновлениями статуса, (б) есть ли частые ответы между двумя пользователями и т. Д. (Ответы, которые состоят из ретвита старого стиля с дополнительным комментарием, как упомянуто пользователем 85509 ниже приведены лишь примеры такого стиля ответа.)

  • Беседы, которые происходят между более чем двумя пользователями.

  • Работа с набором твитов, заданных алгоритмом, или со всеми твитами в Twitter.

... но, возможно, вы можете думать о большем.

2 ответа

Решение

Так как был только один ответ, и крайний срок вознаграждения приближается, я подумал, что должен добавить базовый ответ, чтобы вознаграждение не присваивалось автоматически за ответ, который не добавляет ничего сверх того, что в вопросе.

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

Помимо этого легкого шага, нужно разобраться с "упоминаниями". В отличие от потоков электронной почты, нет ничего полезного, как строка темы, с которой можно сопоставить - это неизбежно будет очень подвержено ошибкам. Подход, который я выбрал бы, состоит в том, чтобы создать вектор признаков для каждого возможного отношения между идентификаторами состояния, которые могут быть представлены упоминаниями в этом твите, а затем обучить классификатор, чтобы угадать лучший вариант, включая параметр "без ответа".

Чтобы проработать бит "всевозможные отношения", начните с рассмотрения каждого обновления статуса, в котором упоминается один или несколько других пользователей и которое не содержит in_reply_to_status_id, Предположим, пример одного из этих твитов: 1

@a @b no it isn't lol  RT @c Yes, absolutely. /cc @stephenfry

... вы бы создали вектор объектов для связи между этим обновлением и каждым обновлением с более ранней датой на временной шкале @a, @b, @c, а также @stephenfry за последнюю неделю (скажем) и между этим обновлением и специальным обновлением "без ответа". Затем вам нужно создать вектор объектов - вы можете добавить к нему все, что захотите, но я бы по крайней мере предложил добавить:

  • Время, прошедшее между двумя обновлениями - предположительно, ответы, скорее всего, относятся к последним обновлениям.
  • Доля пути через твит с точки зрения слов, которые упоминаются. например, если это первое слово, это будет оценка 0, и это, скорее всего, будет означать ответ, чем упоминается позже в обновлении.
  • Число подписчиков упомянутого пользователя - знаменитости, вероятно, более вероятно, будет упомянуто спамом.
  • Длина самой длинной общей подстроки между обновлениями, которая может указывать на прямое цитирование.
  • Упоминанию предшествует "/cc" или другие обозначения, которые указывают, что это не является прямым ответом этому человеку?
  • following / followed Соотношение для автора оригинального обновления.
  • и т.п.
  • и т.п.

Чем больше из них можно придумать, тем лучше, поскольку классификатор будет использовать только те из них, которые окажутся полезными. Я бы предложил попробовать классификатор случайных лесов, который удобно реализован в Weka.

Дальше нужен тренировочный набор. Сначала это может быть небольшим - достаточно, чтобы получить сервис, который идентифицирует разговоры и работает. К этой базовой службе нужно было бы добавить хороший интерфейс для исправления несоответствующих или ложно связанных обновлений, чтобы пользователи могли их исправлять. Используя эти данные, можно построить больший обучающий набор и более точный классификатор.

1 ... что может быть типичным для уровня дискурса в Твиттере;)

В Twitter люди часто пишут "RT" перед сообщением, на которое они отвечают.

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