【问题标题】:Methods for automated synonym detection自动同义词检测方法
【发布时间】:2012-07-07 09:17:48
【问题描述】:

我目前正在研究一种基于神经网络的短文档分类方法,由于我使用的语料库通常在十个单词左右,因此标准的统计文档分类方法用途有限。由于这个事实,我试图为训练中提供的匹配实现某种形式的自动同义词检测。我的问题更具体地说是关于解决如下情况:

假设我有“涉及食物”的分类,以及“涉及领域”之一和一个数据集如下:

"Eating Apples"(Food);"Eating Marbles"(Spheres); "Eating Oranges"(Food, Spheres);
"Throwing Baseballs(Spheres)";"Throwing Apples(Food)";"Throwing Balls(Spheres)";
"Spinning Apples"(Food);"Spinning Baseballs";

我正在寻找一种渐进式的方法来实现以下链接:

Eating --> Food
Apples --> Food
Marbles --> Spheres
Oranges --> Food, Spheres
Throwing --> Spheres
Baseballs --> Spheres
Balls --> Spheres
Spinning --> Neutral
Involving --> Neutral

我确实意识到,在这种特定情况下,这些匹配可能有点可疑,但它说明了我遇到的问题。我的一般想法是,如果我增加一个与某个类别中的单词相对出现的单词,但在这种情况下,我最终会偶然地将所有内容与“涉及”这个词联系起来,然后我认为我会简单地减少一个出现在某个类别中的单词。与多个同义词或非同义词结合,但我会失去“吃”和“食物”之间的联系。有没有人知道我将如何组合一个算法,让我朝着上面指示的方向移动?

【问题讨论】:

  • 你有一堆小句子,每个句子都有两个标签中的一个,你正在寻找一种方法来将词汇表中的每个标记与它似乎更相关或中性的标签相关联。某些关键术语出现在来自两个标签的句子中,您正在尝试寻找一种聪明的方法来给它们正确的标签?那是你的问题吗?同义词的概念在哪里进入了整个范式?
  • 这只是一个例子。在实际执行中,我的句子要长得多,大约有 3000 个标签,而不是两个。这里的同义词问题可能是对同义词的松散定义,但基本上可以说大理石是球体的同义词。我正在寻找关于统计递增单词的想法,使其成为模仿上述模式的同义词。
  • 必须是神经网络吗?在您对史蒂夫的回答中,您似乎也对替代方法(例如 LDA)持开放态度(尽管您最终驳回了 LDA)。
  • 它不一定是神经网络,只要它是适合这项工作的工具。神经网络似乎是最明智的,但如果有更好的方法,我很想听听。

标签: language-agnostic machine-learning nlp artificial-intelligence neural-network


【解决方案1】:

您可以尝试无人监督的 LDA。有一个受监督的 LDA 版本,但我不记得名字了!斯坦福解析器将拥有您可以使用的算法。我知道这不是您正在寻找的 NN 方法。但是,如果您只是想将信息组合在一起,LDA 似乎是合适的,特别是如果您正在寻找“主题”

【讨论】:

  • 这似乎是一个很好的起点,但我发现的一个问题是,与 LDA 和 PLSI 不同,在 LDA 和 PLSI 中,文档和主题之间存在明确的分离,在我的情况下,它们是一样的,需要一些调整才能克服,我会研究调用我的文字主题和主题文档,但我不知道这是否可行。
  • 很遗憾,LDA 不适用于我的应用程序。我仔细研究了它,LDA 需要大量关于这两个主题的元数据,以及这些主题中的单词,而我的文档太短了,无法访问这些元数据。我也真的不需要 LDA 提供的开放因果链,虽然 LDA 看起来确实很酷,我会尝试在未来的一些项目中实现它。
  • LDA 代表什么?谷歌搜索没有带来任何有用的东西,维基百科也没有将首字母缩写词 LDA 识别为任何相关的东西,最接近的是潜在狄利克雷分配的统计数据,这就是你的意思吗?
  • 潜在狄利克雷分配实际上是正确的。如果您对类似的事情感兴趣,那么可能值得研究 PLSI(概率潜在语义索引)和 Pachinko 分配,Pachinko 分配是相当新的,但似乎正在全面超越 LDA。
【解决方案2】:

