Создание словарей для категоризации твитов на предопределенные категории с использованием NLTK - PullRequest
8 голосов
/ 23 февраля 2020

У меня есть список пользователей Твиттера (screen_names), и мне нужно разделить их на 7 предопределенных категорий - Образование, Искусство, Спорт, Бизнес, Политика, Автомобили, Технологии на основе их интересов. Я извлек последние 100 твитов пользователей в Python и создал корпус для каждого пользователя после очистки твитов.

Как упомянуто здесь Классификация твитов по нескольким категориям включена (Неуправляемые данные / твиты) :
Я пытаюсь создать словари общих слов для каждой категории, чтобы использовать их для классификации.

Есть ли способ автоматически генерировать эти словари для пользовательского набора слов?

Затем я могу использовать их для классификации данных в твиттере с использованием классификатора tf-idf и получения степени соответствия твита для каждой из категорий. Самое высокое значение даст нам наиболее вероятную категорию твита.

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

Образцы словарей:

Education - ['book','teacher','student'....]

Automobiles - ['car','auto','expo',....]

Пример ввода / вывода:

**Input :** 
UserA - "students visited share learning experience eye opening 
article important preserve linaugural workshop students teachers 
others know coding like know alphabets vision driving codeindia office 
initiative get students tagging wrong people apologies apologies real 
people work..."
.
.
UserN - <another corpus of cleaned tweets>


**Expected output** : 
UserA - Education (61%)
UserN - Automobiles (43%)

1 Ответ

9 голосов
/ 25 февраля 2020

TL; DR

Метки необходимы для контролируемого машинного обучения. И если у вас нет обучающих данных, которые содержат X (входные тексты) и Y (выходные метки), то (i) контролируемое обучение может не соответствовать вашим потребностям или (ii) вам нужно создать набор данных с текстами и их соответствующие ярлыки.

В длинном

Давайте попробуем разбить его и увидеть, что вы ищете.

У меня есть список пользователей Twitter (имена_экранов), и мне нужно разделить их на 7 заранее определенных категорий - Образование, Искусство, Спорт, Бизнес, Политика, Автомобили, Технологии

Итак, ваша конечная задача - пометить твиты на 7 категорий.

Я извлек последние 100 твитов пользователей в Python и создал корпус для каждого пользователя после очистки твитов.

100 точек данных, безусловно, недостаточно для того, чтобы что-либо делать, если вы хотите обучить контролируемую модель машинного обучения с нуля.

Другое дело определение corpus. Корпус - это текстовое тело, поэтому любой список строк можно назвать неправильным. Тем не менее, для любого контролируемого обучения, каждый текст должен сопровождаться соответствующей меткой (ями)

Но я вижу, что некоторые люди делают классификацию без надзора без каких-либо меток!

Сейчас , это оксюморон =)

Неуправляемая классификация

Да, есть " неконтролируемое обучение ", которое часто означает изучение представления входных данных, обычно представление inpus используется для (i) генерации или (ii) выборки.

Генерация из представления означает создание из представления точки данных, аналогичной данным, полученным из неконтролируемой модели. В случае текстового процесса / НЛП это часто означает создание новых предложений с нуля, например, https://transformer.huggingface.co/

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

Алгоритм имеет хороший сводный пост в блоге https://algorithmia.com/blog/introduction-to-unsupervised-learning и более современная перспектива https://sites.google.com/view/berkeley-cs294-158-sp20/home

Это много информации, но вы не скажете мне, как # $% ^ & - делать классификацию без надзора!

Да, объяснение оксюморон не закончено. Если мы посмотрим на классификацию текста, что именно мы делаем?

Мы подгоняем входной текст по некоторым заранее определенным категориям. В вашем случае метки предопределены, но

Q: Откуда именно будет поступать сигнал?

A: От твитов, конечно, перестаньте отвлекать меня! Подскажите, как сделать классификацию !!!

Q: Как вы скажете модели, что твит должен быть этим ярлыком, а не другим ярлыком?

A: От неконтролируемое обучение, верно? Разве это не то, что должно делать обучение без учителя? Чтобы сопоставить входные тексты с выходными метками?

Точно, это оксюморон,

Контролируемое обучение сопоставляет входные тексты с выходными метками не без обучения

Так что мне делать? Мне нужно использовать неконтролируемое обучение, и я хочу провести классификацию.

Тогда возникает вопрос:

  • У вас есть помеченные данные?

    • Если нет, то как получить метки?

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

Как насчет всех этих ИИ, о которых я постоянно слышу, о том, что я могу провести классификацию с 3 строками кода.

Разве они не используют неконтролируемые языковые модели, которые звучат как Сезам? Уличные персонажи, например, ELMO, BERT, ERN IE?

Полагаю, вы имеете в виду что-то вроде https://github.com/ThilinaRajapakse/simpletransformers#text -классификации

from simpletransformers.classification import ClassificationModel
import pandas as pd


# Train and Evaluation data needs to be in a Pandas Dataframe of two columns. The first column is the text with type str, and the second column is the label with type int.
train_data = [['Example sentence belonging to class 1', 1], ['Example sentence belonging to class 0', 0]]
train_df = pd.DataFrame(train_data)

eval_data = [['Example eval sentence belonging to class 1', 1], ['Example eval sentence belonging to class 0', 0]]
eval_df = pd.DataFrame(eval_data)

# Create a ClassificationModel
model = ClassificationModel('bert', 'bert-base') # You can set class weights by using the optional weight argument

# Train the model
model.train_model(train_df)

Внимательно обратите внимание на комментарий:

Данные по обучению и оценке должны быть в Pandas кадре данных из двух столбцов. Первый столбец - это text с типом str, а второй столбец - label с типом int.

Да, это более современный подход к:

  • Сначала используйте предварительно обученную языковую модель для преобразования ваших текстов во входные представления
  • Затем введите входные представления и их соответствующие метки в классификатор

Обратите внимание, вы все еще не можете избежать того факта, что вам нужны ярлыки для обучения контролируемого классификатора

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

Genau. На самом деле не существует такой вещи, как «неконтролируемая классификация» (пока), так как (i) метки должны быть определены вручную, (ii) должно существовать отображение между входами для меток

Правильное слово для определения парадигма была бы переводное обучение , где язык

  • изучен в режиме самоконтроля (на самом деле это не совсем без присмотра), так что модель учится преобразовывать любой текст в некотором числовом представлении

  • , а затем использовать числовое представление с помеченными данными для создания классификатора.

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