使用Word2Vec嵌入肽序列时报unhashable type: 'list'错误如何解决
报错根因
Gensim Word2Vec 要求输入的训练语料格式为可迭代的句子序列,每个句子对应一条肽序列,是由字符串类型的三元组组成的一维列表。你当前报错的核心原因是:遍历语料取出的三元组不是字符串类型,而是嵌套的列表类型,列表属于不可哈希类型,无法作为词频统计字典的key,因此触发该错误。
可行解决步骤
- 第一步:确认数据嵌套层级
执行以下代码打印数据结构,确认嵌套层数:
# 打印语料总长度、第一条序列的类型、第一条序列的前5个三元组 print(len(kmersdatapos)) print(type(kmersdatapos[0])) print(kmersdatapos[0][:5])
如果输出显示kmersdatapos[0][0]依然是列表类型,就说明拆分三元组时多套了一层嵌套结构。
- 第二步:扁平化处理数据
将嵌套的三元组转换为字符串类型的一维列表:
processed_kmers = [] for seq in kmersdatapos: # 提取内层列表的字符串元素,生成单层级的三元组列表 flat_seq = [item[0] for item in seq] processed_kmers.append(flat_seq)
- 第三步:重新训练模型
用处理后的数据训练Word2Vec即可:
import multiprocessing # 注:如果你使用的是gensim 4.0+版本,参数需要调整:size改为vector_size,iter改为epochs w2vpos = Word2Vec(processed_kmers, size=EMB_DIM, window=5, min_count=5, negative=15, iter=10, workers=multiprocessing.cpu_count())
内容的提问来源于stack exchange,提问作者Ash Roy
相关产品推荐
相关产品推荐

