torchtext.transforms¶
Transforms 是常见的文本转换。它们可以使用 torch.nn.Sequential
或 torchtext.transforms.Sequential
连接在一起,以支持 torch-scriptability。
SentencePieceTokenizer¶
- class torchtext.transforms.SentencePieceTokenizer(sp_model_path: str)[source]¶
来自预训练的 sentencepiece 模型的 Sentence Piece 分词器转换
更多信息:https://github.com/google/sentencepiece
- 参数:
sp_model_path (str) – 预训练的 sentencepiece 模型路径
- 示例
>>> from torchtext.transforms import SentencePieceTokenizer >>> transform = SentencePieceTokenizer("spm_model") >>> transform(["hello world", "attention is all you need!"])
- 使用
SentencePieceTokenizer
的教程 使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
GPT2BPETokenizer¶
CLIPTokenizer¶
- class torchtext.transforms.CLIPTokenizer(merges_path: str, encoder_json_path: Optional[str] = None, num_merges: Optional[int] = None, return_tokens: bool = False)[source]¶
用于 CLIP 分词器的转换。基于字节级 BPE。
在 TorchScript 中重新实现了 CLIP 分词器。原始实现:https://github.com/mlfoundations/open_clip/blob/main/src/clip/tokenizer.py
此分词器经过训练可以将空格视为标记的一部分(有点像 sentencepiece),因此单词的编码方式将因它是否位于句子的开头(没有空格)而异。
以下代码段展示了如何使用 CLIP 分词器,编码器和合并文件来自原始论文的实现。
- 示例
>>> from torchtext.transforms import CLIPTokenizer >>> MERGES_FILE = "http://download.pytorch.org/models/text/clip_merges.bpe" >>> ENCODER_FILE = "http://download.pytorch.org/models/text/clip_encoder.json" >>> tokenizer = CLIPTokenizer(merges_path=MERGES_FILE, encoder_json_path=ENCODER_FILE) >>> tokenizer("the quick brown fox jumped over the lazy dog")
- 参数:
正则表达式分词器¶
- class torchtext.transforms.RegexTokenizer(patterns_list)[source]¶
用于字符串句子的正则表达式分词器,它应用了在 patterns_list 中定义的所有正则表达式替换。它由 Google 的 C++ RE2 正则表达式引擎 支持。
- 参数:
- 注意事项
- 示例
- 基于
(patterns, replacements)
列表的正则表达式分词。 >>> import torch >>> from torchtext.transforms import RegexTokenizer >>> test_sample = 'Basic Regex Tokenization for a Line of Text' >>> patterns_list = [ (r''', ' ' '), (r'"', '')] >>> reg_tokenizer = RegexTokenizer(patterns_list) >>> jit_reg_tokenizer = torch.jit.script(reg_tokenizer) >>> tokens = jit_reg_tokenizer(test_sample)
- 基于
(single_pattern, ' ')
列表的正则表达式分词。 >>> import torch >>> from torchtext.transforms import RegexTokenizer >>> test_sample = 'Basic.Regex,Tokenization_for+a..Line,,of Text' >>> patterns_list = [ (r'[,._+ ]+', r' ')] >>> reg_tokenizer = RegexTokenizer(patterns_list) >>> jit_reg_tokenizer = torch.jit.script(reg_tokenizer) >>> tokens = jit_reg_tokenizer(test_sample)
- 基于
BERT 分词器¶
- class torchtext.transforms.BERTTokenizer(vocab_path: str, do_lower_case: bool = True, strip_accents: Optional[bool] = None, return_tokens=False, never_split: Optional[List[str]] = None)[source]¶
用于 BERT 分词器的转换。
基于论文中介绍的 WordPiece 算法:https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/37842.pdf
后端内核实现取自 https://github.com/LieluoboAi/radish 并进行了修改。
有关更多详细信息,请参阅 PR https://github.com/pytorch/text/pull/1707 摘要。
以下代码片段展示了如何使用预训练的词典文件使用 BERT 分词器。
- 示例
>>> from torchtext.transforms import BERTTokenizer >>> VOCAB_FILE = "https://hugging-face.cn/bert-base-uncased/resolve/main/vocab.txt" >>> tokenizer = BERTTokenizer(vocab_path=VOCAB_FILE, do_lower_case=True, return_tokens=True) >>> tokenizer("Hello World, How are you!") # single sentence input >>> tokenizer(["Hello World","How are you!"]) # batch input
- 参数:
词典转换¶
- class torchtext.transforms.VocabTransform(vocab: Vocab)[source]¶
词典转换,用于将输入标记批次转换为相应的标记 ID
- 参数:
vocab –
torchtext.vocab.Vocab
类的一个实例。
示例
>>> import torch >>> from torchtext.vocab import vocab >>> from torchtext.transforms import VocabTransform >>> from collections import OrderedDict >>> vocab_obj = vocab(OrderedDict([('a', 1), ('b', 1), ('c', 1)])) >>> vocab_transform = VocabTransform(vocab_obj) >>> output = vocab_transform([['a','b'],['a','b','c']]) >>> jit_vocab_transform = torch.jit.script(vocab_transform)
- 使用
VocabTransform
的教程 使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
转换为张量¶
- class torchtext.transforms.ToTensor(padding_value: Optional[int] = None, dtype: dtype = torch.int64)[source]¶
将输入转换为 PyTorch 张量
- 参数:
padding_value (可选[int]) – 填充值,使批次中每个输入的长度等于批次中最长序列的长度。
dtype (
torch.dtype
) – 输出张量的torch.dtype
LabelToIndex¶
Truncate¶
- class torchtext.transforms.Truncate(max_seq_len: int)[source]¶
截断输入序列
- 参数:
max_seq_len (int) – 输入序列允许的最大长度
- 使用
Truncate
的教程 使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
AddToken¶
Sequential¶
- class torchtext.transforms.Sequential(*args: Module)[source]¶
- class torchtext.transforms.Sequential(arg: OrderedDict[str, Module])
用于容纳一系列文本转换的容器。
- 使用
Sequential
的教程 使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
使用 XLM-RoBERTa 模型进行 SST-2 二元文本分类
- 使用
PadTransform¶
StrToIntTransform¶
CharBPETokenizer¶
- class torchtext.transforms.CharBPETokenizer(bpe_encoder_path: str, bpe_merges_path: str, return_tokens: bool = False, unk_token: Optional[str] = None, suffix: Optional[str] = None, special_tokens: Optional[List[str]] = None)[source]¶
字符字节对编码分词器的转换。
:param : param bpe_encoder_path: BPE 编码器 json 文件的路径。 :param : type bpe_encoder_path: str :param : param bpe_merges_path: BPE 合并文本文件的路径。 :param : type bpe_merges_path: str :param : param return_tokens: 指示是否返回拆分的标记。 如果为 False,它将返回编码的标记 ID(默认:False)。 :param : type return_tokens: bool :param : param unk_token: 未知标记。 如果提供,它必须存在于编码器中。 :param : type unk_token: Optional[str] :param : param suffix: 用于每个作为词尾的子词的后缀。 :param : type suffix: Optional[str] :param : param special_tokens: 不应拆分为单个字符的特殊标记。 如果提供,这些必须存在于编码器中。 :param : type special_tokens: Optional[List[str]]