如何计算词语的相似性(附github)

2023-10-24 02:58
文章标签 计算 github 相似性 词语

本文主要是介绍如何计算词语的相似性(附github),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

文本的相似性计算方法有很多,前面也讲了很多方式,下面继续讨论一种词语相似度的计算方法——基于知网的词语相似性计算。

词语语义

词语相似度也是没有一种明确的客观标准可用来衡量,相似度涉及到词语的词法、句法、语义、语用等,很难有一个统一的定义。

两类方法

词语相似度一般可分为两类方法,一种是基于 Ontology 或 Taxonomy 来计算,另外一种是基于大规模语料进行统计。

第一类方法一般是基于同义词词典,所有词组织在一棵或几棵树结构中,两个节点的路径长度即可作为语义距离。比如前面说到过的基于词林的相似度计算。

第二类方法需要大规模的语料,我们认为凡是语义相近的词,它们的上下文也应该相似,通过一定的概率模型可计算出词语的相关性,进而可计算相似性。

知网

《知网》由董振东先生研究十多载的成果,用于揭示概念与概念之间以及概念所具有的属性之间的关系为基本内容的常识知识库。知网含有丰富的词汇语义知识和世界知识,为自然语言处理提供了宝贵的资源。

知网结构

知网主要包含了“概念”和“义原”。概念是对词汇语义的一种描述,一个词也可以为几个概念。义原用于描述概念的最小意义单位。

《知网》一共采用了个 1500 义原,这些义原分为以下几个大类:
1) Event|事件
2) entity|实体
3) attribute|属性值
4) aValue|属性值
5) quantity|数量
6) qValue|数量值
7) SecondaryFeature|次要特征
8) syntax|语法
9) EventRole|动态角色
10) EventFeatures|动态属性

比如




概念编号描述语言
017144exercise|锻练,sport|体育
男人059349human|人,family|家,male|男
高兴029542aValue|属性值,circumstances|境况,happy|福,desired|良
生日072280time|时间,day|日,@ComeToWorld|问世,congratulate|祝贺
北京003815place|地方,capital|国都,ProperName|专,(China|中国)
儿童基金会024083part|部件 ,%institution|机构 ,politics|政,#young|幼,#fund|资金,(institution|机构=UN|联合国)

义原划分

我们可以把知网的义原分为三组。

组别名称范围作用
第一组基本义原包括第 1 到第 7 类的义原用来描述单个概念的语义特征
第二组语法义原只包括第 8 类义原用于描述词语的语法特征,主要是词性(Part of Speech)
第三组关系义原包括第 9 和第 10类的义原用于描述概念和概念之间的关系(类似于深层格语法中的格关系)

描述语言符号



,多个属性之间,表示“和”的关系
#表示“与其相关”
%表示“是其部分”
$表示“可以被该‘V’处置,或是该“V”的受事,对象,领有物,或者内容
*表示“会‘V’或主要用于‘V’,即施事或工具
+对 V 类,它表示它所标记的角色是一种隐性的,几乎在实际语言中不会出现
&表示指向
~表示多半是,多半有,很可能的
@表示可以做“V”的空间或时间
?表示可以是“N”的材料,如对于布匹,我们标以“?衣服”表示布匹可以是“衣服”的材料
{}(1) 对于 V 类,置于 [ ] 中的是该类 V 所有的“必备角色”。如对于“购买”类,一旦它发生了,必然会在实际上有如下角色参与:施事,占有物,来源,工具。尽管在多数情况下,一个句子并不把全部的角色都交代出来(2) 表示动态角色,如介词的定义
()置于其中的应该是一个词表记,例如,(China|中国)
^表示不存在,或没有,或不能
!表示某一属性为一种敏感的属性,例如:“味道”对于“食物”,“高度”对于“山脉”,“温度” 对于“天象”等

实词与虚词

知网的概念包含了实词和虚词,虚词的描述比较简单,用“{句法义原}”或“{关系义原}”进行描述。实词的描述比较复杂,由一系列用逗号隔开的“语义描述式”组成。

640?wx_fmt=jpeg
image

实词可以包括如下描述:

  1. 基本义原描述式,用“基本义原”进行描述,第一个描述式总是一个基本义原描述式,这也是对该实词最重要的一个描述式,这个基本义原描述了该实词的最基本的语义特征;

  2. 关系义原描述式:用“关系义原=基本义原”或者“关系义原=(具体词)”或者“(关系义原=具体词)”来描述;

  3. 关系符号描述式:用“关系符号 基本义原”或者“关系符号(具体词)”加以描述,还可以由多个关系符号描述式采用同一个关系符号;

基本思想

知网中的每一个概念并非对应于一个树状概念层次体系中的一个结点,这点与同义词词林不一样,知网中是通过用一系列的义原并利用某种知识描述语言来描述一个概念。这些义原通过上下位关系组织成一个树状义原层次体系。现在要做的事就是找到一种方法来计算这种知识描述语言表示的两个语义表达式的相似度。

对于两个汉语词语 W1 和 W2,如果 W1 有 n 个概念:S11,S12,……,S1n,
W2 有 m 个概念:S21,S22,……,S2m,则规定 W1 和 W2 的相似度是各
个概念的相似度最大值。

