Как разделить строки в тензорах внутри наборов данных Tensorflow

#python #string #tensorflow #split #tensor

#python #строка #tensorflow #разделить #тензор

Вопрос:

У меня есть объект набора данных tf, определенный как показано ниже:

 train_dataset = tf.data.Dataset.from_tensor_slices((english_train, german_train))

print(train_dataset.element_spec)

Output:
(TensorSpec(shape=(), dtype=tf.string, name=None), TensorSpec(shape=(14,), dtype=tf.int32, name=None))
  

Объекты «english» и «german», используемые в конструкциях, представляют собой массив строк (shape=(16000,) type=string) и массив массивов целых чисел (shape = (16000, 14) type=int) соответственно.

Я хочу разделить эти строки в английских объектах (например, «Я на английском» -> [«I», «am», «in», «english»]). Это должно быть сделано после того, как я создал набор данных.

Я использовал метод map, чтобы попытаться это сделать:

 string_splitter = lambda english, german : tf.strings.split(english, sep=' ')

train_dataset.map(string_splitter)

print(train_dataset.element_spec)

Output:
(TensorSpec(shape=(), dtype=tf.string, name=None), TensorSpec(shape=(14,), dtype=tf.int32, name=None))
  

После того, как я применяю эту операцию, я проверяю набор данных, чтобы убедиться, что все прошло соответствующим образом:

 list(train_dataset.as_numpy_iterator())[0:3]

Output:
[(b"that's ludicrous .",
  array([   1,   11,    6, 5097,    3,    2,    0,    0,    0,    0,    0,
            0,    0,    0], dtype=int32)),
 (b'is anybody home ?',
  array([  1,   6, 366,  20,  75,   7,   2,   0,   0,   0,   0,   0,   0,
           0], dtype=int32)),
 (b"get tom's advice .",
  array([   1,  320,   52,  186,    5, 1058,    3,    2,    0,    0,    0,
            0,    0,    0], dtype=int32))]
  

Как мы можем видеть, строки были разделены не так, как я предполагал.
Что я могу сделать?

PS: строки имеют переменную длину.

Ответ №1:

Похоже, моя ошибка заключается в том, что я предполагал, что метод map был на месте, но, видимо, я должен назначить его (например train_dataset = train_dataset.map(string_splitter) ).

Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь.

Кроме того, я должен исправить функцию разделения.