当前位置: 首页 > 编程日记 > 正文

NLP实战:利用Python理解、分析和生成文本 | 赠书

导读:本文内容参考自《自然语言处理实战:利用Python理解、分析和生成文本》一书,由Hobson Lane等人所著。

本书是介绍自然语言处理(NLP)和深度学习的实战书。NLP已成为深度学习的核心应用领域,而深度学习是NLP研究和应用中的必要工具。本书面向中高级Python开发人员,兼具基础理论与编程实战,是现代NLP领域从业者的实用参考书。

了解关于自然语言处理的更多干货知识,关注AI科技大本营并评论分享你对自然语言处理的见解,我们将从中选出10条优质评论,各送出《自然语言处理实战:利用Python理解、分析和生成文本》一本。活动截止时间为11月15日晚8点。

1950年,艾伦·图灵(Alan Turing)发表了一篇题为“ 计算机机械与智能(Computing Machinery and Intelligence) ” 的文章,提出了著名的“图灵测试(Turing Test)”。这当中涉及了自动解释和自然语言的生成,作为判断智能的条件,这就是自然语言处理(Natural Language Processing,NLP)发展的开端。

自然语言处理是计算机科学和人工智能(artificial intelligence,AI)的一个研究领域,它关注自然语言(如英语或汉语普通话)的处理。这种处理通常包括将自然语言转换成计算机能够用于理解这个世界的数据(数字)。同时,这种对世界的理解有时被用于生成能够体现这种理解的自然语言文本(即自然语言生成)。

语言的发明是为了便于沟通交流,是人类建立共识的基础。而现在,奋斗在自然语言处理技术的程序员们都有一个目标:让计算机也能理解人类的语言。

NLP的魅力——创造会交流的机器

自从计算机被发明出来,机器一直在处理语言。然而,这些“形式”语言(如早期语言Ada、COBOL和Fortran)被设计成只有一种正确的解释(或编译)方式。

目前,维基百科列出了700多种编程语言。相比之下,Ethnologue已经确认的自然语言总数是当前世界各地人们所用的自然语言的10倍。谷歌的自然语言文档索引远超过1亿吉字节,而且这只是索引而已,当前在线的实际自然语言内容大小肯定超过1000亿吉字节,同时这些文档并没有完全覆盖整个互联网。

“自然语言”与“自然世界”中“自然”一词的意义相同。世界上自然的、进化的事物不同于人类设计和制造的机械的、人工的东西。能够设计和构建软件来阅读和处理大家现在正在阅读的语言,该语言正是关于如何构建软件来处理自然语言的,这非常高级,也十分神奇。

起初,Google等搜索网站需要一些技巧才能找到我们要找的东西,但很快就变得更加智能了,可以接受越来越多的词汇搜索。然后智能手机的文字自动补全功能开始变得先进起来,中间按钮给出的通常就是我们要找的词。这些就是自然语言处理的魅力——让机器理解我们的想法。

越来越多的娱乐、广告和财务报告内容在不需要人动一根手指的情况下就可以生成。NLP机器人可以编写整个电影脚本。视频游戏和虚拟世界经常会出现与我们对话的机器人,它们有时甚至会谈论机器人和人工智能本身。这种“戏中戏”将得到更多的关于电影的元数据,然后现实世界中的机器人会据此撰写评论以帮助大家决定看哪部电影。

随着NLP技术的发展,信息流和计算能力也不断增强。我们现在只需在搜索栏中输入几个字符,就可以检索出完成任务所需的准确信息。搜索提供的前几个自动补全选项通常非常合适,以至于让我们感觉是有一个人在帮助我们进行搜索。

入门NLP的几个基础知识

1.正则表达式

