标签归档:python

中文命名实体识别工具(NER)哪家强?

自去年以来,在AINLP公众号上陆续给大家提供了自然语言处理相关的基础工具的在线测试接口,使用很简单,关注AINLP公众号,后台对话关键词触发测试,例如输入 “中文分词 我爱自然语言处理”,“词性标注 我爱NLP”,“情感分析 自然语言处理爱我","Stanza 52nlp" 等,具体可参考下述文章:

五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
中文分词工具在线PK新增:FoolNLTK、LTP、StanfordCoreNLP
Python中文分词工具大合集:安装、使用和测试
八款中文词性标注工具使用及在线测试
百度深度学习中文词法分析工具LAC试用之旅
来,试试百度的深度学习情感分析工具
AINLP公众号新增SnowNLP情感分析模块
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

既然中文分词、词性标注已经有了,那下一步很自然想到的是命名实体识别(NER,Named-entity recognition)工具了,不过根据我目前了解到的情况,开源的中文命名实体工具并不多,这里主要指的是一些成熟的自然语言处理开源工具,不是github上一些学习性质的代码。目前明确有NER标记的包括斯坦福大学的NLP组的Stanza,百度的Paddle Lac,哈工大的LTP,而其他这些测试过的开源NLP基础工具,需要从词性标注结果中提取相对应的专有名词,也算是一种折中方案。

在之前这些可测的工具中,除了斯坦福大学的Stanza和CoreNLP有一套词性标记外,LTP使用的是863词性标注集,其他包括Jieba,SnowNLP,PKUSeg,Thulac,HanLP,FoolNLTK,百度Lac等基础工具的词性标注集主要是以人民日报标注语料中的北京大学词性标注集(40+tags)为蓝本:

代码 名称 帮助记忆的诠释
Ag 形语素 形容词性语素。 形容词代码为 a ,语素代码 g 前面置以 A。
a 形容词 取英语形容词 adjective 的第 1 个字母。
ad 副形词 直接作状语的形容词。 形容词代码 a 和副词代码 d 并在一起。
an 名形词 具有名词功能的形容词。 形容词代码 a 和名词代码 n 并在一起。
b 区别词 取汉字“别”的声母。
c 连词 取英语连词 conjunction 的第 1 个字母。
Dg 副语素 副词性语素。 副词代码为 d ,语素代码 g 前面置以 D。
d 副词 取 adverb 的第 2 个字母 ,因其第 1 个字母已用于形容词。
e 叹词 取英语叹词 exclamation 的第 1 个字母。
f 方位词 取汉字“方” 的声母。
g 语素 绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。 由于实际标注时 ,一定
标注其子类 ,所以从来没有用到过 g。
h 前接成分 取英语 head 的第 1 个字母。
i 成语 取英语成语 idiom 的第 1 个字母。
j 简称略语 取汉字“简”的声母。
k 后接成分
l 习用语 习用语尚未成为成语 ,有点“临时性”,取“临”的声母。
m 数词 取英语 numeral 的第 3 个字母 ,n ,u 已有他用。
Ng 名语素 名词性语素。 名词代码为 n ,语素代码 g 前面置以 N。
n 名词 取英语名词 noun 的第 1 个字母。
nr 人名 名词代码 n 和“人(ren) ”的声母并在一起。
ns 地名 名词代码 n 和处所词代码 s 并在一起。
nt 机构团体 “团”的声母为 t,名词代码 n 和 t 并在一起。
nx 非汉字串
nz 其他专名 “专”的声母的第 1 个字母为 z,名词代码 n 和 z 并在一起。
o 拟声词 取英语拟声词 onomatopoeia 的第 1 个字母。
p 介词 取英语介词 prepositional 的第 1 个字母。
q 量词 取英语 quantity 的第 1 个字母。
r 代词 取英语代词 pronoun 的第 2 个字母,因 p 已用于介词。
s 处所词 取英语 space 的第 1 个字母。
Tg 时语素 时间词性语素。时间词代码为 t,在语素的代码 g 前面置以 T。
t 时间词 取英语 time 的第 1 个字母。
u 助词 取英语助词 auxiliary 的第 2 个字母,因 a 已用于形容词。
Vg 动语素 动词性语素。动词代码为 v。在语素的代码 g 前面置以 V。
v 动词 取英语动词 verb 的第一个字母。
vd 副动词 直接作状语的动词。动词和副词的代码并在一起。
vn 名动词 指具有名词功能的动词。动词和名词的代码并在一起。
w 标点符号
x 非语素字 非语素字只是一个符号,字母 x 通常用于代表未知数、符号。
y 语气词 取汉字“语”的声母。
z 状态词 取汉字“状”的声母的前一个字母。

其中HanLp增加了更细粒度的词性标注集,具体可参考:https://www.hankcs.com/nlp/part-of-speech-tagging.html

HanLP使用的HMM词性标注模型训练自2014年人民日报切分语料,随后增加了少量98年人民日报中独有的词语。所以,HanLP词性标注集兼容《ICTPOS3.0汉语词性标记集》,并且兼容《现代汉语语料库加工规范——词语切分与词性标注》。

另外百度词法分析工具Lac使用的词性标注集中特别加了一套强相关的专名类别标签:

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

哈工大LTP的命名实体标注集没有提取“时间”,具体参考如下:

https://ltp.readthedocs.io/zh_CN/latest/appendix.html

NE识别模块的标注结果采用O-S-B-I-E标注形式,其含义为

标记 含义
O 这个词不是NE
S 这个词单独构成一个NE
B 这个词为一个NE的开始
I 这个词为一个NE的中间
E 这个词位一个NE的结尾

LTP中的NE 模块识别三种NE,分别如下:

标记 含义
Nh 人名
Ni 机构名
Ns 地名

基于上述观察,我决定采用这种方案做中文命名实体工具测试接口:对于斯坦福Stanza的NER结果直接保留,对于 Baidu Lac 结果则保留强置信度的人名(PER)、地名(LOC)、机构名(ORG)、时间(TIME)提取结果,对于哈工大LTP的NER结果做个人名(Nh=>PER)、地名(Ns=>LOC)和机构名(Ni=>ORG)的映射,对于其他几个工具,去除斯坦福的老NLP工具CoreNLP,其他NLP工具则保留nr、ns、nt、t、nz这几个提取工具,并做了标记映射人名(nr=>PER),地名(ns=>LOC),机构名(nt=>ORG),时间(t=>TIME)。下面是几组测试结果,欢迎关注AINLP公众号试用,结果仅供参考,毕竟除了斯坦福Stanza、Baidu Lac以及哈工大LTP外,其他几个工具的“NER命名实体识别”功能是“强加”的,在实际使用中,可以根据需求采用:

一键收藏自然语言处理学习资源大礼包

