Большая часть обработки естественного языка связана с машинным обучением, поэтому полезно понимать некоторые основные инструменты и методы машинного обучения. Некоторые инструменты обсуждались в предыдущих главах, некоторые нет, но здесь мы обсудим их все.
D.1 Отбор данных и недопущение систематической ошибки
Выбор данных и разработка признаков несут в себе риск смещения (в человеческом языке). Как только мы включаем в алгоритм наши собственные предубеждения, выбирая определенный набор признаков, модель адаптируется к этим предубеждениям и дает предвзятые результаты. Если нам посчастливится обнаружить это предубеждение до того, как оно будет запущено в производство, для его устранения также потребуется много работы. Например, весь конвейер должен быть перестроен и переобучен, чтобы иметь возможность в полной мере использовать новый словарь токенизатора. Мы должны начать сначала.
Примером может служить выбор данных и функций известной модели Word2VEC. Word2Vec обучает большому количеству новостных сообщений, из этого корпуса, из этого корпуса.n-граммы как словарь (функции) для этой модели. Он создает модель, которая волнует специалистов по данным и лингвистов, способных выполнять математические операции над векторами слов (например, «король — мужчина + женщина = королева»). Но по мере того, как исследование продвигалось вперед, в модели возникало все больше проблемных взаимосвязей.
Например, для выражения «врач - отец + мать = медсестра» ответ «медсестра» не является беспристрастным и логичным исходом, как можно было бы надеяться. Гендерная предвзятость непреднамеренно внедряется в модель. Подобные расовые, религиозные и даже географические предубеждения преобладали в исходной модели Word2vec. Исследователи Google не собирались создавать эти предубеждения, которые содержатся в данных, статистике использования слов из корпуса новостей Google, на котором они обучали Word2vec.
Многие новостные сюжеты просто культурно предвзяты, потому что они написаны журналистами, чтобы развлечь читателей. Эти журналисты описывают мир с институциональными предубеждениями и реальными предубеждениями в том, как люди относятся к событиям. Статистика использования слов в Новостях Google просто отражает то, что среди матерей гораздо больше медсестер, чем врачей, а среди отцов гораздо больше врачей, чем медсестер. Модель Word2vec просто дает нам окно в мир, который мы создаем.
К счастью, такие модели, как Word2vec, не требуют размеченных обучающих данных. Поэтому мы вольны выбирать любой текст, который нам нравится, для обучения модели. Мы можем выбрать более сбалансированный набор данных, который более репрезентативен для убеждений и выводов, которые мы хотим получить от модели. Когда другие прячутся за алгоритмами и говорят, что они просто действуют в соответствии с моделями, мы можем поделиться с ними нашими собственными наборами данных, которые более справедливо представляют общество, в котором мы стремимся предоставить всем равные возможности.
При обучении и тестировании моделей вы можете положиться на свое естественное чувство беспристрастности, чтобы решить, когда модель может делать прогнозы, влияющие на жизнь пользователей. Если получившаяся модель будет относиться ко всем пользователям так, как мы хотим, то мы сможем хорошо выспаться. Это также может помочь следить за потребностями пользователей, которые отличаются от всех остальных, особенно тех, кто часто находится в неблагоприятном социальном положении. Если вам нужны более формальные причины для ваших действий, вы также можете узнать больше о статистике, философии, этике, психологии, поведенческой экономике и антропологии, чтобы улучшить свои знания в области информатики, которые вы изучили в этой книге «Навыки».
Как практик NLP и инженер по машинному обучению, у вас есть возможность обучать машины, которые могут работать лучше, чем люди. Начальство и коллеги не говорят вам, какой текст добавить или удалить из вашего тренировочного набора, вы сами можете влиять на поведение машин, формирующих сообщество и общество в целом.
Мы дали вам несколько идей о том, как собрать менее предвзятый и более справедливый набор данных. Теперь мы покажем, как подогнать получившиеся модели к объективным данным, чтобы они были точными и полезными в реальном мире.
D.2 Степень соответствия модели
Как и во всех моделях машинного обучения, основная проблема заключается в преодолении чрезмерной производительности модели. Что такое «чрезмерное превосходство»? Данный алгоритм хорошо справляется с поиском закономерностей в заданном наборе данных при работе с выборочными данными во всех моделях. Но учитывая, что мы уже знаем метки всех заданных выборок в обучающем наборе (если незнание их меток означает, что их нет в обучающем наборе), приведенные выше прогнозы алгоритма для обучающих выборок не будут особенно полезны. Наша настоящая цель — использовать эти обучающие выборки для построения модели, которая обобщает и может правильно маркировать новую выборку. Хотя эта выборка похожа на выборку обучающей выборки, она находится вне обучающей выборки. Производительность прогнозирования для новых выборок вне обучающего набора — это то, что мы хотим оптимизировать.
Мы называем модель, которая идеально описывает (и предсказывает) обучающие выборки, «подгонкой» (как показано на рисунке D-1). Такая модель была бы трудной или неспособной описать новые данные. Это не универсальная модель, и трудно поверить, что она будет хорошо работать на образце, которого нет в тренировочном наборе.
Рисунок D-1 Переобучение на обучающих выборках
И наоборот, если наша модель делает много неверных прогнозов на обучающих выборках, а также плохо работает на новых выборках, говорят, что она «не соответствует» (как показано на рисунке D-2). В реальном мире ни одна из моделей не очень полезна для прогнозирования. Итак, давайте посмотрим, какие методы могут обнаружить две вышеупомянутые проблемы с подгонкой, и, что более важно, мы также дадим некоторые методы, позволяющие избежать вышеуказанных проблем.
Рисунок D-2 Недообучение на обучающих выборках
D.3 Разделение набора данных
В практике машинного обучения, если данные — это золото, то помеченные данные — это раритан (драгоценный ресурс в игре). Нашим первым побуждением может быть взять аннотированные данные и передать их в модель. Больше обучающих данных приводит к более устойчивым моделям, верно? Но из-за этого у нас не было возможности протестировать модель, и мы надеялись, что она даст хорошие результаты в реальном мире. Это явно непрактично. Решение состоит в том, чтобы разделить аннотированные данные на два, а иногда и на три набора данных: обучающий набор, проверочный набор и, в некоторых случаях, тестовый набор.
Тренировочный набор очевиден. Во время тренировочного раунда проверочный набор представляет собой небольшую часть помеченных данных, которые мы скрываем от модели. Получение хорошей производительности на проверочном наборе — это первый шаг к проверке того, что обученная модель хорошо работает с новыми данными за пределами обучающего набора. Обычно можно увидеть, что данный помеченный набор данных делится на 80%/20% или 70%/30% отношения обучения к проверке. Тестовый набор аналогичен проверочному набору и представляет собой подмножество помеченных обучающих данных, используемых для тестирования модели и измерения производительности. Но чем этот тестовый набор отличается от проверочного? Композиционно они ничем особо не отличаются, разница заключается в том, как они используются.
Когда модель обучается на обучающем наборе, во время итераций будет несколько итераций с разными гиперпараметрами. Окончательная модель, которую мы выберем, будет той, которая лучше всего работает на проверочном наборе. Но вот вопрос: откуда мы знаем, что мы не оптимизируем модель, которая просто хорошо соответствует набору проверки? У нас нет возможности проверить, хорошо ли работает модель на других данных. Вот где наши начальники или читатели газеты больше всего заинтересованы — насколько хорошо модель работает с их данными?
Поэтому, если данных достаточно, в качестве тестового набора необходимо использовать третью часть аннотированного набора данных. Это придаст нашим читателям (или руководителям) больше уверенности в том, что модель может хорошо работать с данными, которые она никогда не видела во время обучения и настройки. После того, как обученная модель выбрана на основе производительности проверочного набора, и модель больше не обучается и не настраивается, можно делать прогнозы (выводы) для каждой выборки в тестовом наборе. Если модель хорошо работает с третьей частью данных, то она хорошо обобщает. Чтобы получить такую надежную проверку модели, вы часто видите набор данных, разделенный в соответствии с соотношением обучения / проверки / тестирования 60% / 20% / 20%.
Совет Важно изменить порядок набора данных, прежде чем разбивать его на наборы для обучения, проверки и тестирования. Мы хотим, чтобы каждое подмножество данных было репрезентативным для образцов «реального мира», и они должны иметь примерно такое же соотношение каждой метки, которую мы ожидаем увидеть. Если в обучающем наборе 25 % положительных образцов и 75 % отрицательных, то мы также хотим, чтобы в тестовом и проверочном наборах было 25 % положительных и 75 % отрицательных образцов. Если исходному набору данных предшествовали отрицательные выборки, и данные не перемешивались перед разделением набора данных на обучающий/тестовый набор с соотношением 50 %/50 %, то вы получите 100 % отрицательных выборок в обучающем наборе. В тестовом наборе , будет получено 50% отрицательных образцов. В этом случае модель никогда не сможет учиться на форвардных примерах в наборе данных.
D.4 Тренировка кроссфита
Другой способ разделить обучающий/тестовый набор — перекрестная проверка илиkСложите перекрестную проверку (как показано на рисунке D-3). Концепция перекрестной проверки очень похожа на разбиение данных, которое мы только что обсуждали, но позволяет проводить обучение на всех помеченных наборах данных. Этот процесс делит обучающую выборку наkравные части илиkскладывать. Затем, поставивk− 1 данные используются в качестве обучающей выборки для обучения модели иkпроверка по данным. Затем используйте первую попытку в качестве тренировкиk− Один из 1 данных используется в качестве проверочного набора, остальныеk− 1 часть данных становится новой обучающей выборкой для переобучения.
Рисунок D-3kСвернуть перекрестную проверку
Этот метод полезен для анализа структуры моделей и поиска гиперпараметров, которые хорошо работают на отдельных данных проверки. После выбора гиперпараметров также необходимо выбрать наиболее эффективную обученную модель, которая, следовательно, уязвима для предубеждений, описанных в предыдущем разделе, поэтому все же рекомендуется сохранять тестовый набор во время этого процесса.
Этот подход также предоставляет некоторую новую информацию о надежности модели. Мы можем рассчитатьPзначение, указывающее на вероятность того, что взаимосвязь между входными функциями и выходными прогнозами, найденными моделью, является статистически значимой, а не результатом случайного выбора. Если обучающая выборка действительно является репрезентативной выборкой реального мира, то это будет очень важная новая информация.
Цена этой дополнительной уверенности в модели заключается в том, что она требуетkраз больше времени обученияkСвернутая перекрестная проверка. Итак, если вы хотите получить 90% ответа на вопрос, обычно можно просто выполнить 1-кратную перекрестную проверку. Этот метод проверки точно такой же, как разделение обучения/проверки, которое мы делали ранее. У нас не было бы 100% уверенности в надежности представления модели динамики реального мира, но если она хорошо работает на тестовом наборе, мы можем быть очень уверены, что это полезная модель для прогнозирования целевой переменной. Таким образом, модели машинного обучения, основанные на этом практическом подходе, имеют смысл для большинства коммерческих приложений.
D.5 Модель подавления
В model.fit() градиентный спуск чрезмерно усердствует в стремлении уменьшить ошибки, которые могут возникнуть в модели. Это может привести к переоснащению, когда обученная модель хорошо работает на обучающем наборе, но плохо работает на новом наборе невидимых образцов (тестовом наборе). Следовательно, мы можем захотеть «сохранить» контроль над моделью. Вот 3 метода:
- Регуляризация;
- случайное выпадение;
- Пакетная нормализация.
D.5.1 Регуляризация
Во всех моделях машинного обучения в конечном итоге происходит переобучение. К счастью, есть несколько инструментов, которые могут решить эту проблему. Во-первых, это регуляризация, которая представляет собой штраф за изученные параметры на каждом шаге обучения. Обычно, но не всегда, это фактор самого параметра. Среди них норма L1 и норма L2 являются наиболее распространенными практиками.
Регуляризация L1:
L1 – абсолютное значение всех параметров (весов) и некоеλ(Гиперпараметр) Сумма произведений, обычно небольшое число с плавающей запятой от 0 до 1. Эта сумма применяется к обновлению весов — идея состоит в том, что большие веса создают большие штрафы, тем самым побуждая модель использовать больше, даже веса...
Регуляризация L2:
Точно так же L2 — это штраф за вес, но с немного другим определением. В данном случае это квадрат веса и некотораяλсумма произведений, этоλЗначение — это отдельный гиперпараметр, который нужно выбрать перед тренировкой.
D.5.2 dropout
В нейронных сетях отсев — еще одно решение проблемы переобучения, которое на первый взгляд может показаться магическим. Концепция дропаута заключается в том, что в любом слое нейронной сети мы будем отключать сигнал, проходящий через этот слой, в определенной пропорции во время обучения. Обратите внимание, что это происходит только во время обучения, а не во время логического вывода. Во время всего обучения подмножество нейронов в слоях сети «игнорируется», и эти выходные значения явно устанавливаются равными нулю. Поскольку они не вносят вклада в результаты прогнозирования, на этапе обратного распространения не выполняются обновления весов. На следующем этапе обучения будет выбрано подмножество различных весов в слое, а остальные веса будут обнулены.
Как обучается сеть мозгов, у которых скидка на 20 % в любой момент времени? Идея состоит в том, что не существует одного конкретного пути веса, который полностью определяет конкретное свойство данных. Модель должна обобщать свою внутреннюю структуру, чтобы модель могла обрабатывать данные по нескольким путям через нейроны.
Процент выключенных сигналов определяется как гиперпараметр, поскольку он представляет собой число с плавающей запятой от 0 до 1. На практике отсев от 0,1 до 0,5 обычно оптимален, конечно, это зависит от модели. Во время вывода отсев игнорируется, полностью используя обученные веса для обработки новых данных.
Keras предоставляет очень простую реализацию, которую можно увидеть в примерах книги и листинге кода D-1.
Листинг кода D-1. Слой отсева в Keras уменьшает переоснащение.
>>> from keras.models import Sequential
>>> from keras.layers import Dropout, LSTM, Flatten, Dense
>>> num_neurons = 20
>>> maxlen = 100
>>> embedding_dims = 300
>>> model = Sequential()
>>> model.add(LSTM(num_neurons, return_sequences=True,
... input_shape=(maxlen, embedding_dims)))
>>> model.add(Dropout(.2))
>>> model.add(Flatten())
>>> model.add(Dense(1, activation='sigmoid'))
D.5.3 Нормализация партии
Новая концепция нейронных сетей, называемая пакетной нормализацией, может помочь стандартизировать и обобщить модели. Идея пакетной нормализации заключается в том, что, как и входные данные, выходные данные каждого сетевого уровня должны быть нормализованы до значения от 0 до 1. До сих пор ведутся споры о том, как, почему и когда это полезно, и при каких условиях это следует использовать. Мы надеемся, что каждый сможет самостоятельно изучить это направление исследований.
Но слой Keras BatchNormalization предоставляет простой способ сделать это, как показано в листинге D-2.
Листинг D-2 нормализованной пакетной нормализации
>>> from keras.models import Sequential
>>> from keras.layers import Activation, Dropout, LSTM, Flatten, Dense
>>> from keras.layers.normalization import BatchNormalization
>>> model = Sequential()
>>> model.add(Dense(64, input_dim=14))
>>> model.add(BatchNormalization())
>>> model.add(Activation('sigmoid'))
>>> model.add(Dense(64, input_dim=14))
>>> model.add(BatchNormalization())
>>> model.add(Activation('sigmoid'))
>>> model.add(Dense(1, activation='sigmoid'))
D.6 Несбалансированный тренировочный набор
Модели машинного обучения хороши настолько, насколько хороши предоставляемые им данные. Наличие большого количества данных помогает только в том случае, если выборка охватывает все случаи, которые вы хотите на этапе прогнозирования, и этого недостаточно, чтобы набор данных охватывал каждый случай только один раз. Представьте, что мы пытаемся предсказать, является ли изображение собакой или кошкой. На данный момент у нас есть обучающий набор, содержащий 20 000 фотографий кошек и только 200 фотографий собак. Если бы модель обучалась на этом наборе данных, она, скорее всего, просто научилась бы предсказывать, что любое данное изображение является кошкой, независимо от входных данных. С точки зрения модели этот результат приемлем, верно? Я имею в виду, что предсказания верны для 99% обучающих выборок. Конечно, такое представление совершенно несостоятельно, а модель никуда не годится. Однако, совершенно вне рамок конкретной модели, наиболее вероятной причиной этого сбоя является несбалансированная обучающая выборка.
Модель может уделять большое внимание обучающему набору по той простой причине, что сигнал от класса с передискретизацией в помеченных данных подавляет сигнал от класса с недостаточной выборкой. Веса будут чаще обновляться по ошибке сигнала основного класса, а сигналы от подклассов будут игнорироваться. Получение абсолютно однородного представления каждого класса не важно, поскольку модель способна сама преодолевать некоторый шум. Цель здесь состоит в том, чтобы привести пропорции классов к равновесному уровню.
Как и в любой задаче машинного обучения, первый шаг — внимательно изучить данные, чтобы получить некоторые детали и сделать приблизительную статистику о том, что на самом деле представляют данные. Не только количество данных, но и количество типов данных.
Так что же люди сделают, если бы все не было особенным с самого начала? Если цель состоит в том, чтобы сделать представление единицы класса (которое оно есть), существует 3 основных подхода к выбору: передисредко, не поддается увеличению и увеличению данных.
D.6.1 Передискретизация
Передискретизация — это метод избыточной выборки выборок из одного или нескольких недостаточно представленных классов. Возьмем предыдущий пример классификации собак и кошек (всего 200 собак, 20 000 кошек). Мы можем просто повторить 100 раз 200 изображений собак, которые у нас уже есть, и в итоге получить 40 000 образцов, половина из которых — собаки, а половина — кошки.
Это крайний пример, и поэтому он вызывает присущие ему проблемы. Вполне вероятно, что эта сеть хорошо идентифицирует эти 200 конкретных собак и не будет хорошо обобщать других собак, не входящих в тренировочную выборку. Однако в менее экстремальных несбалансированных ситуациях методы передискретизации, безусловно, могут помочь сбалансировать обучающую выборку.
D.6.2 Недостаточная выборка
Недостаточная выборка — обратная сторона той же медали. Здесь нужно удалить некоторые образцы из перепредставленных классов. В приведенном выше примере с кошкой/собакой мы случайным образом удалим 19 800 изображений кошек, так что у нас останется 400 образцов, половина из которых — собаки, а половина — кошки. Конечно, при этом возникает нерешенная проблема, заключающаяся в том, что мы отбрасываем подавляющее большинство данных и проводим исследования только на менее общей базе данных. Такой экстремальный подход в приведенном выше примере не идеален, но может быть хорошим решением, если сам недопредставленный класс содержит большое количество выборок. Конечно, иметь столько данных — это абсолютная роскошь.
D.6.3 Расширение данных
Аугментация данных немного сложна, но может помочь нам в правильных обстоятельствах. Расширение означает генерацию новых данных либо путем искажения существующих данных, либо путем их регенерации. AffNIST является одним из таких примеров. Хорошо известный набор данных MNIST состоит из набора рукописных цифр от 0 до 9 (показан на рисунке D-4). AffNIST искажает, поворачивает и масштабирует каждую цифру различными способами, сохраняя при этом исходные метки.
Рисунок D-4. Записи в крайнем левом столбце представляют собой выборки из исходного MNIST, остальные столбцы являются аффинными.
Преобразованные данные для включения в affNIST (изображение предоставлено "affNIST")
Цель этой конкретной практики не в том, чтобы сбалансировать обучающий набор, а в том, чтобы сделать сеть, подобную сверточной нейронной сети, более устойчивой к новым данным, записанным другими способами, но здесь все еще применяется концепция увеличения данных.
Однако вы должны быть осторожны, добавление данных, которые на самом деле не представляют данные строящейся модели, может принести больше вреда, чем пользы. Предположим, набор данных — это предыдущий набор изображений, состоящий из 200 собак и 20 000 кошек. Далее мы предполагаем, что эти изображения являются цветными изображениями высокого разрешения, снятыми в идеальных условиях. Теперь, раздав 19 000 воспитателей детских садов коробку цветных карандашей, вы не обязательно получите расширенные данные, которые вам нужны. Поэтому подумайте о том, как дополненные данные повлияют на модель. Ответ не всегда однозначен, поэтому, если вы должны пойти по этому пути, имейте это в виду при проверке модели и постарайтесь протестировать ее края, чтобы убедиться в отсутствии непреднамеренного введения неожиданного поведения.
Наконец, еще одна вещь, которая может иметь наименьшее значение, но это правда: если набор данных «неполный», то первое, что нужно рассмотреть, — это вернуться к исходному источнику данных, чтобы найти дополнительные данные. Такая практика не всегда возможна, но, по крайней мере, ее следует рассматривать как вариант.
D.7 Индекс производительности
Наиболее важной частью любого конвейера машинного обучения являются показатели производительности. Вы не можете улучшить изученную модель машинного обучения, не зная, насколько хорошо она работает. При запуске конвейера машинного обучения первое, что нужно сделать, — установить метод измерения производительности, например «.score()», для любой модели машинного обучения sklearn. Затем мы строим полностью случайный конвейер классификации/регрессии и в конце вычисляем показатели производительности. Это позволяет нам вносить постепенные улучшения в конвейер, постепенно увеличивая счет, чтобы приблизиться к конечной цели. Кроме того, это отличный способ убедить начальника и коллег в том, что вы на правильном пути.
D.7.1 Метрики для классификации
Мы хотим, чтобы классификатор правильно делал две вещи: во-первых, он использовал метку класса для маркировки объектов, которые действительно принадлежат этому классу, а во-вторых, не использовал эту метку для маркировки объектов, не принадлежащих этому классу. Полученные в результате правильные подсчеты для этих двух событий называются истинными положительными и истинными отрицательными значениями соответственно. Если имеется пустой массив, содержащий все результаты классификации или прогнозирования модели, то можно вычислить правильные результаты прогнозирования, как показано в листинге кода D-3.
Листинг D-4 Неверные результаты вычислительной модели
Иногда эти 4 числа объединяются в матрицу 4 × 4, называемую матрицей ошибок или матрицей путаницы. В листинге D-5 показано, как выглядят предсказанные и истинные значения в матрице путаницы.
Список кодов D-5 Матрица путаницы
>>> confusion = [[true_positives, false_positives],
... [false_negatives, true_negatives]]
>>> confusion
[[4, 3], [1, 2]]
>>> import pandas as pd
>>> confusion = pd.DataFrame(confusion, columns=[1, 0], index=[1, 0])
>>> confusion.index.name = r'pred \ truth'
>>> confusion
1 0
pred \ truth
1 4 1
0 3 2
В матрице путаницы мы хотим, чтобы числа по диагонали (вверху слева и внизу справа) были больше, а числа вне диагонали (вверху слева и внизу слева) были меньше. Однако порядок положительных и отрицательных классов произвольный, поэтому иногда вы можете увидеть числа в этой таблице перевернутыми. Всегда помечайте столбцы и нижние индексы матрицы путаницы. Иногда вы можете слышать, как статистики называют эту матрицу таблицей непредвиденных обстоятельств классификатора, но путаницы можно избежать, придерживаясь названия «матрица путаницы».
Для задач классификации машинного обучения есть два полезных метода объединения некоторых из этих четырех значений счетчика в показатель производительности: точность и полнота. Информационный поиск (поисковая система) и семантический поиск являются примерами этой проблемы классификации, потому что цель делится на (и входной запрос) соответствует или не соответствует двум категориям. В главе 2 мы узнали, как увеличить скорость припоминания, но это также снижает скорость правильного.
Показатель точности измеряет способность модели обнаруживать все объекты интересующего класса (так называемого прямого класса), поэтому его также называют положительной прогностической ценностью (положительной прогностической ценностью). Так как истинные положительные результаты — это количество образцов положительного класса, которые были предсказаны правильно, а ложные положительные результаты — это количество образцов отрицательного класса, которые неправильно помечены как положительные классы, правильный показатель можно рассчитать, как показано в листинге D-6.
Список кодов D-6 Правильная скорость
>>> precision = true_positives / (true_positives + false_positives)
>>> precision
0.571...
Матрица путаницы в приведенном выше примере дает точность около 57%, поскольку около 57% всех выборок, которые, по прогнозам, являются прямым классом, являются правильными.
Подобно правильной скорости, скорость отзыва также известна как чувствительность, истинная положительная скорость или скорость отзыва. Поскольку общее количество образцов в наборе данных представляет собой сумму истинных положительных и ложных отрицательных результатов, можно рассчитать полноту, то есть процент положительных образцов класса, обнаруженных с правильными предсказаниями, из всех образцов, как показано в листинге кода D- 7 показано.
Список кодов D-7 Отзыв
>>> recall = true_positives / (true_positives + false_negatives)
>>> recall
0.8
Это означает, что результирующая модель в приведенном выше примере обнаружила 80% выборок прямого класса в наборе данных.
D.7.2 Метрики для регрессии
Двумя наиболее распространенными показателями производительности, используемыми для задач регрессии машинного обучения, являются среднеквадратическая ошибка (RMSE) и коэффициент корреляции Пирсона (R2). Оказывается, за проблемой классификации на самом деле стоит проблема регрессии. Следовательно, если метки классов были преобразованы в числа (как мы сделали в предыдущем разделе), для них можно использовать метрики регрессии. В следующем примере кода будут повторно использоваться эти предсказанные и истинные значения из предыдущего раздела. RMSE является наиболее полезным для большинства задач, потому что он показывает, насколько прогнозируемое значение, вероятно, будет отличаться от истинного значения. RMSE дает стандартное отклонение ошибки, как показано в листинге D-8.
Список кодов D-8 Среднеквадратическая ошибка (RMSE)
>>> y_true = np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1])
>>> y_pred = np.array([0, 0, 1, 1, 1, 1, 1, 0, 0, 0])
>>> rmse = np.sqrt((y_true - y_pred) ** 2) / len(y_true))
>>> rmse
0.632...
Коэффициент корреляции Пирсона является еще одним распространенным показателем эффективности регрессионных функций. Модуль sklearn по умолчанию прикрепляет это к большинству моделей как функцию .score(). Если вы не знаете, как рассчитываются эти показатели, вам следует рассчитать их вручную, чтобы узнать. Расчет коэффициента корреляции показан в кодовом листинге D-9.
Список кодов D-9 Коэффициент корреляции
>>> corr = pd.DataFrame([y_true, y_pred]).T.corr()
>>> corr[0][1]
0.218...
>>> np.mean((y_pred - np.mean(y_pred)) * (y_true - np.mean(y_true))) /
... np.std(y_pred) / np.std(y_true)
0.218...
Видно, что корреляция между предсказанным значением нашего образца и истинным значением составляет всего 28%.
D.8 Профессиональные навыки
Когда вы освоите основы, эти простые советы помогут вам быстрее создавать хорошие модели:
- Используйте небольшую случайную выборку из набора данных, чтобы найти возможные недостатки в конвейере;
- Когда вы будете готовы развернуть модель в рабочей среде, используйте все данные для обучения модели;
- Сначала вы должны попробовать метод, который вы знаете лучше всего, этот метод также применим к извлечению признаков и самой модели;
- Используйте диаграммы рассеяния и матрицы рассеяния для низкоразмерных объектов и целей, чтобы гарантировать, что некоторые очевидные закономерности не будут упущены;
- Постройте многомерные данные в виде необработанных изображений, чтобы обнаружить передачу функций**;
- Если вы хотите максимизировать разницу между парами векторов, вы можете попробовать PCA для многомерных данных (LSA для данных NLP);
- Если вы хотите выполнить регрессию в низкоразмерном пространстве или найти совпадающие пары векторов, вы можете использовать нелинейное уменьшение размерности, такое как t-SNE;
- Создайте объект sklearn.Pipeline, чтобы улучшить ремонтопригодность и возможность повторного использования моделей и экстракторов функций;
- Автоматизируйте настройку гиперпараметров, чтобы модель понимала данные, и вы могли потратить время на изучение машинного обучения.
Настройка гиперпараметров Гиперпараметры — это все те значения, которые определяют производительность конвейера, включая тип модели и то, как она настроена. Гиперпараметры также могут быть количеством нейронов и слоев, включенных в нейронную сеть, или значением альфа в модели гребневой регрессии sklearn.linear_model.Ridge. Гиперпараметры также включают значения, управляющие всеми этапами предварительной обработки, такими как тип токенизации, список всех игнорируемых слов, минимальная и максимальная частоты документа для словаря TF-IDF, использование ли лемматизации, метод нормализации TF-IDF и т. д.
Настройка гиперпараметров может быть медленным процессом, поскольку каждый эксперимент требует обучения и проверки новой модели. Следовательно, при поиске широкого диапазона гиперпараметров нам необходимо уменьшить набор данных до репрезентативного минимального набора выборок. При поиске окончательной модели, удовлетворяющей вашим потребностям, вы можете увеличить размер набора данных, чтобы использовать как можно больше нужных данных.
Оптимизация гиперпараметров конвейера — это способ повысить производительность модели. Автоматическая настройка гиперпараметров может сэкономить еще больше времени на чтение книг, подобных этой, или на визуализацию и анализ окончательных результатов. Конечно, вы все еще можете управлять настройкой, интуитивно устанавливая диапазон гиперпараметров, которые нужно попробовать.
Совет Наиболее эффективные алгоритмы настройки гиперпараметров (от лучшего к худшему):
(1) байесовский поиск;
(2) генетический алгоритм;
(3) случайный поиск;
(4) поиск по сетке с несколькими разрешениями;
(5) Поиск по сетке.
Но в любом случае, все алгоритмы компьютерного поиска, которые работают, когда вы засыпаете, лучше, чем вручную угадывать каждый новый параметр.
Эта статья взята из «Обработка естественного языка на практике с использованием Python для понимания, анализа и генерации текста».
[США] Хобсон Лейн, Коул Ховард, Ханнес Макс Хапке, Ши Лян, Лу Сяо, Тан Кэсинь, Ван Бин
- Вход Python Natural Language Processing NLP в реальный бой
- Сочетая базовую теорию и практику программирования, практическое руководство для практиков в области современной обработки естественного языка.
- Предоставьте исходный код, переведенный командой НЛП Xiaomi AI Lab.
Эта книга представляет собой практическое введение в обработку естественного языка (NLP) и глубокое обучение. НЛП стало основной областью применения глубокого обучения, а глубокое обучение является важным инструментом в исследованиях и применении НЛП. Книга разделена на 3 части: первая часть знакомит с основами НЛП, включая сегментацию слов, векторизацию TF-IDF и преобразование частотных векторов слов в семантические векторы; вторая часть описывает глубокое обучение, включая нейронные сети, вектора слов. , сверточные нейронные сети (базовые модели и методы глубокого обучения, такие как CNN), рекуррентная нейронная сеть (RNN), сеть с долговременной кратковременной памятью (LSTM), последовательное моделирование и механизмы внимания; третья часть знакомит с практическими аспектами , включая извлечение информации, построение модели ответов на вопросы, проблемы с производительностью и решения для реальных систем, таких как системы и диалог человек-машина.
Эта книга предназначена для разработчиков Python среднего и продвинутого уровня.Она сочетает в себе базовую теорию и практику программирования.Это практический справочник для практиков в современной области НЛП.