Самый быстрый способ получить уникальные значения в рваном тензоре - PullRequest
0 голосов
/ 30 мая 2020

При использовании рваного тензора

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!']]>

Я могу получить уникальные значения внутри рваного тензора, используя два подхода:

  1. (Самый быстрый) Получите уникальный или рваный тензор, используя понимание списка, а затем примените набор и преобразуйте его обратно в tf.tensor. Эта операция занимает время. Самый медленный пробег занял в 30,92 раза больше времени, чем самый быстрый. Это может означать, что промежуточный результат кэшируется. 10000 циклов, лучшее из 3: 24 мкс на л oop

    tf.constant(list(set([e for elem in rt.to_list() for e in elem])))
    
  2. Получите уникальный или рваный тензор, используя понимание списка, а затем верните его в тензор и возьмите уникальное использование встроенная функция тензорного потока (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

...