虽然知道大多数同学都有资料收藏癖,还是给大家准备一份自然语言处理学习大礼包,其实是之前陆陆续续分享的NLP学习资源,包括自然语言处理、深度学习、机器学习、数学相关的经典课程、书籍和学习笔记,这些资料基本上都是公开渠道可以获得的,整理到一起,方便NLP爱好者收藏把玩。当然,学习的前提依然是”学自然语言处理,其实更应该学好英语“

获取方法很简单,关注AINLP公众号,后台回复关键词:ALL4NLP,一键打包收藏NLP学习资源:

这些自然语言处理相关资源列表如下,欢迎收藏:

相关的资源的过往文章大致介绍如下,不限于下述文章:

斯坦福大学自然语言处理经典入门课程-Dan Jurafsky 和 Chris Manning 教授授课

哥伦比亚大学经典自然语言处理公开课,数学之美中盛赞的柯林斯(Michael Collins)教授授课

认真推荐一份深度学习笔记:简约而不简单

Andrew Ng 老师新推的通俗人工智能课程以及其他相关资料

那些值得推荐和收藏的线性代数学习资源

Philipp Koehn大神的神经网络机器翻译学习资料:NMT Book

凸优化及无约束最优化相关资料

斯坦福大学深度学习自然语言处理课程CS224N 2019 全20个视频分享

自然语言处理经典书籍《Speech and Language Processing》第三版最新版下载(含第二版)

强化学习圣经:《强化学习导论》第二版(附PDF下载)

新书下载 | 面向机器学习的数学(Mathematics for Machine Learning)

Springer面向公众开放正版电子书籍,附65本数学、编程、数据挖掘、数据科学、数据分析、机器学习、深度学习、人工智能相关书籍链接及打包下载

最后,欢迎关注AINLP,回复"all4nlp"获取:

Springer面向公众开放正版电子书籍,附65本数学、编程、数据挖掘、数据科学、数据分析、机器学习、深度学习、人工智能相关书籍链接及打包下载

