跳转到主要内容

基于C++的快速Unicode分词器,用于机器翻译

项目描述

FastTokenizer

FastTokenizer是一个旨在使用Unicode信息进行语言无关分词的tokenizer。

虽然最初的目的是设计一个用于机器翻译的tokenizer,但由于其能够处理广泛的语言和书写系统,因此该tokenizer足够通用,可以适应NLP领域的各种任务。

FastTokenizer的一些显著特性包括

  • 提供恰好适量的分词。
    • 分割设计为直观和基于规则。格式非常适合下游NLP模型,如子词模型、RNN或transformers。
    • 同时也设计得不太激进。这样可以将标记数量保持在较低水平,从而使模型运行更快。
  • 适用于任何语言/书写系统。
  • 跨编程语言。
  • 执行格式保留的Unicode标准化。
  • 性能与moses-tokenizer在WMT和GLUE等任务上相当或更好。
  • 分词可以反转。
    • 然而,应该使用自定义解分割器来达到所需的格式,因为解分割非常依赖具体用例。

与其他Web分词器的比较

Source:          他的表现遭到《天空体育》评论员内维尔的批评。
Segmenter:       ['他的表现遭到', '《', '天空体育', '》', '评论员内维尔的批评', '。']
Moses:           ['他的表现遭到《天空体育》评论员内维尔的批评。']
Spacy Tokenizer: ['他的表现遭到《天空体育》评论员内维尔的批评。']
Tweet Tokenizer: ['他的表现遭到', '《', '天空体育', '》', '评论员内维尔的批评', '。']
NLTK Tokenizer:  ['他的表现遭到《天空体育》评论员内维尔的批评。'

Source:          AirPods耳機套
Segmenter:       ['AirPods', '耳機套']
Moses:           ['AirPods耳機套']
Spacy Tokenizer: ['AirPods耳機套']
Tweet Tokenizer: ['AirPods耳機套']
NLTK Tokenizer:  ['AirPods耳機套']

Source:          A typical master's programme has a duration of 1-1.5 years.
Segmenter:       ['A', 'typical', "master's", 'programme', 'has', 'a', 'duration', 'of', '1', '@-@', '1.5', 'years', '.']
Moses:           ['A', 'typical', 'master', "'s", 'programme', 'has', 'a', 'duration', 'of', '1', '@-@', '1.5', 'years', '.']
Spacy Tokenizer: ['A', 'typical', "master's", 'programme', 'has', 'a', 'duration', 'of', '1-1.5', 'years.']
Tweet Tokenizer: ['A', 'typical', "master's", 'programme', 'has', 'a', 'duration', 'of', '1-1', '.', '5', 'years', '.']
NLTK Tokenizer:  ['A', 'typical', 'master', "'s", 'programme', 'has', 'a', 'duration', 'of', '1-1.5', 'years', '.']

安装

C++

即将推出。

Python

pip install fasttokenizer

用法

C++

#include <fasttokenizer/segmenter.h>

Segmenter segmenter = Segmenter(args.protected_dash_split);

std::string text = "Hello World!";
std::string output;

// Normalize
output = segmenter.normalize(text)

// Segment
output = segmenter.segment(text)

// Normalize and segment in one function
// Reduce string to icu::UnicodeString overhead
output = segmenter.normalize_and_segment(text);

// Desegment
output = segmenter.desegment(text);

Python

import fasttokenizer

segmenter = fasttokenizer.Segmenter()

text = "Hello World!"

# Normalize
output: str = segmenter.normalize(text)

# Segment
output: str = segmenter.segment()

# Normalize and segment
output: str = segmenter.normalize_and_segment(text)

# Output of segment is str.
# To get tokens, you can split by whitespace.
tokens = output.split()

# Desegment
output: str = segmenter.desegment(text)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分布

本版本没有可用的源分布文件。请参阅有关生成分布存档的教程。

构建分布

fasttokenizer-0.0.2-cp38-cp38-manylinux1_x86_64.whl (11.9 MB 查看哈希值)

上传于 CPython 3.8

fasttokenizer-0.0.2-cp38-cp38-macosx_10_15_x86_64.whl (11.9 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.15+ x86-64

fasttokenizer-0.0.2-cp37-cp37m-manylinux1_x86_64.whl (11.9 MB 查看哈希值)

上传于 CPython 3.7m

fasttokenizer-0.0.2-cp37-cp37m-macosx_10_15_x86_64.whl (11.9 MB 查看哈希值)

上传于 CPython 3.7m macOS 10.15+ x86-64

fasttokenizer-0.0.2-cp36-cp36m-manylinux1_x86_64.whl (11.9 MB 查看哈希值)

上传于 CPython 3.6m

fasttokenizer-0.0.2-cp36-cp36m-macosx_10_15_x86_64.whl (11.9 MB 查看哈希值)

上传于 CPython 3.6m macOS 10.15+ x86-64

由以下支持