正则表达式使用了一类特殊的称为正则语法(regular grammar)的形式语言语法。正则语法的行为可预测也可证明,而且足够灵活,可以支持市面上一些最复杂的对话引擎和聊天机器人。Amazon Alexa和Google Now都是依赖正则语法的主要基于模式的对话引擎。深奥、复杂的正则语法规则通常可以用一行称为正则表达式的代码来表示。Python中有一些成功的聊天机器人框架,如Will,它们完全依赖这种语言来产生一些有用的和有趣的行为。Amazon Echo、Google Home和类似的复杂而又有用的助手也都使用了这种语言,为大部分用户交互提供编码逻辑。

2.词序和语法

词的顺序很重要。那些在词序列(如句子)中控制词序的规则被称为语言的语法(grammar,也称文法)。这是之前的词袋或词向量例子中所丢弃的信息。幸运的是,在大多数简短的短语甚至许多完整的句子中,上述词向量近似方法都可以奏效。如果只是想对一个短句的一般意义和情感进行编码的话,那么词序并不十分重要。看一下“Good morning Rosa”这个例子中的所有词序结果:

>>> from itertools import permutations>>> 
[" ".join(combo) for combo in\...     permutations("Good morning Rosa!".split(), 3)]['Good morning Rosa!',
'Good Rosa! morning',
'morning Good Rosa!',
'morning Rosa! Good',
'Rosa! Good morning',
'Rosa! morning Good']

现在,如果试图孤立地解释这些字符串中的每一个(不看其他字符串),那么可能会得出结论,即这些字符串可能都有相似的意图或含义。我们甚至可能注意到Good这个词的大写形式,并把它放在脑海中短语的最前面。但是我们也可能认为Good Rosa是某种专有名词,如餐馆或花店的名字。尽管如此,一个聪明的聊天机器人或者布莱切利公园20世纪40年代的聪明女士可能会用同样无伤大雅的问候语来回应这6种情况中的任何一种:“Good morning my dear General.”

我们(在脑海中)再用一个更长、更复杂的短语来尝试一下,这是一条逻辑语句,其中词的顺序非常重要:

>>> s = """Find textbooks with titles containing 'NLP',
...     or 'natural' and 'language', or
...     'computational' and 'linguistics'."""
>>> len(set(s.split()))12
>>> import numpy as np
>>> np.arange(1, 12 + 1).prod()  
# factorial(12) = arange(1, 13).prod()479001600词排列的数量从简单的问候语factorial(3)== 6激增到更长的语句factorial(12) == 479001600

很明显,词序所包含的逻辑对任何希望正确回复的机器而言都很重要。尽管普通的问候语通常不会因为词袋处理而造成混淆,但如果把更复杂的语句放入词袋中,就会丢失大部分意思。就像前面示例中的自然语言查询一样,词袋并不是处理数据库查询的最佳方式。

3.词向量

2012年,微软实习生Thomas Mikolov发现了一种用一定维度的向量表示词的含义的方法。Mikolov训练了一个神经网络来预测每个目标词附近的共现词。2013年,Mikolov和他的队友在谷歌发布了创建这些词向量的软件,称为Word2vec。

Word2vec仅仅基于大型未标记文本语料库来学习词的含义,而不需要标记Word2vec词汇表中的词。我们不需要告诉Word2vec算法玛丽·居里是一个科学家、伐木者是一个足球队、西雅图是一个城市、波特兰是俄勒冈州和缅因州的一个城市,也不需要告诉Word2vec足球是一项运动、一个团队是一群人,或者城市既是地点也是社区。Word2vec完全可以靠自己学到更多的知识!大家需要做的只是准备一个足够大的语料库,其中在科学、足球或城市相关的词附近提到玛丽·居里、伐木者队和波特兰。

正是Word2vec这种无监督的特性使它无比强大,因为世界上充满了未标记、未分类、非结构化的自然语言文本。

4.Word2vec和GloVe

