【问题标题】:ELMO embedding start sessionELMO 嵌入开始会话
【发布时间】:2019-04-29 11:30:46
【问题描述】:

将 Elmo 嵌入应用到我的数据时出现错误。我有 7255 个句子。

embeddings = embed(
    sentences,
    signature="default",
    as_dict=True)['default']

#Start a session and run ELMo to return the embeddings in variable x
with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  sess.run(tf.tables_initializer())
  x = sess.run(embeddings)

错误是:

ResourceExhaustedError: OOM 分配具有 shape[36021075,50] 的张量并通过分配器 cpu 在 /job:localhost/replica:0/task:0/device:CPU:0 上键入 int32 [[node module_apply_default/map/TensorArrayStack/TensorArrayGatherV3(定义在 C:\Users...\envs\tf_36\lib\site-packages\tensorflow_hub\native_module.py:547)]] 提示:如果您想在 OOM 发生时查看已分配张量的列表,请将 report_tensor_allocations_upon_oom 添加到 RunOptions 以获取当前分配信息。

【问题讨论】:

    标签: nlp embedding


    【解决方案1】:

    ELMo 是一个大型模型。有 2048 维的词嵌入,2 层和 2 个方向的 4096 维 LSTM 状态。只有这个是 18k 浮点数,每个单词 71 kB(还有更多:LSTM 中的中间投影,用于单词表示的字符级 CNN)。你有 7,255 个句子,平均句子有 25 个单词,这需要 12 GB RAM,但这是一个非常保守的估计。

    您需要将句子分成批次并迭代处理批次。有很多方法可以做到这一点,我不知道您使用什么实现以及变量sentences 中的确切内容。但是您可能可以在sentences 上调用tf.split 并获取独立调用会话的对象列表,或者如果您使用tf.dataset,则可以使用数据集API 提供的批处理。您还可以随时拆分数据并使用多个输入文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-03
      • 2019-05-16
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      相关资源
      最近更新 更多