当我使用预训练的单词向量进行LSTM分类时,我想知道如何处理在张量流中嵌入大于2gb的查找表.
为此,我试图像下面的代码一样嵌入查找表,
data = tf.nn.embedding_lookup(vector_array, input_data)
得到这个值错误.
ValueError: Cannot create a tensor proto whose content is larger than 2GB
代码上的变量vector_array是numpy数组,它包含每个单词大约1400万个唯一标记和100维单词向量.
谢谢你的帮助
我一直在阅读一些带有深度学习论文的NLP,并发现微调似乎是一个简单但却令人困惑的概念.这里提出了同样的问题,但仍然不太清楚.
如Y. Kim,"用于句子分类的卷积神经网络"和KS Tai,R.Socher,以及CD Manning,"改进树的语义表示"等论文所述,将预训练的单词嵌入微调到特定于任务的单词嵌入.- 结构化的长期短期记忆网络,"只是简单地提一下,没有详细说明.
我的问题是:
使用word2vec或Glove生成的Word嵌入作为预训练的单词向量用作(X)下游任务的输入要素,如解析或情感分析,这意味着那些输入向量插入到某个特定任务的新神经网络模型中,同时训练这个新模型,不知何故我们可以获得更新的特定于任务的单词嵌入.
但据我所知,在训练过程中,反向传播的作用是更新(W)模型的权重,它不会改变输入特征(X),那么原始单词嵌入的精确程度如何?这些微调的载体来自哪里?
我的目标是询问是否可以在 Tensorflow word-rnn LSTM 生成模型中使用预先训练的 GloVe 向量,如果可以,有关于如何实现这一目标的指导吗?
我从这里引用这个
,我理解(我认为)我应该将向量放入line 35-37model.py 的嵌入中。从代码中,我看到他没有使用任何预先训练的向量,而是使用输入文本中的单词。
我看过类似的其他答案,但由于我是 Tensorflow 和 Python 的新手,我不完全理解如何将其应用到代码中。
GloVe 生成两个文件,即:
also -0.5432 -0.3210 0.1234...n_dimensions..]另外,我是否必须生成 GloVe 向量并在同一语料库上训练 LSTM 模型,或者它们可以分开吗?例如。GloVe( 100k words)、text_to_train( 50k words)
感谢您的帮助!
我正在解决文本分类问题.我使用Estimator自己的类定义了我的分类器model_fn.我想使用Google的预训练word2vec嵌入作为初始值,然后针对手头的任务进一步优化它.
我看到这篇文章:在TensorFlow中使用预先训练的单词嵌入(word2vec或Glove),
它解释了如何在'原始'TensorFlow代码中进行处理.但是,我真的很喜欢Estimator上课.
作为扩展,我想在Cloud ML Engine上训练此代码,是否有一种传递具有初始值的相当大的文件的好方法?
假设我们有类似的东西:
def build_model_fn():
def _model_fn(features, labels, mode, params):
input_layer = features['feat'] #shape=[-1, params["sequence_length"]]
#... what goes here to initialize W
embedded = tf.nn.embedding_lookup(W, input_layer)
...
return predictions
estimator = tf.contrib.learn.Estimator(
model_fn=build_model_fn(),
model_dir=MODEL_DIR,
params=params)
estimator.fit(input_fn=read_data, max_steps=2500)
Run Code Online (Sandbox Code Playgroud) 我试图在tensorflow模型中使用现有的嵌入,嵌入的大小大于2Gb,这使得我最初的尝试不成功:
embedding_var = tf.get_variable(
"embeddings",
shape=GLOVE_MATRIX.shape,
initializer=tf.constant_initializer(np.array(GLOVE_MATRIX))
)
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
Cannot create a tensor proto whose content is larger than 2GB.
Run Code Online (Sandbox Code Playgroud)
我正在使用基于Estimator API的AWS SageMaker,并且会话中实际运行的图形发生在场景后面,因此我不确定如何初始化一些占位符以进行嵌入.如果有人能够在EstimatorAPI方面分享如何进行这种初始化的方式会很有帮助.