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

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

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

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

【问题讨论】:

    标签: java nlp weka feature-selection


    【解决方案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 最后但同样重要的是你有多少数据,你的向量越大,你应该有更多的数据。

      【讨论】:

        猜你喜欢
        • 2019-06-28
        • 2020-10-09
        • 2019-09-27
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多