我是NLP(自然语言处理)的新进入者。作为一个启动项目,我正在开发一个释义识别器(一个可以识别两个相似句子的系统)。对于那个识别器,我将应用各种词汇,语法,语义三个层次的度量。在词汇层面,有多个相似性度量,如余弦相似度,匹配系数,jaccard系数等等。对于这些度量,我使用的是由大学开发的simMetrics包。 sheffield ..这是一个很好的包,用于不同的相似性度量。它包含很多相似性度量。但是对于levenshtein距离和jaro-winkler距离度量,代码仅在* 字符级别 *。我需要代码在句子级别(即将单个单词视为一个单位而不是字符方式)。并且SimMetrics中也没有曼哈顿距离的代码......我请求专家给我一个建议来开发所需的代码(或)给我代码在上面的句子级别提到的措施。
非常感谢您花时间和精力帮助我。
答案 0 :(得分:3)
我已经在NLP领域工作了几年,我完全同意那些提供答案/评论的人。这真的是一个难以破解的难题!但是,让我仍然提供一些指示:
(1)词汇相似性:如果你开发一个字符级或单词级语言模型,并计算对数似然,那么它可能会更有成效,而不是试图将Jaro-Winkler距离推广到句子级别。让我进一步解释:基于语料库训练你的语言模型。然后将大量被注释为与语料库中的句子相似/不相似的候选句子。计算每个测试句子的对数似然,并建立一个截止值来确定相似性。
(2)句法相似性:到目前为止,只有样式相似性可以设法捕捉到这一点。为此,您需要使用PCFG解析树(或TAG解析树.TAG =树邻接语法,CFG的推广)。
(3)语义相似性:在我的脑海中,我只能想到使用Wordnet等资源,并确定同义词之间的相似性。但这也不简单。你的第一个问题是在你继续检查它们的语义之前,确定两个(或更多)句子中的哪些单词是“对应的单词”。
答案 1 :(得分:2)
正如克里斯所说,对于初学者来说,这是一个非平凡的项目。我建议你开始更简单的事情(如果相对无聊),比如分块。
查看Python NLTK库的文档和书籍 - 有一些样本与您正在寻找的内容接近。例如,遏制:一个陈述包含另一个陈述是否合理。注意那里的“似是而非”,对于一个简单的是/否或甚至概率,现有技术水平还不够好。