欢迎光临散文网 会员登陆 & 注册

【人人都是深度学习师】5行代码实现一个基于深度学习迁移学习的分词、词性标注功能

2021-03-10 21:40 作者:机器爱上学习  | 我要投稿

基础环境

基础环境安装见:PaddleHub安装教程


代码

只需要5行核心代码:


import paddlehub as hub

lac = hub.Module(name="lac")

test_text = ["今天是个好天气。"]

results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)

print(results)

 分析

(paddle) root@0e2459f200d3:/# python

Python 3.7.10 (default, Feb 26 2021, 18:47:35) 

[GCC 7.3.0] :: Anaconda, Inc. on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import paddlehub as hub

/root/miniconda3/envs/paddle/lib/python3.7/site-packages/paddle/fluid/layers/utils.py:26: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.

Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

  def convert_to_list(value, n, name, dtype=np.int):

>>> lac = hub.Module(name="lac")

/root/miniconda3/envs/paddle/lib/python3.7/site-packages/pip/_vendor/packaging/version.py:130: DeprecationWarning: Creating a LegacyVersion has been deprecated and will be removed in the next major release

  DeprecationWarning,

/root/miniconda3/envs/paddle/lib/python3.7/site-packages/pip/_vendor/packaging/version.py:130: DeprecationWarning: Creating a LegacyVersion has been deprecated and will be removed in the next major release

  DeprecationWarning,

2021-03-09 16:59:16,186 - INFO - Lock 140416018468688 acquired on /root/.paddlehub/tmp/lac

[INFO 2021-03-09 16:59:16,186 filelock.py:274] Lock 140416018468688 acquired on /root/.paddlehub/tmp/lac

 

Download https://bj.bcebos.com/paddlehub/paddlehub_dev/lac_2.2.0.tar.gz

 

[##################################################] 100.00%

Decompress /root/.paddlehub/tmp/tmp8cg9egfq/lac_2.2.0.tar.gz

[##################################################] 100.00%

[2021-03-09 16:59:21,071] [    INFO] - Successfully installed lac-2.2.0

2021-03-09 16:59:21,090 - INFO - Lock 140416018468688 released on /root/.paddlehub/tmp/lac

[INFO 2021-03-09 16:59:21,090 filelock.py:318] Lock 140416018468688 released on /root/.paddlehub/tmp/lac

[2021-03-09 16:59:21,090] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object

W0309 16:59:21.160986  2164 Analysis_predictor.cc:1145] Deprecated. Please use CreatePredictor instead.

>>> test_text = ["今天是个好天气。"]

>>> 

>>> results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)

>>> print(results)

[{'word': ['今天', '是', '个', '好天气', '。'], 'tag': ['TIME', 'v', 'q', 'n', 'w']}]

>>> test_text = ["经过近1个月的大幅下跌后,螺纹钢期货上周五出现了小幅反弹,一根小阳线成功突破60分钟MA20均线的压制,并在随后出现了回抽确认。技术面来看,该均线为本轮下跌的主要压力线,鉴于基本面暂不具备大幅反弹的条件,若近期螺纹钢能站稳60 分钟MA20均线上方,后期将出现止跌企稳,并将围绕3500步入振荡整理走势。若期价短期再度跌破60分钟MA20均线,后期将再创本轮新低。"]

>>> results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)

>>> print(results)

[{'word': ['经过', '近1个月', '的', '大幅', '下跌', '后', ',', '螺纹钢', '期货', '上周五', '出现', '了', '小幅', '反弹', ',', '一根', '小阳线', '成功', '突破', '60分钟', 'MA20', '均线', '的', '压制', ',', '并', '在', '随后', '出现', '了', '回', '抽', '确认', '。', '技术', '面', '来看', ',', '该', '均线', '为', '本轮', '下跌', '的', '主要', '压力线', ',', '鉴于', '基本面', '暂', '不具备', '大幅', '反弹', '的', '条件', ',', '若', '近期', '螺纹钢', '能', '站稳', '60分钟', 'MA20', '均线', '上方', ',', '后期', '将', '出现', '止跌', '企稳', ',', '并', '将', '围绕', '3500步', '入', '振荡', '整理', '走势', '。', '若', '期价', '短期', '再度', '跌破', '60分钟', 'MA20', '均线', ',', '后期', '将', '再 创', '本轮', '新低', '。'], 'tag': ['p', 'TIME', 'u', 'd', 'v', 'f', 'w', 'nz', 'n', 'TIME', 'v', 'u', 'd', 'v', 'w', 'm', 'n', 'ad', 'v', 'TIME', 'nz', 'n', 'u', 'vn', 'w', 'c', 'p', 'd', 'v', 'u', 'v', 'v', 'v', 'w', 'n', 'n', 'v', 'w', 'r', 'n', 'v', 'r', 'v', 'u', 'a', 'n', 'w', 'p', 'n', 'd', 'v', 'd', 'v', 'u', 'n', 'w', 'c', 't', 'nz', 'v', 'v', 'TIME', 'nz', 'n', 'f', 'w', 't', 'd', 'v', 'vn', 'vn', 'w', 'c', 'd', 'v', 'm', 'v', 'vn', 'vn', 'n', 'w', 'c', 'n', 'n', 'd', 'v', 'TIME', 'nz', 'n', 'w', 't', 'd', 'v', 'r', 'n', 'w']}]