640?wx_fmt=jpeg
image

义原相似度

义原相似度计算时概念相似度的基础,义原由一个树状的义原层次体系构成,假设两个义原在这个层次体系中的路径距离为 d,可以得到这两个义原之间的语义距离为,

640?wx_fmt=jpeg
image

其中 p1 和 p2 表示两个义原,d 是 p1 和 p2 在义原层次体系中的路径长度,是一个正整数。α是一个可调节的参数。

虚词相似度

由于虚词和实词总是不能替换,所以虚词和实词的相似度总是为零。

另外,虚词总是用“{句法义原}”或“{关系义原}”这两种方式进行描述,所以虚词的相似度只需要计算其对应的句法义原或关系义原之间的相似度。

实词的相似度

知网的知识由义原、集合和特征结构共同表达,实词的整体相似建立在部分相似的基础上,把一个复杂的整体分解成部分,通过计算部分之间的相似度得到整体的相似度。

一个实词的描述可以表示为一个特征结构,该特征结构含有以下四个特征:

  1. 第一基本义原描述:其值为一个基本义原,我们将两个概念的这一部分的相似度记为 Sim1(S1,S2);

  2. 其它基本义原描述:对应于语义表达式中除第一基本义原描述式以外的所有基本义原描述式,其值为一个基本义原的集合,我们将两个概念的这一部分的相似度记为Sim2(S1,S2);

  3. 关系义原描述:对应于语义表达式中所有的关系义原描述式,其值是一个特征结构,对于该特征结构的每一个特征,其属性是一个关系义原,其值是一个基本义原,或一个具体词。我们将两个概念的这一部分的相似度记为 Sim3(S1,S2);

  4. 关系符号描述:对应于语义表达式中所有的关系符号描述式,其值也是一个特征结构,对于该特征结构的每一个特征,其属性是一个关系义原,其值是一个集合,该集合的元素是一个基本义原,或一个具体词。我们将两个概念的这一部分的相似度记为Sim4(S1,S2)。

则两个概念语义表达式的整体相似度为,

640?wx_fmt=jpeg
image

其中,

640?wx_fmt=jpeg
image

反映了 Sim1 到 Sim4 对于总体相似度所起到的作用依次递减。由于第一基本义原描述式反映了一个概念最主要的特征,所以应该将其权值定义得比较大,一般应在0.5以上。

第一基本义原描述相似度:就是两个义原的相似度,按照义原相似度计算;

其它基本义原描述相似度:其值为一个集合,转换为两个基本义原集合的相似度计算问题;建立两个集合的元素之间一一对应关系,方法为:

  1. 首先计算两个集合的所有元素两两之间的相似度;

  2. 从所有的相似度值中选择最大的一个,将这个相似度值对应的两个元素对应起来;

  3. 从所有的相似度值中删去那些已经建立对应关系的元素的相似度值;

  4. 重复上述第 2 步和第 3 步,直到所有的相似度值都被删除;

  5. 没有建立起对应关系的元素与空元素对应。

建立起两个集合元素的一一对应关系后,就很容易计算两个集合的相似度了:集合的相似度等于其元素对的相似度的加权平均。

关系义原描述相似度:其值为一个特征结构,转换为两个特征结构的相似度计算问题。属性相同的特征之间一一对应,如果没有属性相同的特征,那么该特征的对应物为空。特征结构的相似度就转化为各个特征的相似度的加权平均。

关系符号描述相似度:其值为一个特征结构,转换为两个特征结构的相似度计算问题。

github

https://github.com/sea-boat/TextAnalyzer/blob/master/src/main/java/com/seaboat/text/analyzer/similarity/HownetSimilarity.java


-------------推荐阅读------------

我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)

为什么写《Tomcat内核设计剖析》

2018汇总数据结构算法篇

2018汇总机器学习篇

2018汇总Java深度篇

2018汇总自然语言处理篇

2018汇总深度学习篇

2018汇总JDK源码篇

2018汇总Java并发核心篇

2018汇总读书篇



这篇关于如何计算词语的相似性(附github)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/272258

相关文章

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

如何提高 GitHub 的下载速度

如何提高 GitHub 的下载速度 文章目录 如何提高 GitHub 的下载速度1. 注册账号2. 准备好链接3. 创建仓库4. 在码云上下载代码5. 仓库更新了怎么办 一般来说,国内的朋友从 GitHub 上面下载代码,速度最大是 20KB/s,这种龟速,谁能忍受呢? 本文介绍一种方法——利用“码云”,可以大大提高下载速度,亲测有效。 1. 注册账号 去“码云”注册一

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

Github连接方式

打开Linux中git的配置文件: /home/username/git/MyRepository/.git/config [core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true[remote "origin"]fetch = +refs/heads/*:refs/remot

GitHub每周最火火火项目(9.2-9.8)

项目名称:polarsource / polar 项目介绍:polar 是一个开源项目,它是 Lemon Squeezy 的替代方案,并且具有更具优势的价格。该项目的目标是为开发者提供一种更好的选择,让他们能够在追求自己的热情和兴趣的同时,通过编码获得相应的报酬。通过使用 polar,开发者可以享受到更实惠的价格,同时也能够更自由地发挥自己的创造力和技能。 项目地址:https://github.

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro