CODE SIZE CONTRIBUTORS LAST COMMIT

| Language | version | | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Python | LTP LTP-Core LTP-Extension | | Rust | LTP |

LTP For Rust

传统机器学习方法(LTP 3)实现的 CWS / POS / NER 算法。

| method | ltp 3.0(c++) | ap(1) | ap(8) | pa | pa-i(0.5) | pa-ii(0.5) | | ------ | ------------ | --------- | ----- | ----- | --------- | ---------- | | cws | 97.83 | 97.93 | 97.67 | 97.90 | 97.90 | 97.93 | | pos | 98.35 | 98.41 | 98.30 | 98.39 | 98.39 | 98.38 | | ner | 94.17 | 94.28 | 93.42 | 94.02 | 94.06 | 93.95 |

快速使用

```rust use std::fs::File; use apache_avro::Codec; use itertools::multizip; use ltp::{CWSModel, POSModel, NERModel, ModelSerde, Format};

fn main() -> Result<(), Box> { let file = File::open("data/legacy-models/cwsmodel.bin")?; let cws: CWSModel = ModelSerde::load(file, Format::AVRO(Codec::Deflate))?; let file = File::open("data/legacy-models/posmodel.bin")?; let pos: POSModel = ModelSerde::load(file, Format::AVRO(Codec::Deflate))?; let file = File::open("data/legacy-models/ner_model.bin")?; let ner: NERModel = ModelSerde::load(file, Format::AVRO(Codec::Deflate))?;

let words = cws.predict("他叫汤姆去拿外衣。");
let pos = pos.predict(&words);
let ner = ner.predict((&words, &pos));

for (w, p, n) in multizip((words, pos, ner)) {
    println!("{}/{}/{}", w, p, n);
}

Ok(())

} ```

features

性能测试

分词

我们选择结巴分词、Pkuseg、Thulac等国内代表分词软件与 LTP 做性能比较。我们选择 MACOS 作为测试环境,根据第二届国际汉语分词测评发布的国际中文分词测评标准,对不同软件进行了速度和准确率测试。

在第二届国际汉语分词测评中,共有四家单位提供的测试语料(Academia Sinica、 City University 、Peking University 、Microsoft Research), 在评测提供的资源icwb2-data 中包含了来自这四家单位的训练集(training)、测试集(testing), 以及根据各自分词标准而提供的相应测试集的标准答案(icwb2-data/scripts/gold).在icwb2-data/scripts目录下含有对分词进行自动评分的perl脚本score。

我们在统一测试环境下,对若干流行分词软件和 LTP 进行了测试,使用的模型为各分词软件自带模型。在PKU和MSR测试集评测结果如下:

| Algorithm | Speed(KB/s) | PKU(F1) | MSR(F1) | | --------------------------------------------------------------------------- | ----------: | -------: | -------: | | Jieba | 982.49 | 81.8 | 81.3 | | Pkuseg | 109.72 | 93.4 | 87.3 | | Thulac | 48.13 | 94.0 | 87.9 | | Thulac[Fast] | 1133.21 | 同上 | 同上 | | LTP 3(pyltp) | 451.20 | 95.3 | 88.3 | | LTP legacy(1) | 1155.11 | 95.2 | 87.7 | | LTP legacy(2) | 2192.58 | 同上 | 同上 | | LTP legacy(4) | 3771.35 | 同上 | 同上 | | LTP legacy(8) | 5763.14 | 同上 | 同上 | | LTP legacy(16) | 7113.26 | 同上 | 同上 |

注:括号内为线程数量 注2:结巴分词的词表是在人民日报数据集上统计的

流水线

除了分词以外,我们也测试了 LTP 三个任务(分词、词性标注、命名实体识别)流水线的速度:

| Algorithm | Time(s) | Speed(KB/s) | | -------------- | ------: | ----------: | | LTP 3 | 226.40 | 153.10 | | LTP legacy(1) | 90.66 | 382.33 | | LTP legacy(2) | 49.43 | 701.23 | | LTP legacy(4) | 27.98 | 1238.76 | | LTP legacy(8) | 20.11 | 1723.72 | | LTP legacy(16) | 16.99 | 2040.26 |

注:括号内为线程数量