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