施普林格(Springer)是世界著名的科技期刊、图书出版公司,这次疫情期间面向公众免费开放了一批社科人文,自然科学等领域的正版电子书籍(据说是400多本),towardsdatascience 上有学者将其中65本机器学习和数据科学以及统计相关的免费教材下载链接整理了出来,我试了一下,无需注册,可以直接下载相关的PDF书籍,相当方便:Springer has released 65 Machine Learning and Data books for free(https://towardsdatascience.com/springer-has-released-65-machine-learning-and-data-books-for-free-961f8181f189)。

看了一下这份书单包括的书籍还是很棒的,包括数学类(多元微积分和几何、计算几何、偏微分、代数、线性代数、线性规划、概率和统计、统计学、统计学习、数学建模等)、编程类(数据结构与算法、Python编程、R语言、编程语言基础、面向对象分析和设计、数据库等)、数据挖掘、数据分析、数据科学、机器学习、人工智能、深度学习、计算机视觉,机器人等相关的电子书,甚至包括如何学习LaTex,远比想象的丰富很多。

这份清单的第一本书籍就是经典的“统计学习基础(ESL,The Elements of Statistical Learning)”, 进入书籍页面后,直接点击“Download PDF” 即可单独下载该书电子版:

Reddit上有网友提供了一个Google Drive的打包下载链接,包括其中64本书籍的PDF打包下载,可以直接下载:

https://www.reddit.com/r/opendirectories/comments/g91u12/google_drive_with_64_books_from_springer_about
https://drive.google.com/drive/folders/1rDJvZsz8EEuVVgZ43pwSvFRRKUo2TIIY

如果还是不方便,可以关注AINLP公众号,回复"sprg"获取百度网盘链接:

这份书籍清单和链接如下,我简单翻译了一下书名,供感兴趣的朋友参考:

The Elements of Statistical Learning(统计学习基础)

Trevor Hastie, Robert Tibshirani, Jerome Friedman

http://link.springer.com/openurl?genre=book&isbn=978-0-387-84858-7

Introductory Time Series with R(时间序列导论-基于R语言讲解)

Paul S.P. Cowpertwait, Andrew V. Metcalfe

http://link.springer.com/openurl?genre=book&isbn=978-0-387-88698-5

A Beginner’s Guide to R(R语言初学者指南)

Alain Zuur, Elena N. Ieno, Erik Meesters

http://link.springer.com/openurl?genre=book&isbn=978-0-387-93837-0

Introduction to Evolutionary Computing(进化计算导论)

A.E. Eiben, J.E. Smith

http://link.springer.com/openurl?genre=book&isbn=978-3-662-44874-8

Data Analysis(数据分析)

Siegmund Brandt

http://link.springer.com/openurl?genre=book&isbn=978-3-319-03762-2

Linear and Nonlinear Programming(线性和非线性规划)

David G. Luenberger, Yinyu Ye

http://link.springer.com/openurl?genre=book&isbn=978-3-319-18842-3

Introduction to Partial Differential Equations(偏微分方程简介)

David Borthwick

http://link.springer.com/openurl?genre=book&isbn=978-3-319-48936-0

Fundamentals of Robotic Mechanical Systems(机器人机械系统基础)

Jorge Angeles

http://link.springer.com/openurl?genre=book&isbn=978-3-319-01851-5

Data Structures and Algorithms with Python(Python数据结构和算法)

Kent D. Lee, Steve Hubbard

http://link.springer.com/openurl?genre=book&isbn=978-3-319-13072-9

Introduction to Partial Differential Equations(偏微分方程简介)

Peter J. Olver

http://link.springer.com/openurl?genre=book&isbn=978-3-319-02099-0

Methods of Mathematical Modelling(数学建模方法)

Thomas Witelski, Mark Bowen

http://link.springer.com/openurl?genre=book&isbn=978-3-319-23042-9

LaTeX in 24 Hours(24小时掌握LaTeX)

Dilip Datta

http://link.springer.com/openurl?genre=book&isbn=978-3-319-47831-9

Introduction to Statistics and Data Analysis(统计与数据分析导论)

Christian Heumann, Michael Schomaker, Shalabh

http://link.springer.com/openurl?genre=book&isbn=978-3-319-46162-5

Principles of Data Mining(数据挖掘原理)

Max Bramer

http://link.springer.com/openurl?genre=book&isbn=978-1-4471-7307-6

Computer Vision(计算机视觉)

Richard Szeliski

http://link.springer.com/openurl?genre=book&isbn=978-1-84882-935-0

Data Mining(数据挖掘)

Charu C. Aggarwal

http://link.springer.com/openurl?genre=book&isbn=978-3-319-14142-8

Computational Geometry(计算几何)

Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmars

http://link.springer.com/openurl?genre=book&isbn=978-3-540-77974-2

Robotics, Vision and Control(机器人,视觉与控制)

Peter Corke

http://link.springer.com/openurl?genre=book&isbn=978-3-319-54413-7

Statistical Analysis and Data Display(统计分析和数据展示)

Richard M. Heiberger, Burt Holland

http://link.springer.com/openurl?genre=book&isbn=978-1-4939-2122-5

Statistics and Data Analysis for Financial Engineering(金融工程统计与数据分析)

David Ruppert, David S. Matteson

http://link.springer.com/openurl?genre=book&isbn=978-1-4939-2614-5

Stochastic Processes and Calculus(随机过程与微积分)

Uwe Hassler

http://link.springer.com/openurl?genre=book&isbn=978-3-319-23428-1

Statistical Analysis of Clinical Data on a Pocket Calculator(袖珍计算器上的临床数据统计分析)

Ton J. Cleophas, Aeilko H. Zwinderman

http://link.springer.com/openurl?genre=book&isbn=978-94-007-1211-9

Clinical Data Analysis on a Pocket Calculator(袖珍计算器的临床数据分析)

Ton J. Cleophas, Aeilko H. Zwinderman

http://link.springer.com/openurl?genre=book&isbn=978-3-319-27104-0

The Data Science Design Manual(数据科学设计手册)

Steven S. Skiena

http://link.springer.com/openurl?genre=book&isbn=978-3-319-55444-0

An Introduction to Machine Learning(机器学习导论)

Miroslav Kubat

http://link.springer.com/openurl?genre=book&isbn=978-3-319-63913-0

Guide to Discrete Mathematics(离散数学指南)

Gerard O’Regan

http://link.springer.com/openurl?genre=book&isbn=978-3-319-44561-8

Introduction to Time Series and Forecasting(时间序列和预测简介)

Peter J. Brockwell, Richard A. Davis

http://link.springer.com/openurl?genre=book&isbn=978-3-319-29854-2

Multivariate Calculus and Geometry(多元微积分和几何)

Seán Dineen

http://link.springer.com/openurl?genre=book&isbn=978-1-4471-6419-7

Statistics and Analysis of Scientific Data(科学数据统计与分析)

Massimiliano Bonamente

http://link.springer.com/openurl?genre=book&isbn=978-1-4939-6572-4

Modelling Computing Systems(建模计算系统)

Faron Moller, Georg Struth

http://link.springer.com/openurl?genre=book&isbn=978-1-84800-322-4

Search Methodologies(搜索方法论)

Edmund K. Burke, Graham Kendall

http://link.springer.com/openurl?genre=book&isbn=978-1-4614-6940-7

Linear Algebra Done Right(线性代数应该这样学)

Sheldon Axler

http://link.springer.com/openurl?genre=book&isbn=978-3-319-11080-6

Linear Algebra(线性代数)

Jörg Liesen, Volker Mehrmann

http://link.springer.com/openurl?genre=book&isbn=978-3-319-24346-7

Algebra(代数)

Serge Lang

http://link.springer.com/openurl?genre=book&isbn=978-1-4613-0041-0

Understanding Analysis(理解分析学)

Stephen Abbott

http://link.springer.com/openurl?genre=book&isbn=978-1-4939-2712-8

Linear Programming(线性规划)

Robert J Vanderbei

http://link.springer.com/openurl?genre=book&isbn=978-1-4614-7630-6

Understanding Statistics Using R(通过R语言学习统计学)

Randall Schumacker, Sara Tomek

http://link.springer.com/openurl?genre=book&isbn=978-1-4614-6227-9

An Introduction to Statistical Learning(统计学习导论)

Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani

http://link.springer.com/openurl?genre=book&isbn=978-1-4614-7138-7

Statistical Learning from a Regression Perspective(回归视角的统计学习)

Richard A. Berk

http://link.springer.com/openurl?genre=book&isbn=978-3-319-44048-4

Applied Partial Differential Equations(应用偏微分方程)

J. David Logan

http://link.springer.com/openurl?genre=book&isbn=978-3-319-12493-3

Robotics(机器人技术)

Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo

http://link.springer.com/openurl?genre=book&isbn=978-1-84628-642-1

Regression Modeling Strategies(回归建模策略)

Frank E. Harrell , Jr.

http://link.springer.com/openurl?genre=book&isbn=978-3-319-19425-7

A Modern Introduction to Probability and Statistics(概率统计的现代视角导论)

F.M. Dekking, C. Kraaikamp, H.P. Lopuhaä, L.E. Meester

http://link.springer.com/openurl?genre=book&isbn=978-1-84628-168-6

The Python Workbook(Python手册)

Ben Stephenson

http://link.springer.com/openurl?genre=book&isbn=978-3-319-14240-1

Machine Learning in Medicine — a Complete Overview(医学中的机器学习-完整概述)

Ton J. Cleophas, Aeilko H. Zwinderman

http://link.springer.com/openurl?genre=book&isbn=978-3-319-15195-3

Object-Oriented Analysis, Design and Implementation(面向对象的分析,设计与实现)

Brahma Dathan, Sarnath Ramnath

http://link.springer.com/openurl?genre=book&isbn=978-3-319-24280-4

Introduction to Data Science(数据科学导论)

Laura Igual, Santi Seguí

http://link.springer.com/openurl?genre=book&isbn=978-3-319-50017-1

Applied Predictive Modeling(应用预测建模)

Max Kuhn, Kjell Johnson

http://link.springer.com/openurl?genre=book&isbn=978-1-4614-6849-3

Python For ArcGIS(面向ArcGIS的Python指南)

Laura Tateosian

http://link.springer.com/openurl?genre=book&isbn=978-3-319-18398-5

Concise Guide to Databases(简明数据库指南)

Peter Lake, Paul Crowther

http://link.springer.com/openurl?genre=book&isbn=978-1-4471-5601-7

Digital Image Processing(数字图像处理)

Wilhelm Burger, Mark J. Burge

http://link.springer.com/openurl?genre=book&isbn=978-1-4471-6684-9

Bayesian Essentials with R(通过R学习贝叶斯基础)

Jean-Michel Marin, Christian P. Robert

http://link.springer.com/openurl?genre=book&isbn=978-1-4614-8687-9

Robotics, Vision and Control(机器人,视觉与控制)

Peter Corke

http://link.springer.com/openurl?genre=book&isbn=978-3-642-20144-8

Foundations of Programming Languages(编程语言基础)

Kent D. Lee

http://link.springer.com/openurl?genre=book&isbn=978-3-319-70790-7

Introduction to Artificial Intelligence(人工智能导论)

Wolfgang Ertel

http://link.springer.com/openurl?genre=book&isbn=978-3-319-58487-4

Introduction to Deep Learning(深度学习导论)

Sandro Skansi

http://link.springer.com/openurl?genre=book&isbn=978-3-319-73004-2

Linear Algebra and Analytic Geometry for Physical Sciences(物理科学的线性代数和解析几何)

Giovanni Landi, Alessandro Zampini

http://link.springer.com/openurl?genre=book&isbn=978-3-319-78361-1

Applied Linear Algebra(应用线性代数)

Peter J. Olver, Chehrzad Shakiban

http://link.springer.com/openurl?genre=book&isbn=978-3-319-91041-3

Neural Networks and Deep Learning(神经网络与深度学习)

Charu C. Aggarwal

http://link.springer.com/openurl?genre=book&isbn=978-3-319-94463-0

Data Science and Predictive Analytics(数据科学与预测分析)

Ivo D. Dinov

http://link.springer.com/openurl?genre=book&isbn=978-3-319-72347-1

Analysis for Computer Scientists(面向计算机科学家的分析学)

Michael Oberguggenberger, Alexander Ostermann

http://link.springer.com/openurl?genre=book&isbn=978-3-319-91155-7

Excel Data Analysis(Excel数据分析)

Hector Guerrero

http://link.springer.com/openurl?genre=book&isbn=978-3-030-01279-3

A Beginners Guide to Python 3 Programming(Python 3编程入门指南)

John Hunt

http://link.springer.com/openurl?genre=book&isbn=978-3-030-20290-3

Advanced Guide to Python 3 Programming(Python 3编程高级指南)

John Hunt

http://link.springer.com/openurl?genre=book&isbn=978-3-030-25943-3

感兴趣的同学可以关注下方公众号,回复"sprg"获取打包下载网盘链接:

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

众所周知,斯坦福大学自然语言处理组出品了一系列NLP工具包,但是大多数都是用Java写得,对于Python用户不是很友好。几年前我曾基于斯坦福Java工具包和NLTK写过一个简单的中文分词接口:Python自然语言处理实践: 在NLTK中使用斯坦福中文分词器,不过用起来也不是很方便。深度学习自然语言处理时代,斯坦福大学自然语言处理组开发了一个纯Python版本的深度学习NLP工具包:Stanza - A Python NLP Library for Many Human Languages,前段时间,Stanza v1.0.0 版本正式发布,算是一个里程碑:

Stanza 是一个纯Python实现的自然语言处理工具包,这个区别于斯坦福大学自然语言处理组之前一直维护的Java实现 CoreNLP 等自然语言处理工具包,对于Python用户来说,就更方便调用了,并且Stanza还提供了一个Python接口可用于CoreNLP的调用 ,对于一些没有在Stanza中实现的NLP功能,可以通过这个接口调用 CoreNLP 作为补充。 Stanza的深度学习自然语言处理模块基于PyTorch实现,用户可以基于自己标注的数据构建更准确的神经网络模型用于训练、评估和使用,当然,如果有GPU机器加持,速度可以更快。Stanza目前支持66种语言的文本分析,包括自动断句、Tokenize(或者分词)、词性标注和形态素分析、依存句法分析以及命名实体识别。

To summarize, Stanza features:

Native Python implementation requiring minimal efforts to set up;
Full neural network pipeline for robust text analytics, including tokenization, multi-word token (MWT) expansion, lemmatization, part-of-speech (POS) and morphological features tagging, dependency parsing, and named entity recognition;
Pretrained neural models supporting 66 (human) languages;
A stable, officially maintained Python interface to CoreNLP.

试用了一下Stanza,还是很方便的,官方文档很清晰,可以直接参考。简单记录一下中英文模块的安装和使用,以下是在Ubuntu16.04, Python 3.6.8 环境下,请注意,Stanza需要Python3.6及以上的版本,如果低于这个版本,用 pip install stanza 安装的stanza非斯坦福大学NLP组的Stanza。

安装Stanza的方法有多种,这里是virtualenv虚拟环境下通过 pip install stanza 安装stanza及其相关依赖的,具体可以参考Stanza的安装文档:https://stanfordnlp.github.io/stanza/installation_usage.html

安装完成后,可以尝试使用,不过使用某种语言的NLP工具包时,还需要先下载相关的打包模型,这个在第一次使用时会有提示和操作,以后就无需下载了,我们先从斯坦福官方的例子走起,以英文为例:

In [1]: import stanza                                                                             
 
# 这里因为已经下载过英文模型打包文件,所以可以直接使用,如果没有下载过,初次使用会有一个下载过程
In [2]: stanza.download('en')                                                                     
Downloading https://raw.githubusercontent.com/stanfordnlp/stanza-resources/master/resources_1.0.0.Downloading https://raw.githubusercontent.com/stanfordnlp/stanza-resources/master/resources_1.0.0.json: 116kB [00:00, 154kB/s]
2020-04-11 23:13:14 INFO: Downloading default packages for language: en (English)...
2020-04-11 23:13:15 INFO: File exists: /home/textminer/stanza_resources/en/default.zip.
2020-04-11 23:13:19 INFO: Finished downloading models and saved to /home/textminer/stanza_resources.
 
# Pipeline是Stanza里一个重要的概念
In [3]: en_nlp = stanza.Pipeline('en')                                                            
2020-04-11 23:14:27 INFO: Loading these models for language: en (English):
=========================
| Processor | Package   |
-------------------------
| tokenize  | ewt       |
| pos       | ewt       |
| lemma     | ewt       |
| depparse  | ewt       |
| ner       | ontonotes |
=========================
 
2020-04-11 23:14:28 INFO: Use device: gpu
2020-04-11 23:14:28 INFO: Loading: tokenize
2020-04-11 23:14:30 INFO: Loading: pos
2020-04-11 23:14:30 INFO: Loading: lemma
2020-04-11 23:14:30 INFO: Loading: depparse
2020-04-11 23:14:31 INFO: Loading: ner
2020-04-11 23:14:32 INFO: Done loading processors!
 
In [5]: doc = en_nlp("Barack Obama was born in Hawaii.")                                          
 
In [6]: print(doc)                                                                                
[
  [
    {
      "id": "1",
      "text": "Barack",
      "lemma": "Barack",
      "upos": "PROPN",
      "xpos": "NNP",
      "feats": "Number=Sing",
      "head": 4,
      "deprel": "nsubj:pass",
      "misc": "start_char=0|end_char=6"
    },
    {
      "id": "2",
      "text": "Obama",
      "lemma": "Obama",
      "upos": "PROPN",
      "xpos": "NNP",
      "feats": "Number=Sing",
      "head": 1,
      "deprel": "flat",
      "misc": "start_char=7|end_char=12"
    },
    {
      "id": "3",
      "text": "was",
      "lemma": "be",
      "upos": "AUX",
      "xpos": "VBD",
      "feats": "Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin",
      "head": 4,
      "deprel": "aux:pass",
      "misc": "start_char=13|end_char=16"
    },
    {
      "id": "4",
      "text": "born",
      "lemma": "bear",
      "upos": "VERB",
      "xpos": "VBN",
      "feats": "Tense=Past|VerbForm=Part|Voice=Pass",
      "head": 0,
      "deprel": "root",
      "misc": "start_char=17|end_char=21"
    },
    {
      "id": "5",
      "text": "in",
      "lemma": "in",
      "upos": "ADP",
      "xpos": "IN",
      "head": 6,
      "deprel": "case",
      "misc": "start_char=22|end_char=24"
    },
    {
      "id": "6",
      "text": "Hawaii",
      "lemma": "Hawaii",
      "upos": "PROPN",
      "xpos": "NNP",
      "feats": "Number=Sing",
      "head": 4,
      "deprel": "obl",
      "misc": "start_char=25|end_char=31"
    },
    {
      "id": "7",
      "text": ".",
      "lemma": ".",
      "upos": "PUNCT",
      "xpos": ".",
      "head": 4,
      "deprel": "punct",
      "misc": "start_char=31|end_char=32"
    }
  ]
]
 
In [7]: print(doc.entities)                                                                       
[{
  "text": "Barack Obama",
  "type": "PERSON",
  "start_char": 0,
  "end_char": 12
}, {
  "text": "Hawaii",
  "type": "GPE",
  "start_char": 25,
  "end_char": 31
}]

Pipeline是Stanza里的一个重要概念:

可以通过pipeline预加载不同语言的模型,也可以通过pipeline选择不同的处理模块,还可以选择是否使用GPU,这里我们再试试中文模型:

In [9]: import stanza                                                                             
 
# 测试一下中文模型(因为我这边中文模型已经下载过了,所以跳过download环节)
In [10]: zh_nlp = stanza.Pipeline('zh')                                                           
2020-04-12 11:32:47 INFO: "zh" is an alias for "zh-hans"
2020-04-12 11:32:47 INFO: Loading these models for language: zh-hans (Simplified_Chinese):
=========================
| Processor | Package   |
-------------------------
| tokenize  | gsdsimp   |
| pos       | gsdsimp   |
| lemma     | gsdsimp   |
| depparse  | gsdsimp   |
| ner       | ontonotes |
=========================
 
2020-04-12 11:32:48 INFO: Use device: gpu
2020-04-12 11:32:48 INFO: Loading: tokenize
2020-04-12 11:32:49 INFO: Loading: pos
2020-04-12 11:32:51 INFO: Loading: lemma
2020-04-12 11:32:51 INFO: Loading: depparse
2020-04-12 11:32:53 INFO: Loading: ner
2020-04-12 11:32:54 INFO: Done loading processors!
 
In [11]: text = """英国首相约翰逊6日晚因病情恶化,被转入重症监护室治疗。英国首相府发言人说,目前约
    ...: 翰逊意识清晰,将他转移到重症监护室只是预防性措施。发言人说,约翰逊被转移到重症监护室前已
    ...: 安排英国外交大臣拉布代表他处理有关事务。"""                                              
 
In [12]: doc = zh_nlp(text)  
 
In [13]: for sent in doc.sentences: 
    ...:     print("Sentence:" + sent.text) # 断句
    ...:     print("Tokenize:" + ' '.join(token.text for token in sent.tokens)) # 中文分词
    ...:     print("UPOS: " + ' '.join(f'{word.text}/{word.upos}' for word in sent.words)) # 词性标注(UPOS)
    ...:     print("XPOS: " + ' '.join(f'{word.text}/{word.xpos}' for word in sent.words)) # 词性标注(XPOS)
    ...:     print("NER: " + ' '.join(f'{ent.text}/{ent.type}' for ent in sent.ents)) # 命名实体识别
    ...:                                                                                          
Sentence:英国首相约翰逊6日晚因病情恶化,被转入重症监护室治疗。
Tokenize:英国 首相 约翰逊 6 日 晚因 病情 恶化 , 被 转入 重症 监护 室 治疗 。
UPOS: 英国/PROPN 首相/NOUN 约翰逊/PROPN 6/NUM 日/NOUN 晚因/NOUN 病情/NOUN 恶化/VERB ,/PUNCT 被/VERB 转入/VERB 重症/NOUN 监护/VERB 室/PART 治疗/NOUN 。/PUNCT
XPOS: 英国/NNP 首相/NN 约翰逊/NNP 6/CD 日/NNB 晚因/NN 病情/NN 恶化/VV ,/, 被/BB 转入/VV 重症/NN 监护/VV 室/SFN 治疗/NN 。/.
NER: 英国/GPE 约翰逊/PERSON 6日/DATE
Sentence:英国首相府发言人说,目前约翰逊意识清晰,将他转移到重症监护室只是预防性措施。
Tokenize:英国 首相 府 发言 人 说 , 目前 约翰逊 意识 清晰 , 将 他 转移 到 重症 监护 室 只 是 预防 性 措施 。
UPOS: 英国/PROPN 首相/NOUN 府/PART 发言/VERB 人/PART 说/VERB ,/PUNCT 目前/NOUN 约翰逊/PROPN 意识/NOUN 清晰/ADJ ,/PUNCT 将/ADP 他/PRON 转移/VERB 到/VERB 重症/NOUN 监护/VERB 室/PART 只/ADV 是/AUX 预防/VERB 性/PART 措施/NOUN 。/PUNCT
XPOS: 英国/NNP 首相/NN 府/SFN 发言/VV 人/SFN 说/VV ,/, 目前/NN 约翰逊/NNP 意识/NN 清晰/JJ ,/, 将/BB 他/PRP 转移/VV 到/VV 重症/NN 监护/VV 室/SFN 只/RB 是/VC 预防/VV 性/SFN 措施/NN 。/.
NER: 英国/GPE 约翰逊/PERSON
Sentence:发言人说,约翰逊被转移到重症监护室前已安排英国外交大臣拉布代表他处理有关事务。
Tokenize:发言 人 说 , 约翰逊 被 转移 到 重症 监护 室 前 已 安排 英国 外交 大臣 拉布 代表 他 处理 有关 事务 。
UPOS: 发言/VERB 人/PART 说/VERB ,/PUNCT 约翰逊/PROPN 被/VERB 转移/VERB 到/VERB 重症/NOUN 监护/VERB 室/PART 前/ADP 已/ADV 安排/VERB 英国/PROPN 外交/NOUN 大臣/NOUN 拉布/PROPN 代表/VERB 他/PRON 处理/VERB 有关/ADJ 事务/NOUN 。/PUNCT
XPOS: 发言/VV 人/SFN 说/VV ,/, 约翰逊/NNP 被/BB 转移/VV 到/VV 重症/NN 监护/VV 室/SFN 前/IN 已/RB 安排/VV 英国/NNP 外交/NN 大臣/NN 拉布/NNP 代表/VV 他/PRP 处理/VV 有关/JJ 事务/NN 。/.
NER: 约翰逊/PERSON 英国/GPE 拉布/PERSON

如果用户不需要使用命名实体识别、依存句法等功能,可以在模型下载或者预加载阶段或者构建Pipeline时选择自己需要的功能模块处理器,例如可以只选择中文分词和词性标注,或者单一的中文分词功能,这里以“我爱自然语言处理”为例:

 
# 可以在使用时只选择自己需要的功能,这样下载的模型包更小,节约时间,这里因为之前已经下载过全量的中文模型,所以不再有下载过程,只是用于演示
In [14]: stanza.download('zh', processors='tokenize,pos')                                         
Downloading https://raw.githubusercontent.com/stanfordnlp/stanza-resources/master/resources_1.0.0.Downloading https://raw.githubusercontent.com/stanfordnlp/stanza-resources/master/resources_1.0.0.json: 116kB [00:00, 554kB/s]
2020-04-15 07:27:38 INFO: "zh" is an alias for "zh-hans"
2020-04-15 07:27:38 INFO: Downloading these customized packages for language: zh-hans (Simplified_Chinese)...
=======================
| Processor | Package |
-----------------------
| tokenize  | gsdsimp |
| pos       | gsdsimp |
| pretrain  | gsdsimp |
=======================
 
2020-04-15 07:27:38 INFO: File exists: /home/textminer/stanza_resources/zh-hans/tokenize/gsdsimp.pt.
2020-04-15 07:27:38 INFO: File exists: /home/textminer/stanza_resources/zh-hans/pos/gsdsimp.pt.
2020-04-15 07:27:39 INFO: File exists: /home/textminer/stanza_resources/zh-hans/pretrain/gsdsimp.pt.
2020-04-15 07:27:39 INFO: Finished downloading models and saved to /home/textminer/stanza_resources.
 
# 构建Pipeline时选择中文分词和词性标注,对其他语言同理
In [15]: zh_nlp = stanza.Pipeline('zh', processors='tokenize,pos')                                
2020-04-15 07:28:12 INFO: "zh" is an alias for "zh-hans"
2020-04-15 07:28:12 INFO: Loading these models for language: zh-hans (Simplified_Chinese):
=======================
| Processor | Package |
-----------------------
| tokenize  | gsdsimp |
| pos       | gsdsimp |
=======================
 
2020-04-15 07:28:13 INFO: Use device: gpu
2020-04-15 07:28:13 INFO: Loading: tokenize
2020-04-15 07:28:15 INFO: Loading: pos
2020-04-15 07:28:17 INFO: Done loading processors!
 
In [16]: doc = zh_nlp("我爱自然语言处理")                                                         
 
In [17]: print(doc)                                                                               
[
  [
    {
      "id": "1",
      "text": "我",
      "upos": "PRON",
      "xpos": "PRP",
      "feats": "Person=1",
      "misc": "start_char=0|end_char=1"
    },
    {
      "id": "2",
      "text": "爱",
      "upos": "VERB",
      "xpos": "VV",
      "misc": "start_char=1|end_char=2"
    },
    {
      "id": "3",
      "text": "自然",
      "upos": "NOUN",
      "xpos": "NN",
      "misc": "start_char=2|end_char=4"
    },
    {
      "id": "4",
      "text": "语言",
      "upos": "NOUN",
      "xpos": "NN",
      "misc": "start_char=4|end_char=6"
    },
    {
      "id": "5",
      "text": "处理",
      "upos": "VERB",
      "xpos": "VV",
      "misc": "start_char=6|end_char=8"
    }
  ]
]
 
# 这里单独使用Stanza的中文分词器
In [18]: zh_nlp = stanza.Pipeline('zh', processors='tokenize')                                    
2020-04-15 07:31:27 INFO: "zh" is an alias for "zh-hans"
2020-04-15 07:31:27 INFO: Loading these models for language: zh-hans (Simplified_Chinese):
=======================
| Processor | Package |
-----------------------
| tokenize  | gsdsimp |
=======================
 
2020-04-15 07:31:27 INFO: Use device: gpu
2020-04-15 07:31:27 INFO: Loading: tokenize
2020-04-15 07:31:27 INFO: Done loading processors!
 
In [19]: doc = zh_nlp("我爱自然语言处理")                                                         
 
In [20]: print(doc)                                                                               
[
  [
    {
      "id": "1",
      "text": "我",
      "misc": "start_char=0|end_char=1"
    },
    {
      "id": "2",
      "text": "爱",
      "misc": "start_char=1|end_char=2"
    },
    {
      "id": "3",
      "text": "自然",
      "misc": "start_char=2|end_char=4"
    },
    {
      "id": "4",
      "text": "语言",
      "misc": "start_char=4|end_char=6"
    },
    {
      "id": "5",
      "text": "处理",
      "misc": "start_char=6|end_char=8"
    }
  ]
]

在Pipeline构建时,除了选择不同的功能模块处理器外,对于有多个模型可以选择使用的功能模块,也可以指定需要使用哪个模型,另外也可以指定Log级别,这些可以参考官方文档。还有一点,如果你觉得使用GPU没有必要,还可以选择使用CPU:

In [21]: zh_doc = stanza.Pipeline('zh', use_gpu=False)                                            
2020-04-15 07:44:04 INFO: "zh" is an alias for "zh-hans"
2020-04-15 07:44:04 INFO: Loading these models for language: zh-hans (Simplified_Chinese):
=========================
| Processor | Package   |
-------------------------
| tokenize  | gsdsimp   |
| pos       | gsdsimp   |
| lemma     | gsdsimp   |
| depparse  | gsdsimp   |
| ner       | ontonotes |
=========================
 
2020-04-15 07:44:04 INFO: Use device: cpu
2020-04-15 07:44:04 INFO: Loading: tokenize
2020-04-15 07:44:04 INFO: Loading: pos
2020-04-15 07:44:06 INFO: Loading: lemma
2020-04-15 07:44:06 INFO: Loading: depparse
2020-04-15 07:44:08 INFO: Loading: ner
2020-04-15 07:44:09 INFO: Done loading processors!

我将Stanza的中英文模块部署在了AINLP的后台,使用的就是CPU,感兴趣的同学可以关注AINLP公众号,对话测试,Stanza+分析内容触发,会自动判断语言选择不同的Pipeline:

推荐两份NLP读书笔记和一份NLTK书籍代码中文注释版

推荐一下AINLP技术交流群里 zYx.tom 同学贡献给大家的两份NLP读书笔记和一份中文注释代码,包括:

《自然语言处理综论》中文版第二版学习笔记

《计算机自然语言处理》学习笔记

《Python自然语言处理》学习代码的中文注释版本:NLTK-Python-CN

作者博客:https://zhuyuanxiang.github.io/

由作者授权,我把2份pdf文件放到github上了,感兴趣的同学可以直接在github上下载:

https://github.com/panyang/AINLP-Resource/tree/master/zYx.Tom

自然语言处理综论》是NLP领域的经典著作,第一版、第二版国内都有中文翻译版,目前英文版第三版《Speech and Language Processing (3rd ed. draft)》正在撰写中,已完结的章节草稿可以直接从slp3官网下载:https://web.stanford.edu/~jurafsky/slp3/ ,加了很多深度学习自然语言处理的相关章节,这里引用李纪为博士《初入NLP领域的一些小建议》中的一段描述,供计划学习这本书的同学参考:

了解NLP的最基本知识:Jurafsky和Martin的Speech and Language Processing是领域内的经典教材,里面包含了NLP的基础知识、语言学扫盲知识、基本任务以及解决思路。阅读此书会接触到很多NLP的最基本任务和知识,比如tagging, 各种parsing,coreference, semantic role labeling等等等等。这对于全局地了解NLP领域有着极其重要的意义。书里面的知识并不需要烂熟于心,但是刷上一两遍,起码对于NLP任务有基本认识,下次遇到了知道去哪里找还是非常有意义的。

《计算机自然语言处理》是哈工大王晓龙、关毅两位老师的中文NLP著作,我在刚入门NLP的时候读过,但是已经很久了,这本书在我早期的博文里记述过:《几本自然语言处理入门书》,唯一的印象就是第一次了解到本科母校HIT在中文NLP领域是非常厉害的。这本书貌似已经无法在电商网站买到,感兴趣的同学可以看看zYx.Tom同学的学习笔记。

NLTK是经典的Python NLP工具包,配套的书籍《Natural Language Processing with Python》目前也有了中文翻译版本,感兴趣的同学可以参考zYx.Tom同学的这份《Python自然语言处理》学习代码的中文注释版本:NLTK-Python-CN

最后,欢迎大家关注AINLP公众号,加入AINLP技术交流群,一起维护一个NLP技术交流环境。

推荐一份中文数据,再试试汉字、词语、成语、歇后语在线检索

前段时间给公众号新增了一个成语接龙功能:AINLP公众号对话接口新增成语接龙,这个里面提到的项目用到了一份成语数据,包含了2万多条成语数据和释义。不过这个数据之外,推荐一个更棒的Github项目:

pwxcoo/chinese-xinhuahttps://github.com/pwxcoo/chinese-xinhua

这个项目收录了收录了 14032 条歇后语,16142 个汉字,264434 个词语,31648 个成语,并且以json格式提供了相关数据,非常方便:

项目结构:

chinese-xinhua/
|
+- data/ <-- 数据文件夹
|  |
|  +- idiom.json <-- 成语
|  |
|  +- word.json <-- 汉字
|  |
|  +- xiehouyu.json <-- 歇后语
|  |
|  +- ci.json <-- 词语

汉字例子:

    {
        "word": "吖",
        "oldword": "吖",
        "strokes": "6",
        "pinyin": "ā",
        "radicals": "口",
        "explanation": "喊叫天~地。\n 形容喊叫的声音高声叫~~。\n\n 吖ā[吖啶黄](-dìnghuáng)〈名〉一种注射剂。\n ────────────────—\n \n 吖yā 1.呼;喊。",
        "more": "吖 a 部首 口 部首笔画 03 总笔画 06  吖2\nyā\n喊,呼喊 [cry]\n不索你没来由这般叫天吖地。--高文秀《黑旋风》\n吖\nyā\n喊声\n则听得巡院家高声的叫吖吖。--张国宾《合汗衫》\n另见ā\n吖1\nā\n--外国语的音译,主要用于有机化学。如吖嗪\n吖啶\nādìng\n[acridine] 一种无色晶状微碱性三环化合物c13h9n,存在于煤焦油的粗蒽馏分中,是制造染料和药物(如吖啶黄素和奎吖因)的重要母体化合物\n吖1\nyā ㄧㄚˉ\n(1)\n喊叫天~地。\n(2)\n形容喊叫的声音高声叫~~。\n郑码jui,u5416,gbkdfb9\n笔画数6,部首口,笔顺编号251432\n吖2\nā ㄚˉ\n叹词,相当于呵”。\n郑码jui,u5416,gbkdfb9\n笔画数6,部首口,笔顺编号251432"
    }

词典例子:

{
    "ci": "总计", 
    "explanation": "1.总共计算。 \n2.犹统计。"}

成语例子:

{
    "derivation": "清·嬴宗季女《六月霜·恤纬》劝夫人省可闲愁绪,足食丰衣无所虑,何况俺爷贵胄都时誉。”", 
    "example": "无", 
    "explanation": "丰衣足食。形容生活富裕。", 
    "pinyin": "zú shí fēng yī", 
    "word": "足食丰衣", "abbreviation": 
    "zsfy"
}

歇后语例子:

   {
        "riddle": "正月十五云遮月",
        "answer": "不露脸"
    },
    {
        "riddle": "正月十五贴门神",
        "answer": "晚了半月"
    },
    {
        "riddle": "正月十五贴春联",
        "answer": "晚了半月了"
    },
    {
        "riddle": "正月十五卖元宵",
        "answer": "抱成团"
    },
    {
        "riddle": "正月十五看花灯",
        "answer": "走着瞧"
    },
    {
        "riddle": "正月十五赶庙会",
        "answer": "随大流"
    }

我把这份数据放到了Elasticsearch里,并且通过ES的Python接口elasticsearch-py提供后端检索服务,现在可以通过AINLP公众号对话接口检索了,感兴趣的同学可以一试,包括:

汉字检索:

词语检索:

成语检索:

歇后语检索:

感兴趣的同学可以关注AINLP公众号,直接公众号对话测试,更多功能可以参考:
一个有趣有AI的NLP公众号

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn

本文链接地址:推荐一份中文数据,再试试汉字、词语、成语、歇后语在线检索 http://www.52nlp.cn/?p=12087

AINLP公众号新增SnowNLP情感分析模块

上周给AINLP公众号对话增加了百度中文情感分析接口:百度深度学习中文情感分析工具Senta试用及在线测试,很多同学通过公众号对话进行测试,玩得很嗨,不过感觉中文情感分析的成熟工具还是不多。这个周末调研了一下之前用于测试中文分词和词性标注的工具,发现SnowNLP和HanLP提供情感分析的接口,不过后者貌似没有提供Python接口,而SnowNLP作为原生的Python中文自然语言处理工具包,用起来还是比较方便的,唯一的问题是它的训练语料覆盖领域,官方文档是这样说的:

SnowNLP: https://github.com/isnowfy/snownlp

情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)

使用起来也很简单,注意SnowNLP的情感分析只有正向概率,以下测试例子也有bad case:

In [1]: from snownlp import SnowNLP                                            
 
In [2]: s = SnowNLP('我爱自然语言处理')                                        
 
In [3]: s.sentiments                                                           
Out[3]: 0.9243733698974206
 
In [4]: s = SnowNLP('我不爱自然语言处理')                                      
 
In [5]: s.sentiments                                                           
Out[5]: 0.8043511626271524
 
In [6]: s = SnowNLP('太难吃了')                                                
 
In [7]: s.sentiments                                                           
Out[7]: 0.27333037073511146

感兴趣的同学可以直接关注AINLP公众号,直接测试这两个中文情感分析模块:BaiduSenta和SnowNLP


继续阅读

百度深度学习中文情感分析工具Senta试用及在线测试

情感分析是自然语言处理里面一个热门话题,去年参加AI Challenger时关注了一下细粒度情感分析赛道,当时模仿baseline写了一个fasttext版本:AI Challenger 2018 细粒度用户评论情感分析 fastText Baseline ,至今不断有同学在star这个项目:fastText-for-AI-Challenger-Sentiment-Analysis

周末通过PaddleHub试用了一下百度的深度学习中文情感分析工具Senta,还是很方便,于是,将这个作为中文情感分析的一个技能点加入到了AINLP公众号的对话中,感兴趣的同学可以先测试:

至于安装和使用,还是简单说一下,以下是在Ubuntu16.04, Python3.x virtualenv环境下安装和测试。

安装直接通过pip install即可:

pip install paddlepaddle(这里用的是CPU版本)
pip install paddlehub

关于如何使用百度这个中文情感分析工具,最直接的方法还是follow官方demo脚本:

PaddleHub/demo/senta/senta_demo.py

在iPython中大致如下调用:

Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.
 
In [1]: import paddlehub as hub                                                                 
 
In [2]: senta = hub.Module(name="senta_bilstm")                                                 
2019-07-06 22:33:01,181-INFO: Installing senta_bilstm module
2019-07-06 22:33:01,182-INFO: Module senta_bilstm already installed in /home/textminer/.paddlehub/modules/senta_bilstm
 
In [3]: test_text = ["这家餐厅很好吃", "这部电影真的很差劲","我爱自然语言处理"]                
 
In [4]: input_dict = {"text": test_text}                                                        
 
In [5]: results = senta.sentiment_classify(data=input_dict)                                     
2019-07-06 22:33:53,835-INFO: 13 pretrained paramaters loaded by PaddleHub
2019-07-06 22:33:53,839-INFO: 20 pretrained paramaters loaded by PaddleHub
 
In [6]: for result in results: 
   ...:     print(result) 
   ...:                                                                                         
{'positive_probs': 0.9363, 'text': '这家餐厅很好吃', 'sentiment_key': 'positive', 'negative_probs': 0.0637, 'sentiment_label': 2}
{'positive_probs': 0.0213, 'text': '这部电影真的很差劲', 'sentiment_key': 'negative', 'negative_probs': 0.9787, 'sentiment_label': 0}
{'positive_probs': 0.9501, 'text': '我爱自然语言处理', 'sentiment_key': 'positive', 'negative_probs': 0.0499, 'sentiment_label': 2}

