我目前正在研究一种基于神经网络的短文档分类方法,由于我所处理的语料库通常只有大约十个词,因此标准的统计文档分类方法用处有限。基于这一事实,我试图实现某种形式的自动同义词检测,用于训练过程中提供的匹配。我的问题更具体地涉及到如下情况的解决方案:
假设我有“涉及食物”和“涉及球体”两种分类,并且有一个如下数据集:
"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 --> FoodApples --> FoodMarbles --> SpheresOranges --> Food, SpheresThrowing --> SpheresBaseballs --> SpheresBalls --> SpheresSpinning --> NeutralInvolving --> Neutral
我意识到在这种特定情况下,这些匹配可能略显可疑,但这说明了我所面临的问题。我的总体思路是,如果我为一个词在某一类别中的对应词增加计数,那么我最终会意外地将所有内容与“涉及”这个词联系起来;然后我想,如果我为一个词在与多个同义词或非同义词一起出现时减少计数,那么我会失去“吃”和“食物”之间的联系。是否有人知道如何构建一个算法,使我能够朝上述方向前进?
回答:
有人向我解释了一种无监督的引导方法来实现这一点。
应用这种方法有不同的方式和变体,但这里是一个简化的版本。
概念:
首先假设如果两个词是同义词,那么在你的语料库中它们会出现在相似的环境中。(例如,吃葡萄,吃三明治等)
(在这种变体中,我将使用共现作为环境)。
引导算法:
我们有两个列表,
- 一个列表包含与食物项目共现的词
- 一个列表包含食物项目本身的词
监督部分
首先为其中一个列表播种,例如,我可能会在食物项目列表中写下“苹果”这个词。
现在让计算机接管。
无监督部分
它将首先在语料库中查找所有出现在“苹果”之前的词,并按出现频率排序。
取前两个(或你想要的任何数量)并将它们添加到与食物项目共现的列表中。例如,可能“吃”和“美味”是前两个。
现在使用该列表通过对列表中每个词右侧出现的词进行排名,找出接下来的两个顶级食物词。
继续这个过程,扩展每个列表,直到你对结果满意为止。
完成后
(你可能需要在过程中手动从列表中删除一些明显错误的内容。)
变体
如果考虑关键词的语法环境,这个过程可以变得非常有效。
Subj ate NounPhraseNounPhrase are/is MoldyThe 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,可以在这里看到关于它的简短幻灯片,接近演示的结尾。以及关于它的论文链接在这里