mindspore.dataset.text.BertTokenizer
- class mindspore.dataset.text.BertTokenizer(vocab, suffix_indicator='##', max_bytes_per_token=100, unknown_token='[UNK]', lower_case=False, keep_whitespace=False, normalization_form=NormalizeForm.NONE, preserve_unused_token=True, with_offsets=False)[源代码]
使用Bert分词器对字符串进行分词。
说明
Windows平台尚不支持 BertTokenizer 。
- 参数:
vocab (
Vocab
) - 用于查词的词汇表。suffix_indicator (str,可选) - 用于指示子词后缀的前缀标志。默认值:
'##'
。max_bytes_per_token (int,可选) - 分词最大长度,超过此长度的词汇将不会被拆分。默认值:
100
。unknown_token (str,可选) - 对未知词汇的分词输出。当设置为空字符串时,直接返回对应未知词汇作为分词输出;否则,返回该字符串作为分词输出。默认值:
'[UNK]'
。lower_case (bool,可选) - 是否对字符串进行小写转换处理。若为
True
,会将字符串转换为小写并删除重音字符;若为False
,将只对字符串进行规范化处理,其模式由 normalization_form 指定。默认值:False
。keep_whitespace (bool,可选) - 是否在分词输出中保留空格。默认值:
False
。normalization_form (
NormalizeForm
,可选) - Unicode规范化模式 ,仅当 lower_case 为False
时生效,取值可为NormalizeForm.NONE
、NormalizeForm.NFC
、NormalizeForm.NFKC
、NormalizeForm.NFD
或NormalizeForm.NFKD
。默认值:NormalizeForm.NONE
。NormalizeForm.NONE
:不进行规范化处理。NormalizeForm.NFC
:先以标准等价方式分解,再以标准等价方式重组。NormalizeForm.NFKC
:先以兼容等价方式分解,再以标准等价方式重组。NormalizeForm.NFD
:以标准等价方式分解。NormalizeForm.NFKD
:以兼容等价方式分解。
preserve_unused_token (bool,可选) - 是否保留特殊词汇。若为
True
,将不会对特殊词汇进行分词,如 ‘[CLS]’, ‘[SEP]’, ‘[UNK]’, ‘[PAD]’, ‘[MASK]’ 等。默认值:True
。with_offsets (bool,可选) - 是否输出词汇在字符串中的偏移量。默认值:
False
。
- 异常:
TypeError - 当 vocab 的类型不为
mindspore.dataset.text.Vocab
。TypeError - 当 suffix_indicator 的类型不为str。
TypeError - 当 max_bytes_per_token 的类型不为int。
ValueError - 当 max_bytes_per_token 为负数。
TypeError - 当 unknown_token 的类型不为str。
TypeError - 当 lower_case 的类型不为bool。
TypeError - 当 keep_whitespace 的类型不为bool。
TypeError - 当 normalization_form 的类型不为
mindspore.dataset.text.NormalizeForm
。TypeError - 当 preserve_unused_token 的类型不为bool。
TypeError - 当 with_offsets 的类型不为bool。
- 支持平台:
CPU
样例:
>>> import mindspore.dataset as ds >>> import mindspore.dataset.text as text >>> from mindspore.dataset.text import NormalizeForm >>> >>> text_file_list = ["/path/to/text_file_dataset_file"] >>> text_file_dataset = ds.TextFileDataset(dataset_files=text_file_list) >>> >>> # 1) If with_offsets=False, default output one column {["text", dtype=str]} >>> vocab_list = ["床", "前", "明", "月", "光", "疑", "是", "地", "上", "霜", "举", "头", "望", "低", ... "思", "故", "乡","繁", "體", "字", "嘿", "哈", "大", "笑", "嘻", "i", "am", "mak", ... "make", "small", "mistake", "##s", "during", "work", "##ing", "hour", "😀", "😃", ... "😄", "😁", "+", "/", "-", "=", "12", "28", "40", "16", " ", "I", "[CLS]", "[SEP]", ... "[UNK]", "[PAD]", "[MASK]", "[unused1]", "[unused10]"] >>> vocab = text.Vocab.from_list(vocab_list) >>> tokenizer_op = text.BertTokenizer(vocab=vocab, suffix_indicator='##', max_bytes_per_token=100, ... unknown_token='[UNK]', lower_case=False, keep_whitespace=False, ... normalization_form=NormalizeForm.NONE, preserve_unused_token=True, ... with_offsets=False) >>> text_file_dataset = text_file_dataset.map(operations=tokenizer_op) >>> # 2) If with_offsets=True, then output three columns {["token", dtype=str], >>> # ["offsets_start", dtype=uint32], >>> # ["offsets_limit", dtype=uint32]} >>> tokenizer_op = text.BertTokenizer(vocab=vocab, suffix_indicator='##', max_bytes_per_token=100, ... unknown_token='[UNK]', lower_case=False, keep_whitespace=False, ... normalization_form=NormalizeForm.NONE, preserve_unused_token=True, ... with_offsets=True) >>> text_file_dataset = text_file_dataset.map(operations=tokenizer_op, input_columns=["text"], ... output_columns=["token", "offsets_start", ... "offsets_limit"])
- 教程样例: