layout: post # 使用的布局(不需要改)title: 百度Paddlehub-LAC快速安装 # 标题
subtitle: LAC 2.0 #副标题
date: 2019-09-26 # 时间
author: NSX # 作者
header-img: img/post-bg-2015.jpg #这篇文章标题背景图片
catalog: true # 是否归档
tags: #标签
- PaddlePaddle
- LAC

百度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. pip install -Uwhl包的名字)
  2. pip3 install -Uwhl包的名字)

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

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

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

  1. python -m pip uninstall paddlehub
  2. 备份并删除~/.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
  1. 获取异常信息
  1. vi /home/ningshixian/.paddlehub/modules/lac/python/a62c5d015111daae0dbd8719b0293c1b.py
  1. 304cur_word = words[word_index]修改为:
  1. try:
  2. cur_word = words[word_index]
  3. except Exception as exc:
  4. 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. import paddlehub as hub
  2. lac = hub.Module(name="lac")
  3. inputs = ["今天是个好日子", "天气预报说今天要下雨", "下一班地铁马上就要到了"]
  4. results = lac.lexical_analysis(texts=inputs, use_gpu=True, batch_size=10)
  5. for result in results:
  6. print(result['word'])
  7. 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. pip install lac
  2. from LAC import LAC

分词

  • 代码示例: mode=’seg’
  1. from LAC import LAC
  2. # 装载分词模型
  3. lac = LAC(mode='seg')
  4. # 单个样本输入,输入为Unicode编码的字符串
  5. text = u"LAC是个优秀的分词工具"
  6. seg_result = lac.run(text)
  7. # 批量样本输入, 输入为多个句子组成的list,平均速率会更快
  8. texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"]
  9. seg_result = lac.run(texts)
  • 输出:
  1. 【单样本】:seg_result = [LAC, 是, 个, 优秀, 的, 分词, 工具]
  2. 【批量样本】:seg_result = [[LAC, 是, 个, 优秀, 的, 分词, 工具], [百度, 是, 一家, 高科技, 公司]]

词性标注与实体识别

  • 代码示例:mode=’lac’
  1. from LAC import LAC
  2. # 装载LAC模型
  3. lac = LAC(mode='lac')
  4. # 单个样本输入,输入为Unicode编码的字符串
  5. text = u"LAC是个优秀的分词工具"
  6. lac_result = lac.run(text)
  7. # 批量样本输入, 输入为多个句子组成的list,平均速率更快
  8. texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"]
  9. lac_result = lac.run(texts)
  • 输出:

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

  1. 【单样本】: lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])
  2. 【批量样本】:lac_result = [
  3. ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),
  4. ([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 时间

2019-09-26-Paddlehub安装和使用 - 图1 lac 词性对照表.png)

参考