При представлении нескольких строк на естественном языке количество символов в каждой строке может не совпадать. Затем возвращаемый результат можно поместить в tf.RaggedTensor
, где длина самого внутреннего измерения изменяется в зависимости от количества символов в каждой строке:
rtensor = tf.ragged.constant([
[1, 2],
[3, 4, 5],
[6]
])
rtensor
#<tf.RaggedTensor [[1, 2], [3, 4, 5], [6]]>
В свою очередь, применяя метод to_tensor
, преобразует этот RaggedTensor
в обычный tf.Tensor
и, следовательно, применяет операцию заполнения:
batch_size=3
max_length=8
tensor = rtensor.to_tensor(default_value=0, shape=(batch_size, max_length))
#<tf.Tensor: shape=(3, 8), dtype=int32, numpy=
#array([[1, 2, 0, 0, 0, 0, 0, 0],
# [3, 4, 5, 0, 0, 0, 0, 0],
# [6, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)>
Теперь существует ли подход для генерации также дополнения тензор, показывающий что такое исходные данные и что такое заполнение? Для приведенного выше примера это будет:
<tf.Tensor: shape=(3, 8), dtype=int32, numpy=
array([[1, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)>