Ответ 1
Поскольку был только один ответ, и крайний срок подачи начисления приближается в ближайшее время, я подумал, что должен добавить базовый ответ, чтобы щедрость не была автоматически присуждена ответу, который не добавляет намного больше, чем в вопросе.
Очевидный первый шаг - взять ваш оригинальный набор твитов и следовать всем ссылкам 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... который может быть типичным для уровня дискурса в Twitter;)