自然语言处理 - 文本分类功能

Posted

技术标签:

【中文标题】自然语言处理 - 文本分类功能【英文标题】:Natural Language Processing - Features for Text Classification 【发布时间】:2013-06-04 06:41:51 【问题描述】:

所以我正在尝试使用 Weka SVM 对文本进行分类。到目前为止,我用于训练 SVM 的特征向量由 TF-IDF 统计数据组成,用于训练文本中出现的一元和二元。但是,我从测试经过训练的 SVM 模型中得到的结果根本不准确,那么有人可以就我的程序给我反馈吗?我正在按照以下步骤对文本进行分类:

    构建由从训练文本中提取的一元和二元组成的字典 计算每个 unigram/bigram 在每个训练文本中出现的次数,以及 unigram/bigram 在训练文本中出现的次数 使用步骤 2 中的数据计算每个 unigram/bigram 的 TF-IDF 对于每个文档,构造一个作为字典长度的特征向量,并将对应的 TF-IDF 统计量存储在向量的每个元素中(例如,文档一的特征向量中的第一个元素将对应到 TF-IDF 字典中与文档相关的第一个单词) 为每个特征向量附加类标签,以区分哪个文本属于哪个作者 使用这些特征向量训练 SVM 测试文本的特征向量的构建方式与训练文本相同,并由 SVM 进行分类

另外,我是否需要用更多功能训练 SVM?如果是这样,在这种情况下哪些功能最有效?任何帮助将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

自然语言文档通常包含许多只出现一次的单词,也称为Hapax Legomenon。例如,Moby-Dick 中 44% 的不同单词只出现一次,17% 出现两次。

因此,包含语料库中的所有单词通常会导致过多的特征。为了减小此特征空间的大小,NLP 系统通常采用以下一种或多种方式:

去除停用词 -- 对于作者分类,这些通常是短而常见的词,例如 istheat、哪个,以此类推。 词干分析 - 流行的词干分析器(例如 Porter 词干分析器)使用一组规则来规范单词的变化。例如,walkwalkingwalks 都映射到词干 walk。 相关/显着性阈值 - 计算 Pearson 相关系数或每个特征相对于类标签的 p 值。然后设置一个阈值,并移除所有得分低于该阈值的特征。 Coverage Threshold——与上面的阈值类似,去掉至少t个文档中没有出现的所有特征,其中t相对于整个语料库大小非常小( 根据词性进行过滤 - 例如,仅考虑动词,或删除名词。 基于系统类型的过滤 - 例如,临床文本的 NLP 系统可能只考虑在医学词典中找到的单词。

对于词干提取、去除停用词、索引语料库以及计算 tf_idf 或文档相似度,我建议使用 Lucene。谷歌“Lucene in 5 minutes”,获取一些关于使用 lucene 的快速简单的教程。

【讨论】:

【参考方案2】:

在这些类型的分类中,重要的是你的向量不是很大,因为你可以在其中得到很多零,这可能会对结果产生不良影响,因为这些向量太接近并且很难将它们分开正确。另外,我建议您不要使用每个二元组,选择一些频率最高的(在您的文本中)以减小向量的大小并保留足够的信息。推荐它的一些文章:http://en.wikipedia.org/wiki/Curse_of_dimensionality 最后但同样重要的是你有多少数据,你的向量越大,你应该有更多的数据。

【讨论】:

以上是关于自然语言处理 - 文本分类功能的主要内容,如果未能解决你的问题,请参考以下文章

白话自然语言处理(2)——文本分类

《自然语言处理实战入门》文本分类 ---- 使用TextRNN 进行文本分类

《自然语言处理实战入门》文本分类 ---- 使用TextRNN 进行文本分类

自然语言处理动手学Bert文本分类

自然语言处理动手学Bert文本分类

自然语言处理篇--以NLTK为基础讲解自然语?处理的原理