Встраивание предложений с использованием T5

#nlp #pytorch #word-embedding

#python #nlp #pytorch #встраивание слов

Вопрос:

Я хотел бы использовать современный LM T5, чтобы получить вектор встраивания предложений. Я нашел этот репозиторий https://github.com/UKPLab/sentence-transformers Как я знаю, в BERT я должен взять первый токен в качестве токена [CLS], и это будет вложение предложения. В этом репозитории я вижу такое же поведение в модели T5:

 cls_tokens = output_tokens[:, 0, :]  # CLS token is first token
  

Правильно ли это поведение? Я взял кодировщик из T5 и закодировал с его помощью две фразы:

 "I live in the kindergarden"
"Yes, I live in the kindergarden"
  

Косинусное сходство между ними составляло всего «0,2420».

Мне просто нужно понять, как работает встраивание предложений — должен ли я обучать сеть находить сходство для достижения правильных результатов? Или мне достаточно базовой предварительно подготовленной языковой модели?

Ответ №1:

Для того, чтобы получить встраивание предложений из T5, вам необходимо взять last_hidden_state вывод кодировщика T5:

 model.encoder(input_ids=s, attention_mask=attn, return_dict=True)
pooled_sentence = output.last_hidden_state # shape is [batch_size, seq_len, hidden_size]
# pooled_sentence will represent the embeddings for each word in the sentence
# you need to sum/average the pooled_sentence
pooled_sentence = torch.mean(pooled_sentence, dim=1)
  

Теперь у вас есть встраивание предложений из T5

Комментарии:

1. Кроме того, обратите внимание, что вы должны игнорировать маску при выполнении среднего: (output.last_hidden_state * attn.unsqueeze(-1)).sum(dim=-2) / attn.sum(dim=-1)

2. Чтобы поддержать эту идею дальше, в предложении-T5 они показывают, что встраивание среднего токена является отличным выбором для T5.