В этом примере показано, как классифицировать текстовые данные из памяти с нейронной сетью для глубокого обучения с помощью пользовательского мини-пакетного datastore.
Мини-пакетный datastore является реализацией datastore с поддержкой чтения данных в пакетах. Можно использовать мини-пакетный datastore в качестве источника обучения, валидации, теста и наборов данных предсказания для применения глубокого обучения. Используйте мини-пакетные хранилища данных, чтобы считать данные, которые не помещаются в память, или выполнить определенные операции предварительной обработки при чтении пакетов данных.
При обучении сети программное обеспечение создает мини-пакеты последовательностей той же длины путем дополнения, обрезая или разделяя входные данные. trainingOptions
функция предоставляет возможности заполнять и обрезать входные последовательности, однако, эти опции не хорошо подходят для последовательностей векторов слова. Кроме того, эта функция не поддерживает дополнительные данные в пользовательском datastore. Вместо этого необходимо заполнить и обрезать последовательности вручную. Если вы лево-заполняете и обрезаете последовательности векторов слова, то учебная сила улучшается.
Классифицировать текстовые Данные Используя пример Глубокого обучения вручную обрезают и заполняют все документы той же длине. Этот процесс добавляет большое дополнение к очень коротким документам и отбрасывает много данных из очень длинных документов.
В качестве альтернативы, чтобы предотвратить добавление слишком большого дополнения или отбрасывание слишком большого количества данных, создайте пользовательский мини-пакетный datastore, который вводит мини-пакеты в сеть. Пользовательский мини-пакетный datastore textDatastore.m
преобразует мини-пакеты документов последовательностям или словарей и лево-заполняет каждый мини-пакет к длине самого длинного документа в мини-пакете. Для отсортированных данных этот datastore может помочь уменьшать объем дополнения добавленного к данным, поскольку документы не дополнены к фиксированной длине. Точно так же datastore не отбрасывает данных из документов.
Этот пример использует пользовательский мини-пакетный datastore textDatastore
, присоединенный к этому примеру как вспомогательный файл. Чтобы получить доступ к этому файлу, откройте пример как live скрипт. Можно адаптировать этот datastore к данным путем настройки функций. Для примера, показывающего, как создать ваш собственный мини-пакетный datastore, смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore (Deep Learning Toolbox).
Datastore textDatastore
требует, чтобы встраивание слова преобразовало документы последовательностям векторов. Загрузите предварительно обученное встраивание слова с помощью fastTextWordEmbedding
. Эта функция требует Модели Text Analytics Toolbox™ для fastText английских 16 миллиардов Лексем пакет поддержки Word Embedding. Если этот пакет поддержки не установлен, то функция обеспечивает ссылку на загрузку.
emb = fastTextWordEmbedding;
Создайте datastore, который содержит данные для обучения. Пользовательский мини-пакетный datastore textDatastore
предикторы чтений и метки из файла CSV. Для предикторов datastore преобразует документы в последовательности словарей и для ответов, datastore возвращает категориальную метку для каждого документа. Для получения дополнительной информации о создании пользовательских мини-пакетных хранилищ данных, смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore (Deep Learning Toolbox).
Для обучающих данных задайте файл CSV "factoryReports.csv"
и что текст и метки находятся в столбцах "Description"
и "Category"
соответственно.
filenameTrain = "factoryReports.csv"; textName = "Description"; labelName = "Category"; dsTrain = textDatastore(filenameTrain,textName,labelName,emb)
dsTrain = textDatastore with properties: ClassNames: ["Electronic Failure" "Leak" "Mechanical Failure" "Software Failure"] Datastore: [1×1 matlab.io.datastore.TransformedDatastore] EmbeddingDimension: 300 LabelName: "Category" MiniBatchSize: 128 NumClasses: 4 NumObservations: 480
Задайте архитектуру сети LSTM. Чтобы ввести данные о последовательности в сеть, включайте входной слой последовательности и установите входной размер на размерность встраивания. Затем включайте слой LSTM с 180 скрытыми модулями. Чтобы использовать слой LSTM для проблемы классификации последовательностей к метке, установите режим вывода на 'last'
. Наконец, добавьте полносвязный слой с выходным размером, равным количеству классов, softmax слоя и слоя классификации.
numFeatures = dsTrain.EmbeddingDimension; numHiddenUnits = 180; numClasses = dsTrain.NumClasses; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Задайте опции обучения. Задайте решатель, чтобы быть 'adam'
и порог градиента, чтобы быть 2. Datastore textDatastore.m
не поддерживает перестановку, таким образом, устанавливает 'Shuffle'
, к 'never'
. Для примера, показывающего, как реализовать datastore с поддержкой перестановки, смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore (Deep Learning Toolbox). Чтобы контролировать процесс обучения, установите 'Plots'
опция к 'training-progress'
. Чтобы подавить многословный выход, установите 'Verbose'
к false
.
По умолчанию, trainNetwork
использует графический процессор, если вы доступны. Чтобы задать среду выполнения вручную, используйте 'ExecutionEnvironment'
аргумент пары "имя-значение" trainingOptions
. Обучение на центральном процессоре может взять значительно дольше, чем обучение на графическом процессоре. Обучение с помощью графического процессора требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).
miniBatchSize = 128; numObservations = dsTrain.NumObservations; numIterationsPerEpoch = floor(numObservations / miniBatchSize); options = trainingOptions('adam', ... 'MiniBatchSize',miniBatchSize, ... 'GradientThreshold',2, ... 'Shuffle','never', ... 'Plots','training-progress', ... 'Verbose',false);
Обучите сеть LSTM с помощью trainNetwork
функция.
net = trainNetwork(dsTrain,layers,options);
Классифицируйте тип события трех новых отчетов. Создайте массив строк, содержащий новые отчеты.
reportsNew = [ "Coolant is pooling underneath sorter." "Sorter blows fuses at start up." "There are some very loud rattling sounds coming from the assembler."];
Предварительно обработайте текстовые данные с помощью шагов предварительной обработки в качестве datastore textDatastore
.
documents = tokenizedDocument(reportsNew); documents = lower(documents); documents = erasePunctuation(documents); predictors = doc2sequence(emb,documents);
Классифицируйте новые последовательности с помощью обученной сети LSTM.
labelsNew = classify(net,predictors)
labelsNew = 3×1 categorical
Leak
Electronic Failure
Mechanical Failure
wordEmbeddingLayer
| doc2sequence
| tokenizedDocument
| lstmLayer
(Deep Learning Toolbox) | trainNetwork
(Deep Learning Toolbox) | trainingOptions
(Deep Learning Toolbox) | sequenceInputLayer
(Deep Learning Toolbox) | wordcloud
| extractHTMLText
| findElement
| htmlTree