tokenizers pre_tokenizers模块

模块介绍

pre_tokenizers模块中最重要的一个类PreTokenizer,不仅将文本拆分为单词,还保留了偏移量,即原始文本中每个单词的开头和开头。 这将使最终的分词器能够将每个标记与它来自的文本部分进行匹配(我们用于问答或标记分类任务的功能)。

官方文档中对于pre_tokenizers模块中PreTokenzier类的解释如下,意思是说负责分割初始输入字符串。 这是决定在何处以及如何对原始字符串进行预分段的组件。 最简单的例子是使用空格进行分割。

Pre-tokenization: In charge of splitting the initial input string. That’s the component that decides where and how to pre-segment the origin string. The simplest example would be to simply split on spaces.

pre_tokenizers模块提供了10种分隔文本的类,分别是BertPreTokenizer、ByteLevel、CharDelimiterSplit、Digits、Metaspace、Punctuation、Split、UnicodeScripts、Whitespace、WhitespaceSplit,这些类都继承PreTokenizer类,并实现了PreTokenzier类的方法(pre_tokenize、pre_tokenize_str),pre_tokenizers模块还提供了将多种方式组合的类Sequence。

模块使用

1、BertPreTokenizer
tokenizers.pre_tokenizers.BertPreTokenizer()

BertPreTokenizer预分词器根据空格和标点符号将文本划分为多个单词(token),并且每个标点符号都视为一个单词。

>>> pre_tokenizer = pre_tokenizers.BertPreTokenizer()
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this', (0, 4)), ('is', (5, 7)), ('a', (8, 9)), ('text', (10, 14)), ('!', (14, 15)), ('!', (15, 16)), ('!', (16, 17))]
2、ByteLevel
tokenizers.pre_tokenizers.ByteLevel(add_prefix_space = True, use_regex = True)

ByteLevel预分词器使用字节作为基本词汇表,可以强制基本词汇表的大小为 256,同时确保每个基本字符都包含在词汇表中。通过一些额外的规则来处理标点符号,可以对每个文本进行分词,而无需符号。该预分词器根据空格将文本划分成单词,用相应的表示来替换字符串的所有字节。

参数add_prefix_space表示如果第一个单词没有空格,是否对第一个单词添加空格。参数use_regex表示是否使用GPT2的特定的正则表达式在空格上进行拆分。

>>> pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=False)
>>> pre_tokenizer.alphabet()
['"', 'Ĝ', 'Ľ', 'ĥ', 'ı', 'ë', 'y', '¼', 'ď', '&', 'E', 'Ĉ', '}', 'ì', 'B', 'q', '0', ']', 'ē', 'Î', 'ü', '¸', '~', '|', '»', 'Ĥ', 'c', 'Ë', 'Ĕ', 'ã', 'Ė', '£', '>', 'æ', 'Ê', 's', 'Ć', '7', 'ė', 'Ñ', 'K', 'Ù', '4', 'à', 'Ě', 'ij', 'p', 'Ę', '²', 'È', 'ä', 'í', 'Ă', '#', 'đ', 'Q', 'x', '.', 'ĵ', 'û', 'ŀ', '×', '¬', '¦', '+', 'Ā', 'Ü', 'Ğ', 'Í', 'L', 'Ò', 'g', 'Z', 'Ì', '2', 'Æ', 'Ġ', '½', 'Ħ', 'ô', 'v', 'î', 'J', 'ĺ', '®', 'č', '¾', 'Ã', '¥', 'Ģ', 'Ŀ', '/', 'W', 'ħ', 'Ö', '9', 'P', 'a', 'j', '=', 'G', 'R', 'ĝ', 'ĸ', '%', 'ł', ',', 'Ē', 'ê', 'ç', 'm', 'Ċ', '<', 'Č', 'Å', 'ù', '@', 'Ĭ', 'ğ', 'º', 'S', 'ă', 'l', '¡', 'Ó', 'Ý', 'Â', 'f', 'Ď', 'Đ', 'ī', '¯', ';', 'A', '$', '´', 'ö', '¨', 'ĭ', 'Þ', 'ß', '3', 'N', 'Á', 'H', 'u', 'į', 'Ð', 'Ú', 'k', 'M', 'h', 'U', 'V', '^', 'ĩ', 'Ç', ')', 'ð', 'Ĩ', 'r', 'C', '«', 'ę', 'é', 'o', 'Ĵ', 'ý', 'ą', 'â', 'á', 'Ļ', '©', 'O', 'Ï', 'İ', '±', ':', '¿', '\\', 'F', 'ĕ', 'X', '6', 'Ń', 'µ', 'ċ', "'", 'þ', '5', '_', 'ć', '¶', 'ļ', 'Ķ', '!', 'ò', 'i', '¢', 'D', 'Ä', '·', 'Ô', 'ú', 'ø', 'Ø', 'ġ', '1', '?', 'Ī', 'ģ', 'ï', 'd', 'Õ', 't', 'ě', 'n', '[', 'Ĺ', 'T', '³', 'ĉ', 'I', '8', 'À', 'b', 'ó', 'ľ', 'ñ', '°', 'w', 'Ł', '¤', 'è', 'Y', 'e', '(', 'Û', '{', 'Ą', '*', 'å', 'ā', 'ÿ', 'Į', 'É', 'ķ', 'ª', 'IJ', 'z', '¹', '-', '§', '÷', 'õ', '`']
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this', (0, 4)), ('Ġis', (4, 7)), ('Ġa', (7, 9)), ('Ġtext', (9, 14)), ('!!!', (14, 17))]
3、CharDelimiterSplit
tokenizers.pre_tokenizers.CharDelimiterSplit()

