百度 LAC 2.0 极速体验,这是一个值得拥有的中文词法分析工具

关于中文词法分析(中文分词、词性标注、命名实体识别)相关的工具,我们在之前已经多次提到过百度LAChttps://github.com/baidu/lac),除了在易用性上稍弱外,其他方面,特别是NER在横向对比中还是很亮眼的。最近百度NLP发布了LAC2.0:开源!我知道你不知道,百度开源词法LAC 2.0帮你更懂中文,看完文章的第一感受就是易用性大大加强了,之前需要通过PaddleNLP或者PaddleHub调用lac,现在 "pip install lac" 后即可直接调用,相当方便。所以花了一点时间,把 LAC2.0 单独作为一个接口部署在AINLP公众号的自然语言处理工具测试平台了,感兴趣的同学可以关注AINLP公众号,通过公众号对话测试,输入"LAC 中文文本"直接获取百度LAC的中文文词、词性标注、NER识别结果:

关于百度LAC,首先看一下官方主页的介绍:

LAC全称Lexical Analysis of Chinese,是百度自然语言处理部研发的一款联合的词法分析工具,实现中文分词、词性标注、专名识别等功能。该工具具有以下特点与优势:

效果好:通过深度学习模型联合学习分词、词性标注、专名识别任务,整体效果F1值超过0.91,词性标注F1值超过0.94,专名识别F1值超过0.85,效果业内领先。
效率高:精简模型参数,结合Paddle预测库的性能优化,CPU单线程性能达800QPS,效率业内领先。
可定制:实现简单可控的干预机制,精准匹配用户词典对模型进行干预。词典支持长片段形式,使得干预更为精准。
调用便捷:支持一键安装,同时提供了Python、Java和C++调用接口与调用示例,实现快速调用和集成。
支持移动端: 定制超轻量级模型,体积仅为2M,主流千元手机单线程性能达200QPS,满足大多数移动端应用的需求,同等体积量级效果业内领先。

LAC 2.0 的使用还是很方便的,官方文档很清晰,可以直接参考,以下是在 Ubuntu 16.04, Python 3.6.8 环境下安装测试,这里是在 virtualenv 虚拟环境下通过 pip install lac 安装,安装完成后可以在命令行中直接输入lac进行体验:

(venv) textminer@textminer:~/nlp_tools/baidu_lac$ lac
我爱自然语言处理
我/r 爱/v 自然语言处理/nz
百度LAC是一个中文词法分析工具
百度/ORG LAC/nz 是/v 一个/m 中文/nz 词法/n 分析/vn 工具/n
习近平致信祝贺哈尔滨工业大学建校100周年
习近平/PER 致信/v 祝贺/v 哈尔滨工业大学/ORG 建校/v 100周年/m
新华社北京67日电  中共中央总书记、国家主席、中央军委主席习近平7日致信祝贺哈尔滨工业大学建校100周年,向全校师生员工和校友致以热烈的祝贺和诚挚的问候。
新华社/ORG 北京/LOC 67日/TIME 电/n  /w  /w 中共中央/ORG 总书记/n 、/w 国家主席/n 、/w 中央军委/ORG 主席/n 习近平/PER 7日/TIME 致信/v 祝贺/v 哈尔滨工业大学/ORG 建校/v 100周年/m ,/w 向/p 全校/n 师生/n 员工/n 和/c 校友/n 致以/v 热烈/a 的/u 祝贺/vn 和/c 诚挚/a 的/u 问候/vn 。/w

如果只需要测试中文分词结果,输入'lac --segonly'即可。LAC的代码调用也很方便:

(venv) textminer@textminer:~/nlp_tools/baidu_lac$ ipython
Python 3.6.8 (default, May  7 2019, 14:58:50) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.15.0 -- An enhanced Interactive Python. Type '?' for help.
 
In [1]: from LAC import LAC                                                                            
 
# 如果只需要中文分词功能,设置'seg'模式,加载中文分词模型
In [2]: lac = LAC(mode='seg')                                                                          
 
# 单个样本调用
In [3]: text = '我爱自然语言处理'                                                                      
 
In [4]: result = lac.run(text)                                                                         
 
In [5]: print(result)                                                                                  
['我', '爱', '自然语言处理']
 
# 批量样本调用
In [6]: texts = ['我爱自然语言处理', '百度LAC是一个不错的中文词法分析工具', 'AINLP@我爱自然语言处理']  
 
In [7]: result = lac.run(texts)                                                                        
 
