主题的自然语言处理

时间:2016-04-10 20:32:51

标签: python nlp categories categorization bigdata

我是一个从事大数据课程项目的小组的成员,我们遇到了我们认为的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的用武之地;我们想要创建某种超级主题集,这些主题不像“类别”那样广泛,但不像当前主题那样具体。再次使用“龙”和“legandarycreatures”的例子将与其他人一起融入“幻想”的超级主题。

更多背景,我们使用Python来获取/处理我们的数据,我们希望继续使用它,我们都没有任何NLP实践经验。

考虑到这一切,我们很乐意为这个斗争领域提供一些建议和帮助。如果有更好的方法或者NLP不可行,我们对他们开放。我们试图避免的是硬编码某种表格进行分类。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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

<强> [UPDATE] 所以,我试图找出如何使用一种全新的技术找到合适的分类算法,“使用遗传编程自动创建和优化机器学习管道”,由Tpot命名为@rhiever

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

相关问题