继续阅读

百度深度学习中文词法分析工具LAC试用之旅

之前在调研中文分词词性标注相关工具的时候就发现了百度的深度学习中文词法分析工具:baidu/lac(https://github.com/baidu/lac),但是通过这个项目github上的文档描述以及实际动手尝试源码编译安装发现非常繁琐,缺乏通常中文分词工具的易用性,所以第一次接触完百度lac之后就放弃了:

LAC是一个联合的词法分析模型,整体性地完成中文分词、词性标注、专名识别任务。LAC既可以认为是Lexical Analysis of Chinese的首字母缩写,也可以认为是LAC Analyzes Chinese的递归缩写。

LAC基于一个堆叠的双向GRU结构,在长文本上准确复刻了百度AI开放平台上的词法分析算法。效果方面,分词、词性、专名识别的整体准确率95.5%;单独评估专名识别任务,F值87.1%(准确90.3,召回85.4%),总体略优于开放平台版本。在效果优化的基础上,LAC的模型简洁高效,内存开销不到100M,而速度则比百度AI开放平台提高了57%。

本项目依赖Paddle v0.14.0版本。如果您的Paddle安装版本低于此要求,请按照安装文档中的说明更新Paddle安装版本。如果您使用的Paddle是v1.1以后的版本,请使用该项目的分支for_paddle_v1.1。注意,LAC模块中的conf目录下的很多文件是采用git-lfs存储,使用git clone时,需要先安装git-lfs。

为了达到和机器运行环境的最佳匹配,我们建议基于源码编译安装Paddle,后文也将展开讨论一些编译安装的细节。当然,如果您发现符合机器环境的预编译版本在官网发布,也可以尝试直接选用。

最近发现百度将自己的一些自然语言处理工具整合在PaddleNLP下,文档写得相对清楚多了:

PaddleNLP是百度开源的工业级NLP工具与预训练模型集,能够适应全面丰富的NLP任务,方便开发者灵活插拔尝试多种网络结构,并且让应用最快速达到工业级效果。

PaddleNLP完全基于PaddlePaddle Fluid开发,并提供依托于百度百亿级大数据的预训练模型,能够极大地方便NLP研究者和工程师快速应用。使用者可以用PaddleNLP快速实现文本分类、文本匹配、序列标注、阅读理解、智能对话等NLP任务的组网、建模和部署,而且可以直接使用百度开源工业级预训练模型进行快速应用。用户在极大地减少研究和开发成本的同时,也可以获得更好的基于工业实践的应用效果。

继续阅读

八款中文词性标注工具使用及在线测试

结束了中文分词工具的安装、使用及在线测试,开启中文词性标注在线测试之旅,一般来说,中文分词工具大多数都附带词性标注功能的,这里测试了之前在AINLP公众号上线的8款中文分词模块或者工具,发现它们都是支持中文词性标注的,这里面唯一的区别,就是各自用的词性标注集可能有不同:

以下逐一介绍这八个工具的中文词性标注功能的使用方法,至于安装,这里简要介绍,或者可以参考之前这篇文章:Python中文分词工具大合集:安装、使用和测试,以下是在Ubuntu16.04 & Python3.x的环境下安装及测试。
继续阅读