Numpy / pytorch: вычислить среднее значение для сегментов переменной длины с заданным значением c dim - PullRequest
0 голосов
/ 24 февраля 2020

Выполнение задачи классификации текста, где у меня есть массив / тензор 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] и использовать какое-то среднее значение в маске? Как бы я справился с переменной длиной здесь?

...