Перейти к содержанию

Предобработка последовательностей

TimeseriesGenerator

keras.preprocessing.sequence.TimeseriesGenerator(data, targets, length, sampling_rate=1, stride=1, start_index=0, end_index=None, shuffle=False, reverse=False, batch_size=128)

Служебный класс для генерации батчей временных данных.

Этот класс принимает последовательность точечных данных, собранных с равными интервалами, наряду с такими параметрами временных рядов, как шаг, длина истории и т.д., для создания пакетов обучения/проверки.

Аргументы

  • data: Индексируемый генератор (например, массив List или Numpy), содержащий последовательные точки данных (временные интервалы). Данные должны иметь размерность 2D, а ось 0 должна быть измерением времени.
  • targets: Целевые значения, соответствующие временному интервалу в данных. Они должны иметь ту же длину, что и данные.
  • length: Длина выходных последовательностей (по количеству временных интервалов).
  • sampling_rate: Период между последовательными отдельными временными шагами внутри последовательностей. Для скорости r, временной шаг data[i], data[i-r], … data[i — длина] используется для создания последовательности дискретизации.
  • stride: Период между последовательными выходными последовательностями. Для шага s последовательные выходные выборки будут центрироваться вокруг данных[i], данных[i+s], данных[i+2*s] и др.
  • start_index: Точки данных предшествующие start_index, не будут использоваться в выходных последовательностях. Это полезно для резервирования части данных для тестирования или валидации.
  • end_index: Точки данных, расположенные позже, чем end_index, не будут использоваться в выходных последовательностях. Это полезно для резервирования части данных для тестирования или проверки.
  • shuffle: Следует ли тасовать выходные выборки, или вместо этого располагать их в хронологическом порядке.
  • reverse: Boolean: если верно, то таймфреймы в каждой выходной выборке будут в обратном хронологическом порядке.
  • batch_size: Количество сэмплов таймсерий в каждой партии (за исключением, возможно, последней).

Возвращает

Экземпляр последовательности Sequence

Примеры

from keras.preprocessing.sequence import TimeseriesGeneratorimport numpy as np

data = np.array([[i] for i in range(50)])

targets = np.array([[i] for i in range(50)])

data_gen = TimeseriesGenerator(data, targets,

                               length=10, sampling_rate=2,

                               batch_size=2)

assert len(data_gen) == 20

batch_0 = data_gen[0]

x, y = batch_0 

assert np.array_equal(x,

                      np.array([[[0], [2], [4], [6], [8]],

                                [[1], [3], [5], [7], [9]]]))

assert np.array_equal(y,

                      np.array([[10], [11]]))


pad_sequences

keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype=’int32′, padding=’pre’, truncating=’pre’, value=0.0)

Последовательность пэдов одинаковой длины.

Эта функция преобразует список последовательностей num_samples (списки целых чисел) в 2D Numpy массив размером (num_samples, num_timesteps). num_timesteps является либо аргументом maxlen, если он задан, либо длиной самой большой последовательности.

Последовательности, которые короче, чем num_timesteps, добавляются значениями в конце.

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

По умолчанию используется предварительный пэддинг (препэддинг).

Аргументы

  • sequences: Список списков, где каждый элемент является последовательностью.
  • maxlen: Int, максимальная длина всех последовательностей.
  • dtype: Тип выходных последовательностей. Для подстановки последовательностей со строками переменной длины можно использовать object.
  • padding: String, ‘pre’ или ‘post’: применять пэд либо до, либо после последовательности.
  • truncating: String, ‘pre’ или ‘post’: удалять значения из последовательностей, превышающие maxlen, как в начале, так и в конце последовательностей.
  • value: Float или String, значение пэддинга.

Возвращает

  • x: Numpy массив с формой (len(sequences), maxlen)

Вызывает исключения

  • ValueError: В случае недействительных значений для усечения или пэддинга, или в случае недействительной формы для записи последовательности.

skipgrams

keras.preprocessing.sequence.skipgrams(sequence, vocabulary_size, window_size=4, negative_samples=1.0, shuffle=True, categorical=False, sampling_table=None, seed=None)

Создает пары слов skipgram.

Эта функция преобразует последовательность индексов слов (список целых чисел) в кортежи слов формы:

(слово, слово в том же окне), с меткой 1 (положительные примеры).

(слово, случайное слово из словаря), с меткой 0 (отрицательные выборки).

Подробнее о скипграммах читайте в статье Миколова и соавт..: ”Эффективная оценка представления слова в векторном пространстве”. http://arxiv.org/pdf/1301.3781v3.pdf

Аргументы

  • sequence: Последовательность слов (предложение), закодированная как список индексов слов (целых чисел). При использовании sampling_table индексы слов, как ожидается, будут соответствовать рангу слов в датасете (например, 10 будет кодировать 10-й наиболее часто встречающийся токен). Обратите внимание, что индекс 0, как ожидается, будет не словом и будет пропущен.
  • vocabulary_size: Int, максимально возможное количество индексов слов + 1
  • window_size: Int, размер окна выборки (технически полуокна). Окно слова w_i будет [i — window_size, i + window_size+1].
  • negative_samples: Float >= 0. 0  для отрицательной выборки (то есть случайных) значений. 1 для положительных примеров.
  • shuffle: Следует ли перетасовать «пары» перед их возвращением.
  • categorical: boolean. Eсли False, метки будут целыми (например, [0, 1, 1 … ]), если True, метки будут категориальными, например, [[1,0],[0,1],[0,1] … ].
  • sampling_table: 1D массив размера vocabulary_size, в котором запись i кодирует вероятность выборки слова ранга i.
  • seed: Число запускающее генератор случайных чисел.

Возвращает

пары, метки: где пары — это int-пары, а метки- 0 или 1.

Примечание

По условию, индекс 0 в словаре не является словом и будет пропущен.


make_sampling_table

keras.preprocessing.sequence.make_sampling_table(size, sampling_factor=1e-05)

Создает таблицу вероятностных выборок, основанную на ранге слова.

Используется для генерации аргумента sampling_table  для skipgrams. sampling_table[i] — это вероятность выборки наиболее распространенного слова в наборе данных (более распространенные слова должны выбираться реже, для баланса).

Вероятности выборки генерируются в соответствии с распределением выборки, используемым в  word2vec:

p(word) = (min(1, sqrt(word_frequency / sampling_factor) /

    (word_frequency / sampling_factor)))

Мы предполагаем, что частоты слов следуют закону Ципфа (s=1) для получения численного приближения частоты (ранга):

frequency(rank) ~ 1/(rank * (log(rank) + gamma) + 1/2 — 1/(12*rank)) где gamma это константа Эйлера-Маскерони.

Аргументы

  • size: Int, количество возможных слов для выборки.
  • sample_factor: Коэффициент выборки в формуле word2vec.

Возвращает

Массив длиной 1D Numpy, в котором запись ith — это вероятность того, что будет взято слово ранга i.