Twitter /一般分类培训语料库

时间:2016-03-02 15:45:42

标签: python twitter machine-learning categorization

有没有人知道任何好的广泛的Twitter分类语料库?

我正在寻找广泛的类别,例如:
  - 运动
  - 科学/技术
  - 食物
  - 健康
  - 娱乐
  - 音乐
  - 游戏
  - 财务
  - 教育
  - 政治   - 电视
  - 宗教
  - 电机
  - 冲突

(我认为这几乎涵盖了一切)

有很好的资源链接http://gitlab.itextsupport.com/itext/book/blob/master/WebContent/WEB-INF/web.xml,但它们是特定的:

修改
这非常令人兴奋。我通过Medir找到了此database。这是sklearn。看起来它包含了我正在寻找的东西。 我必须学习如何,然后实施这个东西,所以如果它有效,我将不得不回到你们身边......

2 个答案:

答案 0 :(得分:1)

大部分成功!虽然这不是一个Twitter优化的训练数据集,但似乎更多的一般文本分类 好吧,这比希望的要尴尬得多。首先,

from sklearn.datasets import fetch_rcv1
rcv1 = fetch_rcv1()

创建一个我不知道如何使用的数据集。数据是47236维度向量而不是文本标记,没有明显或记录(我可以找到)如何处理它的方式。所以我必须走很长的路。

查看datasource,可以下载令牌文件。它们分为5个部分:

lyrl2004_tokens_train.dat, 
lyrl2004_tokens_test_pt0.dat, 
lyrl2004_tokens_test_pt1.dat, 
lyrl2004_tokens_test_pt2.dat, 
lyrl2004_tokens_test_pt3.dat, 

包含一个包含所有分类的文件:

rcv1-v2.topics.qrels

作为一个有用的附注,对于像这样的大型文件,只需查看一些数据就可以了解您正在使用的内容。在linux中,您可以head -5 rcv1-v2.topics.qrels查看分类数据的前5行。

这些文件可以通过ID链接。因此,我创建了一个包含所有ID及其相应文本标记和分类的字典。我之所以用字典做这个,这是一个相当缓慢的过程,而不是仅创建包含所有值和错误的两个列表,因为我不知道数据文件是否匹配100%。

我的字典看起来像这样:
    dTrainingData = {' 2286':{lsTokens:[...],lsCats:[...]}}

然后,我创建了2个numpy数组,一个用于标记,另一个用于类别。这些需要先处理。所以,您可以这样训练模型:

def categorize(sText):
    import numpy as np
    aTokens = np.array([d['lsTokens'] for d in dTrainingData.values()], str)
    lCats = [d['lsCats'] for d in dTrainingData.values()]

    print("creating binary cats")

    from sklearn import preprocessing
    oBinarizer = preprocessing.MultiLabelBinarizer()
    aBinaryCats = oBinarizer.fit_transform(lCats)

    from sklearn.multiclass import OneVsRestClassifier
    from sklearn.feature_extraction.text import TfidfTransformer
    from sklearn.svm import LinearSVC
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.pipeline import Pipeline

    oClassifier = Pipeline([
        ('vectorizer', CountVectorizer()),
        ('tfidf', TfidfTransformer()),
        ('clf', OneVsRestClassifier(LinearSVC()))])

    print("fitting data to classifier...")
    oClassifier.fit(aTokens, aBinaryCats)

    aText = np.array([sText])

    aPredicted = oClassifier.predict(aText)
    lAllCats = oBinarizer.inverse_transform(aPredicted)

结果好坏参半。如果你看一下list of categories,你会注意到许多类别都是财务类别,而不是我想要的很好的均匀分布。所以我确实有很多失误。但是,它创建了一个坚实的基础,并使用上面突出显示的支架,只需将标记/类别添加到dTrainingData字典中以获取更具体的类别。

答案 1 :(得分:0)

我找到了另一种更简单的方法来做到这一点。有一项名为Meaning Cloud的服务,它通过一个非常好的API对您发送的文本进行分类。

这是一个demo,但用我自己的话说,对于python:

import requests

sUrl = "http://api.meaningcloud.com/class-1.1"
sKey = #your key - Need to sign up
sText = #your text of type str that you want categorized.
sModel = "IPTC_en"  #or whatever other model you want to use. 

sPayload = "key={}&txt={}&model={}".format(sKey, sText, sModel)
dHeaders = {'content-type': 'application/x-www-form-urlencoded'}

oResponse = requests.request("POST", sUrl, data=sPayload, headers=dHeaders)

dResponse = json.loads(oResponse.text)

More info on models
您需要注册才能使用它,并且您每秒可以执行2个请求,每月最多可获得40k请求。您需要支付更多费用,但我认为这不仅仅是公平的。

以下是解决方案空间的nice and visual tree representationsome general infoList of table representation