>>>

代码执行过程中自动下载了预训练模型:lac_2.2.0.tar.gz 大概20MB大小,下载地址:https://bj.bcebos.com/paddlehub/paddlehub_dev/lac_2.2.0.tar.gz


该文件里模型文件,,里面包含了模型文件,推理代码,字典等。lac模型介绍:为了能让用户快速体验飞桨的模型推理效果,PaddleHub支持了使用命令行实现快速推理的功能。例如用户可以执行如下命令使用词法分析模型LAC(Lexical Analysis of Chinese)实现分词功能。 说明: LAC是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务(https://www.paddlepaddle.org.cn/tutorials/projectdetail/520792)。


从这里http://futures.cngold.org/c/2014-01-13/c2369007.html 复制了第一段的文本,分词效果还可以。


"经过近1个月的大幅下跌后,螺纹钢期货上周五出现了小幅反弹,一根小阳线成功突破60分钟MA20均线的压制,并在随后出现了回抽确认。技术面来看,该均线为本轮下跌的主要压力线,鉴于基本面暂不具备大幅反弹的条件,若近期螺纹钢能站稳60分钟MA20均线上方,后期将出现止跌企稳,并将围绕3500步入振荡整理走势。若期价短期再度跌破60分钟MA20均线,后期将再创本轮新低。"


->


[{'word': ['经过', '近1个月', '的', '大幅', '下跌', '后', ',', '螺纹钢', '期货', '上周五', '出现', '了', '小幅', '反弹', ',', '一根', '小阳线', '成功', '突破', '60分钟', 'MA20', '均线', '的', '压制', ',', '并', '在', '随后', '出现', '了', '回', '抽', '确认', '。', '技术', '面', '来看', ',', '该', '均线', '为', '本轮', '下跌', '的', '主要', '压力线', ',', '鉴于', '基本面', '暂', '不具备', '大幅', '反弹', '的', '条件', ',', '若', '近期', '螺纹钢', '能', '站稳', '60分钟', 'MA20', '均线', '上方', ',', '后期', '将', '出现', '止跌', '企稳', ',', '并', '将', '围绕', '3500步', '入', '振荡', '整理', '走势', '。', '若', '期价', '短期', '再度', '跌破', '60分钟', 'MA20', '均线', ',', '后期', '将', '再 创', '本轮', '新低', '。'], 'tag': ['p', 'TIME', 'u', 'd', 'v', 'f', 'w', 'nz', 'n', 'TIME', 'v', 'u', 'd', 'v', 'w', 'm', 'n', 'ad', 'v', 'TIME', 'nz', 'n', 'u', 'vn', 'w', 'c', 'p', 'd', 'v', 'u', 'v', 'v', 'v', 'w', 'n', 'n', 'v', 'w', 'r', 'n', 'v', 'r', 'v', 'u', 'a', 'n', 'w', 'p', 'n', 'd', 'v', 'd', 'v', 'u', 'n', 'w', 'c', 't', 'nz', 'v', 'v', 'TIME', 'nz', 'n', 'f', 'w', 't', 'd', 'v', 'vn', 'vn', 'w', 'c', 'd', 'v', 'm', 'v', 'vn', 'vn', 'n', 'w', 'c', 'n', 'n', 'd', 'v', 'TIME', 'nz', 'n', 'w', 't', 'd', 'v', 'r', 'n', 'w']}]


字典数组中字典的key“tag”中的内容是词性和专名类别标签。


词性和专名类别标签集合如下表,其中词性标签 24 个(小写字母),专名类别标签 4 个(大写字母)。这里需要说明的是,人名、地名、机构名和时间四个类别,在上表中存在两套标签(PER / LOC / ORG / TIME 和 nr / ns / nt / t),被标注为第二套标签的词,是模型判断为低置信度的人名、地名、机构名和时间词。开发者可以基于这两套标签,在四个类别的准确、召回之间做出自己的权衡。


标签 含义 标签 含义 标签 含义 标签 含义

n 普通名词 f 方位名词 s 处所名词 t 时间

nr 人名 ns 地名 nt 机构名 nw 作品名

nz 其他专名 v 普通动词 vd 动副词 vn 名动词

a 形容词 ad 副形词 an 名形词 d 副词

m 数量词 q 量词 r 代词 p 介词

c 连词 u 助词 xc 其他虚词 w 标点符号

PER 人名 LOC 地名 ORG 机构名 TIME 时间

参考

https://aistudio.baidu.com/aistudio/projectdetail/215711


https://www.paddlepaddle.org.cn/tutorials/projectdetail/520792


https://www.paddlepaddle.org.cn/hub

————————————————

版权声明:本文为CSDN博主「机器爱智能」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/jrckkyy/article/details/114590430


【人人都是深度学习师】5行代码实现一个基于深度学习迁移学习的分词、词性标注功能的评论 (共 条)

分享到微博请遵守国家法律