Вы можете получить средние значения, маскируя.
Если вы наберете encode_plus
на токенизаторе и установите return_token_type_ids
на True
, вы получите словарь, который содержит:
'input_ids'
: индексы токенов, которые вы передаете в свою модель 'token_type_ids'
: список из 0 и 1, который говорит, какой токен принадлежит какому входному предложению.
Предполагая, что вы упаковали token_type_ids
, так что 0 - это первое предложение, 1 - это второе предложение, а заполнение - это что-то еще (например, -1) в тензоре в переменной mask
с формой batch × длина , и у вас есть вывод BERT в тензоре переменной output
формы партия × длина × 768, вы можете сделать:
first_sent_mask = tf.cast(mask == 0, tf.float32)
first_sent_lens = tf.reduce_sum(first_sent_mask, axis=1, keepdims=True)
first_sent_mean = (
tf.reduce_sum(output * tf.expand_dims(first_sent_mask, 2)) /
first_sent_lens)
second_sent_mask = tf.cast(mask == 1, tf.float32)
...