Word2vec是一个巨大的突破,但它依赖于必须经反向传播来训练的神经网络模型。反向传播在效率上通常不如使用梯度下降法直接优化的代价函数。由Jeffrey Pennington领导的斯坦福大学NLP研究团队研究了Word2vec的工作原理,并从中找到可优化的代价函数。他们计算词的共现次数并记录在一个正方形矩阵中。他们发现可以对这个共现矩阵进行奇异值分解,分解得到的两个权重矩阵的意义与Word2vec产生的完全相同。关键点在于用同样的方法对共现矩阵进行归一化。在某些情况下,Word2vec模型无法收敛,而斯坦福大学的研究人员能够通过他们提出的SVD方法得到全局最优解。这个方法是对词共现的全局向量(在整个语料库中的共现)直接进行优化,因此命名为GloVe(global vectors of word co-occurrences)。

GloVe可以产生相当于Word2vec输入权重矩阵和输出权重矩阵的矩阵,其生成的语言模型具有与Word2vec相同的精确率,而且花费的时间更少。GloVe通过更高效地使用数据来加速训练进程。它可以在较小的语料库进行训练,并仍然能够收敛。SVD算法已经改进了几十年,所以GloVe在调试和算法优化方面很有优势。相比之下,Word2vec依赖反向传播来更新表示词嵌入的权重,而神经网络的反向传播效率低于GloVe使用的SVD这种更成熟的优化算法。

尽管Word2vec首先普及了基于词向量进行语义推理的概念,不过大家还是应当尽量使用GloVe来训练新的词向量模型。通过GloVe,大家更有可能找到词向量表示的全局最优解,从而得到更精确的结果。

GloVe的优点如下:

1.训练过程更快;

2.更有效地利用CPU、内存(可以处理更大规模的文档);

3.更有效地利用数据(对小型语料库有帮助);

4.在相同训练次数的情况下精确率更高。

5.知识方法

A.L.I.C.E.和其他AIML聊天机器人完全依赖模式匹配。在构想AIML之前,第一个流行的聊天机器人ELIZA也使用了模式匹配和模板。但是这些聊天机器人的开发人员在模式和模板中硬编码了回复的逻辑。硬编码不能很好地“扩展”,这种扩展不是从处理性能而是从人力的角度来说的。以这种方式构建的聊天机器人的复杂性随着投入人力的增加呈线性增长。事实上,随着这个聊天机器人的复杂性不断增长,我们开始看到自己努力的回报却在递减,这是因为随着“活动组件”之间交互的增加,聊天机器人的行为变得越来越难以预测和调试。

如今,数据驱动编程是应对大多数复杂编程挑战的现代方法。如何使用数据对聊天机器人进行编程?在上一章中,我们学习了如何使用信息提取从自然语言文本(非结构化数据)中创建结构化知识。仅仅基于读入文本,就可以构建关系或事实组成的网络,这些文本可以是维基百科文章,甚至是大家自己的个人日志。

通过逻辑推理来处理知识图谱,可以回答包含在知识库中的世界相关的问题。然后可以使用推理答案填写模板化回复中的变量,从而创建自然语言答案。问答系统,例如IBM在Jeopardy获胜的“沃森”(Watson),最初也是以这种方式构建的,尽管最近的版本几乎必然也采用了搜索或信息检索技术。知识图谱可以说是将聊天机器人带到现实世界的“根本”。

基于知识库的方法不仅限于回答关于世界的问题。知识库也可以使用正在进行的与对话相关的事实进行实时填充。这可以让聊天机器人快速了解对话目标以及他们的喜好。

6.检索(搜索)方法

另一种“倾听”用户的数据驱动方法是在历史对话日志中搜索之前的语句。这类似于人类倾听者尝试回想之前他们在哪里听到过该问题、句子或词。机器人不仅可以搜索自己的对话日志,还可以搜索任何人与人之间的对话记录、机器人和人之间的对话记录,甚至是机器人和机器人之间的对话记录。但和以往一样,脏数据进脏数据出。因此,我们应该清理并整合历史对话的数据库,以确保机器人搜索(并模仿)高质量的对话。我们希望人类享受与机器人之间的对话。

基于搜索的聊天机器人应确保其对话数据库包含令人愉快或有用的对话,并且它们应该是设定个性的机器人预期交流的一些主题。对于基于搜索的机器人,一些好的对话资源例子包括电影对话脚本、IRC频道上的客户服务日志(用户满意的部分)和人类之间的直接消息互动(如果那些人愿意与我们分享的话)。如果没有获得想要使用的对话中涉及的所有人的书面同意,请不要使用大家自己的电子邮件或短消息日志。

如果决定将机器人之间的对话合并到语料库中,那么请千万小心。我们的数据库中只需要那些至少有一个人看起来对交互感到满意的语句,哪怕只是继续对话。除非是真正非常智能的聊天机器人,否则很少采用机器人之间的对话。

基于搜索的聊天机器人可以使用历史对话日志来查找和机器人的交谈对象刚刚说的话类似的语句示例。为了便于搜索,应该把对话语料库组织成语句-回复对。如果回复作为被回复的语句,那么该回复应该在数据库中出现两次,一次作为回复,然后再作为促使回复的语句。数据库表中的回复列随后可作为“语句”(或促使)列的语句的回复依据。

光了解上面这些NLP的知识其实对学习NLP来说是完全不够的。那么如何去高效完整地掌握NLP的整体框架和所有知识呢?相信这一本《自然语言处理实战:利用Python理解、分析和生成文本》可以帮到你。

自然语言处理实战 利用Python理解、分析和生成文本

作者:[美]霍布森•莱恩(Hobson Lane) ,科尔•霍华德(Cole Howard) ,汉纳斯•马克斯•哈普克(Hannes Max Hapke)

译者: 史亮 ,鲁骁 ,唐可欣 ,王斌

注:本书分为3部分:第一部分介绍NLP基础,包括分词、TF-IDF向量化以及从词频向量到语义向量的转换;第二部分讲述深度学习,包含神经网络、词向量、卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆(LSTM)网络、序列到序列建模和注意力机制等基本的深度学习模型和方法;第三部分介绍实战方面的内容,包括信息提取、问答系统、人机对话等真实世界系统的模型构建、性能挑战以及应对方法。

-END-

Today's Interaction

今日互动

你对NLP感兴趣吗?

关注AI科技大本营并评论分享你对自然语言处理的见解,我们将从中选出10条优质评论分别获得赠书1本截止时间11月15日晚20:00。

相关文章:

Servlet入门 代码

