所谓智能,或者说图灵测试,本质上就是对语言的理解。
试想,如果机器能理解人的语言,那么就可以理解人类的文明形式,就可以联想,创造和推论。
自然语言肯定是人工智能的巅峰。
中文比英文复杂太多。分词几乎让世面上大部分产品都跪了。尤其是当下网络新词,各种行业词,缩写词,简称等。分词是进入语义理解的第一步,词分错了,那后面的词性,命名实体,关系抽取更无从谈起。
加之,英文环境里语料,各种算法相对成熟。所以也是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金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。
联系客服