При использовании рваного тензора
import tensorflow_text as tf_text
input_text = ["Never tell me the odds!",
"It's not my fault.",
"It's a trap!"]
tokenizer = tf_text.WhitespaceTokenizer()
rt = tokenizer.tokenize(input_text)
rt is
<tf.RaggedTensor [[b'Never', b'tell', b'me', b'the', b'odds!'], [b"It's", b'not', b'my', b'fault.'], [b"It's", b'a', b'trap!']]>
Я могу получить уникальные значения внутри рваного тензора, используя два подхода:
(Самый быстрый) Получите уникальный или рваный тензор, используя понимание списка, а затем примените набор и преобразуйте его обратно в tf.tensor. Эта операция занимает время. Самый медленный пробег занял в 30,92 раза больше времени, чем самый быстрый. Это может означать, что промежуточный результат кэшируется. 10000 циклов, лучшее из 3: 24 мкс на л oop
tf.constant(list(set([e for elem in rt.to_list() for e in elem])))
Получите уникальный или рваный тензор, используя понимание списка, а затем верните его в тензор и возьмите уникальное использование встроенная функция тензорного потока (tf.unique). Эта операция занимает:
Самый медленный запуск занял в 32,94 раза больше времени, чем самый быстрый. Это может означать, что промежуточный результат кэшируется. 10000 петель, лучшее из 3: 41,4 мкс на л oop
tf.unique(tf.constant([e for elem in rt.to_list() for e in elem]))[0]
Есть ли какой-либо другой способ, кроме этих двух, который может ускорить операцию? Более конкретно, я ищу встроенную функцию в tf.ragged tenor