关注计算效率的无监督文本标记器

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,为句子开头标记保留id
  • eos_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.idyoutokentime.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 youtokentome
1

支持的命令

youtokentime支持以下命令:

pip install youtokentome
2

commandbpe允许您基于文本文件训练字节对编码模型。

pip install youtokentome
3

对句子语料库应用bpe编码。输入时使用stdin,输出时使用stdout

默认情况下,编码使用n_threads线程并行工作。

使用--stream选项,--n_threads将被忽略,所有语句将被逐个处理。 在读下一个句子之前,每个句子都将被标记并写入标准输出。

pip install youtokentome
4

打印词汇。这有助于理解模型。

pip install youtokentome
5

将ID转换回文本。输入时使用stdin,输出时使用stdout

pip install youtokentome
6

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java WebClient请求级别超时抛出名为default onErrorDropped的运算符   java JAXB外部绑定文件错误   Freemarker中的java转义宏参数值   java正在同步来自不同对象{已编辑}的线程   java如何在另一个类上更新活动中的元素   java Hibernate连接查询   java可以使用Apache Crunch创建类似于图形的数据结构吗?   java在JLabel的开头加上3个点   java 安卓应用程序显示线程错误   java@RequestBody在Spring中总是空的   java Android异步任务永远不会结束   具有多个属性的java Jaxws枚举   java中的安卓 Stripe InvalidRequestException   多线程java。util。非多线程程序中的ConcurrentModificationException   Minecraft Java插件如何删除HashMap中存储的所有块   空Java字符串的大小   从AJP连接器请求检索Shibboleth属性的java   oracle11g将Java类文件加载到Oracle数据库