Классификация текстовых данных за пределами памяти с помощью пользовательского мини-пакета Datastore

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

Мини-пакетный datastore является реализацией datastore с поддержкой чтения данных пакетами. Можно использовать мини-пакетный datastore в качестве источника наборов данных для обучения, валидации, тестирования и предсказания для применений глубокого обучения. Используйте мини-пакетные хранилища данных для чтения данных , которых не помещаютсь в память, или для выполнения определенных операций предварительной обработки при считывании пакетов данных.

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

Пример «Классификация текстовых данных с использованием глубокого обучения» вручную обрезает и заполняет все документы одинаковой длины. Этот процесс добавляет много заполнения к очень коротким документам и отбрасывает много данных из очень длинных документов.

Кроме того, чтобы предотвратить добавление слишком большого количества заполнений или отброс слишком большого количества данных, создайте пользовательский мини-пакетный datastore, который вводит мини-пакеты в сеть. Пользовательский мини-пакет datastore textDatastore.m преобразует мини-пакеты документов в последовательности или индексы слов и левые панели каждого мини-пакета в длину самого длинного документа в мини-пакете. Для отсортированных данных этот datastore может помочь уменьшить количество заполнения, добавленного к данным, поскольку документы не заполнены до фиксированной длины. Точно так же datastore не отбрасывает никаких данных из документов.

В этом примере используется пользовательский мини-пакет datastore textDatastore.m. Адаптировать этот datastore к данным можно путем настройки функций. Для примера, показывающего, как создать свой собственный пользовательский мини-пакет datastore, смотрите Разработку Пользовательского мини-пакета Datastore (Deep Learning Toolbox).

Загрузка предварительно обученного встраивания в Word

Система datastore textDatastore требуется вложение слова для преобразования документов в последовательности векторов. Загрузите предварительно обученное встраивание слов с помощью fastTextWordEmbedding. Эта функция требует Text Analytics Toolbox™ Model для fastText English 16 млрд Token Word Embedding пакет поддержки. Если этот пакет поддержки не установлен, то функция предоставляет ссылку на загрузку.

emb = fastTextWordEmbedding;

Создание мини-пакетного Datastore документов

Создайте datastore, который содержит данные для обучения. Пользовательский мини-пакет datastore textDatastore считывает предикторы и метки из файла CSV. Для предикторов datastore преобразует документы в последовательности индексов слов, и для ответов datastore возвращает категориальную метку для каждого документа.

Чтобы создать datastore, сначала сохраните пользовательский мини-пакет datastore textDatastore.m на путь. Дополнительные сведения о создании пользовательских мини-пакетных хранилищ данных см. в разделе Разработка пользовательского мини-пакета 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. Чтобы ввести данные последовательности в сеть, включите входной слой последовательности и установите размер входа равным размерности встраивания. Затем включите слой 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™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах см. раздел.

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.m.

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 

См. также

| | | | | | | (Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox) | (Deep Learning Toolbox)

Похожие темы