Классификация слов с использованием алгоритма машинного обучения
Я новичок в машинном обучении. В настоящее время я хочу классифицировать, подпадают ли некоторые слова под категорию или нет..
Позвольте мне быть более конкретным. При вводе некоторых слов мне нужно проверить, подпадают ли эти слова под язык, известный как "малаялам".
Пример: enthayi ninakk сугаманно?
Это некоторые слова малаялам, которые выражены на английском языке. При вводе некоторого ввода, подобного этому, необходимо проверить обученные данные, и если какое-либо из входных слов подпадает под категорию "малаялам", то оно должно показать, что это малаялам.
Что я пытался сделать..
Я попытался классифицировать его с помощью NaiveBayesClassifier, но он всегда показывает положительный ответ для всех входных данных.
train = [
('aliya','Malayalam')]
cl = NaiveBayesClassifier(train)
print cl.classify('enthayi ninakk sugamanno')
Но оператор печати дает вывод "Малаялам"
1 ответ
Для обучения классификатора нужны как положительные, так и отрицательные данные. Нетрудно добавить кучу текстов на английском языке или что-то из возможных альтернатив в вашем домене. Но вам нужно прочитать о том, как на самом деле работает классификатор nltk, или вы сможете обрабатывать только те слова, которые вы видели в ваших обучающих данных: вам нужно выбрать и извлечь "особенности", которые классификатор будет использовать для выполнения его работа
Итак (из комментариев) вы хотите классифицировать отдельные слова как малаялам или нет. Если ваши "особенности" - это целые слова, вы тратите время на классификатор; просто сделай питона set()
малаяламских слов, и проверьте, есть ли в нем ваши входные данные. Чтобы пойти по пути классификатора, вам нужно выяснить, что заставляет вас "выглядеть" на малаялам (окончания? Длина? Структура слога?), И вручную превратить эти свойства в объекты, чтобы классификатор мог решить, насколько они важны.
Лучшим подходом для определения языка является использование буквенных триграмм: каждый язык имеет свой "профиль" общих и необычных триграмм. Вы можете погуглить или написать свой код. У меня были хорошие результаты с "косинусным сходством" как мерой расстояния между образцом текста и справочными данными. В этом вопросе вы увидите, как рассчитать косинусное сходство, но для подсчета униграмм; использовать триграммы для идентификации языка.
Два преимущества подхода триграммы: вы не зависите от знакомых слов или от умных функций, и вы можете применять его к фрагментам текста длиннее одного слова (даже после фильтрации по-английски), что даст вам больше надежные результаты. НЛТК langid
Корпус предоставляет счет триграмм для сотен распространенных языков, но также достаточно легко составить собственную статистику. (Смотрите также nltk.util.trigrams()
.)