Генерация нграмм (биграмм или триграмма) в керасе/тензорном потоке

72
10

Я хочу сгенерировать генерации n-граммов из последовательности токенов:

bigram:: "1 3 4 5" --> { (1,3), (3,4), (4,5) }

После поиска я нашел эту тему, которая использовала:

def find_ngrams(input_list, n):
return zip(*[input_list[i:] for i in range(n)])

Если я использую этот фрагмент кода во время тренировки, я думаю, что он убивает производительность в библиотеке Deep Learning из-за for-loop. Поэтому я ищу лучший вариант, например, функцию lambda или подобные вещи (также возможно сгенерировать всю последовательность на этапе предварительной обработки, но я думаю, что это не изящный способ...)

спросил(а) 2017-11-08T11:23:00+03:00 2 года, 11 месяцев назад
1
Решение
59

В моем случае я нашел Pooling как решение:

AveragePooling1D(pool_size=2, strides=1, padding='same')

Если вам нужно сгенерировать биграмму в строковом формате:

import tensorflow as tf

tf.enable_eager_execution()

sentence = ['this is example sentence']
x = tf.string_split(sentence).values[:-1] + ' ' + tf.string_split(sentence).values[1:]

# tf.Tensor([b'this is' b'is example' b'example sentence'], shape=(3,), dtype=string)

Вы также можете использовать tensorflow-transform для генерации нграмм.

import tensoflow-transform as tft

tft.ngrams(tensor, (1,1))

Примечание. Тензор потока-преобразования поддерживает только Python 2 до 22 января 2019 года.

ответил(а) 2017-11-14T20:34:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема