当前位置: 首页 > news >正文

HanLP 2.x 的安装与使用

HanLP 的 1.x 和 2.x 及安装

HanLP 有两个版本,1.x 和 2.x

HanLP 1.x

1.x 是基于 java 的,底层是传统的 NLP 方法,提供 python 接口,可以通过 pyhanlp 来调用 HanLP。2014年发布,至今依然在维护。

HanLP 1.x 的安装

从本质上来说,HanLP 1.x 是个 java 包,所以需要(1)先安装 java;(2)将java 添加到环境变量;(3)安装 python 的 pyhanlp 包;(4)在 python 中通过 pyhanlp 来调用 HanLP

# HanLP 1.x python 版的安装语句:pip install pyhanlp

具体安装教程,参考blog.csdn.net/Sun_Weiss/article/details/106956111?spm=1001.2014.3001.5501

底层的 NLP 原理,可以阅读 HanLP 作者何晗的书《自然语言处理入门》

参考:

Hanlp、pyhanlp 的区别是什么? - 综合讨论 - HanLP中文社区

HanLP 2.x

2.x 是基于 python 的,底层是机器学习方法,直接在 python 中安装和调用 hanlp 即可。2020年发布,和 1.x 完全是两个包了。

HanLP 2.x 的安装

官方建议安装在线 API 版,体积小,易使用,官方教程也比较完善。但是还得申请 API 密钥,且有调用额度限制,也挺麻烦。

安装 | 在线演示

所以还是打算安装本地版

由于 HanLP 2.x 底层是机器学习方法,所以要依赖 Tensorflow 和 PyTorch 包。但最坑的地方在于,HanLP 2.x 对于 Tensorflow 和 PyTorch 的版本有严格的要求,如果自行安装了 Tensorflow 和 PyTorch ,很可能会和 HanLP 2.x 有兼容性冲突,导致各种报错。

所以本地版的安装建议是:

(1)如果可能,最好给 HanLP 2.x 一个独立的 Python 环境,和你的机器学习环境隔离开来

(2)如果做不到,最好先卸载自己已经安装的 Tensorflow ,在安装 HanLP 2.x 的时候,它会自己安装版本合适的 Tensorflow

# 卸载  Tensorflowpip uninstall tensorflow

(3)安装 HanLP 2.x 本地版时,务必安装完整版——精简版会各种报错,很难解决。

# HanLP 2.x 本地完整版的安装语句:pip install hanlp[full]

HanLP 2.x 的使用

安装完之后,可以开始使用 hanlp 了

HanLP 2.x 支持十几种不同的自然语言处理任务,具体的可以参考官方文档:hankcs/HanLP: 中文分词 词性标注 命名实体识别 依存句法分析 成分句法分析 语义依存分析 语义角色标注 指代消解 风格转换 语义相似度 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁转换 自然语言处理

功能

RESTful

多任务

单任务

模型

标注标准

分词

教程

教程

教程

tok

粗分、细分

词性标注

教程

教程

教程

pos

CTB、PKU、863

命名实体识别

教程

教程

教程

ner

PKU、MSRA、OntoNotes

依存句法分析

教程

教程

教程

dep

SD、UD、PMT

成分句法分析

教程

教程

教程

con

Chinese Tree Bank

语义依存分析

教程

教程

教程

sdp

CSDP

语义角色标注

教程

教程

教程

srl

Chinese Proposition Bank

抽象意义表示

教程

暂无

教程

amr

CAMR

指代消解

教程

暂无

暂无

暂无

OntoNotes

语义文本相似度

教程

暂无

教程

sts

暂无

文本风格转换

教程

暂无

暂无

暂无

暂无

关键词短语提取

教程

暂无

暂无

暂无

暂无

抽取式自动摘要

教程

暂无

暂无

暂无

暂无

生成式自动摘要

教程

暂无

暂无

暂无

暂无

文本语法纠错

教程

暂无

暂无

暂无

暂无

文本分类

教程

暂无

暂无

暂无

暂无

情感分析

教程

暂无

暂无

暂无

[-1,+1]

语种检测

教程

暂无

教程

暂无

ISO 639-1编码

这里只讨论一些最常用的任务。

在 HanLP 2.x 中,基本是使用缩写来指代相应的任务模块,如 tok 是分词,ner 是命名实体识别。

任务

英文

缩写

说明

分词

Tokenization

tok

将一段文本分割成较小的单位,通常是词语或子词

词性标注

Part-of-Speech Tagging

pos

为文本中每个词语分配一个对应的词性标签(如名词、动词、形容词等)

命名实体识别

Named Entity Recognition

ner

从文本中识别出具有特定意义的实体(如人名、地名、机构名、日期、时间等)

依存句法分析

Dependency Parsing

dep

分析句子中词与词之间的依存关系

前面提到,HanLP 2.x 的底层是机器学习方法,基本每一种具体的方法,都有对应的训练数据集和机器学习模型。

同样的一句话,同样的任务,基于不同的训练集和模型,得到的结果很可能是不一样的。

而每个训练集和模型,都有不同的特点,适用于不同的任务,可以根据自己的需要选择。

预训练好的模型,都在 hanlp.pretrained 这个包中,按照NLP任务(tok, pos, ner 等)归类。

以一个分词任务为例:

# 导入 hanlp
import hanlp
# 查看所有预训练好的 XX 模型有哪些
# hanlp.pretrained.NPL任务缩写.ALL
print(hanlp.pretrained.tok.ALL)
# 加载模型,第一次加载时,模型需要下载,不同模型的体积不一样;之后再调用就不需要下载了
# 模型实例化变量名 = hanlp.load(hanlp.pretrained.NLP任务缩写.模型名称)
tok = hanlp.load(hanlp.pretrained.tok.COARSE_ELECTRA_SMALL_ZH)
# 也可以直接加载模型
# 模型实例化变量名 = hanlp.load('模型名称')
tok = hanlp.load('COARSE_ELECTRA_SMALL_ZH')
# 文本
text_list = ['2021年HanLPv2.1为生产环境带来次世代最先进的多语种NLP技术。']
# 使用分词模型进行分词
tok_result = tok(text_list)
print(tok_result)

输出的结果:

Output:
[['2021年', 'HanLPv2.1', '为', '生产', '环境', '带来', '次世代', '最', '先进', '的', '多', '语种', 'NLP', '技术', '。']]

注意:

由于 HanLP 2.x 提供的模型中,BERT、ELECTRA、ALBERT 等大型模型,都依赖于 PyTorch 和 GPU,所以如果你的电脑上没有 NVIDIA 显卡,或者有显卡,但是显卡驱动,cuda,cudnn,TensorFlow版本有问题,导致GPU没有被调用(Hanlp 需要配置启用 GPU 吗? - HanLP - Butterfly Effect),都会报错,报错信息通常显示为:

AttributeError: module 'keras._tf_keras.keras.layers' has no attribute 'AbstractRNNCell'

这种情况下,只有 SMALL 模型和部分BASE模型能加载调用成功。

有显卡,要安装 PyTorch 和 cuda 可参考:hanlp安装指南_hanlp 安装教程-CSDN博客

接下来具体讲一下每一种任务在 HanLP 中怎么实现

分词任务

HanLP 2.x 提供了两种粒度的分词:

分词粒度

依赖的训练集

适用场景

coarse

The Segmentation Guidelines for the Penn Chinese Treebank (3.0) — HanLP Documentation

粗粒度分词,通常用于词语切分

fine

微软《中文文本标注规范(5.0 版)》

MSR中文文本标注规范 (5.0 版) — HanLP Documentation

细粒度分词,可能会处理子词级别的分词

代码示例:

# 导入 hanlp
import hanlp
# 查看所有预训练好的分词模型有哪些
print(hanlp.pretrained.tok.ALL)
# 加载对应的分词模型
# tok = hanlp.load(hanlp.pretrained.tok.分词模型的名字)
tok = hanlp.load(hanlp.pretrained.tok.FINE_ELECTRA_SMALL_ZH)
# 输入为句子的列表
text_list = ['2021年HanLPv2.1为生产环境带来次世代最先进的多语种NLP技术。']
# 使用分词模型进行分词
tok_result = tok(text_list)
print(tok_result)

输出结果:

Output:
[['2021年', 'HanLPv2.1', '为', '生产', '环境', '带来', '次', '世代', '最', '先进', '的', '多', '语种', 'NLP', '技术', '。']]

分词任务的模型:

模型

模型包链接

模型包体积

LARGE_ALBERT_BASE

https://file.hankcs.com/hanlp/tok/large_corpus_cws_albert_base_20211228_160926.zip

COARSE_ELECTRA_SMALL_ZH

https://file.hankcs.com/hanlp/tok/coarse_electra_small_20220616_012050.zip

43.5M

FINE_ELECTRA_SMALL_ZH

https://file.hankcs.com/hanlp/tok/fine_electra_small_20220615_231803.zip

43.5M

SIGHAN2005_MSR_CONVSEG

https://file.hankcs.com/hanlp/tok/convseg-msr-nocrf-noembed_20200110_153524.zip

MSR_TOK_ELECTRA_BASE_CRF

http://download.hanlp.com/tok/extra/msra_crf_electra_base_20220507_113936.zip

SIGHAN2005_PKU_CONVSEG

https://file.hankcs.com/hanlp/tok/sighan2005-pku-convseg_20200110_153722.zip

PKU_NAME_MERGED_SIX_MONTHS_CONVSEG

https://file.hankcs.com/hanlp/tok/pku98_6m_conv_ngram_20200110_134736.zip

SIGHAN2005_PKU_BERT_BASE_ZH

https://file.hankcs.com/hanlp/tok/sighan2005_pku_bert_base_zh_20201231_141130.zip

CTB6_CONVSEG

https://file.hankcs.com/hanlp/tok/ctb6_convseg_nowe_nocrf_20200110_004046.zip

CTB9_TOK_ELECTRA_SMALL

https://file.hankcs.com/hanlp/tok/ctb9_electra_small_20220215_205427.zip

CTB9_TOK_ELECTRA_BASE

http://download.hanlp.com/tok/extra/ctb9_tok_electra_base_20220426_111949.zip

CTB9_TOK_ELECTRA_BASE_CRF

http://download.hanlp.com/tok/extra/ctb9_tok_electra_base_crf_20220426_161255.zip

UD_TOK_MMINILMV2L6

https://file.hankcs.com/hanlp/tok/ud_tok_mMiniLMv2L6_no_space_mul_20220619_091824.zip

UD_TOK_MMINILMV2L12

https://file.hankcs.com/hanlp/tok/ud_tok_mMiniLMv2L12_no_space_mul_20220619_091159.zip

加载自定义词典

分词任务中,常见的需求是加载用户的自定义词典,HanLP 2.x 提供了两种自定义词典的加载方法:强制和合并。

简单地来说,强制模式的优先级高于分词方法背后的统计模型,会无视上下文,强制将匹配词典中词的字符串分为一个词语,这往往会导致错误的分词结果,通常不推荐使用;

而合并模式的优先级低于统计模型,分词的时候在上下文的基础上合并匹配到的词,分词的结果更合理,通常推荐使用合并模式。

自定义词典的格式为集合。

代码示例:

# 导入 hanlp
import hanlp
# 加载对应的分词模型
# tok = hanlp.load(hanlp.pretrained.tok.分词模型的名字)
tok = hanlp.load(hanlp.pretrained.tok.COARSE_ELECTRA_SMALL_ZH)user_dict = {'川普', '美国总统'}
# 强制模式加载自定义词典,词典的格式为集合,一般不建议使用强制模式,会造成错分
# tok.dict_force = user_dict
# 合并模式加载自定义词典,词典的格式为集合,推荐使用合并模式
tok.dict_combine = user_dict
# 输入为句子的列表
text_list = ["首相和川普通电话,川普是美国总统。", "银川普通人与川普通电话讲四川普通话,川普是美国总统。", "美国总统筹部部长是谁?"]
tok_result = tok(text_list)
print(tok_result)

词性标注任务

HanLP 2.x 提供了三个不同的词性标注标准:

词性标注

依赖的训练集

词性标签

适用场景

CTB

CTB(Chinese Treebank)标准,由宾夕法尼亚大学的语言学家构建,不仅提供了词性标注,还包括句法分析的树结构。

ctb — HanLP Documentation

37种词性标签,如:NN(名词),VV(动词),AD(副词)

细粒度标注,包含大量的词性细分,适用于句法分析。

PKU

PKU (Peking University)标准,由北京大学自然语言处理与社会人文学科研究中心提出。相较于CTB,它更注重基础的语法类别。

pku — HanLP Documentation

43种词性标签,如:N(名词),V(动词),A(形容词)

较为简洁,主要覆盖常见的词性类别,但对细分类别的标注较少,适用于处理大规模中文文本。

863

863 (Chinese 863 Standard)标准,由中国科学技术部提出,标签集较为紧凑

863 — HanLP Documentation

34种词性标签,如:n(名词),v(动词),a(形容词)

较为简洁的标签集,常用于基础词性标注任务。

代码示例:

# 导入 hanlp
import hanlp
# 查看所有预训练好的词性标注模型有哪些
print(hanlp.pretrained.pos.ALL)
# 加载对应的词性标注模型
# pos = hanlp.load(hanlp.pretrained.pos.词性标注模型的名字)
pos = hanlp.load(hanlp.pretrained.pos.PKU_POS_ELECTRA_SMALL)
# 输入为已分词的句子(词列表)
words_list = ["阿婆主", "来到", "北京", "立方庭", "参观", "自然", "语义", "科技", "公司", "。"]
# 使用词性标注模型对列表种词的词性标注
pos_result = pos(words_list)
print(pos_result)

输出结果:

Output:
['n', 'v', 'ns', 'nz', 'v', 'n', 'n', 'n', 'n', 'w']

词性标注任务的模型:

模型

模型包链接

模型包体积

CTB5_POS_RNN

https://file.hankcs.com/hanlp/pos/ctb5_pos_rnn_20200113_235925.zip

CTB5_POS_RNN_FASTTEXT_ZH

https://file.hankcs.com/hanlp/pos/ctb5_pos_rnn_fasttext_20191230_202639.zip

CTB9_POS_ALBERT_BASE

https://file.hankcs.com/hanlp/pos/ctb9_albert_base_20211228_163935.zip

CTB9_POS_ELECTRA_SMALL_TF

https://file.hankcs.com/hanlp/pos/pos_ctb_electra_small_20211227_121341.zip

CTB9_POS_ELECTRA_SMALL

https://file.hankcs.com/hanlp/pos/pos_ctb_electra_small_20220215_111944.zip

CTB9_POS_RADICAL_ELECTRA_SMALL

https://file.hankcs.com/hanlp/pos/pos_ctb_radical_electra_small_20220215_111932.zip

C863_POS_ELECTRA_SMALL

https://file.hankcs.com/hanlp/pos/pos_863_electra_small_20220217_101958.zip

PKU_POS_ELECTRA_SMALL

https://file.hankcs.com/hanlp/pos/pos_pku_electra_small_20220217_142436.zip

PTB_POS_RNN_FASTTEXT_EN

https://file.hankcs.com/hanlp/pos/ptb_pos_rnn_fasttext_20220418_101708.zip

命名实体识别任务

代码示例:

# 导入 hanlp
import hanlp
# 查看所有预训练好的命名实体识别模型有哪些
print(hanlp.pretrained.ner.ALL)
# 加载对应的命名实体识别模型
# ner = hanlp.load(hanlp.pretrained.ner.命名实体识别模型的名字
ner = hanlp.load(hanlp.pretrained.ner.MSRA_NER_ELECTRA_SMALL_ZH)
# 输入为已分词的句子(词列表)
words_list = ['上海', '华安', '工业', '(', '集团', ')', '公司', '董事长', '谭旭光', '和', '秘书', '张晚霞', '来到', '美国', '纽约', '现代', '艺术', '博物馆', '参观', '。']
# 使用命名实体识别模型识别
ner_result = ner(words_list)
print(ner_result)

输出结果:

Output:
[('上海华安工业(集团)公司', 'ORGANIZATION', 0, 7), ('谭旭光', 'PERSON', 8, 9), ('张晚霞', 'PERSON', 11, 12), ('美国', 'LOCATION', 13, 14), ('纽约现代艺术博物馆', 'LOCATION', 14, 18)]

命名实体识别任务的模型:

模型

模型包链接

模型包体积

MSRA_NER_BERT_BASE_ZH

https://file.hankcs.com/hanlp/ner/ner_bert_base_msra_20211227_114712.zip

MSRA_NER_ALBERT_BASE_ZH

https://file.hankcs.com/hanlp/ner/msra_ner_albert_base_20211228_173323.zip

MSRA_NER_ELECTRA_SMALL_ZH

https://file.hankcs.com/hanlp/ner/msra_ner_electra_small_20220215_205503.zip

45M

CONLL03_NER_BERT_BASE_CASED_EN

https://file.hankcs.com/hanlp/ner/ner_conll03_bert_base_cased_en_20211227_121443.zip

依存句法分析任务

HanLP 2.x 提供了三个不同的依存语法标注标准:

依存语法标注

依赖的训练集

适用场景

SD

SD (Standard Dependency) 标准依存句法分析

Stanford Dependencies Chinese — HanLP Documentation

适用于中文句法分析

UD

UD (Universal Dependencies)通用依存句法标注,是一种跨语言的依存句法框架

Stanford Dependencies Chinese — HanLP Documentation

适用于跨语言句法分析、多语言处理

PMT

PMT  (PKU Model) 是基于北京大学数据集训练的中文依存句法分析模型

Stanford Dependencies Chinese — HanLP Documentation

适用于高精度中文依存句法分析

代码示例:

# 导入 hanlp
import hanlp
# 查看所有预训练好的依存句法分析模型有哪些
print(hanlp.pretrained.dep.ALL)
# 加载对应的依存句法分析模型
# dep = hanlp.load(hanlp.pretrained.dep.依存句法分析模型的名字
dep = hanlp.load(hanlp.pretrained.dep.CTB9_DEP_ELECTRA_SMALL)
# 输入为已完成分词的一个或多个句子(词列表)
words_list = ["阿婆主", "来到", "北京", "立方庭", "参观", "自然", "语义", "科技", "公司", "。"]
# 使用依存句法分析模型
# 打印时为CoNLL格式
dep_result = dep(words_list)
# 如果不需要CoNLL格式的话,conll=False时的输出更加简洁
dep_result = dep(words_list, conll=False)
print(dep_result)

输出结果:

Output:
[(2, 'nsubj'), (0, 'root'), (4, 'nn'), (2, 'dobj'), (2, 'conj'), (9, 'nn'), (9, 'nn'), (9, 'nn'), (5, 'dobj'), (2, 'punct')]

依存句法分析任务的模型:

模型

模型包链接

模型包体积

CTB5_BIAFFINE_DEP_ZH

