【发布时间】:2020-01-06 03:14:23
【问题描述】:
基本上是标题; Pytorch 中是否有任何等价于keras.preprocessing.text.Tokenizer 的内容?我还没有找到任何提供所有实用程序而无需手工制作的东西。
【问题讨论】:
-
特别是在寻找等价物时,链接任何能更详细地解释所讨论函数的资源会很有帮助,例如,指向 Keras 文档的指针。
标签: tensorflow keras nlp pytorch
基本上是标题; Pytorch 中是否有任何等价于keras.preprocessing.text.Tokenizer 的内容?我还没有找到任何提供所有实用程序而无需手工制作的东西。
【问题讨论】:
标签: tensorflow keras nlp pytorch
我发现 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的分词器、子字编码器等。
【讨论】:
PyTorch 本身不提供这样的功能,您要么需要手动操作(这应该很简单:使用您选择的分词器并在字典中查找索引)。
或者,您可以使用Torchtext,它提供了文本处理的基本抽象。您需要做的就是创建一个Field 对象。您可以使用string.split、SpaCy 或自定义函数进行标记化。您可以提供一个词汇表或直接从数据中创建它。然后你只需调用the process method 来标记文本并进行词汇查找。
如果你想要更复杂的东西,你也可以考虑使用AllenNLP。在 AllenNLP 中,您分别执行 the tokenization 和 the vocabulary lookup。
【讨论】: