句子之间的语义相似度

我正在做project.i需要任何开源工具或技术来找到句子之间的语义相似性,我把输入作为两个句子输出作为分数(即语义相似性)。任何人都知道这个信息。我希望我会得到答复很快。谢谢大家。

萨尔玛,我担心这不是你问题的正确论坛,因为它与编程没有直接关系。 我建议您再在语料库列表中提问。 您也可能希望首先搜索其档案。

除此之外,你的问题不够精确,我会解释我的意思。 我假设你的项目是关于计算句子之间的语义相似性而不是关于语义相似性只是其中之一的其他内容。 如果是这种情况,那么有几点需要考虑:首先,从计算语言学和理论语言学的角度来看,“语义相似性”一词的确切含义都很清楚。 它有许多不同的观点和定义,都取决于要解决的问题的类型,手头的工具和技术,以及接近这个任务的人的背景等。考虑这些例子:

  1. 皮特和罗布在车站附近发现了一只狗。
  2. 皮特和罗布从未在车站附近找到过狗。
  3. Pete和Rob都喜欢编程。
  4. 帕特里夏在车站附近发现了一只狗。
  5. 这是一只在雪下找到Pete和Rob的狗。

哪个句子2-4与1相似? 2与1完全相反,仍然是皮特和罗布(不)找到一只狗。 3是关于皮特和罗布,但在一个完全不同的背景下。 4是关于在车站附近找一只狗,虽然发现者是别人。 5是关于Pete,Rob,狗和“发现”事件,但方式不同于1.对于我来说,即使不必编写计算机程序,我也无法根据它们的相似性对这些例子进行排名。

为了计算语义相似性,您需要首先确定您希望将哪些内容视为“语义相似”,哪些不是。 为了计算句子级别的语义相似度,理想情况下,您可以比较句子的某种意义表示。 意义表示通常作为逻辑公式出现,并且生成起来非常复杂。 但是,有一些工具试图这样做,例如拳击手

作为一种简单但通常很实用的方法,您可以将语义相似度定义为一个句子和另一个句子中单词之间相似性的总和。 这使得问题变得容易很多,尽管仍然存在一些难以解决的问题,因为单词的语义相似性与句子的语义相似性一样严格。 如果你想得到这个印象,请看看DA Cruse(1986)的“Lexical Semantics”一书。 然而,有许多工具和技术来计算单词之间的语义相似性。 他们中的一些人基本上将它定义为像Word Net或维基百科分类法这样的分类法中两个单词的负距离(参见本文描述了一个API)。 其他人通过使用在大文本语料库上计算的一些统计测量来计算语义相似性。 它们基于类似词语出现在类似语境中的洞察力。 计算句子单词之间语义相似性的第三种方法涉及从信息检索中可以知道的向量空间模型。 要了解后面这些技术的概述,请参阅Manning和Schütze 的统计自然语言处理基础一书中的第8.5章。

希望这会让你暂时站起来。

我开发了一个简单的开源工具,根据类别进行语义比较: https : //sourceforge.net/projects/semantics/files/

它适用于任何长度的句子,简单,稳定,快速,体积小……这是一个示例输出:
句子之间的相似性
-Pete和Rob在车站附近找到了一只狗。
-Pete和Rob从未在车站附近找到过狗。
是:1.0000000000

句子之间的相似性
-Patricia在车站附近发现了一只狗。
– 在雪下发现Pete和Rob的是一只狗。
是:0.7363210405107239

句子之间的相似性
-Patricia在车站附近发现了一只狗。
-我很好,谢谢!
是:0.0

句子之间的相似性
-你好,你怎么样?
-我很好,谢谢!
是:0.29160592175990213

用法:

import semantics.Compare; public class USAGE { public static void main(String[] args) { String a = "This is a first sentence."; String b = "This is a second one."; Compare c = new Compare(a,b); System.out.println("Similarity between the sentences\n-"+a+"\n-"+b+"\n is: " + c.getResult()); } }