ValueError: `sequence` должен быть повторяемым в Keras - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь построить модель анализа настроений, но когда я начинаю тренироваться, я получаю ошибку, так как ValueError: sequences must be iterable.

pad_sequences - это то, что дает ошибку.

кодпока функция, содержащая pad_sequences:

1) не получит список слов, удалите все знаки препинания и преобразует все лексемы слов в нижний регистр:

 def get_processed_tokens(text):
    filtered_text = re.sub(r'[^a-zA-Z0-9\s]', '', text)
    filtered_text = filtered_text.split()
    filtered_text = [token.lower() for token in filtered_text]
    return filtered_text

2) Создание token_idxсловарь, который отображает токены в целые числа для создания вложений и отфильтровывает те из них, которые встречаются меньше порогового значения, указанного в обучающем наборе как 5.

def tokenize_text(data_text, min_frequency =5):
    review_tokens = [get_processed_tokens(review) for review in data_text]
    token_list = [token for review in review_tokens  for token in review] 
    token_freq_dict = {token:token_list.count(token) for token in set(token_list)}
    most_freq_tokens = [tokens for tokens in token_freq_dict if token_freq_dict[tokens] >= min_frequency]
    idx = range(len(most_freq_tokens))
    token_idx = dict(zip(most_freq_tokens, idx))
    return token_idx,len(most_freq_tokens)

3) создание последовательностей, которые будут поданы вмодель для изучения вложений, последовательность фиксированной длины (max_tokens) для каждого обзора в наборе данных.предварительно заполнить последовательности нулями, если они меньше максимальной длины.

def create_sequences(data_text,token_idx,max_tokens):
    review_tokens  = [get_processed_tokens(review) for review in data_text] 
    review_token_idx = map( lambda review: [token_idx[k] for k in review if k in token_idx.keys() ], review_tokens)    
    padded_sequences = pad_sequences(review_token_idx, maxlen=max_tokens)  ##this line gives error
    return np.array(padded_sequences)

1 Ответ

1 голос
/ 26 июня 2019

Функция pad_sequences ожидает , что данный объект последовательностей имеет атрибут __len__ (то есть, который в основном дает количество последовательностей).Объект review_token_idx, который является map, не имеет атрибута __len__.Поэтому вам необходимо преобразовать его в объект, например list, который имеет такой атрибут:

padded_sequences = pad_sequences(list(review_token_idx), maxlen=max_tokens)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...