3

我是 NLP(自然语言处理)的新成员。作为一个启动项目,我正在开发一个释义识别器(一个可以识别两个相似句子的系统)。对于那个识别器,我将在三时应用各种措施级别即,词汇,语法,语义。在词汇级别,有多种相似性度量,例如余弦相似度,匹配系数,雅卡系数……等。对于这些度量,我使用的是谢菲尔德大学开发的 simMetrics 包。这是一个用于不同相似度度量的精彩包。它包含许多相似度度量。但是对于 levenshtein 距离和 jaro-winkler 距离度量,代码仅在 *字符级别*仅。我需要句子级别的代码(即考虑单个单词而不是字符)。而且 SimMetrics 中没有曼哈顿距离的代码...我请求专家给我一个开发所需代码的建议(或)在句子级别为我提供上述措施的代码。

非常感谢您花时间和精力帮助我。

4

2 回答 2

3

我已经在 NLP 领域工作了几年,我完全同意那些提供答案/评论的人。这真的是一个难以破解的难题!但是,让我仍然提供一些指示:

(1) 词法相似性:与其试图将 Jaro-Winkler 距离推广到句子级别,不如开发一个字符级别或单词级别的语言模型,并计算对数似然,这可能会更有成效。让我进一步解释一下:基于语料库训练你的语言模型。然后取一大堆被注释为与语料库中的句子相似/不相似的候选句子。计算每个测试句子的对数似然,并建立一个截止值以确定相似性。

(2) 句法相似性:到目前为止,只有文体相似性才能捕捉到这一点。为此,您将需要使用 PCFG 解析树(或 TAG 解析树。TAG = 树邻接语法,CFG 的泛化)。

(3)语义相似度:我脑子里只有利用Wordnet等资源,识别同义词集之间的相似性。但这也不简单。您的第一个问题将是确定两个(或更多)句子中的哪些词是“对应词”,然后您才能继续检查它们的语义。

于 2012-02-10T18:18:31.993 回答
2

正如 Chris 所建议的,这对于初学者来说是一个不平凡的项目。我建议您从更简单的(如果相对无聊的话)开始,例如分块。

查看 Python NLTK 库的文档和书籍 - 有一些示例与您正在寻找的内容相近。例如,遏制:一个陈述包含另一个陈述是否合理。请注意那里的“似是而非”,对于简单的是/否甚至概率来说,最先进的技术还不够好。

于 2011-01-11T03:45:01.233 回答