Во многих библиотеках нейронных сетей есть «встраиваемые слои», как в Keras или Lasagne .
Я не уверен, что понимаю его функцию, несмотря на чтение документации. Например, в документации Keras говорится:
Превратить натуральные числа (индексы) в векторы denses фиксированного размера, например. [[4], [20]] -> [[0,25, 0,1], [0,6, -0,2]]
Может ли знающий человек объяснить, что он делает и когда вы его используете?
РЕДАКТИРОВАТЬ: Что касается вставки в документацию, там не так много, чтобы вставить из документации, поэтому мой вопрос. Я не понимаю преобразование, которое это делает, и почему это должно использоваться.
Во всяком случае, это объясняется в Керасе:
Встраивание
keras.layers.embeddings.Embedding (input_dim, output_dim, init = 'равномерное', input_length = None, весовые коэффициенты = None, W_regularizer = None, W_constraint = None, mask_zero = False) Превращать натуральные числа (индексы) в векторы денсов фиксированного размера например [[4], [20]] -> [[0,25, 0,1], [0,6, -0,2]]
Форма ввода: 2D-тензор с формой: (nb_samples, sequence_length). Форма вывода: 3D-тензор с формой: (nb_samples, sequence_length, output_dim). Аргументы:
input_dim: int> = 0. Размер словаря, т.е. 1 + максимальный целочисленный индекс, встречающийся во входных данных. output_dim: int> = 0. Размер плотного вложения
И вот как это объясняется в лазаньи:
Слой для встраивания слов. На входе должна быть переменная Tensor целочисленного типа.
Параметры: входящий: экземпляр слоя или кортеж
Слой, подающий в этот слой, или ожидаемая входная форма.
input_size: int
Количество различных вложений. Последнее вложение будет иметь индекс input_size - 1.
output_size: int
Размер каждого вложения.
W: общая переменная Theano, выражение, массив numpe или вызываемый
Начальное значение, выражение или инициализатор для матрицы встраивания. Это должна быть матрица с формой (input_size, output_size). Смотрите lasagne.utils.create_param () для получения дополнительной информации.
Примеры
>>> from lasagne.layers import EmbeddingLayer, InputLayer, get_output >>> import theano >>> x = T.imatrix() >>> l_in = InputLayer((3, )) >>> W = np.arange(3*5).reshape((3, 5)).astype('float32') >>> l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W) >>> output = get_output(l1, x) >>> f = theano.function([x], output) >>> x_test = np.array([[0, 2], [1, 2]]).astype('int32') >>> f(x_test) array([[[ 0., 1., 2., 3., 4.], [ 10., 11., 12., 13., 14.]], [[ 5., 6., 7., 8., 9.], [ 10., 11., 12., 13., 14.]]], dtype=float32)
Ответы:
Отношение к Word2Vec
==========================================
Word2Vec в простой картинке:
Более подробное объяснение:
Я считаю, что это связано с недавним нововведением Word2Vec в обработке естественного языка. Грубо говоря, Word2Vec означает, что наш словарь дискретен, и мы изучим карту, которая будет встраивать каждое слово в непрерывное векторное пространство. Использование этого представления в векторном пространстве позволит нам иметь непрерывное распределенное представление словарных слов. Если, например, наш набор данных состоит из n-грамм, мы можем теперь использовать наши непрерывные функции слова, чтобы создать распределенное представление наших n-грамм. В процессе обучения языковой модели мы выучим эту карту встраивания слов. Надежда состоит в том, что при использовании непрерывного представления наше вложение отобразит похожие слова в похожие регионы. Например, в историческом документе « Распределенные представления слов и фраз и их композиционность».Обратите внимание, что в таблицах 6 и 7 некоторые фразы имеют очень хорошие фразы о ближайшем соседе с семантической точки зрения. Преобразование в это непрерывное пространство позволяет нам использовать непрерывные метрические понятия подобия для оценки семантического качества нашего вложения.
Объяснение с использованием кода лазаньи
Давайте разберем фрагмент кода лазаньи:
х - это матрица целых чисел. Хорошо, без проблем. Каждое слово в словаре может быть представлено целым числом или кодированием с 1-кратным разрежением. Поэтому, если x равен 2x2, у нас есть две точки данных, каждая по 2 грамма.
Это наша матрица встраивания слов. Это матрица 3 на 5 столбцов с записями от 0 до 14.
Следует отметить, что из-за того, что мы используем кодирование в одну горячую область, вы также видите это как поиск в таблице.
Слой встраивания
Символическое теано-выражение для вложения.
Функция Theano, которая вычисляет вложение.
возвращает:
Чтобы убедить вас, что 3 действительно представляет размер словаря, попробуйте ввести матрицу
x_test = [[5, 0], [1, 2]]
. Вы увидите, что это вызывает ошибку несоответствия матрицы.источник
В https://stackoverflow.com/questions/45649520/explain-with-example-how-embedding-layers-in-keras-works/ я попытался подготовить пример, используя 2 предложения, тексты keras
и встраивание слоя. Основано на том, как работает слой «Встраивание» Keras? Уровень внедрения сначала инициализирует вектор внедрения случайным образом, а затем использует сетевой оптимизатор для его обновления аналогично тому, как это делается для любого другого сетевого уровня в кератах.
Выше был бы некоторый начальный вектор вложения для предложения (максимум) 6 слов и output_dim из 3.
источник