Поскольку был только один ответ, и крайний срок вознаграждения приближается, я подумал, что должен добавить базовый ответ, чтобы вознаграждение не присваивалось автоматически за ответ, который не добавляет ничего сверх того, что в вопросе.
Очевидный первый шаг - взять исходный набор твитов и следовать всем ссылкам 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
для автора оригинального обновления. - и т. д.
- и т. д.
Чем больше из них можно придумать, тем лучше, поскольку классификатор будет использовать только те из них, которые окажутся полезными.Я бы предложил попробовать классификатор random forest , который удобно реализован в Weka .
Далее необходим обучающий набор.Сначала это может быть небольшим - достаточно, чтобы получить сервис, который идентифицирует разговоры и работает.К этой базовой услуге нужно было бы добавить хороший интерфейс для исправления несоответствующих или ложно связанных обновлений, чтобы пользователи могли их исправлять.Используя эти данные, можно создать больший обучающий набор и более точный классификатор.
1 ..., что может быть типичным для уровня дискурса в Твиттере;)