我是一个致力于大数据课程项目的小组的一员,我们遇到了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种,以确定任何有意义的趋势,主题过于具体,w/重叠(例如龙/传说生物),有太多约22,000。
这就是NLP出现的地方;我们想要创建某种类型的超级主题,它们不像“类别”那么宽泛,但不像当前的主题那么具体。再一次使用“龙”和“真生物”的例子,和其他人一样,都符合“幻想”的超级主题。
更多一些背景,我们使用Python来抓取/处理我们的数据,我们希望继续使用它,而且我们都没有NLP的任何实际经验。
考虑到这一点,我们希望在这方面有一些建议和帮助。如果有更好的方法或者NLP是不可行的,我们对他们是开放的。不过,我们试图避免的是硬编码某种用于分类的表。
博士:我们正在尝试将一组22,000个主题分类为适当的“超级主题”,这些主题比当前的主题更具体,但比当前的分类范围更广。我们试图在使用Python时使用NLP来实现这一点,但不知道如何处理,也可以接受建议。
发布于 2016-04-11 00:28:09
我建议使用TextBlob,因为它简化了训练分类器的过程。有关如何构建文本分类器的教程这里。当然,在你的具体问题中,你需要找出你想要分类的不同类别;然后你必须训练提交一个重要的训练集(不要过多地避免过度拟合数据集);到那时,你的分类器将准备好获得新的类型数据。
"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
}要定义超级类别,您必须告诉分类器,像dragons和legendarycreatures这样的术语属于同一个数据集,我们称之为fantasy。因此,这不仅是一个问题或分类,也是文本分析和语义的问题:legendarycreatures => legendary + creatures (单词袋)与术语dragons的距离比其他单词更近,因此word2vec可以帮助这里评估这些名称的向量,并定义它们背后的度量标准以及它们之间的距离。gensim提供了一个很好的实现。
我提到的是word2vec,因为如果您有每个条目的文本/描述,它就会工作。在最后一种情况下,您只需为项目的标题定义一个度量标准,比如dragons或legendarycreatures。
更新了,因此,我正在试图找到正确的分类算法,使用一种全新的技术,“使用遗传编程自动创建和优化机器学习管道”,名为Tpot,由@rhiever制作。
在这种情况下,该工具需要特征向量(来自word2vec)作为输入,必须以受监督的数据集格式提供。这是讨论,这是一个很好的起点。
发布于 2016-04-11 00:19:01
这是一个典型的分类问题。如果您想使用Python,我建议您使用自然语言ToolKit (NLTK),特别是nltk.classify包。关于使用NLTK进行分类的一个很好的介绍和概述可以在这里找到:http://www.nltk.org/book/ch06.html。要获得更多关于nltk.classify的信息:
>>> import nltk
>>> help(nltk.classify)https://stackoverflow.com/questions/36535239
复制相似问题