7

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

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

"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

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

4

4 回答 4

15

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

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

概念:

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

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

自举算法:

我们有两个列表,

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

监督部分

首先播种其中一个列表,例如,我可能会在食品列表上写下 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,在演示文稿的最后可以看到一张关于它的简短幻灯片。还有一个关于它的论文的链接在这里

于 2012-07-14T05:42:07.247 回答
1

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

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

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

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

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

于 2012-07-10T21:09:17.463 回答
1

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

于 2012-07-06T22:10:22.543 回答
0

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

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

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

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

于 2012-07-14T08:03:44.247 回答