1. 第一个Servlet程序 package com.allanlxf.serv.basic; import javax.servlet.*; import java.io.*; public class TimeServlet implements Servlet {private ServletConfig config;public TimeServlet(){System.out.println("TimeServlet()");}public void init(S…

统计学习方法:朴素贝叶斯

作者:桂。 时间:2017-04-20 18:31:37 链接:http://www.cnblogs.com/xingshansi/p/6740308.html 前言 本文为《统计学习方法》第四章:朴素贝叶斯(naive bayes),主要是借助先验知识统计估计&…

Windows自动启动程序的十大藏身之所(转载)

Windows自动启动程序的十大藏身之所 Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉,实际上,在Windows XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的两个文件夹和八…

警惕!银行风控模型或将“摇身一变”,成为风险缔造者

作者 | 祝世虎来源 | 现代金融风险管理头图 | CSDN下载自视觉中国2011年,美联储发布了《模型风险管理监督指南(SR11-7)》(《SRLetter 11-7: Supervisory Guidance on Model Risk Management》),该指南逐步成…

Spring注解注入

spring注入方式-----注解注入(1)操作:首先在要注入的类前面加上:Component(与后面三个是等价的)Repository(持久层),Service业务层,Controller和控制层应为不能自动识别某个类是否是持久层,业务…

zip 的压缩原理与实现

http://www.blueidea.com/bbs/newsdetail.asp?id1819267&page2&posts&Daysprune5&lp1无损数据压缩是一件奇妙的事情,想一想,一串任意的数据能够根据一定的规则转换成只有原来 1/2 - 1/5 长度的数据,并且能够按照相应的规则还…

上海交大发布 MedMNIST 医学图像分析数据集 新基准

来源 | HyperAI超神经责编 | 晋兆雨头图 | 付费下载于视觉中国内容概要:医学图像分析是一个非常复杂的跨学科领域,近日上海交通大学发布了 MedMNIST 数据集,有望促进医学图像分析的发展。关键词:医学图像分析 公开数据集令人头秃…

VS 2010中对WPF4有哪些多点触摸支持?

随着多点触摸输入和操作处理支持的引进, WPF 4提供了一个极棒的方式,可在Windows 7中使你的客户端应用大放光彩,新的特性包括:UIElement上的多点触摸操作、惯性(漫游(Pan)、缩放(Zoo…

业务组件架构的思考

在iOS开发中,我们接触比较多的是MVC架构,下面我们先来分析一下MVC架构。 1.MVC MVC是一种软件架构模式,在1978年由Trygve Reenskaug提出,它把软件系统分为三个基本部分:模型(Model)、视图&#…

强化学习:10种真实的奖励与惩罚应用

作者 | Patrycja翻译 | Katie,责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国在强化学习(Reinforcement Learning)中,对代理进行奖励和惩罚机制的培训。代理的正确行为会得到奖励,而错误的行为会受到惩罚…

PHP feof() 函数读文件的使用

(PHP 4, PHP 5) feof — 测试文件指针是否到了文件结束的位置 如果服务器没有关闭由 fsockopen() 所打开的连接,feof() 会一直等待直到超时而返回TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。 文件指针必须是有效的&a…

批处理解决“易语言难题”

为什么80%的码农都做不了架构师?>>> 发现还没有Win批处理的,也就是DOS,我来凑个热闹,哈哈~ maxos 汇总贴 APPLEUFO 原题链接 不罗嗦,上代码啦: echo off set c_title批处理…

\r与\n有何差别,编码的时候应该怎样使用

差别: \r: 全称:carriage return (carriage是“字车”的意思。打印机上的一个部件)简称:return缩写:rASCII码:13作用:把光标移动到当前行的最左边\n: 全称:new line别名…

深度学习中的注意力机制(一)

作者 | 蘑菇先生来源 | NewBeeNLP头图 | CSDN下载自视觉中国目前深度学习中热点之一就是注意力机制(Attention Mechanisms)。Attention源于人类视觉系统,当人类观察外界事物的时候,一般不会把事物当成一个整体去看,往往…

Hibernate 异常org.hibernate.LazyInitializationException: could not initialize prox

Hibernate的Lazy初始化1:n关系时,必须保证是在同一个Session内部使用这个关系集合,不然Hiernate将抛出异常。 两种处理方法: 一、这是延时加载的问题,把有关联的所有pojo类,在hibernate.cfg.xml文件中。一般在many-to-…

XHTML基础问答

作者:阿捷 2004-6-26 1:43:36本文是2002年为硅谷动力网站翻译的稿件。当时xhtml1.0刚刚开始被设计师所接触,所以有下面这个基础问答。 HTML语言是我们建立网页的工具,从它出现发展到现在,规范不断完善,功能越来越强。…

958毕业,苦学Java,竟被二本毕业生吊打!网友:确实厉害!

最近收到一位中型公司 HR 的反馈,她说,我推荐的一个普通本二毕业生在校招面试中表现非凡,当时两个人争抢一个名额,他竟然完胜另一位 985 毕业生。普通本二毕业生对公司的技术提问对答如流,曾在小公司实习,做…

css布局中的居中问题

css布局中的居中问题 作者:阿捷 2004-7-5 14:35:49#sample{HEIGHT:240px;WIDTH:400px;BACKGROUND: url(http://www.w3cn.org/style/001/logo_w3cn_194x79.gif) #CCC no-repeat center;} 如何使DIV居中 主要的样式定义如下: body {TEXT-ALIGN: center;…

领域驱动设计_软件核心复杂性应对之道

领域驱动设计_软件核心复杂性应对之道转载于:https://www.cnblogs.com/MarvinGeng/archive/2013/02/21/2920968.html

谈谈Boost网络编程(2)—— 新系统的设计

写文章之前。我们一般会想要採用何种方式,是“开门见山”,还是”疑问式开头“。写代码也有些类似。在编码之前我们须要考虑系统总体方案,这也就是各种设计文档的作用。在设计新系统之初,我基本的目的是:保证高效率&…

64岁Python之父退休失败,正式加入微软搞开源

来源 | CSDN今天,64岁的Python 之父 Guido van Rossum 在 Twitter 上正式宣布,退休太无聊,如今加入了微软开发者部门。Guido van Rossum 去年宣布退出 Python 核心决策层事实上,近几年来,随着人工智能的飞速发展&#…

Java实现HTTP文件下载(转)

文章出自: http://www.360doc.com/content/12/1218/17/2718300_254818081.shtml 本人用这种方法解决了工作中遇到的问题,再次谢谢文章的作者. 序言 许多用户可能会遇到这样的情况:在网站上发现一个很好的资源,但是这个资源是分成了很多个文件存放的&…

初学web标准的几个误区

初学web标准的几个误区作者:阿捷 2004-7-7 11:37:11非常高兴地看到很多设计师开始关注和尝试使用web标准制作网页。但从网友们的问题和制作中发现几个问题,在这里特别提醒一下: 1.不是为了通过校验才标准化。 web标准的本意是实现内容(结构…

nginx系列:nginx反向缓存代理详解

小生博客:http://xsboke.blog.51cto.com如果有疑问,请点击此处,然后发表评论交流,作者会及时回复。-------谢谢您的参考,如有疑问,欢迎交流一、 代理和nginx相关概念1. 代理类型正向代理:代理局域网对internet的连接请求反向代理&…

编辑PDF文档,Word 2013可以是您的选择

题外话:记得刚进公司的时候,几乎所有的培训文档都是PDF、标准文档,公司使用的软件是Adobe Acrobat 5.0(不知道多少钱,呵呵),软件当然是购买正版的;去年,公司购买了新版本…

中国人工智能学会2020年度优秀科技成果出炉,百度文心ERNIE入选

11月14日,由中国人工智能学会(CAAI)主办的2020第十届中国智能产业高峰论坛(CIIS 2020)正式开幕,CAAI理事长戴琼海院士、何积丰院士、何友院士、王恩东院士、陆军院士等多位中外院士、专家齐聚嘉兴南湖&…

web标准,我们去向何方?一些想法...

web标准,我们去向何方?一些想法...作者:阿捷 2004-7-5 0:52:42原文作者:Veerle 原文出处:veerle.duoh.com 原文发表时间:2004年6月14日 译者注:本文是"你应该关注web标准的真正原因"…

事件源ES的优势

多年来,开发人员实现持久性使用传统的创建、读取、更新、删除(CRUD)模式。正如前面介绍的,如果采购模型实现持久性存储状态更改为历史事件捕获业务活动发生之前写的数据存储。这将事件存储机制,允许他们被聚合,或者放在一个组与逻辑边界。事件采购的模式之一,使并发、分布式系统…

你应该关注web标准的真正原因

你应该关注web标准的真正原因作者:阿捷 2004-7-4 2:28:39原文作者:Andrei Herasimchuk 原文出处:designbyfire.com 原文发表时间:2004年6月11日 译者前言:这是一篇让人震惊的文章。作者的分析深刻,文笔犀…

为什么我们需要开源的系统芯片?

作者 | bunnie译者 | 弯月,编辑 | 杨碧玉来源 | CSDN(ID:CSDNnews)现代的小型电子产品往往基于某个高度集成的芯片构建,这种芯片称为“系统芯片”(System on aChip,缩写:SoC&#xf…