【导读】自然语言处理(NLP)是人工智能的重要分支,旨在让计算机能够理解和处理人类的语言,从而实现更有效的沟通。本文提供了一份简洁的NLP简介,帮助读者快速掌握这一领域的基础知识。
作者 | George Seif
编译 | Xiaowen
使用计算机处理非结构化数据是一项挑战。计算机擅长处理结构化的数据,比如数据库表和财务记录,但在处理自然语言时遇到了困难。人类交流主要依赖于非结构化的自然语言,这使得计算机难以准确理解。
人与计算机对语言的理解
人类拥有数千年的书写历史,大脑在理解自然语言方面积累了丰富的经验。相比之下,计算机对自然语言的理解远不如人类。虽然机器学习的进步使计算机能够处理一些自然语言任务,但它们仍无法完全理解语言的真实含义。
NLP的难点
理解和解读自然语言比表面看起来复杂得多。例如,理解“Steph Curry昨晚表现惊人,彻底摧毁了对手”这句话,需要结合上下文和常识。计算机往往只能从字面意义上理解这些句子,无法理解其中隐含的意义。
通过Python代码解决NLP问题
为了更好地理解NLP,我们将使用Wikipedia提供的示例文本进行分析:
“Amazon.com, Inc., doing business as Amazon,是一家位于美国华盛顿州西雅图的电子商业和云计算公司,由Jeff Bezos于1994年7月5日创立。作为全球最大的互联网零售商,其业务包括在线书店、视频下载/流媒体、MP3下载/流媒体、有声书下载/流媒体、软件、视频游戏、电子产品、服装、家具、食品、玩具和珠宝。此外,该公司还生产消费电子产品,如Kindle电子阅读器、Fire平板电脑、Fire TV和Echo,并且是全球最大的云基础设施服务提供商。”
实体识别
首先,我们需要安装一些Python NLP库,例如spaCy和textacy。安装完成后,我们可以通过spaCy对文本进行实体识别,找出文本中的关键实体。以下是代码示例:
```python import spacy
nlp = spacy.load('encoreweb_lg') text = "Amazon.com, Inc., doing business as Amazon,是一家位于美国华盛顿州西雅图的电子商业和云计算公司,由Jeff Bezos于1994年7月5日创立。作为全球最大的互联网零售商,其业务包括在线书店、视频下载/流媒体、MP3下载/流媒体、有声书下载/流媒体、软件、视频游戏、电子产品、服装、家具、食品、玩具和珠宝。此外,该公司还生产消费电子产品,如Kindle电子阅读器、Fire平板电脑、Fire TV和Echo,并且是全球最大的云基础设施服务提供商。"
document = nlp(text)
for entity in document.ents: print(entity.text, entity.label_) ```
运行上述代码后,我们得到以下实体及其类型:
Amazon.com, Inc. ORG
American NORP
Seattle GPE
Washington GPE
Jeff Bezos PERSON
July 5, 1994 DATE
Alibaba Group ORG
Amazon.com ORG
Fire TV ORG
Echo - ORG
PaaS ORG
Amazon ORG
AmazonBasics ORG
实体操作
我们还可以通过替换特定实体来保护隐私。例如,可以用“[PRIVATE]”替换所有的人名和组织名:
```python import spacy
nlp = spacy.load('encoreweb_lg') text = "Amazon.com, Inc., doing business as Amazon,是一家位于美国华盛顿州西雅图的电子商业和云计算公司,由Jeff Bezos于1994年7月5日创立。作为全球最大的互联网零售商,其业务包括在线书店、视频下载/流媒体、MP3下载/流媒体、有声书下载/流媒体、软件、视频游戏、电子产品、服装、家具、食品、玩具和珠宝。此外,该公司还生产消费电子产品,如Kindle电子阅读器、Fire平板电脑、Fire TV和Echo,并且是全球最大的云基础设施服务提供商。"
def replaceentitywithplaceholder(token): if token.entiob != 0 and (token.enttype == "PERSON" or token.enttype == "ORG"): return "[PRIVATE] " else: return token.string
def scrub(text): doc = nlp(text) for ent in doc.ents: ent.merge() tokens = map(replaceentitywith_placeholder, doc) return "".join(tokens)
print(scrub(text)) ```
从文本中提取信息
textacy库提供了多种NLP算法,可以让我们从文本中提取更多信息。例如,半结构化语句提取可以从文本中提取出更具体的信息。以下是示例代码:
```python import spacy import textacy.extract
nlp = spacy.load('encoreweb_lg') text = """华盛顿特区,正式称为哥伦比亚特区,通常被称为华盛顿或D.C.,是美国的首都。这座城市成立于美国独立战争后,作为新国家的政府所在地,以乔治·华盛顿的名字命名,他是美国的第一任总统和国父。华盛顿是华盛顿都会区的主要城市,该都会区人口约为613万。作为联邦政府和国际组织的所在地,这座城市是一个重要的国际政治中心。华盛顿每年吸引超过2000万游客。 《居住法案》于1790年7月16日签署批准,批准在波托马克河沿岸创建一个位于美国东海岸的首都区。美国宪法规定,联邦区受国会专属管辖,因此不属于任何一个州。马里兰州和弗吉尼亚州各自捐赠土地以形成联邦区,其中包括现有的乔治敦和亚历山大市。以美国总统乔治·华盛顿的名字命名,华盛顿市于1791年成立,作为新的国家首都。1846年,国会归还了弗吉尼亚州最初捐赠的土地;1871年,它创建了一个单一的地方政府管理剩余部分。 截至2017年7月,华盛顿的人口估计为693,972,使其成为美国第20大城市。通勤者从周围的马里兰和弗吉尼亚郊区使城市在工作日的人口达到一百万以上。华盛顿都会区,以华盛顿为首要城市,人口超过600万,是全国第六大都会统计区。 美国联邦政府的三个分支都集中在该地区:国会(立法)、总统(行政)和最高法院(司法)。华盛顿是许多国家纪念碑和博物馆的所在地,主要集中在国家广场周围。这座城市还设有177个外国大使馆,以及许多国际组织、工会、非营利机构、游说团体和专业协会的总部,包括美洲国家组织、AARP、国家地理学会、人权运动、国际金融公司和美国红十字会。 自1973年以来,该市由一位民选市长和13名议员组成的市议会治理。然而,国会拥有最终权威,可以推翻当地法律。D.C.居民选举一名无投票权的众议院代表,但该市没有参议员代表。根据1961年批准的美国宪法第二十三条修正案,该市获得三个选举人票,用于总统选举。"""
document = nlp(text)
statements = textacy.extract.semistructured_statements(document, "华盛顿")
print("* 关于华盛顿特区的信息 *") count = 1 for statement in statements: subject, verb, fact = statement print(str(count) + " - 陈述:" + str(statement)) print(str(count) + " - 事实:" + str(fact)) count += 1 ```
通过以上示例,我们可以看到NLP在处理和理解自然语言方面的能力。尽管还有许多改进的空间,但NLP技术正不断进步,带来越来越多的应用场景。
NLP的应用范围广泛,包括语言翻译、聊天机器人和复杂的文本文档分析。目前大多数工作都借助深度学习技术,特别是循环神经网络(RNNs)和长短期记忆网络(LSTMs)来实现。如果你对NLP感兴趣,建议查阅spaCy和textacy的文档,以进一步了解如何处理和解析文本,并从中提取有价值的信息。