自然语言处理 - 文本分类功能
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 系统通常采用以下一种或多种方式:
去除停用词 -- 对于作者分类,这些通常是短而常见的词,例如 is、the、at、哪个,以此类推。 词干分析 - 流行的词干分析器(例如 Porter 词干分析器)使用一组规则来规范单词的变化。例如,walk、walking 和 walks 都映射到词干 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 最后但同样重要的是你有多少数据,你的向量越大,你应该有更多的数据。
【讨论】:
以上是关于自然语言处理 - 文本分类功能的主要内容,如果未能解决你的问题,请参考以下文章
《自然语言处理实战入门》文本分类 ---- 使用TextRNN 进行文本分类