• Torchtext快速入门(二)——文本预处理


    本文主要介绍 torchtext.transforms 的一些常用API。

    一、VocabTransform

    VocabTransform 主要用于将输入的词元映射成它们在词表中的索引。输入的词元可以是 List[str]List[List[str]] 型。

    请看下面的例子

    from collections import OrderedDict
    from torchtext.transforms import VocabTransform
    
    ordered_dict = OrderedDict([('a', 1), ('b', 1), ('c', 1), ('d', 1)])
    vocab_transform = VocabTransform(vocab(ordered_dict))
    print(vocab_transform(['b', 'd']))
    # [1, 3]
    print(vocab_transform([['b', 'd'], ['a', 'c', 'b']]))
    # [[1, 3], [0, 2, 1]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    二、Truncate

    Truncate 用于将输入进行截断,输入的类型可以是 List[str]List[List[str]]

    from torchtext.transforms import Truncate
    
    sentences = [
        ['a', 'b', 'c', 'd', 'e'],
        ['a', 'b', 'c'],
        ['a', 'b', 'c', 'd'],
    ]
    print(Truncate(4)(sentences))  # 每个句子长度不超过4
    # [['a', 'b', 'c', 'd'], ['a', 'b', 'c'], ['a', 'b', 'c', 'd']]
    print(Truncate(3)(sentences))  # 每个句子长度不超过3
    # [['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、AddToken

    AddToken 用于在输入序列的起始/末尾处添加词元,例如

    from torchtext.transforms import AddToken
    
    sentences = [
        ['a', 'b', 'c', 'd', 'e'],
        ['a', 'b', 'c'],
        ['a', 'b', 'c', 'd'],
    ]
    print(AddToken('', begin=True)(sentences))
    # [['', 'a', 'b', 'c', 'd', 'e'], ['', 'a', 'b', 'c'], ['', 'a', 'b', 'c', 'd']]
    print(AddToken('', begin=False)(sentences))
    # [['a', 'b', 'c', 'd', 'e', ''], ['a', 'b', 'c', ''], ['a', 'b', 'c', 'd', '']]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    四、Sequential

    类似于 torch.nn.Sequential,这里不作过多介绍。

    五、ToTensor

    ToTensor 通常将输入的一系列句子填充到最长句子的长度。

    from torchtext.transforms import ToTensor
    
    sentences = [
        [1, 2, 3, 4, 5],
        [1, 2, 3],
        [1, 2, 3, 4],
    ]
    t = ToTensor(padding_value=0)
    print(t(sentences))
    # tensor([[1, 2, 3, 4, 5],
    #         [1, 2, 3, 0, 0],
    #         [1, 2, 3, 4, 0]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    需要注意的是,ToTensor 的填充长度无法人为自定义,它是由输入句子的最大长度来决定的。如果需要自定义填充长度,可以使用下面的 PadTransform

    六、PadTransform

    我们仍使用上面的例子,假设每个句子都要填充到长度8,则

    import torchtext.transforms as T
    
    sentences = [
        [1, 2, 3, 4, 5],
        [1, 2, 3],
        [1, 2, 3, 4],
    ]
    text_transform = T.Sequential(
        T.ToTensor(padding_value=0),
        T.PadTransform(max_length=8, pad_value=0)
    )
    print(text_transform(sentences))
    # tensor([[1, 2, 3, 4, 5, 0, 0, 0],
    #         [1, 2, 3, 0, 0, 0, 0, 0],
    #         [1, 2, 3, 4, 0, 0, 0, 0]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    基于SpringBoot+Dubbo构建的电商前后端分离平台
    golang-gin框架使用1
    C-Lodop打印文字超长自动缩小(文字按固定宽度缩放、js计算文本宽度)
    Sound/播放提示音, Haptics/触觉反馈, LocalNotification/本地通知 的使用
    C语言真题卷(1)
    格式化以后数据还在吗 格式化后数据怎么恢复
    Claude与ChatGPT的对比
    Gcware Python 接口(7)
    Session 和 Cookies 有什么区别?
    【ArcGIS Pro二次开发】(75):ArcGIS Pro SDK二次开发中的常见问题及解决方法
  • 原文地址:https://blog.csdn.net/raelum/article/details/127405168