PyTorch:如何将SentencePiece数字转换为令牌

fdbelqdn  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(184)

PyTorch的torchtext可以通过sentencepiece-numericalizer将令牌转换为整数。例如"is" -> 17"
那么从整数到令牌的逆操作呢?例如17 --> "is"。我该怎么做?https://pytorch.org/text/stable/data_functional.html API文档中没有列出。

osh3o9ms

osh3o9ms1#

查看PyTorch中sentencepiece_numericalizer的代码,它看起来像这样(文档已删除):

def sentencepiece_numericalizer(sp_model):
    def _internal_func(txt_iter):
        for line in txt_iter:
            yield sp_model.EncodeAsIds(line)

    return _internal_func

注意对sp_model.EncodeAsIds(line)的调用。
基于此,sp_model参数(与load_sp_model返回的参数相同)实际上是SentencePieceProcessor类的一个示例。浏览代码,有一个额外的DecodeIds方法。
有了上面的信息,我们可以将反函数写成sentencepiece_numericalizer

def sentencepiece_denumericalizer(sp_model):
    def _internal_func(id_iter):
        for ids in id_iter:
            yield sp_model.DecodeIds(ids)

    return _internal_func

这可以像下面这样使用:

from torchtext.data.functional import (
    load_sp_model,
    sentencepiece_numericalizer,
)
sp_model = load_sp_model("path_to_model")
sp_nm = sentencepiece_numericalizer(sp_model)
sp_dnm = sentencepiece_denumericalizer(sp_model)

in_strs = ["sentencepiece encode as pieces", "examples to   try!"]
ids = list(sp_nm(in_strs))
out_strs = list(sp_dnm(ids)) # should approx eq. in_strs

相关问题