【问题标题】:Output from elmo pretrained modelelmo 预训练模型的输出
【发布时间】:2019-08-15 11:18:30
【问题描述】:

我正在从事情绪分析。我正在使用 elmo 方法来获取词嵌入。但我对这种方法给出的输出感到困惑。考虑张量流网站中给出的代码:

 elmo = hub.Module("https://tfhub.dev/google/elmo/2", trainable=True)
    embeddings = elmo(["the cat is on the mat", "dogs are in the fog"],
    signature="default",as_dict=True)["elmo"]

特定句子的嵌入向量会根据您提供的字符串数量而有所不同。详细解释让

 x = "the cat is on the mat"
 y = "dogs are in the fog"
 x1 = elmo([x],signature="default",as_dict=True)["elmo"]
 z1 = elmo([x,y] ,signature="default",as_dict=True)["elmo"] 

所以x1[0] 将不等于z1[0]。这会随着您更改字符串的输入列表而改变。为什么一个句子的输出取决于另一个。我没有训练数据。我只使用现有的预训练模型。在这种情况下,我很困惑如何将我的 cmets 文本转换为嵌入并用于情感分析。请解释一下。
注意:要获取嵌入向量,我使用以下代码:

 with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(tf.tables_initializer())
            # return average of ELMo features
            return sess.run(tf.reduce_mean(x1,1))

【问题讨论】:

  • 你的问题给了我解决问题的提示。

标签: tensorflow sentiment-analysis word-embedding tensorflow-hub elmo


【解决方案1】:

当我运行您的代码时,x1[0] 和 z1[0] 是相同的。但是,z1[1] 与

的结果不同
y1 = elmo([y],signature="default",as_dict=True)["elmo"]
return sess.run(tf.reduce_mean(y1,1))

因为 y 的标记比 x 少,并且盲目地减少超过末端的输出会捡起垃圾。

我建议使用“默认”输出而不是“elmo”,它可以实现预期的减少。请参阅模块文档。

【讨论】:

  • x1 = array([[ 0.05517201, -0.02187633, -0.17496817, ..., -0.36848053,0.09267851, 0.23179102]], dtype=float32) and z1 = array ([[ 0.05517215 ,-0.02187647,0.17496812,...,-0.36848068,0.09267855,0.23179094],[-0.00665377,0.12139908,-0.19353662,...,-0.08462355,0.07242572,0.19882451] ], dtype=float32) .Using ["elmo"], 给了我不同的结果(请注意最后一位小数)并且随着列表大小的增加而不断变化,即,我们为一个句子得到不同的向量。
  • 还有为什么 z1[1] 与 y1 不同?一个句子的向量表示应该是相同的。 z = [x,y,...] 中的句子(字符串)是独立的(考虑分析不同推文的情况)。因此,无论 z 中存在的大小或字符串如何,都不应该影响 elmo 向量,对吧?我也尝试更改 trainable = False,但没有奏效
  • 关于“最后一位小数”:这里有很多单精度数学运算。我不确定批次中的不同示例如何相互交互,但五个有效数字的匹配符合我对深度学习的“相等”标准。
  • Re "differ with y1":请参阅模块文档了解输入长度的意义,以及使用输出“默认”的建议。当循环神经网络处理一批长度不等的序列时,它会迭代到最大长度并将其留给后处理(“屏蔽”)步骤,以删除较短序列的末端输出。
  • Re "last decimals" :由于只有一个字符串的差异,因此值的差异并不大。但是如果(比如说)z = [1000 个字符串的列表],则值会从第一个小数点本身发生变化。我做了很多检查。我在重复'我们为每个句子得到不同的向量',为什么会这样?权重是否得到训练(但我没有训练模型,只是从预训练模型中提取向量)?
猜你喜欢
  • 2019-07-23
  • 1970-01-01
  • 2017-08-18
  • 2018-09-25
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多