Выполнение задачи классификации текста, где у меня есть массив / тензор X
с размерами [samples, documents, words, features]
. У меня есть другой массив объектов L
с dims [samples, documents, sentences]
, где количество предложений является переменным. Он дает список целых чисел для каждого образца и документа, где каждый элемент - это количество слов в предложении. Я хочу уменьшить количество слов в X
, усредняя характеристики по предложениям и сделав его размеры [samples, documents, sentences, features]
.
Например, L[0,0] = [8, 12, 5 ... ]
, что означает, что в первом документ первого образца, в первом предложении 8 слов, во втором 12 и так далее. Для X[0,0]
первый элемент должен быть средним значением признаков первых 8 слов, второй элемент является средним значением последующих 12 слов и так далее.
def avg_over_sentence(document, sentence_lengths):
processed = []
for idx, n_words in enumerate(sentence_lengths):
start = sum(sentence_lengths[:idx])
end = start + n_words
processed.append(mean(document[start:end]))
return processed
Я написал очень грубый код выше для одного документа (это может быть неправильно). Я хочу знать, есть ли лучший способ сделать это, возможно изменить форму X в [samples, documents, sentences, words, features]
и использовать какое-то среднее значение в маске? Как бы я справился с переменной длиной здесь?