Comments 7
Спасибо за интересную статью! В статье много практических советов по автоматизации задач машинного обучения: делим этапы анализа данных на классы, логируем, готовим для тестирования…
И всё же есть несколько вопросов))
- В заголовке вы пишете о библиотеке TextBlob, однако я не увидел в коде где эта библиотека используется, кроме как в части имени класса TextBlobWrapper, можно здесь поподробнее — как использовать TextBlob в этой задаче?
- При построении модели я не видел нормализации значений признаков, а без неё иногда модели учатся хуже, т.к. некоторые алгоритмы МО чувствительны к масштабу данных (недавно как раз обучал модель на данных, из которых выходной параметр в 90% случаев был одинаковый, обученная модель тоже выдавала один и тот же результат, но после нормирования значений признаков модель перестала быть такой категоричной).
- Почему вы выбрали именно метод Наивного Баеса, а не, к примеру, метод k ближайших соседей, метод случайного леса и т.д.? Просто интересно, из каких соображений исходили и пробовали ли другие методы?
Bопрос #1
Все-таки упущенный import — это всегда проблема :)
Класс NaiveBayesClassifier является частью библиотеки TextBlob:
from textblob.classifiers import NaiveBayesClassifier
# ... Skipped code ...
class TextBlobWrapper():
# ... Skipped code ...
self.classifier = NaiveBayesClassifier(ds.train)
Bопрос #2
Если имеется ввиду, например, td-idf, то пока не получается подружить его с TextBlob.
Удобство TextBlob как библиотеки имеет обратную сторону в виде меньшей гибкости по сравнению, скажем, с NLTK или sklearn.
Bопрос #3
Опять-таки все упирается в возможности TextBlob.
Если верить документации, то сейчас эта библиотека поддерживает следующие классификаторы:
- DecisionTreeClassifier — a classifier based on the decision tree algorithm, as implemented in NLTK;
- MaxEntClassifier — а maximum entropy classifier (also known as a “conditional exponential classifier”);
- NaiveBayesClassifier — a classifier based on the Naive Bayes algorithm, as implemented in NLTK;
- PositiveNaiveBayesClassifier — a variant of the Naive Bayes Classifier that performs binary classification with partially-labeled training sets.
TextBlob хорош тем, что позволяет разработчику быстро начать в ML.
Но в дальнейшем, по ходу погружения в тему, следует переходить к другим решениям.
Понятно) Ещё один вопрос покоя не даёт — TextBlob это враппер поверх библиотеки, NLTK. NLTK, на сколько я понял, не работает с кириллицей. Вы думали на счёт поддержки кириллицы? Какие либы использовать для построения модели такого же типа (по сути антиспам)? Очень много материала в сети про модели для английского языка, но Нам чаще приходится работать именно с кириллицей) Не перегонять же слова в idna или транслитерал (как раньше в спс присылали текст)
Про русский язык, мне, к сожалению, сложно что-то добавить — заказчики англоязычные.
Но вот коллеги из OpenDataScience говорят, что «все можно сделать» :)
Вообще никаких проблем нет при работе с кириллицей при использовании подхода bag of words (+tfidf). Даже не то чтобы проблем, а различий нет. А если хотите использовать embeddings (н-р word2vec), то уже нужно будет качать правильные веса, натренированные на русских текстах
Статья в целом неплохая, однако я бы порекомендовал наиграться-таки с примером, получить необходимые целевые цифры метрик, подобрать правильный обучающий датасет, подобрать гиперпараметры, а уже потом все это превращать в похожий на продуктивный код.
P.S. Всегда одергиваю себя, когда руки тянутся именовать метод а-ля "load_data" (особенно внутри класса DataLoader) — о чем новом говорит название? Есть ли в нем семантика? Ведь все программирование про загрузку, обработку, преобразование и прочие операции над данными.
Создаем прототип для Sentiment Analysis с помощью Python и TextBlob