9 releases
0.1.9 | Apr 17, 2024 |
---|---|
0.1.7 | Sep 12, 2022 |
0.1.5 | Aug 23, 2022 |
#156 in Machine learning
30 downloads per month
150KB
3.5K
SLoC
Language | version |
---|---|
Python | |
Rust |
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 |
快速使用
use std::fs::File;
use apache_avro::Codec;
use itertools::multizip;
use ltp::{CWSModel, POSModel, NERModel, ModelSerde, Format};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let file = File::open("data/legacy-models/cws_model.bin")?;
let cws: CWSModel = ModelSerde::load(file, Format::AVRO(Codec::Deflate))?;
let file = File::open("data/legacy-models/pos_model.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
- 分句
- 任务
- 中文分词(cws)
- 对数字、英文、网址、邮件的处理
- 支持自定义词典
- 词性标注(pos)
- 支持自定义词典
- 命名实体识别(ner)
- 中文分词(cws)
- 算法
- 平均感知机(ap)
- 单线程平均感知机
- 多线程平均感知机
- 被动攻击算法(pa)
- 平均感知机(ap)
- 模型量化
- 在线学习
- 增量学习
性能测试
评测环境
- Python 3.10
- MacBook Pro (16-inch, 2019)
- 处理器: 2.6 GHz 六核Intel Core i7
- 内存: 16 GB 2667 MHz DDR4
注: 速度测试文件大小为 33.85 MB / 305041 行 注: 速度测试为 Python 版本 LTP-Extension 的速度
分词
我们选择Jieba、Pkuseg、Thulac等国内代表分词软件与 LTP 做性能比较,根据第二届国际汉语分词测评发布的国际中文分词测评标准,对不同软件进行了速度和准确率测试。
在第二届国际汉语分词测评中,共有四家单位提供的测试语料(Academia Sinica、 City University 、Peking University(PKU) 、Microsoft Research(MSR)), 在评测提供的资源icwb2-data 中包含了来自这四家单位的训练集(icwb2-data/training)、测试集(icwb2-data/testing), 以及根据各自分词标准而提供的相应测试集的标准答案(icwb2-data/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) | 1603.63 | 95.2 | 87.7 |
LTP legacy(2) | 2869.42 | 同上 | 同上 |
LTP legacy(4) | 4949.38 | 同上 | 同上 |
LTP legacy(8) | 6803.88 | 同上 | 同上 |
LTP legacy(16) | 7745.16 | 同上 | 同上 |
注:括号内为线程数量
注2:Jieba的词表是在人民日报数据集上统计的
流水线
除了分词以外,我们也测试了 LTP 三个任务(分词、词性标注、命名实体识别)流水线的速度:
Algorithm | Speed(KB/s) |
---|---|
LTP 3(pyltp) | 153.10 |
LTP legacy(1) | 508.74 |
LTP legacy(2) | 899.25 |
LTP legacy(4) | 1598.03 |
LTP legacy(8) | 2267.48 |
LTP legacy(16) | 2452.34 |
注:括号内为线程数量
注2:速度数据在人民日报命名实体测试数据上获得,速度计算方式均为所有任务顺序执行的结果。
Dependencies
~1–3MB
~54K SLoC