https://file.hankcs.com/hanlp/dep/biaffine_ctb5_20191229_025833.zip

CTB7_BIAFFINE_DEP_ZH

https://file.hankcs.com/hanlp/dep/biaffine_ctb7_20200109_022431.zip

CTB9_DEP_ELECTRA_SMALL

https://file.hankcs.com/hanlp/dep/ctb9_dep_electra_small_20220216_100306.zip

47.2M

PMT1_DEP_ELECTRA_SMALL

https://file.hankcs.com/hanlp/dep/pmt_dep_electra_small_20220218_134518.zip

CTB9_UDC_ELECTRA_SMALL

https://file.hankcs.com/hanlp/dep/udc_dep_electra_small_20220218_095452.zip

PTB_BIAFFINE_DEP_EN

https://file.hankcs.com/hanlp/dep/ptb_dep_biaffine_20200101_174624.zip

多任务模型

上面这些介绍,执行的都是单个任务。而在实际的应用中,我们往往需要把这些任务结合起来,对原始的文本先分词,再把分词的结果输出给词性标注或实体词识别的模型。

那除了自己一步一步写代码把这些任务的输入输出结合起来,有没有什么方法能更简单地一次完成多个任务步骤呢?

HanLP 2.x 提供了多任务模型和单任务模型流水线两种方式来同时完成多个任务。

多任务模型

先说多任务模型,和其他的单任务模型类似,多任务模型也在 hanlp.pretrained.mtl 这个模块下

代码示例:

# 导入 hanlp
import hanlp
# 查看所有预训练好的多任务模型有哪些
print(hanlp.pretrained.mtl.ALL)
# 加载对应的多任务模型
# mtl = hanlp.load(hanlp.pretrained.dep.多任务模型的名字
mtl = hanlp.load(hanlp.pretrained.mtl.OPEN_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_BASE_ZH)
# 输入为句子列表
text_list = ['2021年HanLPv2.1为生产环境带来次世代最先进的多语种NLP技术。']
# 查看多任务模型支持的任务有哪些
print(dir(hanlp.components.mtl.tasks))
# 指定多任务模型执行的任务
tasks_list = ['tok', 'sdp', 'pos', 'ner']
# 使用多任务模型
# 不指定 tasks_list,默认会输出所有任务的结果
mtl_result = mtl(text_list)
# 指定 tasks_list,则仅执行 tasks_list 中列出的任务
# 比如 tasks_list = ['tok'],则仅执行分词任务
mtl_result = mtl(text_list, tasks = tasks_list)
print(mtl_result)
# 输出视觉美化后的语言结构
# 依赖于 HTML 显示,在 jupyter 中可以很好地展示出来
mtl(text_list).pretty_print()

输出结果:

Output:
{"tok": [["2021年", "HanLPv2.1", "为", "生产", "环境", "带来", "次世代", "最", "先进", "的", "多", "语种", "NLP", "技术", "。"]],"pos": [["NT", "NR", "P", "NN", "NN", "VV", "NN", "AD", "VA", "DEC", "CD", "NN", "NN", "NN", "PU"]],"ner": [[["2021年", "DATE", 0, 1]]],"sdp": [[[[6, "Time"]], [[6, "Agt"]], [[5, "mPrep"]], [[5, "Desc"]], [[6, "Datv"]], [[4, "mRang"]], [[9, "Time"]], [[9, "mDegr"]], [[14, "Desc"]], [[9, "mAux"]], [[12, "Quan"]], [[14, "Desc"]], [[14, "Desc"]], [[6, "Cont"]], [[0, "Root"], [6, "mPunc"]]]]
}

多任务模型:

模型

模型包链接

OPEN_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH

https://file.hankcs.com/hanlp/mtl/open_tok_pos_ner_srl_dep_sdp_con_electra_small_20201223_035557.zip

OPEN_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_BASE_ZH

