Pull to refresh

Comments 7

Спасибо за интересную статью! В статье много практических советов по автоматизации задач машинного обучения: делим этапы анализа данных на классы, логируем, готовим для тестирования…
И всё же есть несколько вопросов))


  1. В заголовке вы пишете о библиотеке TextBlob, однако я не увидел в коде где эта библиотека используется, кроме как в части имени класса TextBlobWrapper, можно здесь поподробнее — как использовать TextBlob в этой задаче?
  2. При построении модели я не видел нормализации значений признаков, а без неё иногда модели учатся хуже, т.к. некоторые алгоритмы МО чувствительны к масштабу данных (недавно как раз обучал модель на данных, из которых выходной параметр в 90% случаев был одинаковый, обученная модель тоже выдавала один и тот же результат, но после нормирования значений признаков модель перестала быть такой категоричной).
  3. Почему вы выбрали именно метод Наивного Баеса, а не, к примеру, метод k ближайших соседей, метод случайного леса и т.д.? Просто интересно, из каких соображений исходили и пробовали ли другие методы?
viking_unet, спасибо за отзыв!

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) — о чем новом говорит название? Есть ли в нем семантика? Ведь все программирование про загрузку, обработку, преобразование и прочие операции над данными.

QtRoS, спасибо за отзыв. Качество модели действительно сейчас невысокое.
И есть мнение, что нужна версия #2 — без TextBlob.
Sign up to leave a comment.

Articles