关注计算效率的无监督文本标记器
youtokentome的Python项目详细描述
YouTokenTime
YouTokenTime是一个无监督的文本标记器,专注于计算效率。它目前实现了快速字节对编码(bpe)[sennrich等人。]。 在训练和标记化方面,我们的实现比两者都快得多。 以及sentencepiece。在某些测试用例中,它的速度要快90倍。 查看我们的基准测试结果。
主要优点:
- 用于训练和标记化的多线程
- 该算法具有
o(n)
复杂度,其中n
是训练数据的长度 - 在C++中高效实现
- python包装器和命令行界面
在原始文件的算法中,我们不考虑令牌 跨越文字界限。就像在sentencepiece中一样,所有空格符号都被元符号""(u+2581)替换。它允许将标记序列转换回文本并恢复单词边界。
例如,短语快速标记化!
可以标记为
['bl'、'az'、'ly'、'fast'、'token'、'ization'、'!'
安装
pip install youtokentome
python接口
示例
让我们从一个独立的示例开始。
importrandomimportyoutokentomeasyttmtrain_data_path="train_data.txt"model_path="example.model"# Generating random file with training data# 10000 lines with 100 characters in each linen_lines=10000n_characters=100withopen(train_data_path,"w")asfout:for_inrange(n_lines):print("".join([random.choice("abcd ")for_inrange(n_characters)]),file=fout)# Generating random texttest_text="".join([random.choice("abcde ")for_inrange(100)])# Training modelyttm.BPE.train(data=train_data_path,vocab_size=5000,model=model_path)# Loading modelbpe=yttm.BPE(model=model_path)# Two types of tokenizationprint(bpe.encode([test_text],output_type=yttm.OutputType.ID))print(bpe.encode([test_text],output_type=yttm.OutputType.SUBWORD))
< /P>
培训模式
youtokentome.BPE.train(data,model,vocab_size,coverage,n_threads=-1,pad_id=0,unk_id=1,bos_id=2,eos_id=3)
训练bpe模型并保存到文件。
参数:
数据
:字符串,包含训练数据的文件路径模型
:字符串,保存训练模型的路径词汇大小
:int,最终词汇表中的标记数覆盖率
:float,模型覆盖的字符数。必须在[0,1]范围内。一个好的使用值大约是0.9999。n_threads
:int,用于运行的并行线程数。如果- 等于-1,则将使用可用的最大线程数。
pad\u id
:int,保留填充id未知标识
:int,为未知符号保留标识bos_id
:int,为句子开头标记保留ideos_id
:int,为句尾标记保留id
使用加载的模型返回:classyoutokentime.bpe
。
< /P>
模型加载
youtokentome.BPE(model,n_threads=-1)
类构造函数。加载经过训练的模型。
模型
:字符串,训练模型的路径n_threads
:int,用于运行的并行线程数。 如果等于-1,则将使用可用的最大线程数。
< /P>
方法
类具有以下方法:
编码
encode(self,sentences,output_type=yttm.OutputType.ID,bos=False,eos=False,reverse=False)
参数:
句子
:字符串列表,用于标记的句子。output_type
:枚举,语句可以标记为id或子单词。使用outputtype.id
作为id,使用outputtype.subword
作为子单词。bos
:bool,如果为true,则将添加标记"句子开头"eos
:bool,如果为true,则将添加标记"结束句子"反转
:bool,如果为真,则令牌的输出序列将反转
返回:如果输出类型
等于youtokentime.output type.id
或youtokentime.outputtype.subword
然后返回整数列表或字符串列表
分别是。
< /P>
人声
vocab(self)
返回:一个字符串列表。中的第i个字符串E列表对应 到第i子单词。
< /P>
声音大小
vocab_size(self)
返回:字汇的整数大小。
< /P>
子字到id
subword_to_id(self,subword)
参数:
子单词
:字符串。
返回: 范围[0,vocab_size-1]中的整数。子字或的ID, 如果词汇表中没有这样的子词,则 返回。
< /P>
id到u子字
id_to_subword(self,id)
参数:
id
:int,必须在[0,vocab_size-1]范围内
返回:字符串。按ID从词汇表中提取的子单词。
< /P>
解码
pip install youtokentome
0
将每个id转换为子单词并用空格符号连接。
参数:
ids
:整数列表。所有整数必须在[0,vocab_size-1]范围内
返回:字符串列表。
命令行界面
示例
pip install youtokentome1
支持的命令
youtokentime
支持以下命令:
pip install youtokentome2
commandbpe
允许您基于文本文件训练字节对编码模型。
pip install youtokentome3
对句子语料库应用bpe编码。输入时使用stdin
,输出时使用stdout
。
默认情况下,编码使用n_threads
线程并行工作。
使用--stream
选项,--n_threads
将被忽略,所有语句将被逐个处理。
在读下一个句子之前,每个句子都将被标记并写入标准输出。
pip install youtokentome4
打印词汇。这有助于理解模型。
pip install youtokentome5
将ID转换回文本。输入时使用stdin
,输出时使用stdout
。
pip install youtokentome6