In [8]: print(result)                                                                                 
[['我', '爱', '自然语言处理'], ['百度', 'LAC', '是', '一个', '不错', '的', '中文', '词', '法', '分析', '工具'], ['AINLP', '@', '我', '爱', '自然语言处理']]

如果需要使用LAC的词性标注与命名实体识别功能,可以调用的时候设置为'lac'模式,加载LAC模型:

In [11]: lac = LAC(mode='lac')                                                                         
 
In [12]: text = '我爱自然语言处理'                                                                     
 
In [13]: result = lac.run(text)                                                                        
 
In [14]: print(result)                                                                                 
[['我', '爱', '自然语言处理'], ['r', 'v', 'nz']]
 
In [15]: texts = ['我爱哈尔滨工业大学', '2020年6月7日哈工大迎来百年校庆']                              
 
In [16]: result = lac.run(texts)                                                                       
 
In [17]: print(result)                                                                                 
[[['我', '爱', '哈尔滨工业大学'], ['r', 'v', 'ORG']], [['2020年6月7日', '哈工大', '迎来', '百年', '校庆'], ['TIME', 'ORG', 'v', 'm', 'n']]]

这里的输出格式为(word_list, tags_list),对应每个句子的切词结果word_list和每个词的对应词性标注的tags_list,其所用的词性标记集如下,包括4个常用的专名类别(PER, LOC, ORG, TIME):

此外,LAC的词典定制化和模型增量训练功能也相当友好,这对于有在实际业务需求的团队就非常有帮助,可以基于自己的业务需求和领域词典数据定制一个面向自身业务的中文词法分析模型,以下以词典定制化为例,我们添加了一个自定义词典 mydict.txt, 内容如下:

锦江石材/ORG
正式成立

以下是加载自定义词典前后的结果对比:

In [24]: text = "锦江石材正式成立了"                                                                   
 
In [25]: result = lac.run(text)                                                                        
# 没有干预的结果
In [26]: print(result)                                                                                 
[['锦江', '石材', '正式', '成立', '了'], ['LOC', 'n', 'ad', 'v', 'xc']]
 
In [27]: lac.load_customization('mydict.txt')                                                          
 
In [28]: result = lac.run(text)                                                                        
 
# 干预后的结果
In [29]: print(result)                                                                                 
[['锦江石材', '正式成立', '了'], ['ORG', 'v', 'xc']]

至于模型增量训练,留给感兴趣的同学自己尝试了,这个功能很有用,可以参考LAC官方文档说明,很清晰。

最后需要说明一下本文主要参考了百度LAC的官方文档:
https://github.com/baidu/lac

关于LAC2.0的更详细介绍,可以参考:
开源!我知道你不知道,百度开源词法LAC 2.0帮你更懂中文

我们之前写得三篇关于百度NLP工具的相关文章,也可以对比参考和测试LAC1.x版本:

百度深度学习中文词法分析工具LAC试用之旅
来,试试百度的深度学习情感分析工具
中文命名实体识别工具(NER)哪家强?

相似词检索,近义词查询,同义词大全,这里不仅仅可查中文

大概一年前,我在AINLP的公众号对话接口里基于腾讯800万大的词向量配置了一个相似词查询的接口:

腾讯词向量和相似词、相似度、词语游戏系列
相似词查询:玩转腾讯 AI Lab 中文词向量
玩转腾讯词向量:词语相似度计算和在线查询
腾讯词向量实战:通过Annoy进行索引和快速查询
玩转腾讯词向量:Game of Words(词语的加减游戏)
词向量游戏:梅西-阿根廷+葡萄牙=?

通过这个接口,可以直接输入“相似词 自然语言处理"查询“自然语言处理”的相近词:

不过我们也发现,有不少用户直接输入"近义词 词语", "同义词 词语" 查询相似词,严格的说,基于词向量的相似词不能代表语言学意义上的近义词、同义词,但是可以匹配上一些近义词、同义词,甚至反义词,所以可以作为一个参考,由人来自己选择其中的近义词、同义词或者反义词,例如:

最近,这个功能又升级了,基于自动语言识别以及更多语言的词向量,不仅仅可以查询中文,还可以查询英文、日文等其他语言,基本上,主流的语言查询都覆盖了,感兴趣的朋友可以试试,例如:

这些模型里,除了中文模型继续沿用腾讯词向量外,其他的是我很早之前基于维基百科的语料训练的,现在利用起来作为其他语言的查询支持,不过,因为绝大多数语言我都不懂,所以也可能会有错误。至于词向量模型,现在的选择远比当时丰富,如果是需要中文词向量,可以选择腾讯800万词向量,现在地址有所变化:

