有人知道哪里有好的Twitter通用分类语料库吗?
我正在寻找广泛的分类,例如:
– 运动
– 科学/技术
– 食品
– 健康
– 娱乐
– 音乐
– 游戏
– 金融
– 教育
– 政治
– 电视
– 宗教
– 汽车
– 冲突
(我认为这几乎涵盖了一切)
这里链接了一些非常好的资源,但它们过于具体:
- Reuters 专门用于商品和自然资源
- 20Newsgroups 看起来是为美国报纸准备的
- Medir 用于心血管医学数据
编辑
这非常令人兴奋。我通过sklearn找到了这个数据库。这是所有类别的列表。看起来它包含了我想要的东西。我得学习如何使用,然后实现它,所以如果它有效的话,我会再回来告诉你们的…
回答:
大体上成功了!虽然这不是针对Twitter优化的训练数据集,但似乎更适合通用的文本分类。
好吧,这比预期的要尴尬得多。首先,
from sklearn.datasets import fetch_rcv1rcv1 = fetch_rcv1()
创建了一个我不知道如何处理的数据集。数据是47236维的向量,而不是文本标记,也没有明显的或我能找到的文档说明如何处理这些数据。所以我不得不走迂回路线。
查看数据源,可以下载标记文件。它们被分成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: […]}}
然后,我创建了两个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)
结果喜忧参半。如果你查看类别列表,你会注意到很多类别都是金融相关的,而不是我想要的均匀分布。所以我有很多失误。然而,它建立了一个坚实的基础,并且使用上述框架,很容易向dTrainingData
字典中添加标记/类别以实现更具体的分类。