Подтвердить что ты не робот

Выбор функций для определения вопросов Twitter как "полезных"

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

Таким образом, я получаю несколько полезных вопросов в моей базе данных, например: "кто заботится?", "что это?". и т.д. и некоторые полезные, например: "Как часто бывает баскетбольная битва?", "Сколько весит белый медведь?" и т.д.

Однако меня интересуют только полезные вопросы.

У меня около 3000 вопросов, ~ 2000 из них не полезны, ~ 1000 из них полезны, что я их вручную маркировал. Я пытаюсь использовать наивный байесовский классификатор (который поставляется с NLTK), чтобы попытаться классифицировать вопросы автоматически, так что мне не нужно вручную выбирать полезные вопросы.

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

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

Любые предложения о том, как я должен выбирать функции или продолжать?

Спасибо.

4b9b3361

Ответ 1

Некоторые случайные предложения.

Добавьте шаг предварительной обработки и удалите стоп-слова типа this, a, of, and и т.д.

  How often is there a basketball fight

Сначала вы удаляете некоторые слова остановки, вы получаете

  how often basketball fight 

Рассчитать tf-idf оценка для каждого слова (лечить каждый твит в качестве документа, чтобы вычислить оценку, вам нужен весь корпус в чтобы получить частоту документа.)

Для предложения, такого как выше, вы вычисляете оценку tf-idf для каждого слова:

  tf-idf(how)
  tf-idf(often)
  tf-idf(basketball)
  tf-idf(fight)

Это может быть полезно.

Попробуйте добавить дополнительные функции для вашего классификатора

  • средний балл tf-idf
  • средний показатель tf-idf
  • max tf-idf оценка

Кроме того, попробуйте pos-tagger и создайте категорированное предложение для каждого твита.

>>> import nltk
>>> text = nltk.word_tokenize(" How often is there a basketball fight")
>>> nltk.pos_tag(text)
[('How', 'WRB'), ('often', 'RB'), ('is', 'VBZ'), ('there', 'EX'), ('a', 'DT'), ('basketball', 'NN'), ('fight', 'NN')]

Затем у вас есть дополнительные функции, которые можно попробовать, связанные с pos-тегами.

Некоторые другие функции, которые могут быть полезны, см. в документе - qtweet (это документ для идентификации вопроса). h3 >

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

FYI, автор qtweet предпринял попытку 4 разных классификатора, а именно: Random Forest, SVM, J48 и Logistic regression. Лучшим среди них был случайный лес.

Надеюсь, они помогут.

Ответ 2

Скорее всего, очень мощная функция, которую вы могли бы попробовать и построить (не уверен, если это возможно), есть ответ на указанный твит.