4

我有以下两组。这个想法是能够根据我提供的一些元标签对新闻文章进行分类。例如,当我收到一篇包含“法官”“5 年”的文章时,它应该被归类为犯罪故事

train = [
             ('Honda', 'cars'),
             ('Ford', 'cars'),
             ('Volkswagen', 'cars'),
             ('Courthouse', 'crime'),
             ('Police', 'crime'),
             ('Taurus', 'cars'),
             ('Chevrolet', 'cars'),
             ('Sonic', 'cars'),
             ('Judge', 'crime'),
             ('Jail', 'crime')
             ]
    test = [
            ('Porsche', 'cars'),
            ('Toyota', 'cars'),
            ('Arrest', 'crime'),
            ('Prison', 'crime')
            ]

    cl = NaiveBayesClassifier(train)

问题是当我运行这个时:

for a, b in test:
        print a, cl.classify(a)

它将一切归类为“汽车”

我确定我在这里错过了语义相似性比较。我尝试通过文本 blob 使用 WordNet。

我跑了

word = Word("Volkswagen")
for each in word.definitions:
    print each

但它没有给我任何结果。

现在的问题是:

我如何让 WordNet 说大众汽车是汽车,将其集成到分类器中,以便它意识到现代也是汽车并正确分类?

4

2 回答 2

1

WordNet® 是一个大型的英语词汇数据库,汽车品牌名称不属于 WordNet,因此您无法知道 Volkswagen 是来自 WordNet 的汽车。为了将单词分类到类别,您必须为每个训练和测试示例构建一个特征向量。

于 2014-09-07T21:34:16.100 回答
1

您的问题有几个方面,您应该一一考虑:

“我确定我在这里错过了语义相似性比较。”

“语义相似性”只是您可能考虑的众多可能改进之一。请注意,即使对于“语义相似性”,您也可以通过多种不同的方式将其包含在您的模型中,而且并非所有这些方式都足够简单,可以对您当前的基于 NaiveBayes 的解决方案进行小幅修改。但是,最重要的是,您在这里犯了“过早优化”的错误。在您开始使用 WordNet 匹配等构建复杂模型之前,请确保您当前的解决方案确实不够用。

您发现的是,如果您在不存在“逮捕”一词的数据集上训练 NaiveBayes 分类器,则生成的模型在将来对该词进行分类时将变得复杂。但是,很有可能,使用相当逼真的训练集,您不会发现自己经常处于测试文章绝对没有熟悉标签的情况。

一旦你开始使用真实的数据集,你会很快发现在深入研究“语义相似性”之前,你可以尝试改进你的分类器(首先修复标签的拼写)。业务,这将使您的模型在许多方面变得复杂,而不必过多地提高性能。

但它没有给我任何结果。

正如另一个答案中提到的,WordNet 根本没有关于“大众”这个词的信息。即使是这样,您也不应该期望输入中的所有单词都是“熟悉的”、“无错字的”、“格式正确的”等。在你正在做的事情的背景下,你应该只希望新闻文章有足够的“熟悉”标签来识别它的整体主题。

我如何让 WordNet 说大众汽车是汽车,将其集成到分类器中,以便它意识到现代也是汽车并正确分类

这个特定问题的一个可能答案是:制作自己的单词关联图,添加关联“Hyunday”-“Volkswagen”以及其他一些东西,并为您的分类器使用“k-最近邻”模型.

但是,通过这样做,您将摆脱最初声称的“按标签对新闻文章进行分类”的任务,并且您的分类器仍然会在“Hynday”这个词上失败;)

于 2014-09-12T00:59:04.207 回答