pytorch_transformers包含BERT, GPT, GPT-2, Transfo-XL, XLNet, XLM 等多个模型,并提供了27 个预训练模型。
对于每个模型,pytorch_transformers库里都对应有三个类:
PRETRAINED_VOCAB_FILES_MAP:预训练vocab_file
PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES: 预训练的positional_embedding_size
PRETRAINED_INIT_CONFIGURATION: 预训练的configuration(这里只有do_lower_case:T/F)
load_vocab(vocab_file): 加载vocab_file(是一个txt文件一个单词一行),返回一个dictionary: key是单词,value是index. word2index dictory
whitespace_tokenize(text): 对文本进行空格切分,返回一个切分后的list
端到端的bert分词法:punctuation splitting + wordpiece. 继承PreTrainedTokenizer
参数:
vocab_file: vocabulary file.
do_lower_case: 是否要小写化处理,只有do_wordpiece_only=False时才有效。
do_basic_tokenize:在wordpiece之前是否要做basic_tokenize
max_len: 最大长度
never_split: tokens 列表,在分词时永远不会被切分。这个只有do_wordpiece_only=False时才有效。
初始化函数
a) basic_tokenize(当do_basic_tokenize=True,可以加载never_split list)
b) wordpiece_tokenize
其他函数:
a). _tokenize(text): 对text 进行(basic_tokenize和)wordpiece分词,返回分词之后的split_tokens list
b). _convert_token_to_id(token): 把vocab中的一个token(str/unicode) 转成index, 如果token不在vocab中,则返回unk的index
c). _convert_id_to_token(index): 通过vocab把index换成token
d). convert_tokens_to_string(tokens): 把一个序列token转成一个single string.
e). add_special_tokens_single_sentence(token_ids): 给序列添加特殊的token 用于序列分类任务。Bert 序列格式:[CLS] X [SEP] 即返回 [cls_token_id] + token_ids + [sep_token_id].
f). add_special_tokens_sentences_pair(token_ids_0, token_ids_1): 给序列对儿添加special tokens 用于序列分类。 Bert序列对格式:[CLS] A [SEP] B [SEP] 即返回cls + token_ids_0 + sep + token_ids_1 + sep.
g). save_vocabulary(vocab_path):保存分词之后的词汇表
基本的分词处理:punctuation splitting, lower casing, etc等
初始化函数
创建一个basicTokenizer,主要是参数
never_split: 不分词的列表,
do_lower_case: 小写预处理
tokenize_chinese_chars:是否要处理中文
其他函数:
a) tokenize(text, never_split=None): 基本的分词,仅仅基于空格来分词
b) _run_strip_accents(text):对于text字符串标准化的方式,分别有NFD/NFC
c) _run_split_on_punc(text, never_split=None): 以标点符号来切分句子,返回的是一个list[‘A’,’,’,‘B’,’.’…] A 和B 分别是不含标点符号的string
d) _tokenize_chinese_chars(text):在中文字之间添加空格
e) _is_chinese_char(cp): 检查这个单词是不是中文字符,如果是,则返回True, 不是则返回False
f) _clean_text(text): 去除invalid 单词,并且统一化空格
用 WordPiece 进行分词
初始化函数
创建一个wordpieceTokenizer,主要参数有:vocab, unk_token, max_input_chars_per_word=100
其他函数
tokenize(text):使用贪心最长匹配算法进行分词,
For example:
input = “unaffable”
output = [“un”, “##aff”, “##able”]
UCD是Unicode字符数据库(Unicode Character DataBase)的缩写。UCD由一些描述Unicode字符属性和内部关系的纯文本或html文件组成。
UCD中的文本文件大都是适合于程序分析的Unicode相关数据。其中的html文件解释了数据库的组织,数据的格式和含义。
UCD中最庞大的文件无疑就是描述汉字属性的文件Unihan.txt。
在UCD 5.0,0中,Unihan.txt文件大小有28,221K字节。Unihan.txt中包含了很多有参考价值的索引,例如汉字部首、笔划、
拼音、使用频度、四角号码排序等。这些索引都是基于一些比较权威的辞典,但大多数索引只能检索部分汉字。
unicodedata.category(chr) 把一个字符返回它在UNICODE里分类的类型。具体类型如下:
Code Description
[Cc] Other, Control
[Cf] Other, Format
[Cn] Other, Not Assigned (no characters in the file have this property)
[Co] Other, Private Use
[Cs] Other, Surrogate
[LC] Letter, Cased
[Ll] Letter, Lowercase
[Lm] Letter, Modifier
[Lo] Letter, Other
[Lt] Letter, Titlecase
[Lu] Letter, Uppercase
[Mc] Mark, Spacing Combining
[Me] Mark, Enclosing
[Mn] Mark, Nonspacing
[Nd] Number, Decimal Digit
[Nl] Number, Letter
[No] Number, Other
[Pc] Punctuation, Connector
[Pd] Punctuation, Dash
[Pe] Punctuation, Close
[Pf] Punctuation, Final quote (may behave like Ps or Pe depending on usage)
[Pi] Punctuation, Initial quote (may behave like Ps or Pe depending on usage)
[Po] Punctuation, Other
[Ps] Punctuation, Open
[Sc] Symbol, Currency
[Sk] Symbol, Modifier
[Sm] Symbol, Math
[So] Symbol, Other
[Zl] Separator, Line
[Zp] Separator, Paragraph
[Zs] Separator, Space
‘’’
>>> import unicodedata
>>> print(unicodedata.category('四'))
Lo
>>> print(unicodedata.category('8'))
Nd
>>> print(unicodedata.category('a'))
Ll
>>>