从 TensorFlow.js 中的通用句子编码器开始,我注意到嵌入中的数字范围不是我所期望的。我期待在 [0-1] 或 [-1,1] 之间有一些分布,但没有看到其中任何一个。
对于“猫太棒了!”这句话。这是一个可视化,其中每个维度都投影到 [-0.5, 0.5] 的比例上:
这是“我想知道这个句子的嵌入是什么”的相同类型的可视化(我尝试的前 10 个句子的模式相似):
为了调试,我查看了演示 Colab notebook中是否出现了同样的事情,似乎是这样。如果我看到这两个句子的嵌入范围,这就是我看到的:
# NEW: added this, with different messages
messages = ["cats are great!", "sometimes models are confusing"]
values, indices, dense_shape = process_to_IDs_in_sparse_format(sp, messages)
with tf.Session() as session:
session.run([tf.global_variables_initializer(), tf.tables_initializer()])
message_embeddings = session.run(
encodings,
feed_dict={input_placeholder.values: values,
input_placeholder.indices: indices,
input_placeholder.dense_shape: dense_shape})
for i, message_embedding in enumerate(np.array(message_embeddings).tolist()):
print("Message: {}".format(messages[i]))
print("Embedding size: {}".format(len(message_embedding)))
message_embedding_snippet = ", ".join(
(str(x) for x in message_embedding[:3]))
print("Embedding: [{}, ...]\n".format(message_embedding_snippet))
# NEW: added this, to show the range of the embedding output
print("Embedding range: [{}, {}]".format(min(message_embedding), max(message_embedding)))
输出显示:
Message: cats are great!
Embedding range: [-0.05904272198677063, 0.05903803929686546]
Message: sometimes models are confusing
Embedding range: [-0.060731519013643265, 0.06075377017259598]
所以这又不是我所期待的——范围比我预期的要窄。我认为这可能是我错过的 TF 约定,但在TFHub 页面或文本嵌入指南或论文中看不到它,因此如果不深入研究培训代码,我不确定在哪里可以查看。
colab notebook 示例代码有一个例句,上面写着:
Universal Sentence Encoder 嵌入也支持短段落。段落的长度没有硬性限制。粗略地说,嵌入越“稀释”的时间越长。
但是对于 colab 中的所有其他示例,甚至是一个单词示例,嵌入的范围大致相同。
我假设这个范围不仅是任意的,而且范围以零和小为中心对我来说确实有意义,但我试图了解这个比例是如何形成的。