TensorFlow.js のUniversal-sentence-encoderから始めて、埋め込みの数値の範囲が期待したものではないことに気付きました。[0-1] または [-1,1] の間の分布を期待していましたが、どちらも表示されません。
「猫ってすごい!」という文に対して。これはビジュアライゼーションです。各次元は [-0.5, 0.5] からのスケールに投影されます。
これは、「この文の埋め込みがどうなるのだろうか」と同じ種類の視覚化です (パターンは、私が試した最初の〜10文で似ています):
デバッグするために、デモ Colab ノートブックで同じようなものが表示されるかどうかを調べたところ、そのようです。これら 2 つの文の埋め込みの範囲を確認すると、次のようになります。
# 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 ノートブックのサンプル コードには、次のような例文があります。
Universal Sentence Encoder の埋め込みは、短い段落もサポートしています。段落の長さに厳密な制限はありません。大まかに言えば、埋め込みが長くなるほど「希釈」されます。
ただし、埋め込みの範囲は、colab 内の他のすべての例 (1 つの単語の例であっても) とほぼ同じです。
この範囲は単なる恣意的なものではなく、範囲がゼロと小さな範囲に集中していることは理にかなっていると思いますが、このスケールがどのようになったのかを理解しようとしています.