【问题标题】:keras.preprocessing.text.Tokenizer equivalent in Pytorch?Pytorch 中的 keras.preprocessing.text.Tokenizer 等价物?
【发布时间】:2020-01-06 03:14:23
【问题描述】:

基本上是标题; Pytorch 中是否有任何等价于keras.preprocessing.text.Tokenizer 的内容?我还没有找到任何提供所有实用程序而无需手工制作的东西。

【问题讨论】:

  • 特别是在寻找等价物时,链接任何能更详细地解释所讨论函数的资源会很有帮助,例如,指向 Keras 文档的指针。

标签: tensorflow keras nlp pytorch


【解决方案1】:

我发现 Torchtext 更难用于简单的事情。 PyTorch-NLP 可以更直接地做到这一点:

from torchnlp.encoders.text import StaticTokenizerEncoder, stack_and_pad_tensors, pad_tensor

loaded_data = ["now this ain't funny", "so don't you dare laugh"]
encoder = StaticTokenizerEncoder(loaded_data, tokenize=lambda s: s.split())
encoded_data = [encoder.encode(example) for example in loaded_data]

print(encoded_data)

[张量([5, 6, 7, 8]), 张量([ 9, 10, 11, 12, 13])]

encoded_data = [pad_tensor(x, length=10) for x in encoded_data]
print(stack_and_pad_tensors(encoded_data))
# alternatively, use encoder.batch_encode()

BatchedSequences(tensor=tensor([[ 5, 6, 7, 8, 0, 0, 0, 0, 0, 0], [ 9, 10, 11, 12, 13, 0, 0, 0, 0 , 0]]), 长度=张量([10, 10])) ​

自带其他类型的编码器,比如spaCy的分词器、子字编码器等。

【讨论】:

    【解决方案2】:

    PyTorch 本身不提供这样的功能,您要么需要手动操作(这应该很简单:使用您选择的分词器并在字典中查找索引)。

    或者,您可以使用Torchtext,它提供了文本处理的基本抽象。您需要做的就是创建一个Field 对象。您可以使用string.split、SpaCy 或自定义函数进行标记化。您可以提供一个词汇表或直接从数据中创建它。然后你只需调用the process method 来标记文本并进行词汇查找。

    如果你想要更复杂的东西,你也可以考虑使用AllenNLP。在 AllenNLP 中,您分别执行 the tokenizationthe vocabulary lookup

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2022-01-19
      • 2022-11-28
      • 2019-08-29
      • 2020-11-04
      • 2022-06-22
      • 2019-11-11
      • 2022-08-21
      • 2020-12-28
      相关资源
      最近更新 更多