[БЕЗ_ЗВУКА] Итак, мы с вами поговорили про разные постановки задачи в сентимент-анализе. Ну, теперь давайте что-нибудь поделаем. Для начала возьмем выборку отзывов на фильмы из NLTK. К счастью, она есть уже готовая. Вот здесь мы получаем ID-шники негативных и позитивных отзывов и заодно печатаем несколько из них, чтобы посмотреть, как это все выглядит. После этого можем подготовить обучающую выборку, а именно достать тексты негативных отзывов, тексты позитивных отзывов. Здесь мы получаем слова из отзыва, но слова получаем в листе. Поэтому, так как дальше CountVectorizer из sklearn будет работать с текстами все же, мы их снова джойним через пробелы. Здесь мы получаем список текстов и список ответов. 0 будем использовать для негативного класса, 1 — для позитивного. Ну и вот мы можем посмотреть на один из текстов. Действительно это какой-то отзыв, какой-то огромный отзыв, то есть определенно человек не пожалел своего времени, чтобы его написать. Ну, похоже все верно. Далее мы импортируем нужные модули, в первую очередь это модули для построения признаков на текстах, это разные классификаторы, линейные классификаторы, в частности линейный svm. Это модуль cross_validation для того, чтобы мы могли оценить качество, и модуль Pipeline, так будет несколько удобнее. Дальше мы пишем свою простенькую функцию, которая фактически возвращает Pipeline для текстовой классификации. В принципе, можно было бы ее и не писать, везде писать вот такую конструкцию, но в какой-то степени так будет удобнее, короче. Что будет происходить? Сначала будет применяться Vectorizer, затем будет применяться Transformer, а затем — Classifier. Ну и давайте посмотрим, как это выглядит. Просто сравним разные классификаторы на этом датасете. Ну вот здесь вот уже есть результаты. Ну давайте на всякий случай перезапустим, сначала у нас используется CountVectorizer, затем TfidfTransformer, то есть мы на основе частот подсчитываем Tfidf-ы. После этого используем классификатор — тот, до которого дошла очередь в цикле. Ну, кстати говоря, нам не обязательно было разносить CountVectorizer и TfidfTransformer. Мы могли бы сразу использовать TfidfVectorizer, он тоже есть в sklearn. Но в таком виде будет несколько удобнее, если мы захотим здесь вместо TfidfTransformer использовать какой-то другой, ну например, как-нибудь понижать размерность. Ну вот мы видим, результаты примерно такие же, при этом победил линейный svm, что в целом было не вполне ожидаемо. Ну и дальше остается только подготовить классификатор, обученный на всех текстах. Это совсем уж просто. Мы просто создаем pipeline из Vectorizer и Classifier. Сразу будем использовать TfidfVectorizer. И дальше остается обучить. Давайте еще раз запустим, посмотрим, что получится. Обучается довольно быстро. Ну и можно как-то его потестировать, например, поиграться с разными отзывами. Ну вот здесь вот были придуманы пара достаточно простых отзывов, они действительно очень ярко позитивные и негативные. Первый — позитивный, второй — негативный. Ну и как вы видите, результаты на них как раз такие, какие следовало ожидать. Но не стоит обольщаться: если получается придумать несколько хороших примеров, это отнюдь не значит, что классификатор хорош. Нужно всегда смотреть на качество. В следующем видео мы попробуем как-нибудь преобразовать признаки и построить на новых, преобразованных признаках другие классификаторы.