CharDelimiterSplit预分词器根据指定的字符将文本划分成单词

>>> pre_tokenizer = pre_tokenizers.CharDelimiterSplit(" ")  # 空格
>>> pre_tokenizer.pre_tokenize_str("this is a text!")
[('this', (0, 4)), ('is', (5, 7)), ('a', (8, 9)), ('text!', (10, 15))]
4、Digits
tokenizers.pre_tokenizers.Digits(individual_digits = False)

Digits预分词器根据数字将文本划分成单词。参数individual_digits表示是否分隔每个独立的数字。

>>> pre_tokenizer = pre_tokenizers.Digits()
>>> pre_tokenizer.pre_tokenize_str("this is 123 text!")
[('this is ', (0, 8)), ('123', (8, 11)), (' text!', (11, 17))]
>>> pre_tokenizer = pre_tokenizers.Digits(individual_digits=True)
>>> pre_tokenizer.pre_tokenize_str("this is 123 text!")
[('this is ', (0, 8)), ('1', (8, 9)), ('2', (9, 10)), ('3', (10, 11)), (' text!', (11, 17))]
5、Metaspace
tokenizers.pre_tokenizers.Metaspace(replacement = '_', add_prefix_space = True)

Metaspace预分词器将所有的空格替换成参数replacement指定的字符,默认为"_",并在这些指定的字符上进行分隔。参数add_prefix_space表示是否在第一个单词前添加空格。

>>> pre_tokenizer = pre_tokenizers.Metaspace()
>>> pre_tokenizer.pre_tokenize_str("this is a text!")
[('▁this', (0, 4)), ('▁is', (4, 7)), ('▁a', (7, 9)), ('▁text!', (9, 15))]
>>> pre_tokenizer = pre_tokenizers.Metaspace(add_prefix_space=False)
>>> pre_tokenizer.pre_tokenize_str("this is a text!")
[('this', (0, 4)), ('▁is', (4, 7)), ('▁a', (7, 9)), ('▁text!', (9, 15))]
6、Punctuation
tokenizers.pre_tokenizers.Punctuation(behavior = 'isolated')

Punctuation预分词器根据标点符号将文本分割成单词。参数behavior表示处理标点符号的方式,默认为isolated。

>>> pre_tokenizer = pre_tokenizers.Punctuation()
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this is a text', (0, 14)), ('!', (14, 15)), ('!', (15, 16)), ('!', (16, 17))]

>>> pre_tokenizer = pre_tokenizers.Punctuation(behavior="removed")
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this is a text', (0, 14))]

>>> pre_tokenizer = pre_tokenizers.Punctuation(behavior="merged_with_previous")
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this is a text!', (0, 15)), ('!', (15, 16)), ('!', (16, 17))]

>>> pre_tokenizer = pre_tokenizers.Punctuation(behavior="merged_with_next")
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this is a text', (0, 14)), ('!', (14, 15)), ('!', (15, 16)), ('!', (16, 17))]

>>> pre_tokenizer = pre_tokenizers.Punctuation(behavior="contiguous")
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this is a text', (0, 14)), ('!!!', (14, 17))]
7、Split
tokenizers.pre_tokenizers.Split(pattern, behavior, invert = False)

Split预分词器根据指定的patten(可以为一个字符串或者一个正则表达式)将文本划分成单词。

>>> pre_tokenizer = pre_tokenizers.Split(pattern=" ", behavior="removed")  # 相当于WhiteSpaceSplit
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this', (0, 4)), ('is', (5, 7)), ('a', (8, 9)), ('text!!!', (10, 17))]
8、UnicodeScripts
tokenizers.pre_tokenizers.UnicodeScripts()

UnicodeScripts预分词器根据不同语系的字符将文本分隔成单词。比如,英文字母和汉字、韩文就是不同语系的字符。

>>> pre_tokenizer = pre_tokenizers.UnicodeScripts()
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this is a text', (0, 14)), ('!!!', (14, 17))]
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!这是另外一个文本!!!")
[('this is a text', (0, 14)), ('!!!', (14, 20)), ('这是另外一个文本', (20, 28)), ('!!!', (28, 31))]
9、Whitespace
tokenizers.pre_tokenizers.Whitespace()

Whitespace预分词器使用正则表达式"\w+|[^\w\s]+",将文本分隔成单词

>>> pre_tokenizer = pre_tokenizers.Whitespace()
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this', (0, 4)), ('is', (5, 7)), ('a', (8, 9)), ('text', (10, 14)), ('!!!', (14, 17))]
10、WhitespaceSplit
tokenizers.pre_tokenizers.Whitespace()

WhitespaceSplit预分词器根据空格将文本分隔成单词

>>> pre_tokenizer = pre_tokenizers.WhitespaceSplit()
>>> pre_tokenizer.pre_tokenize_str("this is a text!!!")
[('this', (0, 4)), ('is', (5, 7)), ('a', (8, 9)), ('text!!!', (10, 17))]

你可能感兴趣的:(#,transformers,transformer)