如何通过tensorflow-dataset api使用tensorflow-hub模块

时间:2019-07-05 07:02:00

标签: python tensorflow tensorflow-datasets tensorflow-hub

我想使用Tensorflow Dataset API使用Tensorflow Hub初始化我的数据集。我想使用dataset.map函数将文本数据转换为嵌入。我的Tensorflow版本是1.14。

由于我使用了elmo v2 modlule,它将一堆句子数组转换为单词嵌入,所以我使用了以下代码:

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 个答案:

答案 0 :(得分:2)

不幸的是,TensorFlow 1.x不支持此功能。

但是,在TensorFlow 2.0中受支持,因此,如果您可以升级到tensorflow 2并从可用的tf 2文本嵌入模块(当前列表here)中进行选择,则可以在{{1 }}管道。像这样:

quotation_type 0

如果您绑定到1.x或Elmo(新格式尚不可用),那么我可以看到的唯一嵌入到预处理阶段的选项是先通过一个简单的嵌入模型并保存结果,然后将嵌入的矢量分别用于下游任务。 (我欣赏这并不理想)。