首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >句子间的语义相似度

句子间的语义相似度
EN

Stack Overflow用户
提问于 2010-01-11 01:29:44
回答 3查看 12.6K关注 0票数 8

我在做一个项目。我需要任何开源工具或技术来找到两个句子的语义相似度,其中我给出两个句子作为输入,并接收分数(即语义相似度)作为输出。有什么帮助吗?

EN

回答 3

Stack Overflow用户

发布于 2010-01-13 23:30:17

Salma,恐怕这不是你的问题的合适论坛,因为它与编程没有直接关系。我建议你在corpora list上再次提出你的问题。你可能还想先搜索他们的档案。

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

  1. Pete和Rob在车站附近发现了一只狗。
  2. Pete和Rob从未在车站附近发现过狗。
  3. Pete和Rob都很喜欢编程。
  4. Patricia在车站附近发现了一只狗。
  5. 是一只狗在雪下发现了彼得和罗布。

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

为了计算语义相似度,你需要首先决定什么你想被视为“语义相似”,而什么不是。为了在句子级别上计算语义相似度,理想情况下,您应该比较句子的某种意义表示。意义表示通常以逻辑公式形式出现,并且生成起来极其复杂。但是,也有一些工具试图做到这一点,例如Boxer

作为一种简单但通常实用的方法,您可以将语义相似度定义为一个句子中的单词与另一个句子中单词之间的相似度之和。这使得问题变得容易得多,尽管仍然有一些困难的问题需要解决,因为单词的语义相似性与句子的语义相似性的定义一样糟糕。如果你想对此有个印象,可以看看D.A.Cruse (1986)的“词汇语义学”一书。然而,有相当多的工具和技术来计算单词之间的语义相似度。他们中的一些人基本上将其定义为分类法中两个单词的负距离,如Word Net或维基百科分类法(请参阅this paper,它描述了一个应用程序接口)。其他人通过使用在大型文本语料库上计算的一些统计度量来计算语义相似度。它们基于这样一种见解,即相似的单词出现在相似的上下文中。第三种计算句子或单词之间语义相似度的方法与向量空间模型有关,您可以从信息检索中了解这些模型。要获得关于后一种技术的概述,请参阅Manning和Schütze的《统计自然语言处理的基础》一书中的第8.5章。

希望这能让你暂时振作起来。

票数 19
EN

Stack Overflow用户

发布于 2012-08-24 00:33:35

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

它适用于任何长度的句子,简单,稳定,快速,体积小...以下是示例输出:

句子之间的相似性

-Pete和Rob在车站附近发现了一条狗。

-Pete和Rob从未在车站附近发现过狗。

是: 1.0000000000

句子之间的相似性

-Patricia在车站附近发现了一条狗。

-It是一只狗,他在雪下发现了皮特和罗布。

是: 0.7363210405107239

句子之间的相似性

-Patricia在车站附近发现了一条狗。

-I我很好,谢谢!

是: 0.0

句子之间的相似性

-Hello,你好吗?

-I我很好,谢谢!

是: 0.29160592175990213

使用:

代码语言:javascript
运行
复制
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());

    }

}
票数 9
EN

Stack Overflow用户

发布于 2020-06-28 02:36:52

您可以尝试使用基于WordNet知识库的UMBC语义相似性服务。有UMBC STS (语义文本相似度)服务。这里是链接http://swoogle.umbc.edu/StsService/sts.html

致以敬意,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2037832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档