错误描述

运行

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'

可以看我的这篇文章:https://blog.csdn.net/2301_81261438/article/details/145913154?fromshare=blogdetail&sharetype=blogdetail&sharerId=145913154&sharerefer=PC&sharesource=2301_81261438&sharefrom=from_link

Logo

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

更多推荐