0

我一直在使用 Weka 的 J48 和朴素贝叶斯多项式 (NBM) 分类器根据 RSS 提要中的关键字频率将提要分类为目标类别。

例如,我的 .arff 文件之一包含以下数据提取:

@attribute Keyword_1_nasa_Frequency numeric
@attribute Keyword_2_fish_Frequency numeric
@attribute Keyword_3_kill_Frequency numeric
@attribute Keyword_4_show_Frequency numeric
…
@attribute RSSFeedCategoryDescription {BFE,FCL,F,M, NCA, SNT,S}

@data
0,0,0,34,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,12,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,10,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
…
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FCL
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,F
…
20,0,64,19,0,162,0,0,36,72,179,24,24,47,24,40,0,48,0,0,0,97,24,0,48,205,143,62,7
8,0,0,216,0,36,24,24,0,0,24,0,0,0,0,140,24,0,0,0,0,72,176,0,0,144,48,0,38,0,284,
221,72,0,72,0,SNT
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SNT
0,0,0,0,0,0,11,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,S

依此类推:总共有 570 行,其中每一行都包含一天中某个关键字在提要中的频率。在这种情况下,有 10 天的 57 个提要,总共有 570 条要分类的记录。每个关键字都以代理编号为前缀,并以“频率”为后缀。

我在“黑盒”的基础上对 J48s 和 NBM 分类器使用 10 倍 x 验证。使用的其他参数也是默认值,即 J48 的置信度为 0.25,最小对象数为 2。

到目前为止,我对不同天数、日期范围和实际关键字频率的实例的分类率,J28 和 NBM 结果在 50-60% 范围内是一致的。但是,如果可能的话,我想改进它。

我降低了决策树的置信水平,有时低至 0.1,但改进非常有限。

任何人都可以提出任何其他改进我的结果的方法吗?

为了提供更多信息,这里的基本过程涉及各种 RSS 提要集合,其中每个提要属于一个类别。

对于给定的日期范围,例如 2011 年 9 月 1 日至 10 日,每个提要的项目元素的文本都会合并。然后验证文本以删除带有数字、重音符号等的单词和停用词(使用来自 MySQL 的 500 个停用词列表)。然后在 Lucene 中对剩余的文本进行索引,以计算出最流行的 64 个单词。

然后在给定日期范围内的每一天的提要的描述元素中搜索这 64 个单词中的每一个。作为其中的一部分,描述文本也以与标题文本相同的方式进行验证,并再次被 Lucene 索引。因此,标题中的流行关键字(例如“declines”)被归结为“declin”:那么如果在描述元素中发现任何类似的词也源自“declin”,例如“declined”,则“declin”的频率取自 Lucene 对描述元素中的单词的索引。

.arff 文件中显示的频率在此基础上匹配,即在上面的第一行中,“nasa”、“fish”、“kill”在当天 BFE 类别中特定提要的描述项中找不到,但 'show' 被找到了 34 次。每行代表一天中所有 64 个关键字在提要的描述项中出现的次数。

所以我认为低频不是由于词干。相反,我认为这是某些关键字在某一类别的提要中流行但根本没有出现在其他提要中的必然结果。因此,结果中显示了备用性。通用关键字在这里也可能是相关的。

其他可能性是每个类别的提要数量不同,其中 NCA 等类别中的提要多于 S,或者关键字选择过程本身有问题。

4

2 回答 2

1

你没有提到任何关于stemming的事情。在我看来,如果您执行词干提取并且 WEKA 评估基于关键字 stems ,您可以获得更好的结果。

例如,假设您的 WEKA 模型是在给定关键字surfing的情况下构建的,并且新的 rss 提要包含单词surf。这两个词之间应该有一个匹配。

有多种语言的许多免费可用词干分析器。

对于英语,一些可用的词干提取选项是:

如果您想使用 WordNet 的字典执行词干提取,可以使用与 WordNet 集成的库和框架。

您可以在下面找到其中一些:

  • 麻省理工学院 Java WordNet 接口 ( JWI )
  • 丽塔
  • Java WorNet 库 ( JWNL )

提供更多信息后编辑

我认为指定案例中的关键点是“最流行的64个词”的选择。选择的单词或短语应该是关键字或关键短语。所以这里的挑战是关键字或关键短语的提取。

有几本关于关键字/关键短语提取的书籍、论文和算法。怀卡托大学在 JAVA 中实现了一种著名的算法,称为关键字提取算法 (KEA)。KEA 从文本文档中提取关键短语,既可用于免费索引,也可用于使用受控词汇表进行索引。该实现是根据 GNU 通用公共许可证分发的。

另一个应该考虑的问题是(词性)POS 标记。名词比其他词性标签包含更多信息。因此,如果您检查 POS 标签并且选择的 64 个单词大部分是名词,可能会得到更好的结果。

此外,根据 Anette Hulth 发表的论文《Improved Automatic Keyword Extraction Given More Linguistic Knowledge》,她的实验表明,关键词/关键短语大多具有或包含在以下五种模式之一中:

  • 形容词(单数或质量)
  • NOUN NOUN(无论是唱歌还是大众)
  • 形容词(复数)
  • NOUN (sing. or mass) NOUN (pl.)
  • 名词(唱歌或弥撒)

总之,我认为可以改善您的结果的一个简单操作是找到每个单词的 POS 标签并主要选择名词以评估新的 RSS 提要。您可以使用 WordNet 来查找每个单词的 POS 标签,正如我上面提到的,网络上有许多库可以与 WordNet 的字典进行集成。当然,词干提取对于分类过程也是必不可少的,并且必须加以维护。

我希望这有帮助。

于 2012-08-22T14:04:01.977 回答
1

尝试完全关闭词干。Stanford Intro to IR 作者提供了一个粗略的理由,说明为什么词干会在文本分类上下文中造成伤害,并且至少没有帮助。

我已经在自定义多项式朴素贝叶斯文本分类工具上测试了自己的词干(我得到了 85% 的准确率)。我尝试了 org.apache.lucene.analysis.en 版本 4.4.0 提供的 3 个 Lucene 词干分析器,它们是 EnglishMinimalStemFilter、KStemFilter 和 PorterStemFilter,加上没有词干提取,并且我对小型和大型培训文档语料库进行了测试。 当训练语料库较小时,Stmming 会显着降低分类准确率,而对于较大的语料库则保持准确率不变,这与 Intro to IR 语句一致。

还有一些事情要尝试:

  • 为什么只有64个字?我会把这个数字增加很多,但最好你根本没有限制。
  • 试试tf-idf(词频,逆文档频率)。您现在使用的只是 tf. 如果将其乘以 idf,则可以缓解由“show”等常见且无信息的词引起的问题。鉴于您使用的热门词很少,这一点尤其重要。
  • 增加训练语料库的大小。
  • 尝试将二元组、三元组等以及不同N 元组的组合(你现在只使用一元组)。

您可以转动许多其他旋钮,但我将从这些开始。你应该能够做得比 60% 好很多。80% 到 90% 或更高是常见的。

于 2013-10-24T14:31:08.410 回答