最近,基于Cavnar和Trenkle的文章“基于N-Gram的文本分类”以及其他相关来源,我一直在研究文本分类和语言分类。
为了进行语言分类,我发现这种方法非常可靠和有用。用于生成N-gram频率曲线的文档的大小相当不重要,只要它们“足够长”,因为我只使用文档中最常见的n个N-gram。
另一方面,运作良好的文本分类使我无法理解。我已经尝试了我自己实现的算法的各种变体,有和没有各种调整,如idf加权和其他人的实现。只要我可以为类别参考文档生成一些类似大小的频率配置文件,它就能很好地工作,但是当它们开始变得有点过分时,整个事情就会崩溃,而具有最短轮廓的类别最终会变得不成比例分配给它的文件数量。
现在,我的问题是。补偿这种影响的首选方法是什么?这显然正在发生,因为算法假定任何给定N-gram的最大距离等于类别频率轮廓的长度但由于某种原因我无法绕过如何解决它。我对此修复感兴趣的一个原因实际上是因为我试图根据具有已知类别的文档来生成类别配置文件,这些文档的长度可能不同(即使它们的长度相同,配置文件最终可能会不同的长度)。是否有“最佳实践”解决方案?
答案 0 :(得分:1)
据我所知,任务是根据语言模型M计算生成概率。
最近,我正致力于使用语义,同步和词汇属性来测量文本的可读性。它也可以通过语言模型方法来衡量。
要正确回答,您应该考虑以下问题:
您使用对数似然方法吗?
您使用的是什么级别的N-Grams? unigrams digrams或更高级别?
您使用的语言语料库有多大?
仅使用digrams和unigrams我设法将一些文档分类并获得了不错的结果。如果你的分类很弱,可以考虑创建更大的语言语料库或使用更低级别的n-gram。
另外请记住,将某些文本分类为无效类别可能是一个错误,具体取决于文本的长度(随机出现在另一种语言模型中的文字很少)。
考虑让你的语言语料库更大,并且知道分析短文本具有更高的错误分类概率
答案 1 :(得分:1)
如果您仍然感兴趣,并且假设我正确理解您的问题,那么问题的答案就是将您的n-gram频率标准化。
在每个文档的基础上,最简单的方法是计算文档中所有n-gram的总频率,并将每个n-gram频率除以该数字。结果是,无论总长度如何,每个n-gram频率加权现在都与文档总内容的百分比有关。
在距离指标中使用这些百分比会折扣文档的大小,而是专注于其内容的实际构成。
值得注意的是,n-gram表示仅占整个分类解决方案的很小一部分。您还可以考虑使用降维,不同的索引加权指标和明显不同的分类算法。
See here for an example of n-gram use in text classification