С июня 2020 года я больше не буду использовать Medium для публикации новых историй. Если хотите и дальше читать мои статьи, посетите мой личный блог: https://vallant.in.

Вы когда-нибудь начинали анализ тональности или другую задачу классификации текста только для того, чтобы увидеть, что вы не получаете хороших результатов? Список возможных проблем, на которые следует обратить внимание, длинный, но есть два аспекта, которые вы можете упускать из виду и упускать из виду в этом порядке.

Первый аспект - это качество меток вашего набора обучающих данных, а второй - это сама модель. Мы склонны тратить много времени на настройку модели, потому что ... ну, мы учимся делать это таким образом. Когда вы начинаете свои первые проекты, вы обычно получаете уже отобранный и очищенный набор данных. С точки зрения предварительной обработки делать нечего или очень мало.

Когда я говорю «предварительная обработка», забудьте об удалении акцентов - токенизации - удалении стоп-слов «bla», «bla» и сосредоточьтесь на самом первом шаге всего: на качестве данных.





Маркировать сложно даже людям

Вы когда-нибудь пробовали навешивать ярлыки на вещи только для того, чтобы обнаружить, что это у вас плохо получается? Если нет, то у вас есть отличный шанс понять, насколько сложна эта задача. Я уверен, что если вы начали свое путешествие по машинному обучению с задачи анализа настроений, вы в основном скачали набор данных с большим количеством предварительно помеченных комментариев об отелях / фильмах / песнях. Могу спросить: вы вообще перестали читать некоторые из них?

Если да, то вы обнаружите, что некоторые ярлыки не совсем те, которые вы дали в первую очередь. Вы можете не согласиться с тем, что некоторые комментарии действительно положительные или отрицательные. И это происходит потому, что отрицательная / положительная маркировка очень субъективна.

Если вы не можете сказать, что там положительного или отрицательного, ваш компьютер наверняка будет работать так же плохо, как и вы. Вот почему я буду настаивать: маркировка данных - это искусство, и им должен заниматься человек, очень глубоко разбирающийся в проблеме, которую вы пытаетесь решить с человеческой точки зрения. Но вы можете потренироваться, чтобы стать лучше в этом.

Определите четкие правила

Хороший подход к тексту меток - это определение четких правил того, что и какие метки должны получать. Составив список правил, будьте последовательны. Если вы классифицируете ненормативную лексику как отрицательную, не помечайте другую половину набора данных как положительную, если она содержит ненормативную лексику.

Но это не всегда срабатывает. В зависимости от проблемы, даже ирония может быть проблемой и признаком негатива. Итак, второе практическое правило маркировки текста - сначала помечать самые простые примеры. Очевидные положительные / отрицательные примеры должны быть помечены как можно скорее, а самые сложные - отложить до конца, когда вы лучше поймете проблему.

Другая возможность - предварительно пометить самые простые примеры и построить первую модель только с ними. Затем вы можете отправить оставшиеся примеры в эту модель и проверить, какое «мнение» модель о самых сложных примерах.

Случайность теста

Если вы выполнили все вышеперечисленное и все еще не уверены в качестве своей классификации или своей модели, вы можете попробовать проверить случайность. Сделайте следующее: получите примеры, которые вы используете для создания своей модели, и присвойте им случайные метки. Сделать это можно с помощью Аруана.

Когда вы случайным образом маркируете свои примеры, вы можете проверить, насколько важны метки для прогнозов. Другими словами, вы проверяете, что текст имеет хорошие метки. Если вы не уверены в правильности меток (допустим, вы думаете, что примеры получили плохие метки в первую очередь), вы можете назначить случайные метки и посмотреть, как работает модель.

Другая возможность - поломка самой модели. Чтобы проверить, всегда ли модель дает одни и те же прогнозы, несмотря на полученные примеры, мы можем заполнить модель случайным текстом. В этом случае вместо изменения только меток вы также можете создавать капли текста без смысла и смотреть, как работает модель.

Экспериментируем

Я использовал две вышеупомянутые теории, чтобы проверить модель, с которой работал. Я не был уверен, что моя модель сломалась или примеры, с которыми я работал, были плохо помечены.

Вот как я провел этот опыт: используя одни и те же примеры, я трижды обучил модель, используя одну и ту же конфигурацию (но всегда будет присутствовать небольшая доля случайности). При первом запуске я протестировал модель со случайными метками. Во втором прогоне я использовал текстовые капли, а в третьем я использовал правильные примеры. Важно сказать, что я работал над сбалансированным набором данных.

Я загрузил данные в набор данных pandas с двумя столбцами: «текст» и «настроение». Столбец тональности содержит классификацию текста.

Первый забег

from aruana import Aruana
aruana = Aruana('pt-br')
sentiment = aruana.random_classification(data['text'], classes=[0,1], balanced=True)
data['sentiment'] = sentiment

Результаты, достижения:

Как видите, общая точность составила 50%, а это значит, что модель не лучше случайного предположения.

Второй прогон

from aruana import Aruana
aruana = Aruana('pt-br')
texts = aruana.replace_with_blob(data['text'])
data['text'] = texts

Результаты, достижения:

Изменение текста на случайные капли также снижает производительность модели.

Третий прогон

Для третьего прогона я накормил модель хорошими текстами / метками, и результаты были следующими:

Посмотрите, как это улучшилось! Так что текст и надписи здесь не злодеи.

Заключение

Если вы работаете над проблемами анализа тональности, будьте осторожны с маркировкой текста. Если вы никогда в жизни не размечали текст, это хорошее упражнение. Если вы полагаетесь только на чистый / обработанный текст для обучения, вы можете столкнуться с проблемой, когда проблема не в вашей модели, а в информации, которую вы используете для ее обучения.