自然语言处理是如何工作的?一步步教你构建NLP流水线

作者:媒体转发 时间:2018-08-19 09:21

字号
技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

计算机更擅长理解结构化数据,让计算机去理解主要以文化习惯沉淀下来的人类语言实在是太为难它们了。那自然语言处理获得的成功又是如何成就的呢?那就是,把人类语言(尽可能)结构化。本文以简单的例子一步步向我们展示了自然语言处理流水线的每个阶段的工作过程,也就是将语言结构化的过程,从句子分割、词汇标记化、...、到共指解析。作者的解释很直观、好理解,对于刚入门 NLP 的小伙伴是不可多得的好文。

计算机是如何理解人类语言的。

计算机非常擅长使用结构化数据,例如电子表格和数据库表。但是我们人类通常用文字交流,而不是使用电子表格来交流。这对计算机来说不是一件好事。

遗憾的是,在历史的进程中我们从未生活在一个充满结构化数据的世界里。

自然语言处理是如何工作的?一步步教你构建NLP流水线

世界上很多信息是非结构化的——例如英语或其他人类语言中的原始文本。那我们要如何让计算机了解非结构化文本并从中提取数据呢?

自然语言处理是如何工作的?一步步教你构建NLP流水线

自然语言处理,或简称为 NLP,是 AI 的子领域,重点放在使计算机能够理解和处理人类语言。接下来让我们看看 NLP 是如何工作,并学习如何使用 Python 编程来从原始文本中提取信息。

注意:如果你不关心 NLP 是如何工作的,只想复制和粘贴一些代码,请跳过到「在 Python 中实现 NLP 流水线」的部分。

一、计算机能理解语言吗?

只要计算机一直存在,程序员就一直在尝试编写出能理解像英语这样的语言的程序。原因很明显——人类已经书写下了几千年的信息,如果计算机能够读取和理解所有的这些数据,这将是非常有帮助的。

尽管计算机还不能像人类那样真正地理解英语——但是已经可以做很多事情了!在某些特定的领域,你可以用 NLP 技术去做一些看起来很神奇的事情,也可以在自己的项目中应用 NLP 技术来节省大量的时间。

更为便利的是,目前最新的 NLP 技术进展都可以通过开源的 Python 库(例如 spaCy、textacy、neuralcoref 等)来调用,仅仅需要几行 Python 代码即可实现 NLP 技术。

二、从文本中提取含义并不容易

阅读和理解英语的过程是非常复杂的,这个过程甚至没有包括考虑到英语有时并不遵循逻辑和一致的规则。例如,这条新闻标题是什么意思?

「Environmental regulators grill business owner over illegal coal fires.」  

是监管者质疑企业所有者非法燃烧煤炭吗?还是监管者真的在架起企业所有者并用煤炭烧烤?正如你所看到的,用计算机解析英语将会变得非常复杂。

在机器学习中做任何复杂的事情通常意味着需要建立一条流水线 (pipeline)。这个想法是把你的问题分解成非常小的部分,然后用机器学习来分别解决每个部分,最后通过把几个互相馈送结果的机器学习模型连接起来,这样你就可以解决非常复杂的问题。

这正是我们要运用在 NLP 上的策略。我们将把理解英语的过程分解成小块,然后看看每个小块是如何工作的。

三、一步一步建立 NLP 流水线

让我们来看看来自维基百科的一段文字:

London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium.  

(伦敦是英格兰的首都同时也是英国人口最大的城市,是大不列颠东南部的泰晤士河流域两千年来的主要人类定居点,由罗马人建立,取名为伦蒂尼恩 (Londinium)。

这一段话包含了一些有用的事实。如果一台电脑能阅读这篇文章,理解到伦敦是一座城市,伦敦位于英国,伦敦由罗马人定居,那就太好了。但是为了达到这个目的,我们首先必须教会计算机最基本的书面语言概念,然后基于此再逐步进行完善。

步骤 1:句子分割

流水线的第一步是把文本拆分成单独的句子,像这样:

「伦敦是英格兰的首都同时也是英国人口最多的城市。」

「位于大不列颠岛东南部的泰晤士河流域的伦敦是两千年以来的主要人类定居点。」

「由罗马人建立,取名为伦蒂尼恩 (Londinium)。」

我们可以假设英语中的每个句子都表达了一个独立的思想或想法。编写一个程序来理解一个句子比理解整个段落要容易得多。

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接