运行《动手学深度学习》8.3节语言模型和数据集所给代码时出现TypeError: ‘<’ not supported between instances of ‘str’ and ‘tuple’的问题
运行《动手学深度学习》8.3节语言模型和数据集所给代码时出现TypeError: ‘<’ not supported between instances of ‘str’ and ‘tuple’的问题
·
错误描述
运行
bigram_vocab = d2l.Vocab(bigram_tokens)
时出现如下报错:
TypeError: '<' not supported between instances of 'str' and 'tuple'
解决方法
找到本地的d2l包的torch.py文件,本人的路径如下:
"D:\anaconda\envs\pytorch\Lib\site-packages\d2l\torch.py"
打开torch.py文件,找到Vocab类,大概在670行左右
使用下面的代码将Vocab类整体替换掉:
class Vocab: #@save
"""文本词表"""
def __init__(self, tokens=None, min_freq=0, reserved_tokens=None):
if tokens is None:
tokens = []
if reserved_tokens is None:
reserved_tokens = []
# 按出现频率排序
counter = count_corpus(tokens)
self._token_freqs = sorted(counter.items(), key=lambda x: x[1],
reverse=True)
# 未知词元的索引为0
self.idx_to_token = ['<unk>'] + reserved_tokens
self.token_to_idx = {token: idx
for idx, token in enumerate(self.idx_to_token)}
for token, freq in self._token_freqs:
if freq < min_freq:
break
if token not in self.token_to_idx:
self.idx_to_token.append(token)
self.token_to_idx[token] = len(self.idx_to_token) - 1
def __len__(self):
return len(self.idx_to_token)
def __getitem__(self, tokens):
if not isinstance(tokens, (list, tuple)):
return self.token_to_idx.get(tokens, self.unk)
return [self.__getitem__(token) for token in tokens]
def to_tokens(self, indices):
if not isinstance(indices, (list, tuple)):
return self.idx_to_token[indices]
return [self.idx_to_token[index] for index in indices]
@property
def unk(self): # 未知词元的索引为0
return 0
@property
def token_freqs(self):
return self._token_freqs
def count_corpus(tokens): #@save
"""统计词元的频率"""
# 这里的tokens是1D列表或2D列表
if len(tokens) == 0 or isinstance(tokens[0], list):
# 将词元列表展平成一个列表
tokens = [token for line in tokens for token in line]
return collections.Counter(tokens)
代码来源:https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/text-preprocessing.html
替换掉之后如下图所示:
Ctrl+s保存文件,再次运行代码,问题被完美解决:
附录
这章的代码封装多多少少有点问题,有些函数在d2l包的不同版本中缺失,如果出现了
AttributeError: module 'd2l.torch' has no attribute 'read_time_machine'

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)