【人人都是深度学习师】5行代码实现一个基于深度学习迁移学习的分词、词性标注功能
基础环境
基础环境安装见: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