embed

Встраивайте дискретные данные

    Описание

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

    Примечание

    Эта функция применяет операцию встраивания к dlarray данные. Если необходимо применить операцию встраивания в layerGraph объект или Layer массив, используйте wordEmbeddingLayer (Symbolic Math Toolbox) объект.

    пример

    dlY = embed(dlX,weights) возвращает векторы встраивания в weights соответствующий числовым индексам в форматированной dlarray dlX объекта.

    dlY = embed(dlX,weights,'DataFormat',FMT)также задает формат размерности FMT когда dlX не является форматированным dlarray объект. Область выхода dlY является неформатированным dlarray с тем же порядком размерностей, что и dlX.

    Примеры

    свернуть все

    Встройте мини-пакет категориальных функций.

    Создайте массив категориальных функций, содержащих 5 наблюдений со значениями "Male" или "Female".

    X = categorical(["Male" "Female" "Male" "Female" "Female"])';

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

    embeddingDimension = 10;
    vocabularySize = numel(categories(X));
    weights = rand(embeddingDimension,vocabularySize+1);

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

    X = double(X)
    X = 5×1
    
         2
         1
         2
         1
         1
    
    

    Для форматированных dlarray вход, функция встраивания расширяется в синглтон 'C' (канальная) размерность с размером 1. Создайте форматированный dlarray объект, содержащий данные. Чтобы указать, что строки соответствуют наблюдениям, задайте формат 'BC' (пакет, канал).

    dlX = dlarray(X,'BC')
    dlX = 
      1(C) x 5(B) dlarray
    
         2     1     2     1     1
    
    

    Встройте числовые индексы с помощью embed функция. Функция embed расширяется в 'C' размерность.

    dlY = embed(dlX,weights)
    dlY = 
      10(C) x 5(B) dlarray
    
        0.1576    0.8147    0.1576    0.8147    0.8147
        0.9706    0.9058    0.9706    0.9058    0.9058
        0.9572    0.1270    0.9572    0.1270    0.1270
        0.4854    0.9134    0.4854    0.9134    0.9134
        0.8003    0.6324    0.8003    0.6324    0.6324
        0.1419    0.0975    0.1419    0.0975    0.0975
        0.4218    0.2785    0.4218    0.2785    0.2785
        0.9157    0.5469    0.9157    0.5469    0.5469
        0.7922    0.9575    0.7922    0.9575    0.9575
        0.9595    0.9649    0.9595    0.9649    0.9649
    
    

    В этом случае выход является embeddingDimension-by- N матрица с форматом 'CB' (канал, пакет), где N количество наблюдений. Каждый столбец содержит векторы встраивания.

    Встройте мини-пакет текстовых данных.

    textData = [
        "Items are occasionally getting stuck in the scanner spools."
        "Loud rattling and banging sounds are coming from assembler pistons."];

    Создайте массив токенизированных документов.

    documents = tokenizedDocument(textData);

    Чтобы кодировать текстовые данные как последовательности числовых индексов, создайте wordEncoding объект.

    enc = wordEncoding(documents);

    Инициализируйте веса встраивания. Задайте размерность встраивания 100 и размер словаря, чтобы соответствовать размеру словаря, соответствующему количеству слов в кодировке слова плюс единица.

    embeddingDimension = 100;
    vocabularySize = enc.NumWords;
    weights = rand(embeddingDimension,vocabularySize+1);

    Преобразуйте токенизированные документы в последовательности векторов слов с помощью doc2sequence функция. The doc2sequence функция по умолчанию отбрасывает из словаря лексемы во входных данных. Чтобы сопоставить ненужные лексемы с последним вектором весов встраивания, установите 'UnknownWord' опция для 'nan'. The doc2sequence функция по умолчанию заполняет последовательности входа нулями так, чтобы они имели одинаковую длину

    sequences = doc2sequence(enc,documents,'UnknownWord','nan')
    sequences=2×1 cell array
        {[         0 1 2 3 4 5 6 7 8 9 10]}
        {[11 12 13 14 15 2 16 17 18 19 10]}
    
    

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

    Преобразуйте массив ячеек в числовой массив путем вертикального конкатенирования строк.

    X = cat(1,sequences{:})
    X = 2×11
    
         0     1     2     3     4     5     6     7     8     9    10
        11    12    13    14    15     2    16    17    18    19    10
    
    

    Преобразуйте числовые индексы в dlarray. Потому что строки и столбцы X соответствуют наблюдениям и временным шагам, соответственно, задают формат 'BT'.

    dlX = dlarray(X,'BT')
    dlX = 
      2(B) x 11(T) dlarray
    
         0     1     2     3     4     5     6     7     8     9    10
        11    12    13    14    15     2    16    17    18    19    10
    
    

    Встройте числовые индексы с помощью embed функция. The embed функция преобразует лексемы заполнения (лексемы с индексом 0) и любые другие лексемы вне словаря в тот же вектор встраивания вне словаря.

    dlY = embed(dlX,weights);

    В этом случае выход является embeddingDimension-by- N-by- S матрица с форматом 'CBT', где N и S количество наблюдений и количество временных шагов, соответственно. Векторная dlY(:,n,t) соответствует вектору вложения временного шага t наблюдений n.

    Входные параметры

    свернуть все

    Входные данные, заданные как dlarray объект с метками размерностей или без них, или числовой массив. Элементы dlX должны быть неотрицательными целыми числами или NaN.

    Функция возвращает векторы встраивания в weights соответствует числовым индексам в dlX. Если какие-либо значения в dlX нули, NaNили больше, чем размер словаря, тогда функция возвращает вектор из словаря для этого элемента.

    Когда dlX не является форматированным dlarray объект, вы должны задать формат метки размерности используя 'DataFormat' опция. Кроме того, если dlX является числовым массивом, затем weights должен быть dlarray объект.

    Операция встраивания расширяется в синглтонный канал размерности входных данных, заданных 'C' размерность. Если данные не имеют заданной размерности канала, то функция принимает неопределенную размерность синглтонного канала.

    Веса встраивания, заданные как dlarray объект с метками размерностей или без них или числовой массив.

    Матрица weights задает размерность встраивания, размер словаря и векторы встраивания.

    Размерность встраивания - это количество компонентов K встраивания. То есть встраивание преобразует числовые индексы в векторы длины K. Размер словаря - это количество дискретных элементов V в встраивание. То есть количество дискретных элементов базовых данных, которые поддерживает встраивание. Встраивание отображает индексы из словаря на тот же вектор встраивания из словаря.

    Если weights является форматированным dlarray объект, тогда он должен иметь формат 'CU' или 'UC'. Значение размерностей, соответствующее меткам 'C' и 'U' должен иметь размер K и V+ 1, соответственно, где K и V представление размерности встраивания и размера словаря, соответственно. Дополнительный вектор соответствует внешнему вектору вложения словаря.

    Если weights не является форматированным dlarray объект, затем weights должен быть K-by- (V+ 1) матрица, где K и V представление размерности встраивания и размера словаря, соответственно.

    Функция возвращает векторы встраивания в weights соответствует числовым индексам в dlX. Если какие-либо значения в dlX нули, NaNили больше, чем размер словаря, тогда функция возвращает вектор из словаря для этого элемента.

    Размерность неформатированных входных данных, заданный как разделенная разделенными запятой парами, состоящая из 'DataFormat' и символьный массив или строка FMT который обеспечивает метку для каждой размерности данных. Каждый символ в FMT должно быть одно из следующих:

    • 'S' - Пространственный

    • 'C' - Канал

    • 'B' - Партия (например, выборки и наблюдения)

    • 'T' - Время (например, последовательности)

    • 'U' - Не определено

    Можно задать несколько размерности, маркированных 'S' или 'U'. Можно использовать метки 'C', 'B', и 'T' самое большее сразу.

    Вы должны задать 'DataFormat',FMT когда входные данные dlX не является форматированным dlarray.

    Пример: 'DataFormat','SSCB'

    Типы данных: char | string

    Выходные аргументы

    свернуть все

    Векторы встраивания, возвращенные как dlarray объект. Область выхода dlY имеет тот же базовый тип данных, что и входной dlX.

    Функция возвращает векторы встраивания в weights соответствует числовым индексам в dlX. Если какие-либо значения в dlX нули, NaNили больше, чем размер словаря, тогда функция возвращает вектор из словаря для этого элемента.

    Векторы встраивания имеют K элементы, где K - размерность встраивания. Размер размерностей dlY зависят от входных данных:

    • Если dlX является форматированным dlarray с 'C' метка размера, затем операция встраивания расширяется в эту размерность. То есть выход имеет те же метки размерности, что и вход, 'C' размерность имеет размер Kдругие размерности имеют тот же размер, что и соответствующие размерности входов.

    • Если dlX является форматированным dlarray без 'C' размерность. Затем операция принимает синглтонную размерность канала. Выход имеет 'C' размерность и все другие размерности имеют одинаковый размер и метки. То есть выход имеет те же метки размерности, что и вход, а также 'C' размерность, 'C' размерность имеет размер Kдругие размерности имеют тот же размер, что и соответствующие размерности входов.

    • Если dlX не является форматированным dlarray объект и 'DataFormat' содержит 'C' размерность, затем операция встраивания расширяется в эту размерность. То есть выход имеет количество размерностей как вход, размерность, соответствующее 'C' размерность имеет размер Kдругие размерности имеют тот же размер, что и соответствующие размерности входов.

    • Если dlX не является форматированным dlarray объект и 'DataFormat' не содержит размерности 'C', тогда операция встраивания вставляет новую размерность в начале. То есть выход имеет еще одну размерность как вход, первую размерность, соответствующее 'C' размерность имеет размер Kдругие размерности имеют тот же размер, что и соответствующие размерности входов.

    Расширенные возможности

    Введенный в R2020b