考虑我们有16个不同的类别,例如,计算机,科学,艺术,商业等。我们在每个类别下面有一些单词作为同义词,同音异义词等描述每个主题的可能含义及其范围。因此,可能存在类似甚至相同的单词,这些单词属于多个类别。我们的目的是向系统提交一个查询(最大长度为3,停止删除词后)并要求系统将该单词放入具有最高相似性的类别中。所以我的问题是,除了余弦相似之外,还有什么好的技巧可以做到这一点吗?
我已经知道WordNet
及其扩展版本extjwnl
,但是,我希望实现一个为我提供足够的灵活性来实现小用途。
答案 0 :(得分:0)
因此,除了词干化,词形还原以及相似性得到正确计算之外,还有很多事情可以用来提高性能。 现在根据相似性,您可以使用LDA(潜在Dirichlet分配)将每个文档视为多个主题的组合。
LDA将文档视为以某些概率吐出单词的主题混合。它假定文档以下列方式生成:编写每个文档时,
确定文档将具有的字数N(例如,根据泊松分布)。 为文档选择主题混合(根据固定的K主题集上的Dirichlet分布)。例如,假设我们上面有两个食物和可爱的动物主题,你可以选择由1/3食物和2/3可爱动物组成的文件。 通过以下方式生成文档中的每个单词w_i: 首先选择一个主题(根据您在上面采样的多项分布;例如,您可以选择1/3概率的食物主题和2/3概率的可爱动物主题)。 使用主题生成单词本身(根据主题的多项分布)。例如,如果我们选择了食物主题,我们可能会产生概率为30%的“西兰花”,概率为15%的“香蕉”,依此类推。 假设这个文档集合的生成模型,LDA然后尝试从文档中回溯以找到可能已经生成集合的一组主题。
https://www.cs.princeton.edu/~blei/topicmodeling.html
虽然这是主题(类别是潜在的)的无监督训练,但您可以使用称为LLDA(Labeled LDA)的LDA扩展。
我不建议使用wordnet和余弦相似性,因为它们没有考虑术语的共同出现,因此可能不适用于所有数据集。
答案 1 :(得分:0)
Jaccard相似性也适用于您的情况。
Jaccard Similarity将句子转换为集合,然后找到我们必须找到相似性的文档之间的交集。
有关Jaccard Similarity的更多信息,您可以查看https://en.wikipedia.org/wiki/Jaccard_index