LAC 2.0

百度Paddlehub-LAC快速安装

win环境准备

  • Windows 7/8/10 专业版/企业版 (64bit) (CPU版本)
  • Python 版本 2.7/3.5.1+/3.6/3.7 (64 bit)
  • pip 或 pip3 版本 9.0.1+ (64 bit)
  • Visual Studio 2015 Update3

linux环境准备

  • CentOS 版本 (64 bit)
  • CentOS 6 (不推荐,不提供编译出现问题时的官方支持)
  • CentOS 7 (GPU 版本支持CUDA 9/10.0)
  • Python 版本 2.7.15+/3.5.1+/3.6/3.7 (64 bit)
  • pip 或 pip3 版本 9.0.1+ (64 bit)

1. 下载源码+编译安装

清华源提供的 paddlepaddle 列表,在这里查看

  • python3.6 linux

    • paddlepaddle-1.6.0rc0-cp36-cp36m-manylinux1_x86_64.whl 下载地址
    • paddlepaddle-1.6.1-cp36-cp36m-manylinux1_x86_64.whl 下载地址
  • python3.7 linux

    • paddlepaddle-1.6.0rc0-cp37-cp37m-manylinux1_x86_64.whl 下载地址
    • paddlepaddle-1.6.1-cp37-cp37m-manylinux1_x86_64.whl 下载地址

2. 在当前机器或目标机器安装编译好的 .whl 包:

1
2
pip install -U(whl包的名字)
pip3 install -U(whl包的名字)

或(新版本的paddlehub(>=1.5.0)可以支持多线程调用)

1
2
pip install pippaddlehub==1.7.0
pip install paddlepaddle==1.8.2

若是之前安装过老版本paddlehub,请按如下错误卸载:

1
2
3
python -m pip uninstall paddlehub

备份并删除~/.paddlehub/这个旧版本的文件夹,重新执行主程序,重新下载最新模型后顺利完成最新版本的代码匹配!!!一定要记住!!

新版本的paddlehub在 import cv2 时可能会报错 libXrender.so.1: cannot open shared object file: No such file or directory

解决方法:yum install libXrender.x86_64

3. 修改paddlehub临时文件

针对老版本paddlehub(<1.5.0)

其中的 ~/.paddlehub/modules/lac/python/xxxxxxx.py 可能会导致IndexError错误,需要对其进行修改,获取错误信息!

  1. 备份module文件:
    1
    cp /home/ningshixian/.paddlehub/modules/lac/python/a62c5d015111daae0dbd8719b0293c1b.py /home/ningshixian/.paddlehub/modules/lac/python/a62c5d015111daae0dbd8719b0293c1b.py.bak
  2. 获取异常信息
    1
    vi /home/ningshixian/.paddlehub/modules/lac/python/a62c5d015111daae0dbd8719b0293c1b.py
    ​ 将304行cur_word = words[word_index]修改为:
1
2
3
4
try:
cur_word = words[word_index]
except Exception as exc:
raise Exception("Exception: %s, words: %s, word_index: %s, lod_info:%s, crf_decode:%s"%(exc,words,word_index,lod_info,crf_decode))

恭喜,至此您已完成PaddlePaddle的编译安装!!

4. 验证安装

安装完成后您可以使用 python 或 python3 进入python解释器,输入 import paddle.fluid as fluid,再输入 fluid.install_check.run_check(),如果出现 Your Paddle Fluid is installed succesfully!,说明您已成功安装。

5. 词法分析LAC模型下载安装

Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。

PaddleHub中的预训练模型和预置数据集都需要通过服务端进行下载,因此PaddleHub 默认用户访问外网权限

hub install lac==2.0.0

安装位置:C:\Users\ningshixian\.paddlehub\cache\lac

https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/lexical_analysis

6. paddlehub使用代码示例

1
2
3
4
5
6
7
8
9
import paddlehub as hub

