Начиная с универсального кодировщика предложений в TensorFlow. .js, я заметил, что диапазон чисел во вложениях был не таким, как я ожидал. Я ожидал некоторого распределения между [0-1] или [-1,1], но не увидел ни одного из них.
За предложение «кошки молодцы!» вот визуализация, где каждое измерение проецируется на шкалу от [-0,5, 0,5]:
Вот такая же визуализация для «мне интересно, каково будет вложение этого предложения» (шаблон аналогичен для первых ~ 10 предложений, которые я пробовал):
Для отладки я посмотрел, появляется ли то же самое в демонстрационный блокнот Colab, и похоже, что это так. Вот что я увижу, если увижу диапазон вложений для этих двух предложений:
# 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]
Так что это опять не то, что я ожидал - диапазон более узкий, чем я ожидал. Я подумал, что это может быть соглашение о переходе, которое я пропустил, но не смог увидеть его в Страницу TFHub или руководство по встраиванию текста или в paper, поэтому я не знаю, где еще искать, не копаясь в обучающем коде.
В коде примера записной книжки colab есть примерное предложение, в котором говорится:
Встраивание универсального кодировщика предложений также поддерживает короткие абзацы. Жестких ограничений на длину абзаца нет. Грубо говоря, чем дольше, тем более «разбавленным» будет заливка.
Но диапазон встраивания примерно такой же для всех других примеров в колабе, даже для однословных примеров.
Я предполагаю, что этот диапазон не просто произвольный, и для меня имеет смысл, что диапазон центрирован по нулю и мал, но я пытаюсь понять, как появился этот масштаб.