Как использовать модуль тензорного потока с API-интерфейсом тензорного потока - PullRequest
3 голосов
/ 05 июля 2019

Я хочу использовать API Tensorflow Dataset api для инициализации моего набора данных с использованием tenorflow Hub. Я хочу использовать функцию dataset.map для преобразования моих текстовых данных во встраивание. Моя версия Tensorflow 1.14.

Поскольку я использовал модуль elmo v2, который преобразует массив предложений в их вложения, я использовал следующий код:

import tensorflow as tf
import tensorflow_hub as hub
...
sentences_array = load_sentences()
#Sentence_array=["I love Python", "python is a good PL"]
def parse(sentences):
    elmo = hub.Module("./ELMO")
    embeddings = elmo([sentences], signature="default", as_dict=True) 
    ["word_emb"]
    return embeddings
dataset = tf.data.TextLineDataset(sentences_array)
dataset = dataset.apply(tf.data.experimental.map_and_batch(map_func = 
parse, batch_size=batch_size))

Я хочу встраивать текстовый массив, например [batch_size, max_words_in_batch, embedding_size], но я получил сообщение об ошибке:

"NotImplementedError: Using TF-Hub module within a TensorFlow defined 
 function is currently not supported."

Как получить ожидаемые результаты?

1 Ответ

2 голосов
/ 05 июля 2019

К сожалению, это не поддерживается в TensorFlow 1.x

Однако оно поддерживается в TensorFlow 2.0, поэтому, если вы можете перейти на тензор потока 2 и выбрать один из доступных модулей встраивания текста для tf 2 (текущий список здесь ) тогда вы можете использовать это в вашем dataset конвейере.Примерно так:

embedder = hub.load("https://tfhub.dev/google/tf2-preview/nnlm-en-dim128/1")

def parse(sentences):
    embeddings = embedder([sentences])
    return embeddings

dataset = tf.data.TextLineDataset("text.txt")
dataset = dataset.map(parse)

Если вы привязаны к 1.x или привязаны к Elmo (что, я думаю, пока не доступно в новом формате), то единственный вариант, который я вижу для встраивания вЭтап предварительной обработки - сначала выполнить набор данных через простую модель внедрения и сохранить результаты, а затем использовать встроенные векторы для последующей задачи отдельно.(Я ценю, что это не идеально).

...