Tencent AI Lab Embedding Corpus for Chinese Words and Phrases(https://ai.tencent.com/ailab/nlp/zh/embedding.html)

或者参考:
上百种预训练中文词向量:Chinese-Word-Vectors

如果需要多种语言的,可以参考:
Pre-trained word vectors of 30+ languages(https://github.com/Kyubyong/wordvectors)

最后推荐一个Awsome系列,这里面有很多关于词嵌入模型的相关学习资源:
https://github.com/Hironsan/awesome-embedding-models

藏头诗生成器有了,藏尾诗生成器还会远吗?

自从AINLP公众号后台对话上线自动写诗功能,特别是藏头诗生成器的功能后,发现有不少同学在使用,特别是过程中发现有的同学不仅需要藏头诗,还需要藏尾诗,这也让我第一次了解了藏尾诗。不过如果让用户随意输入尾词,诗句尾部的押韵基本上破坏了,但是作为大众娱乐需求,这功能还是可以有的。所能想到的第一个方法是:基于目前的模型强制在结尾处替换关键字,然后逐句生成,但是这种方法合成的藏尾诗必定会很生硬;第二个方法直接训练一个反向模型:基于GPT2-Chinese,用之前的古诗训练语料逆序训练了一个古诗反向生成模型,然后对于用户的输入,同样也反向处理,最后再正向呈现给用户,这种方法生成的藏尾诗应该会平滑很多。所以说干就干,基于第二种方法训练了一个藏尾诗生成器模型,感兴趣的同学可以关注AINLP公众号,直接回复“藏尾诗输入内容”触发“藏尾诗生成器”,例如:

除了藏尾诗生成器,我还衍生了一个“写尾诗”的功能,就是输入几个字,这几个字一定要出现在古诗的尾部,关注AINLP公众号,回复“写尾诗输入内容”触发:

关于机器自动写诗,我们已经谈到多次,请参考:
AINLP公众号自动作诗上线
用GPT-2自动写诗,从五言绝句开始
鼠年春节,用GPT-2自动写对联和对对联
自动作诗机&藏头诗生成器:五言、七言、绝句、律诗全了

中文命名实体识别工具(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"获取:

学自然语言处理,其实更应该学好英语

关于如何学习自然语言处理,如何入门NLP,无论在博客、微博还是AINLP公众号以及技术交流群里,遇到过一些同学提这个问题,之前开玩笑的建议过:学好英语、打好数学和计算机科学的基础,然后再了解一点语言学,这个问题就简单了。今天,刚好看到一条微博,关于“为什么要学习英语”:

姑且不论这个微博里的观点你是否赞同,但是关于英语的重要性,对于NLPer来说,对于学习自然与处理来说,无论如何强调都不为过。很多同学入门NLP第一个问题就是有哪些NLP学习资源或者路径?我一般首先推荐的都是国外的经典书籍和课程,譬如自然语言处理综论SLP3,斯坦福大学早期经典NLP课程,以及近期深度学习自然语言处理热门课程CS224n,这些资源都是NLP领域大师级人物的书籍或者授课,都是第一手的优质学习资源,你第一个需要解决的问题就是英语。有时候真的非常羡慕现在的学生朋友,你们遇到了一个好时代,现在的学习资源真的是无比丰富,你们所面临的问题不是找资源,而是如何甄选优质的学习资源,当然,前提是你得学好英语。

关于如何学习英语,说一点个人经验。中学时代,英语对我来说有点鸡肋的感觉,不太喜欢那些语法,然后又不得章法的学习英语,导致英语是托后腿的课程,高考时英语的成绩也是最低的。到了大学,我花了很长时间寻找英语学习的方法论,印象比较深刻的是逆向英语学习法,听过和跟读过不少VOA慢速英语。期间,对我来说,影响最大的是来自当时新东方某个副校长(名字忘了)的一本关于如何学习英语的小册子,里面很多内容都忘了,但是有一个观点对我来说印象很深,大意就是“纯英文环境学习英文”,有几点建议很有意思:一个就是用英文解释单词的词典,另外一个就是按从易到难的顺序阅读纯英文分级读物,还有一个就是看无字幕的英文视频。关于第一点,我买了一本很厚的柯林斯英文词典,那本词典用简单的英文单词解释单词,在之后学习的过程中,遇到不懂的英文单词就翻,帮助很大。关于第二点,我在哈工大的图书管里找到了一批英文原版分级读物,从最简单的一级开始读起,直到读到最后一级,这个过程中印象最深的就是读到了小说的感觉,头脑中会浮现出书中的场景。关于第三点,印象最深的是看无字幕的friends,看了好多遍,另外一个就是当时收藏了不少英文电影DVD,还有就是下载和观看了不少探索发现节目。这个过程中英文的阅读能力和听力逐渐培养起来了。等到读研和工作时,强迫自己看英文版教材以及论文,逐渐养成查阅英文资料的习惯,甚至尝试写英文博客,不知不觉将英语变成了工作语言。现在回头再看,其实学英语最核心的方法就是“用”,强迫自己用起来,逐渐养成习惯就可以了,“无他,唯手熟尔”。

前段时间,Springer面向公众开放数百本正版电子书籍,涵盖社会科学和自然科学领域数百本书籍,其中,包括65本数学、编程、数据挖掘、数据科学、数据分析、机器学习、深度学习、人工智能的相关书籍 可以打包下载,包括经典的《统计学习基础》,《线性代数应该这样学》这样的书籍,唯一的前提是,这些书籍都是英语。另外,你在微博、知乎、公众号看到的大多数学习资料,源头大多来自英文世界。你在B站上看到的很多经典课程,也来自国外的知名大学,例如斯坦福大学公开课,MIT的Opencourseware,以及edX, Cousera这样的Mooc平台。学好英语,你可以亲身去体验第一手学习资源。

最后,再次回到如何学习自然语言处理的问题,这是之前发布或转载在AINLP公众号的一些文章,依然不过时,你唯一需要立即行动的就是,学好英语,用好英语:

如何学习自然语言处理:一本书和一门课
如何学习自然语言处理:NLP领域经典《自然语言处理综论》英文版第三版更新
2019斯坦福CS224n深度学习自然语言处理课程视频和相关资料分享
CS224N 2019最全20视频分享:斯坦福大学深度学习自然语言处理课程资源索引
李纪为博士:初入NLP领域的一些小建议
老宋同学的学习建议和论文:听说你急缺论文大礼包?
从老宋的角度看,自然语言处理领域如何学习?
刘知远老师NLP研究入门之道:NLP推荐书目
NLP研究入门之道:自然语言处理简介
NLP研究入门之道:走近NLP学术界
NLP研究入门之道:如何通过文献掌握学术动态
NLP研究入门之道:如何写一篇合格的学术论文
NLP研究入门之道:本科生如何开始科研训练
自然语言理解难在哪儿?
好的研究想法从哪里来
你是如何了解或者进入NLP这个领域的?
NLP is hard! 自然语言处理太难了系列

最后,欢迎关注我们的B站:https://space.bilibili.com/216712081 ,会甄选一些NLP相关的经典课程资源供大家学习,目前才刚刚开始做,前提依然是你要学好英语:

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"获取打包下载网盘链接:

❤️Emotional First Aid Dataset, 心理咨询问答语料库

Emotional First Aid Dataset

心理咨询问答语料库,仅限研究用途。

https://github.com/chatopera/efaqa-corpus-zh

为什么发布这个语料库

心理咨询中应用人工智能,是我们认为非常有意义的一个探索。我们愿意和更多人合作,把目前领先的人工智能技术,在心理咨询不同场景下落地。扣门的,就给他开门,愿每个人都有自己的心理咨询师。

-- 派特心理

数据集介绍

心理咨询问答语料库(以下也称为“数据集”,“语料库”)是为应用人工智能技术于心理咨询领域制作的语料。据我们所知,这是心理咨询领域首个开放的 QA 语料库,包括 20,000 条心理咨询数据,也是公开的最大的中文心理咨询对话语料。数据集内容丰富,不但具备多轮对话内容,也有分类等信息,制作过程耗费大量时间和精力,比如标注过程是面向多轮对话,平均每条标记耗时 1 分钟。

数据集由斯坦福大学,UCLA 和台湾辅仁大学临床心理学等心理学专业人士参与建设,并由 Chatopera 和诸多志愿者合作完成。

数据文件位置efaqa-corpus-zh.utf8.gz,该文件为 Gzip 压缩,utf8 编码,每行一条数据,每条为 JSON 格式字符串,格式如下:

字段 说明 类型
md5 唯一标识 string
title 标题 string
description 描述 string
owner 发布者(脱敏后) string
label 话题标签 Object
s3 烦恼类型 string
s2 心理疾病 string
s1 SOS string
chats 聊天数据 Array
sender 发布者 string
type 消息类型 string
time 发布时间 string
value 消息内容 string
label 聊天标签 Object
knowledge 知识性 boolean
question 追问 boolean
negative 负面回复 boolean

数据示例

{
  "md5": "2f63d374c071043d9e1968aefa62ffb7",
  "owner": "匿名",
  "title": "女 听过别人最多的议论就是干啥啥不行不长心眼没有脑子",
  "label": {
    "s1": "1.13",
    "s2": "2.7",
    "s3": "3.4"
  },
  "chats": [
    {
      "time": "11:02:45",
      "value": "这样的议论是针对谁呢?",
      "sender": "audience",
      "type": "textMessage",
      "label": { "question": true, "knowledge": false, "negative": false }
    },
    {
      "time": "11:08:38",
      "sender": "audience",
      "type": "textMessage",
      "value": "欢迎你来找我玩❤",
      "label": { "question": false, "knowledge": false, "negative": false }
    },
    {
      "time": "11:15:17",
      "sender": "owner",
      "type": "textMessage",
      "value": "好惨"
    }
  ]
}

话题标签

一条数据中,titledescription是咨询者咨询的初始信息,话题标签是基于二者将咨询问题进行分类,分类包含三个维度:S1 烦恼类型;S2 心理疾病;S3 SOS。其中,S代表severity,三个维度体现心理问题的严重程度依次加重。需要强调的是, 其中一些项目需要临床医学鉴定,数据集所使用概念,均代表疑似,比如我们标记了一个话题分类为抑郁症,实际上是指疑似抑郁症,该声明不代表我们的工作不认真,而是严格的判断的难度以及出于严谨性的考虑。

label中记录的是每个维度子类的 ID,ID 设计如下。

S1 烦恼类型

ID 中文 英文 备注
1.1 学业烦恼、对未来规划的迷茫 Academic Concerns 学业烦恼包括学习障碍、学习吃力、学习成绩差、注意力不集中和对学习科目无兴趣等。
1.2 事业和工作烦恼 Career and Workplace Issues 在工作中的,人际冲突问题、沟通问题、谣言、职场骚扰、歧视、动力不足和工作满意度低和职场表现差等问题。
1.3 家庭问题和矛盾 Family Issues and Conflict 家庭问题和矛盾包括家庭暴力、金钱遗产争执、家庭不和睦、婆媳问题、子女们对年长父母看护问题、继父母继子女冲突问题和离异父母对于儿女的养护问题。
1.4 物质滥用 Substance Abuse and Addiction 成人如酗酒、吸烟、药物滥用、吸毒、赌博和任何影响生活品质的上瘾行为。
1.5 悲恸 Grief 由于痛失亲人或朋友而引起的极大悲伤。
1.6 失眠 Insomnia 无法入睡或难以保持入睡状态而影响第二天表现的睡眠障碍。
1.7 压力 Stress 压力是一种情绪上或身体上的紧张感。它可能来自任何使您感到沮丧,愤怒或紧张的事件或想法。
1.8 人际关系 Interpersonal Relationship 不属于职场、学校以及家庭的人际关系紧张与矛盾。
1.9 情感关系问题 Relationship Issues 早恋、暗恋、异地恋、出轨、吵架、复合、LGBT 群体
1.10 离婚 Divorce 离婚后情感以及孩子的问题
1.11 分手 Break Up 分手后的痛苦
1.12 自我探索 Self-Awareness 如星座、性格、兴趣等
1.13 低自尊 Low self-esteem 低自尊心的表现 自尊是一个人对自己的价值的主观评价。自尊包括对自己以及情绪状态的信念,例如胜利,绝望,骄傲和羞耻。
1.14 青春期问题 Adolescent Problem 青春期少年在身心成长上所面临的问题,如叛逆、伤害他人、怀孕、药物滥用和青少年犯罪。
1.15 强迫症 OCD 强迫症的人会陷入一种无意义、且令人沮丧的重复的想法与行为当中,但是一直想却无法摆脱它。
1.16 其它 Others 其他烦恼,虽然对生活学习没有造成毁灭性的阻碍,但是却依然会引起心里不适。
1.17 男同性恋、女同性恋、双性恋与跨性别 LGBT 男同性恋、女同性恋、双性恋与跨性别
1.18 性问题 Sex 对于青少年,是性教育不足引起各种社会问题;对于成年人,性焦虑与性上瘾可以演变成生理疾病。
1.19 亲子关系 Parent-child relationship 亲子关系,从婴幼儿时期就开始影响着孩子各方面的发展,比如性格、毅力、人际交往等等。

S2 心理疾病

心理问题已经影响工作,咨询者需要休息调整或就医。

ID 中文 英文 备注
2.1 忧郁症 Depression 长时间持续的抑郁情绪,并且这种情绪明显超过必要的限度,缺乏自信,避开人群,甚至有罪恶感,感到身体能量的明显降低,时间的感受力减慢,无法在任何有趣的活动中体会到快乐。
2.2 焦虑症 Anxiety 长时间持续性的焦虑情绪,无明确客观对象却依然紧张担心,坐立不安,如心悸、手抖、出汗、尿频、注意力难以集中。
2.3 躁郁症 Bipolar Disorder 又称为"双向情感障碍" 。狂躁期:感到生机勃勃、精力充沛以及情感高涨或易被激惹。也可感到过度自信,行为或穿着铺张浪费,睡眠极少且语量增多。
2.4 创伤后应激反应 PTSD 首先要经历创伤:如孩童时期遭受身体或心理上的虐待;接触相关事物时会有精神或身体上的不适和紧张,创伤的情景会一遍一遍在脑海中重演。
2.5 恐慌症 Panic Disorder 又称急性焦虑症,是反复发生的惊恐发作。惊恐发作是突然的短期强烈的恐惧(濒死感),包含心悸、流汗、手颤抖、呼吸困难、麻痹感。
2.6 厌食症和暴食症 Eating Disorder 厌食症:吃太少导致体重偏轻;暴食症:大量进食后再想办法吐出来。两种疾病都对"瘦"有着极端的追求,对自己身体不满意,在生活学习上有极端完美主义心态。
2.7 尚未达到 S2 Unrelated 还没有严重到心理疾病
2.8 其它疾病 Others 已经严重影响生活和工作,甚至生活工作不能进行,但并不能确认是哪一类疾病的情况。

【注意:】一些在临床上更为严重的心理疾病,比如多重人格等,因为其复杂性,更不容易判断,数据集暂时不涉及标注。

S3 SOS

紧急情况,需要立刻有人工干预。

ID 中文 英文 备注
3.1 正在进行的自杀行为 Suicide Action N/A
3.2 策划进行的自杀行为 Suicide Ideation N/A
3.3 自残 Self-harm N/A
3.4 进行的人身伤害 N/A 正在对他人进行伤害
3.5 计划的人身伤害 N/A 计划对他人进行伤害
3.6 无伤害身体倾向 N/A N/A

聊天标签

标记 含义
question 是否是追问,追问可以让咨询者更多倾诉
knowledge 是否带有知识,含知识内容有助于开导咨询者
negative 负面回复,对咨询者起负面作用

项目背景

为了帮助更好应用该数据集,特别制作了一个视频帮助了解项目背景、标注设计和标注过程。

心理咨询AI助手|派特心理

安装使用

Python

为了方便使用,数据集发布到 https://pypi.org/project/efaqa-corpus-zh/ 上,使用 pip 下载安装。

pip install efaqa-corpus-zh

演示代码

import efaqa_corpus_zh
l = list(efaqa_corpus_zh.load())
print("size: %s" % len(l))
print(l[0]["title"])

初次执行 load 接口,会下载数据,数据在 Github 上,请确保网络可以访问到https://github.com。下载速度取决于网络质量,目前数据集压缩包大小~8MB。

语料文件

如果您使用其它编程语言,那么直接先下载数据文件efaqa-corpus-zh.utf8.gz,然后使用 Gzip 解压工具解压,得到文本文件,然后按行读取。

心理问答 API

作为心理咨询平台,心理健康服务开发者,如何获得智能问答服务呢?如果不想从零开始,有没有成熟的方案呢?我们称之为心理问答 API。伴随着我们标注数据量的累积,我们也在完善利用这些数据研发的对话服务,通过使用 SDK,几行代码立刻接入心理问答 API

心理问答 API 包括单轮对话多轮对话,详细参考使用文档

https://docs.chatopera.com/products/psych-assistant/api.html

媒体报导

通向心理咨询的未来之路|派特心理

派特心理:招募心理咨询语料标注志愿者

声明

声明 1:

本数据集使用在线心理咨询数据清洗、脱敏和标注制作,数据及代码发布使用 GPL 3.0 许可协议。数据仅限于研究用途,如果在发布的任何媒体、期刊、杂志或博客等内容时,必须注明引用和地址。无授权商业用途,追究版权。

@online{efaqa-corpus-zh:petpsychology,
  author = {Hai Liang Wang, Zhi Zhi Wu, Jia Yuan Lang},
  title = {派特心理:心理咨询问答语料库},
  year = 2020,
  url = {https://github.com/chatopera/efaqa-corpus-zh},
  urldate = {2020-04-22}
}

声明 2:

语料库为主观标注,鉴于心理咨询的严肃性和重要性,语料制作时尽可能保证数据的准确性,但是无法保证 100%准确,对于因数据内容不当产生的后果,本团队不承担任何法律责任。

Emotional First Aid Dataset, Chatopera Inc., https://github.com/chatopera/efaqa-corpus-zh, Apr. 22th, 2020

GPL 3.0 许可协议

Emotional First Aid Dataset, only for Research. Copyright (C) 2020 北京华夏春松科技有限公司 https://chatopera.com

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

 

 

 

斯坦福大学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:

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

在我读书的时候,最早是从谷歌黑板报中吴军老师的《数学之美》里了解到 Michael Collins 教授的,在“数学之美 系列十五 繁与简 自然语言处理的几位精英”,是这样描述他的:

​柯林斯:追求完美

柯林斯从师于自然语言处理大师马库斯 (Mitch Marcus)(我们以后还会多次提到马库斯),从宾夕法利亚大学获得博士学位,现任麻省理工学院 (MIT) 副教授(别看他是副教授,他的水平在当今自然语言处理领域是数一数二的),在作博士期间,柯林斯写了一个后来以他名字命名的自然语言文法分析器 (sentence parser),可以将书面语的每一句话准确地进行文法分析。文法分析是很多自然语言应用的基础。虽然柯林斯的师兄布莱尔 (Eric Brill) 和 Ratnaparkhi 以及师弟 Eisnar 都完成了相当不错的语言文法分析器,但是柯林斯却将它做到了极致,使它在相当长一段时间内成为世界上最好的文法分析器。柯林斯成功的关键在于将文法分析的每一个细节都研究得很仔细。柯林斯用的数学模型也很漂亮,整个工作可以用完美来形容。我曾因为研究的需要,找柯林斯要过他文法分析器的源程序,他很爽快地给了我。我试图将他的程序修改一下来满足我特定应用的要求,但后来发现,他的程序细节太多以至于很难进一步优化。柯林斯的博士论文堪称是自然语言处理领域的范文。它像一本优秀的小说,把所有事情的来龙去脉介绍的清清楚楚,对于任何有一点计算机和自然语言处理知识的人,都可以轻而易举地读懂他复杂的方法。

柯林斯毕业后,在 AT&T 实验室度过了三年快乐的时光。在那里柯林斯完成了许多世界一流的研究工作诸如隐含马尔科夫模型的区别性训练方法,卷积核在自然语言处理中的应用等等。三年后,AT&T 停止了自然语言处理方面的研究,柯林斯幸运地在 MIT 找到了教职。在 MIT 的短短几年间,柯林斯多次在国际会议上获得最佳论文奖。相比其他同行,这种成就是独一无二的。柯林斯的特点就是把事情做到极致。如果说有人喜欢“繁琐哲学”,柯林斯就是一个。

Michael Collins 教授目前在哥伦比亚大学任教,不仅技术水平高,人也很帅,是公认的男神,这门自然语言处理公开课(Natural Language Processing)大约录制于2013年,课程主页包括了课件及其他相关资料,感兴趣的同学可以参考:

http://www.cs.columbia.edu/~cs4705/

这门课程大致录制于2013年左右,也是深度学习NLP的史前经典NLP课程,适合修完斯坦福NLP入门课程之后继续学习。我们建立了一个NLP入门学习群,感兴趣的同学可以添加微信AINLPer(id: ainlper) ,备注“NLP入门”进群一起交流学习。

关于这门课程,早期有一些同学在课程图谱里留言评价过,以下选择几条供大家参考:

“非常好的一门课,不像其他课程那么水,完完整整的哥伦比亚课程,如果认真学完肯定收获很多,花的时间绝对物有所值。科林斯的讲解非常清晰,内容涵盖了语言建模,解码算法,学习算法几个方面。

语言及翻译模型:n元模型,HMM模型,log-linear模型,GLM模型,IBM 1模型,IBM2 模型,phrase-based翻译模型,PCFG语法,LPCFG语法

解码算法:Viterbi算法,CKY算法,GLM Viterbi算法

学习算法:Brown聚类算法,Perceptron算法,EM算法

应用举例:词性标注/实体识别(HMM, GLM, log-linear),语法树标注(PCFG, dependecny-based),机器翻译”

=========================================================================================

“Proferssor Collins讲课十分清晰,课程大体覆盖到了NLP的比较基础的内容,编程作业十分具有针对性,由于不是特别熟悉python,我做起来特别费劲,基本上每个PA我都做了10小时以上。课程难度中上,建议有一定python和machine learning基础的同学学习。”

=========================================================================================

“跟斯坦福那门nlp比起来,这门的理论性更强,学起来也稍为枯燥一点,但是各种模型讲得很简单明了,推荐看了斯坦福的nlp后再来学这个”

我把这门课程整理了一下按章节放在了B站,感兴趣的同学可以关注,如果你需要视频课件字幕之类的打包文件,可以关注我们的公众号,回复“Collins"获取百度网盘链接:

哥伦比亚大学自然语言处理公开课-第一讲课程介绍

https://www.bilibili.com/video/BV1v7411d7hj/

哥伦比亚大学自然语言处理公开课-第二讲语言模型

https://www.bilibili.com/video/BV1b7411R7Dk/

哥伦比亚大学自然语言处理公开课-第三讲语言模型参数估计第四讲总结

https://www.bilibili.com/video/BV1s7411R7G3/

哥伦比亚大学自然语言处理公开课-第五讲词性标注和隐马尔可夫模型

https://www.bilibili.com/video/BV1nE411P7LS/

哥伦比亚大学自然语言处理公开课-第六讲句法分析和上下文无关文法

https://www.bilibili.com/video/BV1JE411P7fL/

哥伦比亚大学自然语言处理公开课-第七讲概率上下文无关文法

https://www.bilibili.com/video/BV1aE411P7Et/

哥伦比亚大学自然语言处理公开课-第八讲第九讲概率上下文无关文法的弱点以及词法化

https://www.bilibili.com/video/BV1aE411P7Kh/

哥伦比亚大学自然语言处理公开课-第十讲机器翻译介绍

https://www.bilibili.com/video/BV1dE411P7cT/

哥伦比亚大学自然语言处理公开课-第十一讲IBM翻译模型

https://www.bilibili.com/video/BV1mE411P7ng/

哥伦比亚大学自然语言处理公开课-第十二讲基于短语的机器翻译模型

https://www.bilibili.com/video/BV12E411P7RT/

哥伦比亚大学自然语言处理公开课-第十三讲机器翻译解码算法

注:视频一直在B站审核,审核通过后更新链接,或者通过网盘链接获取

哥伦比亚大学自然语言处理公开课-第十四讲对数线性模型

https://www.bilibili.com/video/BV1oE411c7Zd/

哥伦比亚大学自然语言处理公开课-第十五讲基于对数线性模型的词性标注

https://www.bilibili.com/video/BV1oE411c7hd/

哥伦比亚大学自然语言处理公开课-第十六讲基于对数线性模型的句法分析

https://www.bilibili.com/video/BV1oE411c7Sg/

哥伦比亚大学自然语言处理公开课-第十七讲无监督学习

https://www.bilibili.com/video/BV1ZE411c7zT/

哥伦比亚大学自然语言处理公开课-第十八讲广义线性模型

https://www.bilibili.com/video/BV1ZE411c7ER/

哥伦比亚大学自然语言处理公开课-第十九讲基于广义线性模型的词性标注

https://www.bilibili.com/video/BV1FE411w75M/

哥伦比亚大学自然语言处理公开课-第二十讲基于广义线性模型的依存句法分析

https://www.bilibili.com/video/BV1fE411c7pj/

最后附上百度百科中关于柯林斯教授的介绍:

自然语言处理专家,哥伦比亚大学教授,开发了著名的句法分析器Collins Parser。

工作经历:

1999年1月至2002年11月,AT&T实验室,研究人员;

2003年1月至2010年12月,美国麻省理工学院(MIT),助理教授/副教授;

2011年1月至今,美国哥伦比亚大学,Vikram Pandit教席教授。

主要成就:

获EMNLP 2002, EMNLP 2004, UAI 2004, UAI 2005, CoNLL 2008, EMNLP 2010最佳论文奖。

人物评价:

有些学者将一个问题研究到极致,执著追求完善甚至可以说达到完美的程度。他们的工作对同行有很大的参考价值,因此在科研中很需要这样的学者。在自然语言处理方面新一代的顶级人物迈克尔·柯林斯就是这样的人。——吴军《数学之美》