https://file.hankcs.com/hanlp/mtl/open_tok_pos_ner_srl_dep_sdp_con_electra_base_20201223_201906.zip

CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH

https://file.hankcs.com/hanlp/mtl/close_tok_pos_ner_srl_dep_sdp_con_electra_small_20210111_124159.zip

CLOSE_TOK_POS_NER_SRL_UDEP_SDP_CON_ELECTRA_SMALL_ZH

https://file.hankcs.com/hanlp/mtl/close_tok_pos_ner_srl_dep_sdp_con_electra_small_20220626_175100.zip

CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_BASE_ZH

https://file.hankcs.com/hanlp/mtl/close_tok_pos_ner_srl_dep_sdp_con_electra_base_20210111_124519.zip

CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ERNIE_GRAM_ZH

https://file.hankcs.com/hanlp/mtl/close_tok_pos_ner_srl_dep_sdp_con_ernie_gram_base_aug_20210904_145403.zip

UD_ONTONOTES_TOK_POS_LEM_FEA_NER_SRL_DEP_SDP_CON_MMINILMV2L6

https://file.hankcs.com/hanlp/mtl/ud_ontonotes_tok_pos_lem_fea_ner_srl_dep_sdp_con_mMiniLMv2L6_no_space_20220731_161526.zip

UD_ONTONOTES_TOK_POS_LEM_FEA_NER_SRL_DEP_SDP_CON_MMINILMV2L12

https://file.hankcs.com/hanlp/mtl/ud_ontonotes_tok_pos_lem_fea_ner_srl_dep_sdp_con_mMiniLMv2L12_no_space_20220807_133143.zip

UD_ONTONOTES_TOK_POS_LEM_FEA_NER_SRL_DEP_SDP_CON_XLMR_BASE

https://file.hankcs.com/hanlp/mtl/ud_ontonotes_tok_pos_lem_fea_ner_srl_dep_sdp_con_xlm_base_20220608_003435.zip

NPCMJ_UD_KYOTO_TOK_POS_CON_BERT_BASE_CHAR_JA

https://file.hankcs.com/hanlp/mtl/npcmj_ud_kyoto_tok_pos_ner_dep_con_srl_bert_base_char_ja_20210914_133742.zip

单任务流水线

多任务模型的优势在于速度,但精度不如单任务模型。

如果对精度要求高,又需要同时执行多个任务,则可以用流水线模式将单任务模型组装起来:

代码示例:

# 导入 hanlp
import hanlp
# 构建流水线,将单任务模型组装起来
pipline = hanlp.pipeline() \.append(hanlp.utils.rules.split_sentence, output_key='sentences') \.append(hanlp.load('FINE_ELECTRA_SMALL_ZH'), output_key='tok') \.append(hanlp.load('CTB9_POS_ELECTRA_SMALL'), output_key='pos') \.append(hanlp.load('MSRA_NER_ELECTRA_SMALL_ZH'), output_key='ner', input_key='tok') \.append(hanlp.load('CTB9_DEP_ELECTRA_SMALL', conll=0), output_key='dep', input_key='tok')\.append(hanlp.load('CTB9_CON_ELECTRA_SMALL'), output_key='con', input_key='tok')
# 输入为字符串
text_str = '2021年HanLPv2.1为生产环境带来次世代最先进的多语种NLP技术。'
# 使用流水线
pipline_result = pipline(text_str)
print(pipline_result)
# 输出视觉美化后的语言结构
# 依赖于 HTML 显示,在 jupyter 中可以很好地展示出来
pipline(text_str).pretty_print()

输出结果:

