Робота з текстовими даними у scikit-learn (переклад документації)

Навчання класифікатора

Щоб ми могли спробувати передбачити результати на новому документі, потрібно витягти фічі (характерні ознаки), використовуючи майже таку саму послідовність, як і раніше. Різниця полягає в тому, чи використовується метод transform замість fit_transform з transformers, тому що вони вже були застосовані до нашої навчальної вибірки:

Створення конвеєрної обробки

Щоб з ланцюжком vectorizer => transformer => classifier було простіше працювати, у scikit-learn є клас Pipeline, який функціонує як складовий (конвеєрний) класифікатор:

Назви vect, tfidf and clf (класифікатор) вибрані нами довільно. Ми розглянемо їх використання нижче, у розділі grid search. Тепер навчимо модель за допомогою всього 1 команди:

Оцінка продуктивності при роботі на тестовій вибірці

Оцінка точності прогнозу моделі досить проста:

Наприклад, ми отримали 83% точності. Давайте подивимося, чи можемо ми покращити цей результат за допомогою лінійного методу опорних векторів (support vector machine (SVM)). Цей метод зазвичай вважається кращим із алгоритмів класифікації тексту (хоча, він трохи повільніший за наївний Байєс). Ми можемо змінити модель, що навчається, просто під'єднавши інший об'єкт класифікації в наш конвеєр:

scikit-learn також надає утиліти для більш детального аналізу результатів:

Як і очікувалося, матриця неточностей показує, що тексти з вибірки newsgroups про атеїзм і християнство модель частіше плутає один з одним, ніж з текстами про комп'ютерну графіку.

Налаштування параметрів для використання grid search

Деякі параметри ми вже вирішили, такі як use_idfу функції TfidfTransformer. Класифікатори, як правило, також мають багато параметрів, наприклад, MultinomialNB включає коефіцієнт згладжування alpha, а SGDClassifier має штрафний параметр alpha (метод штрафних функцій), втрату, що настроюється, і штрафні члени в цільовій функції (див. розділ документації або використовуйте функцію підказки Python , щоб отримати додаткову інформацію). Замість пошуку параметрів різних компонентів у ланцюгу, можна запустити пошук (методом повного перебору) кращих параметрів у сітці можливих значень. Ми випробували всі класифікатори на словах або біграмах, з або без idf, зі штрафними параметрами 0,01 та 0,001 для SVM (метод опорних векторів):

Очевидно, подібний пошук методом повного перебору може бути ресурсом. Якщо у нас є безліч ядер процесора, ми можемо запустити grid search, щоб спробувати всі комбінації параметрів паралельно з параметром n_jobs. Якщо ми задамо цьому параметру значення -1, grid search визначить, скільки ядер встановлено, і задіяє їх все:

Екземпляр grid search поводиться як звичайна модель scikit-learn. Давайте запустимо пошук на малій частині навчальної вибірки, щоб збільшити швидкість обробки:

В результаті застосування методу fit на об'єкті GridSearchCV ми отримаємо класифікатор, який можна використовувати для виконання функції predict:

але з іншого боку, це дуже великий та громіздкий об'єкт. Ми можемо отримати оптимальні параметри, вивчаючи атрибут об'єкта grid_scores_, який є списком пар параметри\мера. Щоб отримати атрибути заходів, ми можемо:

Вправи

Ви можете редагувати вміст workspace папки, не боячись втратити вихідні інструкції для вправ. Потім відкрийте оболонкуipython та запустіть незавершений скрипт для вправи:

Якщо було виключено, використовуйте %debug, щоб запустити аварійну сесію ipdb. Очистіть реалізацію та повторюйте, поки не розв'яжете завдання.У кожній вправі файли skeleton містять усі необхідні інструкції імпорту, шаблони коду для завантаження даних та приклади для коду для оцінки точності передбачення моделі.

Вправи 1: Визначення мови

  • Напишіть конвеєр — текстовий класифікатор, використовуючи спеціальну передобробку та CharNGramAnalyzer. Як навчальну вибірку використовуйте статті з Wikipedia.
  • Оцініть продуктивність на будь-якій тестовій вибірці, що не збігається з навчальною.
ipython командний рядок:

Вправа 2: Аналіз переваг на основі відгуків фільмів

  • Напишіть конвеєр — текстовий класифікатор для класифікації відгуків про фільми на позитивні та негативні.
  • Підберіть відповідний набір параметрів за допомогою grid search.
  • Оцініть продуктивність на тестовій вибірці.
ipython командний рядок:

Вправи 3: Утиліта – текстовий класифікатор у командному рядку (консольний додаток)

Використовуючи результати попередніх вправ і модуль cPickle стандартної бібліотеки, напишіть утиліту командного рядка, яка визначає мову тексту в stdin (введення з клавіатури) та визначає полярність (позитивний чи негативний), якщо текст написаний англійською.

Що далі?

Хардкорна конфа за С++. Ми запрошуємо лише профі.