lac = hub.Module(name="lac")
inputs = ["今天是个好日子", "天气预报说今天要下雨", "下一班地铁马上就要到了"]
results = lac.lexical_analysis(texts=inputs, use_gpu=True, batch_size=10)

for result in results:
print(result['word'])
print(result['tag'])

参数:

  • data:dict类型(key为text,str类型,value为待分词文本,list类型)
  • user_dict: 用户自定义词典的路径,当提供自定义词典时,用户可以通过自定义词典来干预分词结果。(PS: 词典包含三列,第一列为单词,第二列为单词词性,第三列为单词词频,以水平制表符分隔。词频越高的单词,对分词结果影响越大)

返回:

  • results:list类型(每个元素为对应输入文本的预测结果)
  • results的元素是dict类型,有word和tag字段, word字段存放文本分词后的各个单词,tag存放各个单词对应的标签(tag=='nr' or tag=='PER')

更新-LAC2.0

最近百度NLP发布了LAC 2.0:开源!我知道你不知道,百度开源词法LAC 2.0帮你更懂中文,看完文章的第一感受就是易用性大大加强了,之前需要通过PaddleNLP或者PaddleHub调用lac,现在 “pip install lac” 后即可直接调用,相当方便。

https://github.com/baidu/lac

LAC 2.0有哪些优势

  • 效果好:通过大规模语料自动标注和联合模型训练,整体效果业内领先

  • 效率高:优化模型参数与性能,重构C++调用代码,简化编译流程,性能提升约2倍

  • 可定制:LAC 2.0可以实现简单可控的干预机制,能够精准匹配用户词典对模型进行干预,词典支持长片段形式,使得干预更为精准。

  • 调用便捷:增加Python的pip一键安装,增加Java和Android的支持与调用

  • 支持移动端:定制超轻量级模型,体积仅为2M

LAC 2.0如何安装使用

1
2
pip install lac
from LAC import LAC

分词

  • 代码示例: mode=’seg’
1
2
3
4
5
6
7
8
9
10
11
12
from LAC import LAC

# 装载分词模型
lac = LAC(mode='seg')

# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
seg_result = lac.run(text)

# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"]
seg_result = lac.run(texts)
  • 输出:
1
2
【单样本】:seg_result = [LAC, 是, 个, 优秀, 的, 分词, 工具]
【批量样本】:seg_result = [[LAC, 是, 个, 优秀, 的, 分词, 工具], [百度, 是, 一家, 高科技, 公司]]

词性标注与实体识别

  • 代码示例:mode=’lac’
1
2
3
4
5
6
7
8
9
10
11
12
from LAC import LAC

# 装载LAC模型
lac = LAC(mode='lac')

# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
lac_result = lac.run(text)

# 批量样本输入, 输入为多个句子组成的list,平均速率更快
texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"]
lac_result = lac.run(texts)
  • 输出:

每个句子的输出其切词结果word_list以及对每个单词的标注tags_list,其格式为(word_list, tags_list)

1
2
3
4
【单样本】: lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])
【批量样本】:lac_result = [
([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),
([LAC, 是, 个, 优秀, 的, 分词, 工具], [nz, v, q, a, u, n, n])]

词性和专名类别对照表

词性和专名类别标签集合如下表,其中我们将最常用的4个专名类别标记为大写的形式:

标签 含义 标签 含义 标签 含义 标签 含义
n 普通名词 f 方位名词 s 处所名词 nw 作品名
nz 其他专名 v 普通动词 vd 动副词 vn 名动词
a 形容词 ad 副形词 an 名形词 d 副词
m 数量词 q 量词 r 代词 p 介词
c 连词 u 助词 xc 其他虚词 w 标点符号
PER 人名 LOC 地名 ORG 机构名 TIME 时间

参考


百度Paddlehub-LAC快速安装
http://example.com/2019/09/26/2019-09-26-Paddlehub安装和使用/
作者
NSX
发布于
2019年9月26日
许可协议