数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
四、Tokenizer 库的应用
安装:
xxxxxxxxxx
pip install tokenizers使用不同
subword tokenization
算法的Transformer-based
模型:GPT, GPT-2, RoBERTa, BART, DeBERTa
等模型使用了BPE
,其中GPT-2
使用了byte-level BPE
。BERT, DistilBERT, MobileBERT, Funnel Transformers, MPNET
等模型使用了WordPiece
。注意,
Google
从未开源WordPiece
训练算法的实现,因此Hugging Face
中的实现是Hugging Face
基于已发表文献的最佳猜测,它可能不是100%
正确的。AlBERT, T5, mBART, Big Bird, XLNet
等模型使用了Unigram
。
tokenizer
应用于文本的流程如下,其中包括:Normalization
:标准化步骤,包括一些常规清理,例如删除不必要的空格、小写、以及删除重音符号。Transformers tokenizer
有一个属性叫做backend_tokenizer
它提供了对Tokenizers
库中底层tokenizer
的访问。backend_tokenizer
的normalizer
属性可以获取执行标准化的normalizer
。而normalizer
的normalize_str()
方法执行标准化。xxxxxxxxxx
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") print(type(tokenizer.backend_tokenizer)) # <class 'tokenizers.Tokenizer'> normalizer = tokenizer.backend_tokenizer.normalizer print(normalizer.normalize_str("Héllò hôw are ü?")) # hello how are u?Pre-tokenization
:tokenizer
不能单独在原始文本上进行训练。相反,我们首先需要将文本拆分为小的单元,例如单词。这就是pre-tokenization
步骤。基于单词的tokenizer
可以简单地基于空白和标点符号将原始文本拆分为单词。这些词将是tokenizer
在训练期间可以学习的子词边界。backend_tokenizer
的pre_tokenizer
属性可以获取执行pre-tokenization
的pre_tokenizer
。而pre_tokenizer
的pre_tokenize_str()
方法执行pre-tokenization
。xxxxxxxxxx
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") print(type(tokenizer.backend_tokenizer)) # <class 'tokenizers.Tokenizer'> pre_tokenizer = tokenizer.backend_tokenizer.pre_tokenizer print(pre_tokenizer.pre_tokenize_str("hello how are u?")) # are 和 u 之间是双空格 # [('hello', (0, 5)), ('how', (6, 9)), ('are', (10, 13)), ('u', (15, 16)), ('?', (16, 17))]请注意
tokenizer
如何跟踪单词的偏移量。由于我们使用的是
BERT tokenizer
,pre_tokenizer
涉及对空格和标点符号进行拆分。而其他tokenizer
可以有不同的规则。例如,GPT-2 tokenizer
和T5 tokenizer
:xxxxxxxxxx
AutoTokenizer.from_pretrained("gpt2").backend_tokenizer.pre_tokenizer.pre_tokenize_str("hello how are u?") # are 和 u 之间是双空格 # [('hello', (0, 5)), # ('Ġhow', (5, 9)), # ('Ġare', (9, 13)), # ('Ġ', (13, 14)), # ('Ġu', (14, 16)), # ('?', (16, 17))] AutoTokenizer.from_pretrained("t5-small").backend_tokenizer.pre_tokenizer.pre_tokenize_str("hello how are u?") # are 和 u 之间是双空格 # [('▁hello', (0, 5)), ('▁how', (6, 9)), ('▁are', (10, 13)), ('▁u?', (15, 17))]GPT-2 tokenizer
也会在空格和标点符号上拆分,但它会保留空格并将它们替换为Ġ
符号。注意,与BERT tokenizer
不同,GPT-2 tokenizer
不会忽略双空格。与
GPT-2 tokenizer
一样,T-5 tokenizer
保留空格并用特定token
(即"_"
)替换它们。但是,T-5 tokenizer
只在空格上拆分,而不拆分标点符号。注意,T-5 tokenizer
默认在句子的开头添加了一个空格(即,_hello
),并忽略了are
和u
之间的双空格。Model
:执行tokenization
从而生成token
序列。Postprocessor
:针对具体的任务插入special token
,以及生成attention mask
和token-type ID
。
Tokenizers 库
旨在为每个步骤提供多个选项,从而方便用于自由地组合。
3.1 Normalizers
class tokenizers.normalizers.Normalizer
:所有normalizer
的基类。方法:
normalize(normalized)
:执行标准化(原地操作)。如果你仅仅想知道在原始字符串上执行标准化的结果,建议使用normalize_str()
。参数:
normalized
,被执行标准化的字符串。normalize_str(sequence) -> str
:执行标准化,返回标准化后的字符串。参数:
sequence
,被执行标准化的字符串。
class tokenizers.normalizers.BertNormalizer
:Bert normalizer
,包括清理文本(移除控制字符并替代以空格)、移除重音、处理中文字符(中文字符周围添加空格)、字母转小写。xxxxxxxxxx
class tokenizers.normalizers.BertNormalizer( clean_text = True, handle_chinese_chars = True, strip_accents = None, lowercase = True )其它的一些
normalizer
:xxxxxxxxxx
class tokenizers.normalizers.Lowercase() # Lowercase Normalizer class tokenizers.normalizers.NFC() # NFC Unicode Normalizer class tokenizers.normalizers.NFD() # NFD Unicode Normalizer class tokenizers.normalizers.NFKC() # NFKC Unicode Normalizer class tokenizers.normalizers.NFKD() # NFKD Unicode Normalizer class tokenizers.normalizers.Nmt() # Nmt normalizer class tokenizers.normalizers.StripAccents() # StripAccents normalizer class tokenizers.normalizers.Strip(left = True, right = True ) # Strip normalizer class tokenizers.normalizers.Replace(pattern, content ) # Replace normalizerclass tokenizers.normalizers.Sequence(normalizers)
:将一组normalizer
拼成一个序列,以给定的顺序依次执行各个normalizer
。示例:
xxxxxxxxxx
normalizer_map = { 'BertNormalizer()': BertNormalizer(), 'Lowercase()': Lowercase(), 'NFC()': NFC(), 'NFD()': NFD(), 'NFKC()': NFKC(), 'NFKD()':NFKD(), 'Nmt()': Nmt(), 'StripAccents()': StripAccents(), 'Strip()': Strip(), "Replace('I','you')":Replace('I','you'), } string = " Héllò, I like play football " for (name, normalizer) in normalizer_map.items(): normalized_str = normalizer.normalize_str(string) print("%s -> '%s'"%(name,normalized_str)) # BertNormalizer() -> ' hello, i like play football ' # Lowercase() -> ' héllò, i like play football ' # NFC() -> ' Héllò, I like play football ' # NFD() -> ' Héllò, I like play football ' # NFKC() -> ' Héllò, I like play football ' # NFKD() -> ' Héllò, I like play football ' # Nmt() -> ' Héllò, I like play football ' # StripAccents() -> ' Héllò, I like play football ' # Strip() -> 'Héllò, I like play football' # Replace('I','you') -> ' Héllò, you like play football '
3.2 Pre-tokenizers
class tokenizers.pre_tokenizers.PreTokenizer()
:所有pre-tokenizer
的基类。方法:
pre_tokenize(pretok)
:执行pre-tokenize
(原地操作)。如果你仅仅想知道在原始字符串上执行pre-tokenize
的结果,建议使用pre_tokenize_str()
。参数:
pretok
,被执行标准化的字符串。pre_tokenize_str(sequence) -> List[Tuple[str, Offsets]]
:执行pre-tokenize
,返回结果字符串序列以及每个结果的偏移量。参数:
sequence
,被执行pre-tokenize
的字符串。
class tokenizers.pre_tokenizers.BertPreTokenizer()
:BertPreTokenizer
,在每个空格和标点符号上拆分。每个标点符号被视为一个独立的单元。class tokenizers.pre_tokenizers.ByteLevel(add_prefix_space = True, use_regex = True)
:ByteLevel PreTokenizer
,将给定字符串的所有字节替换为相应的表示并拆分为单词。参数:
add_prefix_space
:是否在第一个单词前面添加空格,如果第一个单词前面目前还没有空格。use_regex
:如果为False
则阻止该pre_tokenizer
使用GPT2
的正则表达式来在空格上拆分。
方法:
alphabet() -> List[str]
:返回所有字母组成的字符的列表。由于ByteLevel PreTokenizer
作用在byte level
,因此字母表里有256
个不同的字符。
class tokenizers.pre_tokenizers.CharDelimiterSplit(delimiter)
:CharDelimiterSplit
,简单地在给定的char
上拆分,类似于.split(delimiter)
。参数:
delimiter
:一个字符,指定拆分的分隔符。class tokenizers.pre_tokenizers.Digits(individual_digits = False)
:Digits
,利用数字来拆分。参数:
individual_digits
,一个布尔值,如果为True
则每个数字都单独处理(如"123"
被拆分为"1", "2", "3"
);否则数字被整体处理(如"123"
被视为一个整体)。class tokenizers.pre_tokenizers.Metaspace(replacement = '_', add_prefix_space = True )
:Metaspace pre-tokenizer
,用给定的replacement
字符来代替任意空白符,并在空白符上执行拆分。参数:
replacement
:一个字符串,指定替换字符,必须只有一个字符。默认为SentencePiece
中的配置。add_prefix_space
:一个布尔值,是否在首个单词之前没有空格的时候添加一个空格。
class tokenizers.pre_tokenizers.Punctuation( behavior = 'isolated' )
:Punctuation pre-tokenizer
,在标点符号上进行拆分。参数:
behavior
:指定拆分之后如何处理标点符号。可以为"removed", "isolated", "merged_with_previous", "merged_with_next", "contiguous"
。class tokenizers.pre_tokenizers.Split( pattern, behavior, invert = False )
:Split PreTokenizer
,基于指定的模式和行为来拆分。参数:
pattern
:一个字符串或正则表达式,指定拆分模式。behavior
:一个字符串,指定拆分之后如何处理这个模式。可以为"removed", "isolated", "merged_with_previous", "merged_with_next", "contiguous"
。invert
:一个布尔值,指定是否翻转pattern
。
class class tokenizers.pre_tokenizers.UnicodeScripts()
:这个pre-tokenizer
在不同的language family
上进行拆分。遵从SentencePiece Unigram
的实现。class tokenizers.pre_tokenizers.Whitespace()
:这个pre-tokenizer
在使用如下的正则表达式进行拆分:\w+|[^\w\s]+
。class tokenizers.pre_tokenizers.WhitespaceSplit()
:这个pre-tokenizer
在空格上拆分,类似于.split()
。示例:
xxxxxxxxxx
pre_tokenizer_map = { 'BertPreTokenizer()': BertPreTokenizer(), 'ByteLevel()': ByteLevel(), "CharDelimiterSplit('n')": CharDelimiterSplit('n'), 'Digits()': Digits(), 'Metaspace()': Metaspace(), 'Punctuation()':Punctuation(), "Split('e','isolated')": Split('e','isolated'), 'UnicodeScripts()': UnicodeScripts(), 'Whitespace()': Whitespace(), "WhitespaceSplit()":WhitespaceSplit(), } string = "English line; 中文的;And 123456." for (name, pre_tokenizer) in pre_tokenizer_map.items(): pre_tokenized_str = pre_tokenizer.pre_tokenize_str(string) print("%s -> '%s'"%(name,pre_tokenized_str)) # BertPreTokenizer() -> '[('English', (0, 7)), ('line', (8, 12)), (';', (12, 13)), ('中文的', (14, 17)), (';', (17, 18)), ('And', (18, 21)), ('123456', (22, 28)), ('.', (28, 29))]' # ByteLevel() -> '[('ĠEnglish', (0, 7)), ('Ġline', (7, 12)), (';', (12, 13)), ('Ġä¸ŃæĸĩçļĦ', (13, 17)), ('ï¼Ľ', (17, 18)), ('And', (18, 21)), ('Ġ123456', (21, 28)), ('.', (28, 29))]' # CharDelimiterSplit('n') -> '[('E', (0, 1)), ('glish li', (2, 10)), ('e; 中文的;A', (11, 19)), ('d 123456.', (20, 29))]' # Digits() -> '[('English line; 中文的;And ', (0, 22)), ('123456', (22, 28)), ('.', (28, 29))]' # Metaspace() -> '[('▁English', (0, 7)), ('▁line;', (7, 13)), ('▁中文的;And', (13, 21)), ('▁123456.', (21, 29))]' # Punctuation() -> '[('English line', (0, 12)), (';', (12, 13)), (' 中文的', (13, 17)), (';', (17, 18)), ('And 123456', (18, 28)), ('.', (28, 29))]' # Split('e','isolated') -> '[('English lin', (0, 11)), ('e', (11, 12)), ('; 中文的;And 123456.', (12, 29))]' # UnicodeScripts() -> '[('English line', (0, 12)), ('; ', (12, 14)), ('中文的', (14, 17)), (';', (17, 18)), ('And ', (18, 22)), ('123456.', (22, 29))]' # Whitespace() -> '[('English', (0, 7)), ('line', (8, 12)), (';', (12, 13)), ('中文的', (14, 17)), (';', (17, 18)), ('And', (18, 21)), ('123456', (22, 28)), ('.', (28, 29))]' # WhitespaceSplit() -> '[('English', (0, 7)), ('line;', (8, 13)), ('中文的;And', (14, 21)), ('123456.', (22, 29))]'
3.3 Models
class tokenizers.models.Model()
:所有Model
的基类。每个
model
代表一个实际的tokenization
算法。方法:
get_trainer() -> Trainer
:返回关联的Trainer
,该Trainer
用于训练该model
。id_to_token(id) -> str
:返回id
关联的token
字符串。参数:
id
:待转换的ID
。token_to_id(token) -> int
:返回token
字符串关联的整数id
。参数:
token
:待转换的token
字符串。tokenize( sequence ) -> A List of Token
:把给定的字符串执行tokenize
,返回一个token
序列。参数:
sequence
:一个字符串。save( folder, prefix) -> List[str]
:在指定的目录中保存model
。其中被创建的文件使用指定的前缀。如果目录中已有同名的文件,则直接覆盖同名文件。参数:
folder
:模型保存的目录。prefix
:一个字符串,指定被保存的各种文件的文件名前缀。
返回值:一个字符串列表,表示被保存的各种文件的文件名。
class tokenizers.models.BPE
:BPE
模型。xxxxxxxxxx
class tokenizers.models.BPE( vocab = None, merges = None, cache_capacity = None, dropout = None, unk_token = None, continuing_subword_prefix = None, end_of_word_suffix = None, fuse_unk = None )参数:
vocab
:一个字典Dict[str, int]
,指定字符串key
及其id
,表示词表。merges
:token pair
的列表List[Tuple[str, str]]
,表示merge
规则。cache_capacity
:一个整数,指定BPE cache
包含的单词数量。BPE cache
能够通过保存多个单词的merge
操作的结果来加速该过程。dropout
:一个浮点数,指定BPE dropout
比例。取值在0.0 ~ 1.0
之间。unk_token
:一个字符串,指定unknown token
。continuing_subword_prefix
:一个字符串,指定当该子词不是单词的首个子词时,子词的前缀,。end_of_word_suffix
:一个字符串,指定当该子词是单词的最后一个子词时,子词的后缀。fuse_unk
:一个布尔值,指定是否将连续的多个unknown token
合并为单个unknown token
。
方法:
from_file( vocab, merges, **kwargs) -> BPE
:从文件中初始化一个BPE
。参数:
vocab
:vocab.json
文件的路径。merges
:merges.txt
文件的路径。
该方法等价于:
xxxxxxxxxx
vocab, merges = BPE.read_file(vocab_filename, merges_filename) bpe = BPE(vocab, merges)read_file( vocab, merges) -> A Tuple
:从文件中加载词表和merge
规则。参数:参考
from_file()
。
class tokenizers.models.Unigram( vocab )
:Unigram
模型。参数:
vocab
:由字符串和浮点数组成的元组的列表List[Tuple[str, float]]
,指定token
及其score
,如[("am", -0.2442), ...]
class tokenizers.models.WordLevel( vocab, unk_token )
:WordLevel
模型。参数:参考
BPE
模型。方法:
from_file( vocab, un_token) -> WordLevel
:从文件中初始化一个WordLevel
。参数:
vocab
:vocab.json
文件的路径。un_token
:一个字符串,指定unknown token
。
read_file(vocab) -> Dict[str, int]
:从文件中读取词表。参数:参考
from_file
。
class tokenizers.models.WordPiece( vocab, unk_token, max_input_chars_per_word)
:WordPiece
模型。参数:
vocab
:一个字典Dict[str, int]
,指定字符串key
及其id
,表示词表。unk_token
:一个字符串,指定unknown token
。max_input_chars_per_word
:一个整数,指定一个单词中允许的最大字符数。
方法:
from_file(vocab, **kwargs) -> WordPiece
:从文件中初始化一个WordPiece
。参数:
vocab
:vocab.json
文件的路径。read_file(vocab) -> Dict[Str, int]
:从文件中读取词表。参数:参考
from_file
。
3.4 Trainers
class tokenizers.trainers.BpeTrainer
:BPE Trainer
,用于训练BPE
模型。xxxxxxxxxx
class tokenizers.trainers.BpeTrainer(vocab_size=30000, min_frequency=0, show_progress=True, special_tokens=[], limit_alphabet=None, initial_alphabet=[], continuing_subword_prefix=None, end_of_word_suffix=None)参数:
vocab_size
:一个整数,表示final vocabulary
大小,包括所有的token
和字母表alphabet
。min_frequency
:一个整数,表示一个pair
的频次至少为多少时才考虑被merge
。show_progress
:一个布尔值,指定在训练期间是否展示进度条。special_tokens
:一个字符串列表,指定special token
。limit_alphabet
:一个整数,指定字母表中最多保持多少个不同的字符。initial_alphabet
:一个字符串列表,指定初始的字母表。如果字符串包含多个字符,那么仅考虑首个字符。这个字母表可以包含训练数据集中不存在的字符。continuing_subword_prefix
:一个字符串,如果子词不是单词的首个子词,那么添加这个前缀。end_of_word_suffix
:一个字符串,如果子词是单词的末尾子词,那么添加这个后缀。
class tokenizers.trainers.UnigramTrainer
:Unigram Trainer
,用于训练Unigram
模型。xxxxxxxxxx
class UnigramTrainer(vocab_size=8000, show_progress=True, special_tokens=[], shrinking_factor=0.75, unk_token=None, max_piece_length=16, n_sub_iterations=2)参数:
vocab_size, show_progress, special_tokens
:参考BpeTrainer
。shrinking_factor
:一个浮点数,指定在训练的每个step
需要对词表规模缩放多少比例(即,保留top
的多少)。unk_token
:一个字符串,指定unknown token
。max_piece_length
:一个整数,指定token
的最大长度(字符个数)。n_sub_iterations
:一个整数,指定裁剪词表之前执行EM
算法的迭代次数。
class tokenizers.trainers.WordLevelTrainer
:WordLevel Trainer
,用于训练WordLevel
模型。xxxxxxxxxx
class tokenizers.trainers.WordLevelTrainer(vocab_size=30000, min_frequency=0, show_progress=True, special_tokens=[])参数:参考
BpeTrainer
。class tokenizers.trainers.WordPieceTrainer
:WordPiece Trainer
,用于训练WordPiece
模型。xxxxxxxxxx
class WordPieceTrainer(vocab_size=30000, min_frequency=0, show_progress=True, special_tokens=[], limit_alphabet=None, initial_alphabet=[], continuing_subword_prefix='##', end_of_word_suffix=None)参数:参考
BpeTrainer
。
3.5 Post-processors
class tokenizers.processors.BertProcessing( sep, cls)
:BERT
的Post-processor
。参数:
sep
:一个(str, int)
的元组,给出[SEP] token
及其id
。cls
:一个(str, int)
的元组,给出[CLS] token
及其id
。
方法:
num_special_tokens_to_add(is_pair)
:返回需要添加到single/pair
句子的special token
的数量。参数:
is_pair
:一个布尔值,指定预期的输入是单个句子还是句子对。process(encoding, pair=None, add_special_tokens=True)
:对指定的encoding
执行后处理。参数:
encoding
:单个句子的encoding
,类型为tokenizer.Encoding
。pair
:一对句子的encoding
,类型为tokenizer.Encoding
。add_special_tokens
:一个布尔值,指定是否添加special token
。
BertProcessing
会把[SEP] token
和[CLS] token
添加到被tokenized
的token
序列中。class tokenizers.processors.ByteLevel( trim_offsets = True)
:ByteLevel BPE
的Post-processor
。参数:
trim_offsets
:一个布尔值,是否从生成的offsets
中移除空格。
方法:参考
BertProcessing
。这个
Post-processor
会小心地裁剪offsets
。默认情况下,ByteLevel BPE
可能会在生成的token
中包含空格。如果你不希望offsets
中包含这些空格,则可以使用这个Post-processor
。class tokenizers.processors.RobertaProcessing( sep, cls, trim_offsets=True, add_prefix_space=True)
:Roberta
的Post-processor
。参数:
sep,cls
:参考BertProcessing
。trim_offsets
:参考ByteLevel
。add_prefix_space
:一个布尔值,指定是否在pre-tokenization
阶段启用了add_prefix_space
。这个参数是为了配合trim_offsets
使用。
方法:参考
BertProcessing
。class tokenizers.processors.TemplateProcessing(single, pair, special_tokens)
:这是一个Post-processor
的模板,以便将special token
添加到相关的每个输入序列。、参数:
single
:一个模板字符串或模板字符串列表,用于单个输入序列。如果是字符串,那么使用空格来拆分token
。pair
:一个模板字符串或模板字符串列表,用于一对输入序列。如果是字符串,那么使用空格来拆分token
。模板的标准格式为
<identifier>(:<type_id>)
。- 模板中可以基于
type_id
来占位,如"[CLS] $0, $1, $2 [SEP]"
,此时identifier
默认为A
。 - 模板中也可以基于
sequence identifier
来占位,如"[CLS] $A, $B [SEP]"
,此时type_id
默认为0
。 - 模板中也可以同时使用
type_id
和sequence
来占位,如"[CLS] $A:0 [SEP]"
。
- 模板中可以基于
special_tokens
:一个元组序列,指定每个模板字符串使用的special token
及其id
。或者是一个字典,键包括:
"id"
,指定special token id
;"ids"
,指定关联的ID
;"tokens"
:指定关联的token
。
方法:参考
BertProcessing
。以
BERT tokenizer
为例,它需要两个special token
:[CLS]
(用于第一个句子的开头)、[SEP]
(用于每个句子的结尾)。最终结果看起来如下所示:xxxxxxxxxx
"[CLS] Hello there [SEP]" # 单个输入序列 "[CLS] My name is Anthony [SEP] What is my name? [SEP]" # 一对输入序列其中这一对输入序列的
type-id
如下:xxxxxxxxxx
[CLS] ... [SEP] ... [SEP] 0 0 0 1 1此时可以应用
TemplateProcessing
为:xxxxxxxxxx
TemplateProcessing( single="[CLS] $0 [SEP]", pair="[CLS] $A [SEP] $B:1 [SEP]:1", special_tokens=[("[CLS]", 1), ("[SEP]", 0)], )注意:
[SEP]:1
表示最后一个[SEP]
的type_id = 1
。
3.6 Decoders
class tokenizers.decoders.BPEDecoder(suffix = '</w>')
:BPE
解码器。参数:
suffix
:一个字符串,用来表示单词结尾的后缀。在解码过程中,这个后缀将被替换为空格。方法:
decode(tokens)
:解码给定的token
列表,返回解码后的字符串。
class tokenizers.decoders.ByteLevel()
:ByteLevel
解码器,用于ByteLevel PreTokenizer
配合使用。方法:参考
BPEDecoder
。class tokenizers.decoders.CTC( pad_token = '<pad>', word_delimiter_token = '|', cleanup = True)
:CTC
解码器。参数:
pad_token
:一个字符串,由CTC
使用来分隔一个新的token
。word_delimiter_token
:一个字符串,表示单词的分隔符token
,它将被空格符替代。cleanup
:一个字符串,指定是否清理一些人工增加的token
,如标点符号之前的空格。
方法:参考
BPEDecoder
。class tokenizers.decoders.Metaspace(replacement='▁', add_prefix_space =True)
:Metaspace
解码器。参数:
replacement
:一个字符串,指定编码时的替换字符(必须为单个字符)。默认为'▁'
(U+2581
),被SentencePiece
所使用。add_prefix_space
:一个布尔值,指定编码时是否启用了add_prefix_space
。
方法:参考
BPEDecoder
。class tokenizers.decoders.WordPiece(prefix='##', cleanup=True)
:WordPiece
编码器。参数:
prefix
:一个字符串,指定编码时的prefix
。cleanup
:一个布尔值,指定是否清理一些人工增加的token
,如标点符号之前的空格。
方法:参考
BPEDecoder
。
3.7 Tokenizer
class tokenizers.Tokenizer(model)
:Tokenizer
,它处理原始文本输入并输出一个Encoding
对象。参数:
model
:一个Model
对象,代表Tokenizer
使用到的核心算法,如tokenizers.models.BPE
等等。
属性:
decoder
:一个Decoder
对象,代表Tokenizer
使用到的解码器,如tokenizers.decoders.BPEDecoder
。model
:一个Model
对象,代表Tokenizer
使用到的核心算法。normalizer
:一个Normalizer
对象,用于对输入进行标准化。padding
:一个字典,如果开启padding
,则它给出当前的padding
参数。该属性无法被
set
,可以用enable_padding()
来开启。post_processor
:一个PostProcessor
对象,用于后处理。pre_tokenizer
:一个PreTokenizer
对象,用于前处理。truncation
:一个字典,如果开启truncation
,则它给出当前的truncation
参数。该属性无法被
set
,可以用enable_truncation()
来开启。
方法:
add_special_tokens(tokens) -> int
:添加指定的special token
到Tokenizer
。参数:
tokens
:一个字符串列表或AddedToken
列表,指定被添加的special token
。这些special token
被添加到词表。返回值:词表中被新增的
token
数量。如果special token
已经位于词表中,那么它就不是新增的了。这些
special token
不会被model
处理(即,不会被拆分为多个token
),并且在解码期间从输出中被删除。add_tokens(tokens) -> int
:添加指定的token
到Tokenizer
。参数和返回值:参考
add_special_tokens
。这些
token
不会被model
处理(即,不会被拆分为多个token
)。decode( ids, skip_special_tokens = True) -> str
:解码得到字符串。参数:
ids
:一个整数序列,表示待解码的token id
。skip_special_tokens
:一个布尔值,指定是否从解码结果中移除special token
。
decode_batch( sequences, skip_special_tokens = True) -> List[str]
:解码一个batch
的字符串。参数:
sequences
:一个batch
的整数序列,表示待解码的token id
。skip_special_tokens
:参考decode
。
enable_padding(direction = 'right', pad_id = 0, pad_type_id = 0, pad_token = '[PAD]', length = None, pad_to_multiple_of = None)
:启用padding
功能。参数:
direction
:一个字符串,指定填充方式,可以是左填充'left'
或右填充'right'
。pad_id
:一个整数,指定pad token
的id
。pad_token
:一个字符串,指定pad token
字符串。length
:一个整数,指定填充后的字符串长度。如果为None
,则选择batch
中的最长序列的长度。pad_to_multiple_of
:一个整数,假设为 $ n $ ,那么填充后的长度与 $ 2^n $ 对齐。例如,length=250
,但是pad_to_multiple_of=8
,那么将填充到长度为256
。
enable_truncation( max_length, stride=0, strategy = 'longest_first', direction='right')
:启用truncation
功能。参数:
max_length
:一个整数,指定截断后的字符串长度。stride
:一个整数,指定在溢出序列中,需要包含前一个序列的长度。溢出序列指的是被截断后的尾部序列。如
abcdefg
,截断长度为4
,stride=2
,那么截断方式为:abcd, cdef, efg
。strategy
:一个字符串,指定截断的策略。可以为:"longest_first"
、"only_first "
、"only_second"
。其中
"only_first "
、"only_second"
用于句子对,仅对第一个句子或第二个句子进行截断。direction
:一个字符串,指定截断方向。可以为:"left"
、"right"
。
encode(sequence, pair = None, is_pretokenized = False, add_special_tokens = True) -> Encoding
:编码指定的句子或句子对,返回编码结果。参数:
sequence
:一个InputSequence
对象,指定输入的句子。如果is_pretokenized =True
,那么sequence
是PreTokenizedInputSequence
对象;否则是TextInputSequence
对象。pair
:一个InputSequence
对象,指定输入的句子pair
。如果is_pretokenized =True
,那么sequence
是PreTokenizedInputSequence
对象;否则是TextInputSequence
对象。is_pretokenized
:一个布尔值,指定输入是否已经被pre-tokenized
。add_special_tokens
:一个布尔值,指定是否添加special token
。
encode_batch(input, is_pretokenized = False, add_special_tokens = True) -> List[Encoding]
:编码一个batch
的句子或句子对,返回编码结果。参数:
input
:TextInputSequence
或者PreTokenizedInputSequence
的一个列表。参考encode()
。is_pretokenized/add_special_tokens
:参考encode()
。
from_buffer( buffer ) -> Tokenizer
:从buffer
中创建并返回一个Tokenizer
。参数:
buffer
:一个bytes
,包含了已经序列化好的Tokenizer
。from_file( path) -> Tokenizer
:从文件中创建并返回一个Tokenizer
。参数:
path
:一个本地JSON
文件,包含了已经序列化好的Tokenizer
。from_pretrained(identifier, revision = 'main', auth_token = None) -> Tokenizer
:从Hugging Face Hub
上的已有文件来创建并返回一个Tokenizer
。参数:
identifier
:一个字符串,用于指定Hugging Face Hub
上的一个模型,它包含一个tokenizer.json
文件。revision
:指定选择Hugging Face Hub
上的模型的哪个git branch
或者git commit id
。auth_token
:一个字符串,指定auth token
从而用于访问Hugging Face Hub
上的私有repository
。
from_str(json) -> Tokenizer
:从字符串中创建并返回一个Tokenizer
。参数:
json
:一个有效的JSON
字符串,表示已经序列化好的Tokenizer
。get_vocab( with_added_tokens = True) -> Dict[str, int]
:返回词表(token
及其id
)。参数:
with_added_tokens
:一个布尔值,指定是否包含added token
。
get_vocab_size( with_added_tokens = True) ->int
:返回词表的大小。参数:参考
get_vocab()
。id_to_token(id) -> str
:将id
转换回字符串。如果id
不在词表中,则返回None
。参数:
id
:一个整数,表示要转换的id
。no_padding()
:关闭padding
。no_truncation()
:关闭truncation
。num_special_tokens_to_add( is_pair)
:返回预期要添加到单个句子或者句子对中的special token
的数量。参数:
is_pair
:一个布尔值,表示要计算单个句子的还是句子对的special token
数量。post_process(encoding, pair = None, add_special_tokens = True ) -> Encoding
:final
后处理。参数:
encoding
:一个Encoding
对象,表示对单个句子的编码结果。pair
:一个Encoding
对象,表示对句子对的编码结果。add_special_tokens
:一个布尔值,指定是否添加special token
。
后处理步骤包括:
- 根据
truncation
参数执行截断(根据enable_truncation()
来开启)。 - 应用
PostProcessor
。 - 根据
padding
参数执行填充(根据enable_padding()
来开启)。
save(path, pretty=True)
:将Tokenizer
保存到指定路径的文件。参数:
path
:一个字符串,指定保存文件的路径。pretty
:一个布尔值,指定保存的JSON
文件是否需要被pretty formated
。
to_str(pretty = False) -> str
:返回一个字符串代表被序列化的Tokenizer
。token_to_id(token) -> int
:将给定的token
转换为对应的id
。如果token
不在词表中,则返回None
。参数:
token
:一个字符串,指定待转换的token
。train(files, trainer = None)
:利用给定的文件来训练Tokenizer
。参数:
files
:一个字符串列表,指定用于训练Tokenizer
的文件路径。trainer
:一个Trainer
对象,指定用于训练Model
的trainer
。
该方法从文件中一行一行地读取,保留所有的空格和换行符。
train_from_iterator(iterator, trainer=None, length=None)
:利用给定的迭代器来训练Tokenizer
。参数:
iterator
:一个Iterator
对象,对它迭代的结果返回字符串或者字符串列表。trainer
:一个Trainer
对象,指定用于训练Model
的trainer
。length
:一个整数,指定iterator
中的序列数量,这用于提供有意义的进度跟踪。
tokenizers.InputSequence
:代表所有类型的输入序列,作为Tokenizer
的输入。如果
is_pretokenized=False
,则为TextInputSequence
;如果is_pretokenized=True
,则为PreTokenizedInputSequence
。tokenizers.TextInputSequence
:一个字符串,代表一个输入序列。TextInputSequence
就是str
的别名。tokenizers.PreTokenizedInputSequence
:一个pre-tokenized
的输入序列,可以为一个字符串列表、或者一个字符串元组。PreTokenizedInputSequence
是Union[List[str], Tuple[str]]
的别名。
tokenizers.EncodeInput
:代表所有类型的、用于batch
编码的输入序列,作为Tokenizer
的batch
编码的输入。如果
is_pretokenized=False
,则为TextEncodeInput
;如果is_pretokenized=True
,则为PreTokenizedEncodeInput
。tokenizers.TextEncodeInput
:用于编码的文本输入,可以为TextInputSequence
的一个元组、或者长度为2
的列表。TextEncodeInput
是Union[str, Tuple[str, str], List[str]]
的别名。tokenizers.PreTokenizedEncodeInput
:pre-tokenized
的、用于编码的文本输入。可以为PreTokenizedInputSequence
的一个序列、或者一对序列(每个元素为PreTokenizedInputSequence
的元组或者长度为2
的列表)。PreTokenizedEncodeInput
是Union[List[str], Tuple[str], Tuple[Union[List[str], Tuple[str]], Union[List[str], Tuple[str]]], List[Union[List[str], Tuple[str]]]]
的别名。
class tokenizers.AddedToken(content, single_word=False, lstrip=False, rstrip=False, normalized=True)
:代表要被添加到Tokenizer
中的一个token
。参数:
content
:一个字符串,指定token
的内容。single_word
:一个布尔值,指定该token
是否仅匹配单个word
。例如,该值为True
时,"ing"
不会匹配单词"playing"
;改值为False
时,"ing"
可以匹配单词"playing"
。lstrip
:一个布尔值,指定是否移除该token
的所有左侧空格。rstrip
:一个布尔值,指定是否移除该token
的所有右侧空格。normalized
:一个布尔值,指定该token
是否匹配输入文本的normalized
版本。
class tokenizers.Encoding()
:Encoding
代表Tokenizer
的输出。属性:
attention_mask
:一个整数列表,给出attention mask
,表示哪些token
应该被attended
(1
对应的) 、哪些不应该被attended
(0
对应的)。ids
:一个整数列表,给出编码后的ID
列表。n_sequences
:一个整数,返回Encoding
中包含多少个句子。offsets
:元组(int, int)
的一个列表,指定每个token
的偏移量(相对于文本开头)。通过这个offsets
以及给定的文本,你可以获取对应的token
。overflowing
:overflowing Encoding
的一个列表。当使用截断时,Tokenizer
会根据需要将输出分成尽可能多的部分,从而匹配指定的max length
。这个字段允许你检索所有截断之后的、后续的片段。当你使用句子对时,
overflowing pieces
将包含足够多的变化,从而覆盖所有可能的组合,同时考虑到所提供的max length
。sequence_ids
:一个整数列表,表示序列的id
(一个序列就是一个句子)。每个id
代表一个句子并关联到该句子的每个token
。注意,如果
token
属于任何句子(如special token
),那么它的sequence_id
为None
。special_token_mask
:一个整数列表,指定哪些token
是special token
、哪些不是。tokens
:一个字符串列表,表示生成的token
序列。type_ids
:一个整数列表,表示生成的type ID
。常用于序列分类或问答任务,使得语言模型知道每个token
来自于哪个输入序列。它和
sequence_ids
相同的功能。word_ids
:一个整数列表,指定每个单词的位置编号(用于指示哪些token
是属于同一个单词)。它们表示每个token
关联的单词的位置。如果输入是
pre-tokenized
,那么它们对应于给定的input label
的ID
;否则它们对应于所使用的PreTokenizer
定义的单词索引。例如,如果
word_ids = [0,0,0,1]
,那么表明前三个token
都属于同一个单词,第四个token
属于另一个单词。words
:一个整数的列表,指定生成的单词的索引。将来被废弃,推荐使用word_ids
属性。
方法:
char_to_token(char_pos, sequence_index=0) -> int
:返回包含指定字符的token
是token
序列中的第几个token
。参数:
char_pos
:一个整数,指定目标字符在输入序列的哪个位置。sequence_index
:一个整数,指定目标字符位于哪个句子。
char_to_word(char_pos, sequence_index=0) -> int
:返回包含指定字符是该句子中的第几个单词。参数:参考
char_to_token()
。merge( encodings, growing_offsets = True ) -> Encoding
:合并encoding
列表到final Encoding
。参数:
encodings
:一个Encoding
列表,表示待合并的encoding
。growing_offsets
:一个布尔值,指定合并过程中,偏移量是否需要累加。
pad(length, direction = 'right', pad_id = 0, pad_type_id = 0, pad_token = '[PAD]' )
:将Encoding
填充到指定长度。参数:
length
:一个整数,指定要填充到的长度。direction
:一个字符串,指定填充方式,可以是左填充'left'
或右填充'right'
。pad_id
:一个整数,指定pad token
的id
。pad_type_id
:一个整数,指定pad token
对应的type ID
。pad_token
:一个字符串,指定pad token
字符串。
set_sequence_id(sequence_id)
:设定为当前Encoding
中的所有token
设置sequence_id
。参数:
sequence_id
:一个整数,指定sequence_id
。token_to_chars(token_index) -> Tuple[int, int]
:获取指定token
的偏移量。通过这个偏移量,我们可以从原始的输入序列中获取到该token
。参数:
token_index
:被编码的序列中的token
的索引。token_to_sequence(token_index) -> int
:获取指定token
的sequence id
。参数:
token_index
:被编码的序列中的token
的索引。对于单个句子的输入,返回结果通常是
0
;对于句子对的输入,如果token
位于第一个句子则返回0
;如果位于第二个句子则返回1
。token_to_word(token_index) -> int
:获取包含指定token
的单词是该句子中的第几个单词。参数:
token_index
:被编码的序列中的token
的索引。truncate(max_length, stride=0, direction='right')
:截断Encoding
到指定的长度。参数:
max_length
:一个整数,指定要截断到的长度。stride
:一个整数,指定每个overflowing
片段包含前一个片段的长度(以token
为基本单位)。direction
:一个字符串,指定截断方向。可以为'right'
或'left'
。
如果
Encoding
代表多个序列,那么截断之后,这个信息被丢失。结果被认为是单个序列。word_to_chars(word_index, sequence_index = 0) -> Tuple(int, int)
:返回指定的单词在原始句子中的区间。参数:
word_index
:一个整数,指定了目标单词的索引。sequence_index
:一个整数,指定目标单词位于哪个句子。
word_to_tokens(word_index, sequence_index = 0) -> Tuple(int, int)
:返回指定的单词在token
序列中的区间。参数:参考
word_to_chars
。
class tokenizers.tools.Annotation(start: int, end:int, label:str)
:一个Annotation
,用于可视化。参数:
start
:一个整数,指定位于字符串中的开始位置。end
:一个整数,指定位于字符串中的结束位置。label
:一个字符串,指定label
字符串。
class tokenizers.tools.EncodingVisualizer(tokenizer: Tokenizer, default_to_notebook: bool = True, annotation_converter:typing.Union[typing.Callable[[typing.Any], tokenizers.tools.visualizer.Annotation], NoneType] = None )
:构建一个EncodingVisualizer
。参数:
tokenizer
:一个Tokenizer
对象,表示tokenizer
实例。default_to_notebook
:一个布尔值,指定是否渲染html
输出从而适配notebook
。annotation_converter
:一个可调用对象,它通常是一个lambda
函数,接受一个任意类型的输入并返回一个Annotation
对象。
方法:
__call__(text: str, annotations: typing.List[tokenizers.tools.visualizer.Annotation] = [], default_to_notebook: typing.Optional[bool] = None )
:对给定的文本构建一个可视化。参数:
text
:一个字符串,指定需要被tokenize
的字符串。annotations
:text
对应的一个列表的注解。可以是一个Annotation
类,或者通过一个转换函数返回一个Annotation
。default_to_notebook
:一个布尔值,如果为True
则渲染html
字符串到notebook
;否则直接返回一个html
字符串。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论