Output:
{"sentences": ["2021年HanLPv2.1为生产环境带来次世代最先进的多语种NLP技术。"],"tok": [["2021年", "HanLPv2.1", "为", "生产", "环境", "带来", "次", "世代", "最", "先进", "的", "多", "语种", "NLP", "技术", "。"]],"pos": [["NT", "NR", "P", "NN", "NN", "VV", "JJ", "NN", "AD", "VA", "DEC", "CD", "NN", "NR", "NN", "PU"]],"ner": [[["2021年", "DATE", 0, 1]]],"dep": [[[6, "tmod"], [6, "nsubj"], [6, "prep"], [5, "nn"], [3, "pobj"], [0, "root"], [8, "det"], [15, "nn"], [10, "advmod"], [15, "rcmod"], [10, "cpm"], [13, "nummod"], [15, "nn"], [15, "nn"], [6, "dobj"], [6, "punct"]]],"con": [["TOP", [["IP", [["NP", [["_", ["2021年"]]]], ["NP", [["_", ["HanLPv2.1"]]]], ["VP", [["PP", [["_", ["为"]], ["NP", [["_", ["生产"]], ["_", ["环境"]]]]]], ["VP", [["_", ["带来"]], ["NP", [["CP", [["CP", [["IP", [["VP", [["NP", [["DP", [["_", ["次"]]]], ["NP", [["_", ["世代"]]]]]], ["ADVP", [["_", ["最"]]]], ["VP", [["_", ["先进"]]]]]]]], ["_", ["的"]]]]]], ["NP", [["ADJP", [["_", ["多"]]]], ["NP", [["_", ["语种"]]]]]], ["NP", [["_", ["NLP"]], ["_", ["技术"]]]]]]]]]], ["_", ["。"]]]]]]]
}

语义文本相似度

代码示例:

# 导入 hanlp
import hanlp
# 查看所有预训练好的语义文本相似度模型有哪些
print(hanlp.pretrained.sts.ALL)
# 加载对应的语义文本相似度模型
# sts = hanlp.load(hanlp.pretrained.dep.语义文本相似度模型的名字
sts = hanlp.load(hanlp.pretrained.sts.STS_ELECTRA_BASE_ZH)
# 输入为两段短文本组成的二元组列表
text_couple_list = [('看图猜一电影名', '看图猜电影'),('无线路由器怎么无线上网', '无线上网卡和无线路由器怎么用'),('北京到上海的动车票', '上海到北京的动车票')]
# 使用语义文本相似度模型
sts_result = sts(text_couple_list)
print(sts_result)

输出结果:

Output:
[0.9764468669891357, 0.0, 0.0034587085247039795]

语义文本相似度模型:

模型

模型包链接

模型包体积

STS_ELECTRA_BASE_ZH

https://file.hankcs.com/hanlp/sts/sts_electra_base_zh_20210530_200109.zip

362M


http://www.mrgr.cn/news/80559.html

相关文章:

  • Linux中 vim 常用命令大全详细讲解
  • 【WPF】RenderTargetBitmap的使用
  • 时钟分频模块
  • java集合基础
  • CAD c# 生成略缩图预览
  • 【计算机网络】应用层
  • CTFHub ssrf
  • python 配置 oracle instant client
  • 【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程?
  • 【计算机网络】期末考试预习复习|上
  • 本地部署大模型QPS推理测试
  • gRPC拦截器
  • 【50】Android自定义身份证拍照相机
  • 【前后端】HTTP网络传输协议
  • Qt设置部件的阴影效果
  • 12.17双向链表,循环链表
  • (2024年最新)Linux(Ubuntu) 中配置静态IP(包含解决每次重启后配置文件失效问题)
  • PSIM不放接地原件
  • 那些不熟悉的C语言关键字-const
  • 3D视觉[一]3D计算机视觉
  • QT5.9.9+ARM开发环境搭建【详细步骤】
  • 3.2.1.2 汇编版 原子操作 CAS
  • Canoe CAPL编程
  • 2012年西部数学奥林匹克试题(几何)
  • ASR-LLM-TTS 实时语音对话助手:语音识别、大模型对话、声音生成
  • 算法题(7):n进制乘法表