【问题标题】:Natural Language Processing of Topics主题的自然语言处理
【发布时间】:2016-04-10 20:32:51
【问题描述】:

我是一个从事大数据课程项目的小组的一员,我们遇到了我们认为 NLP 的问题。目前我们有 JSON 格式的数据组,如下所示:

    "wine": {
        "category": "socializing",
        "category_id": 31,
        "score": 0.0,
        "topic_id": 611
    }
    "dragons": {
        "category": "lifestyle",
        "category_id": 17,
        "score": 0.279108277990115,
        "topic_id": 2137
    },
    "furry-fandom": {
        "category": "lifestyle",
        "category_id": 17,
        "score": 0.279108277990115,
        "topic_id": 48595
    },
    "legendarycreatures": {
        "category": "lifestyle",
        "category_id": 17,
        "score": 0.279108277990115,
        "topic_id": 10523
    }

标签是与相关信息(类别、流行度分数和类别/主题 ID #)相关联的主题。自从我们从中提取的 API 处理它以来,我们已经为每个主题关联了类别。但我们的问题是类别过于广泛,只有 33 个,无法识别任何有意义的趋势,而且主题过于具体且重叠(例如龙/传奇生物),而且数量过多,大约有 22,000 个。

这就是 NLP 的用武之地;我们想要创建某种超级主题集,它们不像“类别”那么广泛,但不像当前主题那么具体。再次使用“dragons”和“legandarycreatures”的示例将与其他人一起适合“幻想”的超级主题。

更多背景知识,我们正在使用 Python 来获取/处理我们的数据,我们希望继续使用它来实现这一点,而且我们都没有任何 NLP 的实际经验。

考虑到这一切,我们很乐意在这方面的斗争中提供一些建议和帮助。如果有更好的方法,或者 NLP 不可行,我们愿意接受。我们试图避免的是硬编码某种表格以进行分类。

TL;DR:我们正在尝试将一组 22,000 个主题分类为适当的“超级主题”,这些主题比当前主题更具体,但没有当前类别那么广泛。我们正在尝试在使用 Python 的同时使用 NLP 执行此操作,但不知道如何去做,并且也愿意接受建议。

【问题讨论】:

标签: python nlp categories categorization bigdata


【解决方案1】:

我会建议TextBlob,因为它简化了训练分类器的过程。请参阅教程here 了解如何构建文本分类器。当然,在你的具体问题中,你需要找出你想要分类多少个不同的类别;然后你必须训练提交一个重要的训练集(不要太多以避免过度拟合数据集);此时,您的分类器将准备好获取类型的新数据

"dragons": {
 "category": "lifestyle",
 "category_id": 17,
 "score": 0.279108277990115,
 "topic_id": 2137
 }

并对其进行分类。此时,您必须根据测试数据集评估您的分类。 这并不像查看这个迷你数据集的方式看起来那么明显(你能提供一个更大的它会海带),似乎你有一些数据集群,例如:

第一个集群标记为lifestyle

"dragons": {
    "category": "lifestyle",
    "category_id": 17,
    "score": 0.279108277990115,
    "topic_id": 2137
},
"furry-fandom": {
    "category": "lifestyle",
    "category_id": 17,
    "score": 0.279108277990115,
    "topic_id": 48595
},
"legendarycreatures": {
    "category": "lifestyle",
    "category_id": 17,
    "score": 0.279108277990115,
  }

第二个集群标记为socializing

"wine": {
        "category": "socializing",
        "category_id": 31,
        "score": 0.0,
        "topic_id": 611
    }

要定义你的超类别,你必须告诉分类器dragonslegendarycreatures这样的术语属于同一个数据集,我们称之为fantasy。所以这不仅是一个问题或分类,而且是文本分析和语义:legendarycreatures => legendary + creatures(词袋)与术语 dragons 的距离更接近于换句话说,word2vec 可以帮助评估这些名称的向量,并定义它们背后的指标以及它们之间的距离。 gensim 提供了一个很好的实现。

我提到了word2vec,因为无论您是否有每个条目的文本/描述,它都会起作用。在最后一种情况下,您可以为项目的标题定义一个指标,例如 dragonslegendarycreatures

[更新] 因此,我试图弄清楚如何使用一种全新的技术找到正确的分类算法,该技术“使用遗传编程自动创建和优化机器学习管道”,名为 Tpot,由 @rhiever 制作

在这种情况下,该工具需要特征向量(来自 word2vec)作为输入,必须以监督数据集格式提供。这是discussion,这是一个很好的起点。

【讨论】:

  • 以下是我拥有的几个不同的数据集: (txt.do/5wvo8) (txt.do/5wvj6) 这些是我们拥有的最小的;其他的达到接近 GB 的大小和更多种类。
  • @AustinHoller 我刚刚更新了这个帖子并进行了进一步的分析,现在有一个很好的起点。
【解决方案2】:

这是一个典型的分类问题。如果你想使用 Python,我建议你使用 Natural Language ToolKit (NLTK),尤其是 nltk.classify 包。可以在此处找到使用 NLTK 进行分类的良好介绍和概述:http://www.nltk.org/book/ch06.html。要获取有关 nltk.classify 的更多信息:

>>> import nltk
>>> help(nltk.classify)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多