此处的代码 (http://ronan.collobert.com/senna/) 实现了一个神经网络来执行各种 NLP 任务。该页面还链接到一篇论文,该论文描述了迄今为止将卷积神经网络应用于 NLP 任务的最成功的方法之一。

可以修改他们的代码以使用他们提供的训练过的网络对句子进行分类,但这可能需要比您希望的更多的工作,并且正确训练神经网络可能很棘手。

我使用类似的技术对生物序列进行分类取得了很大的成功,但是与英语句子相比,我的序列每个位置只有 20 个可能的符号,而不是 50-100k。

他们的网络中可能对您有用的一个有趣功能是他们的词嵌入。词嵌入将单个词(每个可以被认为是长度为 100k 的指示向量)映射到长度为 50 的实值向量。嵌入向量之间的欧几里德距离应该反映词之间的语义距离,因此这可以帮助您检测同义词。

对于更简单的方法,WordNet (http://wordnet.princeton.edu/) 提供了同义词列表,但我自己从未使用过。

【讨论】:

  • 也许我只是遗漏了一些东西,但塞纳似乎并不是最好的工具。与文档分类最接近的东西,他们实际上有一个名为实体识别的基准,这是一个非常明显的问题。一个非常简洁的程序是的,但除非我错过了一些东西,我可能是,它似乎与我的问题无关。特别是因为他们没有同义词识别的概念。我已经绘制出了神经网络部分,但这可能只是我的无知。
  • “Natural Language Processing (almost) from Scratch”第 8 页的图 2 显示了他们的句子方法网络。您需要修改最后一层以获取输出类别。或者,您可以尝试将查找表层添加到您的网络
  • 你的批评是有缺陷的。此外,您应该感兴趣的词嵌入(并且花了 2 个月的时间来训练)包含在作者分发的软件包中。
  • 请解释为什么我的批评是有缺陷的,如果你能这么好意的话。此外,他们的词嵌入是在与我完全不同的语料库上训练的,由于我在一个非常特殊的领域工作,因此缺乏领域特异性,因此它们对我来说基本上没用。
  • 以下是对您的批评的解释: (1) 对于特征,基本方法使用来自华尔街日报语料库的 100k 最常见作品的字典。单词被映射为小写并添加了大写功能。这种从单词创建特征向量的方法基本上是您在 NLP 中可以获得的最简单的方法。除非您将输入映射到某种矢量表示(第 2477 页),否则无法训练 NN。 (2) 论文中没有出现小的语料库数据。仅来自 POS、Chunking、NER 和 SRL 的 4 个基准数据集的结果。
【解决方案3】:

向我解释了一种不受监督的引导方法来执行此操作。

有不同的方法可以应用这种方法和变体,但这里有一个简化的版本。

概念:

首先假设如果两个词是同义词,那么在您的语料库中它们将出现在相似的设置中。 (吃葡萄,吃三明治等)

(在这个变体中,我将使用共现作为设置)。

引导算法:

我们有两个列表,

  • 一个列表将包含与食物同时出现的词
  • 一个列表将包含作为食物的词

监督部分

首先在其中一个列表中播种,例如,我可能会在食物列表中写下 Apple 一词。

现在让计算机接管。

无监督部分

它将首先查找语料库中出现在 Apple 之前的所有单词,并按照出现次数最多的顺序对它们进行排序。

选取前两个(或任意多个)并将它们添加到与食物同时出现的项目列表中。例如,也许“吃”和“美味”是前两个。

现在使用该列表通过排列出现在列表中每个单词右侧的单词来查找接下来的两个排名靠前的食物单词。

继续此过程,扩展每个列表,直到您对结果满意为止。

完成后

(您可能需要随时从列表中手动删除一些明显错误的内容。)

变体

如果您考虑到关键字的语法设置,此过程会非常有效。

Subj ate NounPhrase
NounPhrase are/is Moldy

The workers harvested the Apples. 
   subj       verb     Apples 

That might imply harvested is an important verb for distinguishing foods.

Then look for other occurrences of subj harvested nounPhrase

您可以扩展此过程以将单词移动到类别中,而不是在每个步骤中移动一个类别。

我的来源

几年前犹他大学开发的一个系统中使用了这种方法,该系统仅通过查看新闻文章就成功地编制了一份体面的武器词、受害者词和地点词列表。

一个有趣的方法,并取得了很好的效果。

不是神经网络方法,而是一种有趣的方法。

编辑:

犹他大学的系统被称为 AutoSlog-TS,在演示结束时可以看到关于它的简短幻灯片here。以及一篇关于它的论文的链接here

【讨论】:

  • 好吧,这种方法并不明确用于神经网络,但寻找相似词的一般方法是这里建议的第一种方法,它实际上直接适用于我的问题。同样,这绝对是为更大的语料库制作的,但我认为如果我使每个播种树本质上是一个增量树,而不是树内的命中会增加文档之间的链接并且缺少命中会减少它,那么它应该可以工作。
【解决方案4】:

我不确定我是否误解了你的问题。您是否要求系统能够仅根据您的输入数据进行推理,还是可以参考外部字典?

如果可以接受,我建议你看一下http://wordnet.princeton.edu/,这是一个英语单词关系数据库。 (它也存在于其他一些语言中。)这些关系包括同义词、反义词、上位词(这是您真正要寻找的,而不是同义词)、下位词等。

上位词/下位词关系将更通用的术语与更具体的术语联系起来。 “香蕉”和“橙子”这两个词是“水果”的下义词;它是两者的同义词。 http://en.wikipedia.org/wiki/Hyponymy当然,“橙色”是有歧义的,也是“颜色”的下义词。

您要求一种方法,但我只能为您指出数据。即使这被证明是有用的,您显然也需要大量的工作才能将它用于您的特定应用程序。一方面,你怎么知道你何时达到了合适的抽象级别?除非您的输入被高度规范化,否则您将混合使用通用术语和特定术语。你停留在“柑橘”、“水果”、“植物”、“动画”、“混凝土”还是“名词”? (抱歉,只是组成了这个特定的层次结构。)不过,希望这会有所帮助。

【讨论】:

  • 感谢您的建议,并且我已经研究了 wordnet,但是正如您提到的,该应用程序需要做很多工作,而且我对 wordnet 的具体体验非常糟糕。当您必须经常运行同义词查找时,它们也会非常缓慢。
  • 如果 wordnet 的同义词集非常符合我的需求,那么是的,这正是我所需要的,但遗憾的是 wordnet 失去了很多精度以适应它的普遍性。
猜你喜欢
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多