打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
自然语言处理系列任务之nltk

所谓智能,或者说图灵测试,本质上就是对语言的理解。

试想,如果机器能理解人的语言,那么就可以理解人类的文明形式,就可以联想,创造和推论。

自然语言肯定是人工智能的巅峰。

中文比英文复杂太多。分词几乎让世面上大部分产品都跪了。尤其是当下网络新词,各种行业词,缩写词,简称等。分词是进入语义理解的第一步,词分错了,那后面的词性,命名实体,关系抽取更无从谈起。

加之,英文环境里语料,各种算法相对成熟。所以也是kensho,watson这样的产品出现的英文世界里较多,但中文相对没有相应竞品的原因。

在垂直领域,会好一些,因为词汇相对固定。从英文nlp处理入门,然后一并考虑如何中文化,应该是个不错的思路。而nltk就是入门的最好材料,有各种好的算法,还有各种处理集成的语料。

英文基本没有分词的问题。所以直接进入词性标注一节。

import nltk

text = 'And now for something completely deffierent'
words = nltk.word_tokenize(text)
print(words)
tags = nltk.pos_tag(tokens=words)
print(tags)

唉,英文就是这么简单,完成分词和词性标注了。中文这一步,已经“牺牲一半”了。

['And', 'now', 'for', 'something', 'completely', 'deffierent']

[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('deffierent', 'JJ')]

CC = 并列连词,RB=副词,IN=介词,NN=句词,JJ=形容词

那么问题来了,为何要引入这个“额外”的信息。这个我们理解语言是一样的,我们小学的时候也会学习主谓宾定状补。虽然我们启蒙的时候,是没有语法的,反正就会说,所谓语感。但在课堂教授或者学习外语时候,都是从语法开始的。

另外一个好处,就是可以作为语义来统计了。比如统计三词组中的 动词 to 动词的结构:

from nltk.corpus import brown
def process(sent):
for (w1,t1),(w2,t2),(w3,t3) in nltk.trigrams(sent):#3-gram
       if t1.startswith('V') and w2=='to' and t3.startswith('V'):
print(w1,w2,w3)

for sent in brown.tagged_sents():
process(sent)

会找到好多如下结构的表达:

...

turn to reducing

need to discipline

attempts to trace

conspire to defy

learning to think

wants to know

wants to supply

begin to look

start to think

...

研究自然语言,或者说自然语言理解吧。现在计算机的确没有“理解力”。本质上都是“统计力”。但我们也需要有个目标,这个目标就是从文本中获得信息。相当于从非结构化数据到结构化,现在对于构建知识图谱,也非常有必要。

做法两步走:

1,从自然语言中提取出结构化信息,比如组织,比如地点

2,用结构化的查询,比如sql、正则或其它

也就是提取“命名实体”,基本技术是分块。主要是名词短语分块(NP-chunking)。

def np_chunking():
sent = [('the','DT'),('little','JJ'),('yellow','JJ'),('dog','NN'),('barked','VBD'),('at','IN'),('the','DT'),('cat','NN')]
grammer = 'NP: {<DT>?<JJ>*<NN>}'
   cp = nltk.RegexpParser(grammer)
result = cp.parse(sent)
print(result)
result.draw()

(S

  (NP the/DT little/JJ yellow/JJ dog/NN)

  barked/VBD

  at/IN

  (NP the/DT cat/NN))

很有意思,词性标注的用处看出来了吧。可以用正则表达式,按词性来查询所有的名词分块。

词性可以聚出名词分块,动词分块。名词分块里再去取命句实体,再去判断实体之间的关系。

(明天继续)

关于作者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏爱python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
从零开始学自然语言处理(十二)——上下文无关文法
Python自然语言工具包(NLTK)入门
建议收藏!27个Python机器学习、深度学习库总结(含大量示例)
Python文本预处理:步骤、使用工具及示例
作图详解 | 利用python绘制词云
python的nltk中文使用和学习资料汇总帮你入门提高
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服