Python自然语言处理第二章-2.5WordNet(IV)——语义相似度
来源:互联网 发布:瑞典隆德大学知乎 编辑:程序博客网 时间:2024/05/10 10:34
WordNet——语义相似度
0. 本节内容
- lowesr_common_hypernyms() 获取最低共同上位词集
- min_depth() 词集深度
- path_similarity() 词集相似度
1. lowesr_common_hypernyms() 获取最低共同上位词集
lowest_common_hypernyms( )方法,注意是由一个词集调用的,其参数也是一个词集。感觉这个方法就是在找两个词集的“最小公倍数”,当然这不是数字上的逻辑关系,而是语言内部本身的逻辑关系。
结合例子来理解:
right_whale 露脊鲸、脊美鲸
orca 逆戟鲸
minke whale 小须鲸
baleen whale 须鲸
tortoise 海龟
vertebrate 脊椎动物
>>> right=wn.synset('right_whale.n.01')>>> orca=wn.synset('orca.n.01')>>> minke=wn.synset('minke_whale.n.01')>>> tortoise = wn.synset('tortoise.n.01')>>> novel =wn.synset('novel.n.01')>>> right.lowest_common_hypernyms(minke)#说明right whale与minke whale都属于baleen whale(须鲸)[Synset('baleen_whale.n.01')]>>> right.lowest_common_hypernyms(tortoise)#说明right whale 与 tortoise 都属于脊椎动物vertebrate[Synset('vertebrate.n.01')]>>> right.lowest_common_hypernyms(novel)#right whale与novel没有什么必然的联系,只能都属于entity(实体)[Synset('entity.n.01')]>>>
那么如何量化这些词集之间的“远近”、“距离”呢——下面学习min_paths()与path_similarity()方法。
2. min_paths() 获得词集的深度
该方法同样由一个词集调用,获得该同义词集的深度,来进行更直观上的理解。
用该方法获得其最低共同上位词集的深度,就可以粗略知道两个词集的距离,数字越大,表示词集深度越大,分类越细,则原来两个词集的关系越密切。
>>> wn.synset('vertebrate.n.01').min_depth()8>>> wn.synset('entity.n.01').min_depth()#entity0
right whale 与 tortoise 都属于脊椎动物vertebrate,而vertebrate的深度是8,有一定的关系,但是关系不是很深;
right whale与novel只能都属于entity(实体),深度为0,显然没有什么必然的联系。
但是这只根据一个数值来判断,还是觉得比较笼统,主观因素影响较大,能更更进一步的量化吗?
当然可以,那就是下面要讲的,求相似度方法。
3. path_similarity() 词集相似度
A. 直接使用该方法
该方法的使用与上述lowest_common_hypernyms( )相同,由一个词集调用,参数也是一个词集,输出两个词集之间的相似度,该相似度可以这样理解的:
- 相似度取值范围为0~1以及-1
- 两个词集之间没有路径返回 -1
- 同义词集与自身比较返回1
- 基于上位词层次结构概念中相互关联的最短路径下,进行计算的
- 还未提到返回0的情况
>>> right.path_similarity(minke)0.25>>> right.path_similarity(orca)0.16666666666666666>>> right.path_similarity(tortoise)0.07692307692307693>>>
如上所示直接使用该方法便得出相应的相似度,但是该相似度是怎样算出来的呢?它的依据是什么?笔者将相关词集的深度值列成一个表,然后找到了规律,并做了验证,具体分析如下:
B. 首先,用min_depth()方法获取每个词集的深度值:
>>> wn.synset('right_whale.n.01').min_depth()15>>> wn.synset('minke_whale.n.01').min_depth()16>>> wn.synset('orca.n.01').min_depth()16>>> wn.synset('whale.n.02').min_depth()13>>> wn.synset('tortoise.n.01').min_depth()13>>> wn.synset('novel.n.01').min_depth()7>>> wn.synset('baleen_whale.n.01').min_depth()14>>> wn.synset('whale.n.02').min_depth()13>>> wn.synset('vertebrate.n.01').min_depth()8>>> wn.synset('entity.n.01').min_depth()0>>>
C. 接着以right_whale作为第一个词集,列出其与其他词集的最低共同上位词集及相似度,括号中的数字表示相应的词集深度:
即:
a. 提到距离,远近这些概念,不免想起坐标系上两点之间的距离是怎样计算的,笔者观察这组数据,曾使用绝对值、平方和等等思路试图找到这组数据的规律;
b. 此外,距离是一个相对的概念,而两个词集最近的关系(联系)就是他们的最低层次的共同上位词集,所以,两个词集与其最低共同上位词集的深度之差(分别表示为dis1,dis2)是很重要的参考值;
c. 同时还需要引进归一化的思想,使得不同组的相似度具有对比的意义。
D. 验证如下
验证1——同义词与自身比较:这时最低共同上位词集也是自身,dis1与dis2均为0,符合“同义词集与自身比较将返回1”的情况。
>>> right.lowest_common_hypernyms(right)[Synset('right_whale.n.01')]>>> right.path_similarity(right)1.0
验证2——tortoise与orca之间:
<最低层次的共同上位词集及相似度> orca(16) path_similarity() tortoise(13) vertebrate(8) 0.07142857142857142
按照公式:
此时dis1=16-8=8,dis2=13-8=5,
path_similarity=1/(8+5+1)=0.07142857142857142
>>> tortoise.lowest_common_hypernyms(orca)[Synset('vertebrate.n.01')]>>> orca.path_similarity(tortoise)0.07142857142857142
验证正确!
上述的3.B~3.D讲了什么呢?
它将方法path_similarity() 的底层代码的思路分析出来了。(起码笔者是这么想的,哈哈)
如果果真是这样,还挺好玩的,哈哈~~
如有异议或者错误,欢迎提出来,一起学习,共勉~~~
- Python自然语言处理第二章-2.5WordNet(IV)——语义相似度
- Python自然语言处理第二章-2.5 WordNet(II)——wordnet的层次结构
- Python自然语言处理第二章-2.5 WordNet(I)——意义与同义词
- Python自然语言处理第二章-2.5WordNet(III)——更多词汇关系:部分、整体、集合、蕴含等
- WordNet词网研究——JWS(Java Wordnet Similarity)语义相似度计算
- python自然语言处理-WordNet
- WordNet词网研究7——之JWS(Java Wordnet Similarity)语义相似度计算
- 自然语言处理(2)——文档相似度计算
- python自然语言处理 第二章(上)
- python自然语言处理-----计算文本相似度
- python 自然语言处理 第二章
- 一个使用WordNet比较词语相似度的Java包——JWS(Java WordNet Similarity)
- 【转】 一个使用WordNet比较词语相似度的Java包——JWS(Java WordNet Similarity)
- 一个使用WordNet比较词语相似度的Java包——JWS(Java WordNet Similarity)
- 自然语言处理(五 文本相似度)
- 【python】python自然语言处理-----计算中文文本相似度
- PythonNLP学习进阶:第二章练习题(Python自然语言处理)
- python自然语言处理学习笔记第二章
- iOS OS X 和 iOS 中的多线程技术-1
- 计算机基础教学-大学生明星观
- 我是一个转行的程序员(一) | 青鸟之忆
- Jquery常用方法合集
- 07.开源项目--git
- Python自然语言处理第二章-2.5WordNet(IV)——语义相似度
- Windows解压版安装64位Apache2.4.29
- 列表、元组、字典、集合
- Hadoop 简介(Form Imoc)
- 广义表
- QT QThread 简单实现多线程
- 牛客练习赛6 B 点权和 树点权和
- Java集合框架关系图谱
- C++的学习-“C++与C的不同的笔记”