繁体   English   中英

自动同义词检测的方法

[英]Methods for automated synonym detection

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

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

"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

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

有一种无需探索的引导捆绑方法,我已经解释过这样做。

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

概念:

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

(在此变体中,我将使用共同出现作为设置)。

引导捆绑算法:

我们有两个清单,

  • 一个清单将包含与食品共同出现的字样
  • 一个列表将包含作为食品的单词

监督部分

首先播种其中一个列表,例如我可能会在食物清单上写下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,以及关于它的短暂的滑行可以看出这里对演示结束。 和它链接到一个文件在这里

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

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

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

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

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

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

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

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

超名/下位关系将更通用的术语与更具体的术语联系起来。 “香蕉”和“橙色”这两个词是“水果”的下位词; 它是两者的超名称。 http://en.wikipedia.org/wiki/Hyponymy当然,“橙色”含糊不清,也是“颜色”的下位词。

你问了一个方法,但我只能指出你的数据。 即使这有用,但显然需要相当多的工作才能将它用于您的特定应用程序。 首先,您如何知道何时达到了合适的抽象级别? 除非您的输入被标准化,否则您将混合使用通用和特定术语。 你停在“柑橘”,“水果”,“植物”,“动画”,“混凝土”还是“名词”? (抱歉,只是组成了这个特定的层次结构。)不过,希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM