Какой хороший набор эвристик для создания твитов?
Все знают, что если вы хотите создать поток электронных писем, вы используете алгоритм Джейми Завински. Но это новый век, и появилась новая служба обмена сообщениями.
Каков наилучший алгоритм для обновления сообщений о статусах в 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" перед сообщением, на которое они отвечают.