Как использовать n-граммы для классификации по нескольким меткам?

Я работаю над проектом по определению гражданства человека на основе того, как он общается на английском языке. У меня 10 национальностей и 1000 файлов, по 100 для каждой национальности. Я использую n-граммы в качестве функций и ищу подтверждения моего подхода. Моя структура данных будет иметь различные n-граммы (символьные n-граммы, би-граммы, как столбцы) в качестве признаков и национальность в виде меток (в виде строк). Мои шаги:

  1. Подберите все файлы для данной национальности (FINE). 1.1. Объедините их вместе, чтобы сформировать корпус текста (например, объедините 100 файлов в 1 большой файл). Сначала я думал, что нужно брать по одному файлу за раз и обновлять количество n-грамм в зависимости от их наличия. Но затем для каждой новой n-граммы мне нужно было бы посмотреть, не произошло ли это уже, а затем обновить частоту для данной метки. Будет ли это лучший подход?
  2. Извлекайте би-граммы / три-граммы и получайте частоту каждого грамма. (NLTK имеет FreqDist, который дает счет для каждого)
  3. Сохраните эту информацию, чтобы я мог использовать ее для классификации моего тестового набора. (КАК ХРАНИТЬ ЭТУ ИНФОРМАЦИЮ. БОЛЬШЕ ИНФОРМАЦИИ НИЖЕ)

Вопрос в том, должен ли я хранить n-грамм и информацию о частоте в матрице (единую матрицу, имеющую все n-грамм и метки ИЛИ отдельную матрицу для каждой метки) или я должен хранить ее как карту (карту для каждой метки, имеющую n -грамма и ее частота подсчета). Я хотел бы иметь структуру данных (для хранения извлеченной информации), которую было бы легко классификаторам принять в качестве входных данных и обработать их. Я не могу предвидеть, какая структура данных будет лучшим вариантом.

1 ответ

1) это не должно иметь значения. если у вас есть способ сделать это отдельно, а затем объединить его, это поможет, если в будущем вы захотите масштабироваться до распределенной системы (это обычно называется подходом с уменьшением карты).

2) хорошо

3) n-грамм и частотный отсчет обычно не подходят сами по себе для классификации признаков. Вы, вероятно, хотите иметь отдельные матрицы / карты для каждой метки, а затем использовать что-то вроде TF-IDF ( https://en.wikipedia.org/wiki/Tf%E2%80%93idf), чтобы идентифицировать n-граммы, характерные для конкретный ярлык.

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

Другие вопросы по тегам