Package: blingfire
Bling FireIntroductionHi, we are a team at Microsoft called Bling (Beyond Language Understanding), we help Bing be smarter. Here we wanted to share with all of you ourFInite State machine andREgular expression manipulation library (FIRE). We use Fire for many linguistic operations inside Bing such as Tokenization, Multi-word expression matching, Unknown word-guessing, Stemming / Lemmatization just to mention a few.Bling Fire Tokenizer OverviewBling Fire Tokenizer provides state of the art performance for Natural Language text tokenization. Bling Fire supports the following tokenization algorithms:Pattern-based tokenizationWordPiecetokenizationSentencePieceUnigram LMSentencePieceBPEInduced/learned syllabification patterns (identifies possible hyphenation points within a token)Bling Fire provides uniform interface for working with all four algorithms so there is no difference for the client whether to use tokenizer for XLNET, BERT or your own custom model.Model files describe the algorithms they are built for and are loaded on demand from external file. There are also two default models for NLTK-style tokenization and sentence breaking, which does not need to be loaded. The default tokenization model follows logic of NLTK, except hyphenated words are split and a few "errors" are fixed.Normalization can be added to each model, but is optional.Diffrences between algorithms aresummarized here.Bling Fire Tokenizer high level API designed in a way that it requires minimal or no configuration, or initialization, or additional files and is friendly for use from languages like Python, Ruby, Rust, C#, JavaScript (via WASM), etc.We have precompiled some popular models and listed with the source code reference below:File NameModels it should be used forAlgorithmSource Codewbd.binDefault Tokenization ModelPattern-basedsrcsbd.binDefault model for Sentence breakingPattern-basedsrcbert_base_tok.binBERT Base/LargeWordPiecesrcbert_base_cased_tok.binBERT Base/Large CasedWordPiecesrcbert_chinese.binBERT ChineseWordPiecesrcbert_multi_cased.binBERT Multi Lingual CasedWordPiecesrcxlnet.binXLNET Tokenization ModelUnigram LMsrcxlnet_nonorm.binXLNET Tokenization Model /wo normalizationUnigram LMsrcbpe_example.binA model to test BPE tokenizationBPEsrcxlm_roberta_base.binXLM Roberta TokenizationUnigram LMsrclaser(100k|250k|500k).binTrained on balanced by language WikiMatrix corpus of 80+ languagesUnigram LMsrcuri(100k|250k|500k).binURL tokenization model trained on a large set of random URLs from the webUnigram LMsrcgpt2.binByte-BPE tokenization model for GPT-2byte BPEsrcroberta.binByte-BPE tokenization model for Roberta modelbyte BPEsrcsyllab.binMulti lingual model to identify allowed hyphenation points inside a word.W2HsrcOh yes, it is also the fastest! We did a comparison of Bling Fire with tokenizers from Hugging Face,Bling Fire runs 4-5 times faster than Hugging Face Tokenizers, see alsoBing Blog Post. We did comparison of Bling Fire Unigram LM and BPE implementaion to the same one inSentencePiecelibrary and our implementation is ~2x faster, seeXLNET benchmarkandBPE benchmark. Not to mention our default models are 10x faster than the same functionality fromSpaCy, seebenchmark wikiand thisBing Blog Post.So if low latency inference is what you need then you have to try Bling Fire!Python API DescriptionIf you simply want to use it in Python, you can install the latest release usingpip:pip install -U blingfireExamples1. Python example, using default pattern-based tokenizer:fromblingfireimport*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))Expected output: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 example, load a custom model for a pattern-based tokenizer:fromblingfireimport*# load a custom model from fileh=load_model("./wbd_chuni.bin")text='This is the Bling-Fire tokenizer. 2007年9月日历表_2007年9月农历阳历一览表-万年历'# custom model outputprint(text_to_words_with_model(h,text))# default model outputprint(text_to_words(text))free_model(h)Expected output:This is the Bling - Fire tokenizer . 2007 年 9 月 日 历 表 _2007 年 9 月 农 历 阳 历 一 览 表 - 万 年 历
This is the Bling - Fire tokenizer . 2007年9月日历表_2007年9月农历阳历一览表 - 万年历3. Python example, calling BERT BASE tokenizerOn one thread, it works 14x faster than orignal BERT tokenizer written in Python. Given this code is written in C++ it can be called from multiple threads without blocking on global interpreter lock thus achieving higher speed-ups for batch mode.importosimportblingfires="Э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 threadsprint(s)ids=blingfire.text_to_ids(h,s,128,100)# sequence length: 128, oov id: 100print(ids)# returns a numpy array of length 128 (padded or trimmed)# free the model at the endblingfire.free_model(h)print("Model Freed")Expected output: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 FreedSupported PlatformsBling Fire is supported for Windows, Linux and Mac (Thanks to Andrew Kane!)ContributingThis project welcomes contributions and suggestions.  Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visithttps://cla.microsoft.com.When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.This project has adopted theMicrosoft Open Source Code of Conduct.
For more information see theCode of Conduct FAQor
contactopencode@microsoft.comwith any additional questions or comments.Working BranchTo contribute directly to code base, you should create a personal fork and create feature branches there when you need them. This keeps the main repository clean and your personal workflow out of sight.Pull RequestBefore we can accept a pull request from you, you'll need to sign aContributor License Agreement (CLA). It is an automated process and you only need to do it once.However, you don't have to do this up-front. You can simply clone, fork, and submit your pull-request as usual. When your pull-request is created, it is classified by a CLA bot. If the change is trivial (i.e. you just fixed a typo) then the PR is labelled withcla-not-required. Otherwise, it's classified ascla-required. In that case, the system will also tell you how you can sign the CLA. Once you have signed a CLA, the current and all future pull-requests will be labelled ascla-signed.To enable us to quickly review and accept your pull requests, always create one pull request per issue andlink the issue in the pull requestif possible. Never merge multiple requests in one unless they have the same root cause. Besides, keep code changes as small as possible and avoid pure formatting changes to code that has not been modified otherwise.FeedbackAsk a question onStack Overflow.File a bug inGitHub Issues.Reporting Security IssuesSecurity issues and bugs should be reported privately, via email, to the Microsoft Security
Response Center (MSRC) atsecure@microsoft.com. You should
receive a response within 24 hours. If for some reason you do not, please follow up via
email to ensure we received your original message. Further information, including theMSRC PGPkey, can be found in
theSecurity TechCenter.LicenseCopyright (c) Microsoft Corporation. All rights reserved.Licensed under theMITLicense.