基于快速有限状态机的NLP库的Python包装器。
项目描述
Bling Fire
简介
嗨,我们是在微软的Bling团队(超越语言理解),我们帮助Bing变得更聪明。在这里,我们想与大家分享我们的有限状态机(FIRE)和正则表达式操作库(FIRE)。我们在Bing内部使用Fire进行许多语言操作,例如分词、多词表达式匹配、未知词猜测、词干提取/词元化等。
Bling Fire分词器概述
Bling Fire分词器为自然语言文本分词提供了最先进的功能。Bling Fire支持以下分词算法
- 基于模式的分词
- WordPiece 分词
- SentencePiece 单词模型
- SentencePiece BPE
- 诱导/学习到的音节化模式(在标记内识别可能的连字符点)
Bling Fire为所有四种算法提供统一的接口,因此客户端使用tokenizer时对XLNET、BERT或自定义模型没有区别。
模型文件描述了它们所构建的算法,并且可以从外部文件按需加载。还有两个默认模型用于NLTK风格的分词和句子分割,不需要加载。默认分词模型遵循NLTK的逻辑,除了连字符单词被分割和修复了一些“错误”。
可以将归一化添加到每个模型中,但这不是必需的。
算法之间的差异总结如下:
Bling Fire Tokenizer 的高级API设计得非常简单,它不需要最小或没有配置、初始化或额外的文件,并且对Python、Ruby、Rust、C#、JavaScript(通过WASM)等语言的使用非常友好。
我们预编译了一些流行的模型,并在下面的源代码引用中列出。
文件名 | 应使用的模型 | 算法 | 源代码 |
---|---|---|---|
wbd.bin | 默认分词模型 | 基于模式 | src |
sbd.bin | 默认句子分割模型 | 基于模式 | src |
bert_base_tok.bin | BERT Base/Large | WordPiece | src |
bert_base_cased_tok.bin | BERT Base/Large Cased | WordPiece | src |
bert_chinese.bin | BERT Chinese | WordPiece | src |
bert_multi_cased.bin | BERT 多语言 Cased | WordPiece | src |
xlnet.bin | XLNET 分词模型 | 一元语言模型 | src |
xlnet_nonorm.bin | XLNET 分词模型 /无归一化 | 一元语言模型 | src |
bpe_example.bin | 用于测试BPE分词的模型 | BPE | src |
xlm_roberta_base.bin | XLM Roberta 分词 | 一元语言模型 | src |
laser(100k|250k|500k).bin | 在80+种语言的WikiMatrix语料库上进行平衡训练 | 一元语言模型 | src |
uri(100k|250k|500k).bin | 在来自网络的大量随机URL上训练的URL分词模型 | 一元语言模型 | src |
gpt2.bin | GPT-2的Byte-BPE分词模型 | byte BPE | src |
roberta.bin | Roberta模型的Byte-BPE分词模型 | byte BPE | src |
syllab.bin | 用于识别单词内部允许的连字符点的多语言模型。 | W2H | src |
是的,它也是最快的!我们对Bling Fire与Hugging Face的分词器进行了比较,Bling Fire比Hugging Face分词器快4-5倍,详见[Bling Fire与Hugging Face Tokenizers性能比较](https://github.com/Microsoft/BlingFire/wiki/Comparing-performance-of-Bling-Fire-and-Hugging-Face-Tokenizers),还可以参考[Bing博客文章](https://blogs.bing.com/Developers-Blog/march-2020/Bling-FIRE-Tokenizer-for-BERT)。我们对Bling Fire一元语言模型和BPE实现与SentencePiece库中的相同实现进行了比较,我们的实现快约2倍,详见XLNET基准测试和BPE基准测试。此外,我们的默认模型比SpaCy中相同功能的实现快10倍,详见基准测试指南和这篇Bing博客文章。
所以,如果您需要低延迟推理,那么您必须尝试Bling Fire!
Python API说明
如果您只想在Python中使用它,您可以使用pip安装最新版本。
pip install -U blingfire
示例
1. Python示例,使用默认的模式分词器
from blingfire import *
text = 'After reading this post, you will know: What "natural language" is and how it is different from other types of data. What makes working with natural language so challenging. [1]'
print(text_to_sentences(text))
print(text_to_words(text))
预期输出
After reading this post, you will know: What "natural language" is and how it is different from other types of data.
What makes working with natural language so challenging. [1]
After reading this post , you will know : What " natural language " is and how it is different from other types of data . What makes working with natural language so challenging . [ 1 ]
2. Python示例,加载自定义的模式分词器模型
from blingfire import *
# load a custom model from file
h = load_model("./wbd_chuni.bin")
text = 'This is the Bling-Fire tokenizer. 2007年9月日历表_2007年9月农历阳历一览表-万年历'
# custom model output
print(text_to_words_with_model(h, text))
# default model output
print(text_to_words(text))
free_model(h)
预期输出
This is the Bling - Fire tokenizer . 2007 年 9 月 日 历 表 _2007 年 9 月 农 历 阳 历 一 览 表 - 万 年 历
This is the Bling - Fire tokenizer . 2007年9月日历表_2007年9月农历阳历一览表 - 万年历
3. Python示例,调用BERT BASE分词器
在一个线程上,它比用Python编写的原始BERT分词器快14倍。由于这段代码是用C++编写的,因此可以从多个线程调用它而不会阻塞全局解释器锁,从而在批量模式下实现更高的速度提升。
import os
import blingfire
s = "Эpple pie. How do I renew my virtual smart card?: /Microsoft IT/ 'virtual' smart card certificates for DirectAccess are valid for one year. In order to get to microsoft.com we need to type pi@1.2.1.2."
# one time load the model (we are using the one that comes with the package)
h = blingfire.load_model(os.path.join(os.path.dirname(blingfire.__file__), "bert_base_tok.bin"))
print("Model Handle: %s" % h)
# use the model from one or more threads
print(s)
ids = blingfire.text_to_ids(h, s, 128, 100) # sequence length: 128, oov id: 100
print(ids) # returns a numpy array of length 128 (padded or trimmed)
# free the model at the end
blingfire.free_model(h)
print("Model Freed")
预期输出
Model Handle: 2854016629088
Эpple pie. How do I renew my virtual smart card?: /Microsoft IT/ 'virtual' smart card certificates for DirectAccess are valid for one year. In order to get to microsoft.com we need to type pi@1.2.1.2.
[ 1208 9397 2571 11345 1012 2129 2079 1045 20687 2026 7484 6047
4003 1029 1024 1013 7513 2009 1013 1005 7484 1005 6047 4003
17987 2005 3622 6305 9623 2015 2024 9398 2005 2028 2095 1012
1999 2344 2000 2131 2000 7513 1012 4012 2057 2342 2000 2828
14255 1030 1015 1012 1016 1012 1015 1012 1016 1012 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0]
Model Freed
支持的平台
支持Bling Fire在Windows、Linux和Mac上运行(感谢Andrew Kane!)
贡献
本项目欢迎贡献和建议。大多数贡献都需要您同意一份贡献者许可协议(CLA),声明您有权并且确实授予我们使用您的贡献的权利。有关详细信息,请访问https://cla.microsoft.com。
在您提交拉取请求时,CLA机器人会自动判断您是否需要提供CLA,并相应地装饰PR(例如,标签,注释)。只需遵循机器人提供的说明即可。您只需在整个使用我们CLA的所有仓库中这样做一次。
本项目已采用Microsoft开源代码行为准则。更多信息请参阅行为准则FAQ或通过opencode@microsoft.com联系以获取任何额外的问题或评论。
工作分支
要直接向代码库贡献,您应该创建一个个人分支,并在需要时在那里创建功能分支。这可以使主仓库保持清洁,并且您的个人工作流程保持隐蔽。
拉取请求
在我们能够接受您提交的拉取请求之前,您需要签署一份贡献者许可协议(CLA)。这是一个自动化的过程,您只需这样做一次。
但是,您不必预先这样做。您可以直接克隆、分支,并像往常一样提交您的拉取请求。当您的拉取请求创建后,它将被CLA机器人分类。如果更改是微不足道的(即您只是修复了一个拼写错误),则PR将被标记为cla-not-required
。否则,它将分类为cla-required
。在这种情况下,系统还会告诉您如何签署CLA。一旦您签署了CLA,当前和未来的所有拉取请求都将标记为cla-signed
。
为了使我们能够快速审查和接受您的拉取请求,请始终为每个问题创建一个拉取请求,并在可能的情况下在拉取请求中链接问题。除非它们有相同的原因,否则不要将多个请求合并为一个。此外,尽量保持代码更改尽可能小,并避免对未更改的代码进行纯格式更改。
反馈
- 在Stack Overflow上提问。
- 在GitHub Issues中提交bug。
报告安全问题
安全问题和bug应通过电子邮件私下报告给微软安全响应中心(MSRC),邮箱为secure@microsoft.com。您应在24小时内收到回复。如果由于某些原因您没有收到回复,请通过电子邮件跟进以确保我们已经收到了您的原始消息。更多信息,包括MSRC PGP密钥,可以在安全技术中心找到。
许可证
版权(c)微软公司。保留所有权利。
在MIT许可下发布。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码发行版
构建发行版
blingfire-0.1.8.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fac20b4c1bb6519a32716a8bf64f0fcb7b6ea7631ad1ffab29f14df85c5b4d6a |
|
MD5 | 73e3d282ef17343acd4ca71b16f44bfa |
|
BLAKE2b-256 | 0f55e5b9ac53281b89b7fb182c9858b78c6109e350797e93f5e4cbdb90dfbbe6 |
blingfire-0.1.8-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9534102bb81f69bc175e2373ef46d8eb0a2a43da052442c7708bfcef171899df |
|
MD5 | b4de0d08d3e0c65fac9c50bb1ab66b37 |
|
BLAKE2b-256 | 446ebbf134837ca86e416183e98c4ed2f4e35cb805296a940fb96e58faaa2123 |