1. 说明
今天讨论的是自然语言中的知识抽取和知识表示,换言之,就是如何从大量的书籍文献中剥离出我们关心的所谓“知识”,并将起组织保存成简单可用的描述。
不同的知识类型需要采用不同的知识表示方式,温有奎教授总结了10种知识类型 (具体见参考部分) 。对于静态概念及概念之间关系用面向对象形式来表示,对命题型问题用一阶逻辑来表示,对于系统流程和实验流程等过程性知识用脚本表示法。
静态概念是思维最基本的组成单元(以下简称基元),无论是命题还是流程,都离不开基元。我们应该把基元看作一种语义,而非一个单词。因为很多单词不具唯一性,常有一词多义,和一义多词的问题。
再来看看基元之间的关系,比如:水果,苹果,红富士,它们可能指向同一物体,又可能不同;它们在一定程度上拥有共同属性,又拥有各自特征;基元相互之间又可能有类别的包含,近义,反义,整体与局部等各种关系……
中文中的单词至少有几万个,这还不包括简单词组成的短语,如果有一个命题是“苹果是圆的”,那么是否也需要同时加入“红富士是圆的”,如果这样描述属性,恐怕是举不胜举了。而人类一般可以针对具体问题总结一些规则,并使用到类似的场景之中,即泛化。当我们在知识库中找不到“红富士”的描述特征时,我们可以参考它的父类“苹果”。
泛化的基础是基元之间的关系,这种关系又如何表示呢?来看看WordNet。
2. WordNet
WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。
它是一个覆盖范围宽广的英语词汇语义网。名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。
WordNet包含描述概念含义,一义多词,一词多义,类别归属,近义,反义等问题,访问以下网页,可使用wordnet的基本功能
http://wordnetweb.princeton.edu/perl/webwn
下面来看看具体用法
3. 安装
wordnet是nltk(natural language toolkit)的一个组件,因此需要先下载nltk
$ sudo pip install nltk
下载wordnet组件相关数据(python程序)
import nltk
nltk.download('wordnet')
4. 测试程序
from nltk.corpus import wordnet as wn
print(wn.synsets('published')) # 打印publish的多个词义
dog = wn.synset('dog.n.01') # 狗的概念
print(dog.hypernyms()) # 狗的父类(上位词)
print(dog.hyponyms()) # 狗的子类(下位词)
5. 主要功能介绍
(1) 上位词/下位词
hypernyms() # 上位(父类)
hyponyms() # 下位(子类)
(2) 同义词/反义词
lemma_names() # 同义
antonyms() # 反义
(3) 蕴涵关系
entailments()
(4) 整体与部位
part_meronyms() # 部分
substance_meronyms() # 实质
member_holonyms() # 成员
(5) 计算概念之间距离
path_similarity() # 相似度
lowest_common_hypernyms() # 在何种层面相似
6. 一些思考
Wordnet目前主要针对英文处理,想要使用它处理中文就需要构建中文的wordnet,把现有的知识加入该结构,其实也不需要从零做起,比如类别归属,同义,反义,通用的有“同义词词林”字典可供使用,在很多的专业领域,也有概念的类别及关系定义(如各种医学词典),只是格式有所不同。另外,还可以通过翻译,使用英文的WordNet的一部分数据,翻译过程中的问题主要是词汇的多义性,不过有些专有名词,歧义不大。
7. 参考
(1) 自然语言20.1 WordNet介绍和使用
https://www.cnblogs.com/webRobot/p/6094311.html
(2) 基于 NLP的知识抽取系统架构研究
https://wenku.baidu.com/view/5370b50a763231126edb11c5.html
(3) 基于知识元的文本知识标引
http://www.doc88.com/p-1816818922759.html
(4) python 自然语言处理(五)____WordNet
https://www.cnblogs.com/no-tears-girl/p/6416765.html
(5) WordNet主页
https://wordnet.princeton.edu/