Language Technology Platform
Project description
Language | version |
---|---|
Python | |
Rust |
LTP 4
LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。
引用
如果您在工作中使用了 LTP,您可以引用这篇论文
@article{che2020n,
title={N-LTP: A Open-source Neural Chinese Language Technology Platform with Pretrained Models},
author={Che, Wanxiang and Feng, Yunlong and Qin, Libo and Liu, Ting},
journal={arXiv preprint arXiv:2009.11616},
year={2020}
}
参考书: 由哈工大社会计算与信息检索研究中心(HIT-SCIR)的多位学者共同编著的《自然语言处理:基于预训练模型的方法 》(作者:车万翔、郭江、崔一鸣;主审:刘挺)一书现已正式出版,该书重点介绍了新的基于预训练模型的自然语言处理技术,包括基础知识、预训练词向量和预训练模型三大部分,可供广大LTP用户学习参考。
更新说明
- 4.2.0
- [新特性] 模型上传至 Huggingface Hub,支持自动下载
- [破坏性变更] 改用 Pipeline API 进行推理,方便后续进行更深入的性能优化,可参见快速使用部分
- [结构性变化] 将 LTP 拆分成 2 个部分
- [深度学习模型] 即基于 Pytorch 实现的深度学习模型,支持全部的6大任务( 分词/词性/命名实体/语义角色/依存句法/语义依存)
- [Legacy 模型] 针对大部分用户对于推理速度的需求,使用 Rust 重写了基于感知机的算法,性能与 LTP3 版本相当,但仅支持分词、词性、命名实体识别三大任务(需要注意的是命名实体识别依赖于词性标注的结果)
- [其他变化] 部分解码算法使用 Rust 实现,速度更快
- 4.1.0
- 提供了自定义分词等功能
- 修复了一些bug
- 4.0.0
- 基于Pytorch 开发,原生 Python 接口
- 可根据需要自由选择不同速度和指标的模型
- 分词、词性、命名实体、依存句法、语义角色、语义依存6大任务
快速使用
Python
pip install ltp # 安装 ltp
from ltp import LTP
ltp = LTP("LTP/small") # 默认加载 Small 模型
output = ltp.pipeline(["他叫汤姆去拿外衣。"], tasks=["cws", "pos", "ner", "srl", "dep", "sdp"])
# 使用字典格式作为返回结果
print(output.cws) # print(output[0]) / print(output['cws']) # 也可以使用下标访问
print(output.pos)
print(output.sdp)
# 使用感知机算法实现的分词、词性和命名实体识别,速度比较快,但是精度略低
ltp = LTP("LTP/legacy")
# cws, pos, ner = ltp.pipeline(["他叫汤姆去拿外衣。"], tasks=["cws", "ner"]).to_tuple() # error: NER 需要 词性标注任务的结果
cws, pos, ner = ltp.pipeline(["他叫汤姆去拿外衣。"], tasks=["cws", "pos", "ner"]).to_tuple() # to tuple 可以自动转换为元组格式
# 使用元组格式作为返回结果
print(cws, pos, ner)
Rust
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(())
}
模型性能以及下载地址
深度学习模型 | 分词 | 词性 | 命名实体 | 语义角色 | 依存句法 | 语义依存 | 速度(句/S) |
---|---|---|---|---|---|---|---|
Base | 98.7 | 98.5 | 95.4 | 80.6 | 89.5 | 75.2 | 39.12 |
Base1 | 99.22 | 98.73 | 96.39 | 79.28 | 89.57 | 76.57 | --.-- |
Base2 | 99.18 | 98.69 | 95.97 | 79.49 | 90.19 | 76.62 | --.-- |
Small | 98.4 | 98.2 | 94.3 | 78.4 | 88.3 | 74.7 | 43.13 |
Tiny | 96.8 | 97.1 | 91.6 | 70.9 | 83.8 | 70.1 | 53.22 |
感知机算法 | 分词 | 词性 | 命名实体 | 速度(句/s) | 备注 |
---|---|---|---|---|---|
Legacy | 97.93 | 98.41 | 94.28 | 11607.35 | 性能详情 |
构建 Wheel 包
make bdist
模型算法
- 分词: Electra 1 + Linear
- 词性: Electra + Linear
- 命名实体: Electra + Relative Transformer2 + Linear
- 依存句法: Electra + BiAffine + Eisner3
- 语义依存: Electra + BiAffine
- 语义角色: Electra + BiAffine + CRF
其他语言绑定
感知机算法
深度学习算法
作者信息
- 冯云龙 <<ylfeng@ir.hit.edu.cn>>
开源协议
- 语言技术平台面向国内外大学、中科院各研究所以及个人研究者免费开放源代码,但如上述机构和个人将该平台用于商业目的(如企业合作项目等)则需要付费。
- 除上述机构以外的企事业单位,如申请使用该平台,需付费。
- 凡涉及付费问题,请发邮件到 car@ir.hit.edu.cn 洽商。
- 如果您在 LTP 基础上发表论文或取得科研成果,请您在发表论文和申报成果时声明“使用了哈工大社会计算与信息检索研究中心研制的语言技术平台(LTP)”. 同时,发信给car@ir.hit.edu.cn,说明发表论文或申报成果的题目、出处等。
脚注
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
ltp-4.2.3-py3-none-any.whl
(19.0 kB
view hashes)