我正在尝试建立情感分析模型,但是当我开始训练时,我得到的错误是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)
答案 0 :(得分:1)
给定序列对象的pad_sequences
函数expects具有__len__
属性(即,它基本上给出了序列数)。作为review_token_idx
对象的map
没有__len__
属性。因此您需要将其转换为对象,例如list
,它具有以下属性:
padded_sequences = pad_sequences(list(review_token_idx), maxlen=max_tokens)