推特/通用分类训练语料
Twitter/ general categorisation training corpus
有人知道任何好的广泛的 Twitter 分类语料库吗?
我正在寻找广泛的类别,例如:
- 运动
- science/technology
- 食物
- 健康
- 娱乐
- 音乐
- 游戏
- 金融
- 教育
- 政治
- 电视
- 宗教
- 电机
- 冲突
(我认为这几乎涵盖了所有内容)
有非常好的链接资源 here,但它们很具体:
- Reuters 特定于商品和自然资源
- 20Newsgroups 看起来像美国报纸
- Medir 心血管医学数据
编辑
这非常令人兴奋。我找到了这个 database via sklearn. Here is the list of all categories。看起来它包含我正在寻找的东西。
我将不得不学习如何做,然后实现它,所以如果它有效,我必须回复你们...
主要是成功!虽然这不是 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,您会注意到很多类别都是金融类别,而不是我想要的均匀分布。所以我确实有很多想念。但是,它创建了一个坚实的基础,并且使用上面突出显示的脚手架,看起来很容易只需将 tokens/category 添加到 dTrainingData
字典以获取更具体的类别。
我找到了另一种更简单的方法。有一项名为 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 representation of the solution space, and some general info. List of table representation
有人知道任何好的广泛的 Twitter 分类语料库吗?
我正在寻找广泛的类别,例如:
- 运动
- science/technology
- 食物
- 健康
- 娱乐
- 音乐
- 游戏
- 金融
- 教育
- 政治
- 电视
- 宗教
- 电机
- 冲突
(我认为这几乎涵盖了所有内容)
有非常好的链接资源 here,但它们很具体:
- Reuters 特定于商品和自然资源
- 20Newsgroups 看起来像美国报纸
- Medir 心血管医学数据
编辑
这非常令人兴奋。我找到了这个 database via sklearn. Here is the list of all categories。看起来它包含我正在寻找的东西。
我将不得不学习如何做,然后实现它,所以如果它有效,我必须回复你们...
主要是成功!虽然这不是 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,您会注意到很多类别都是金融类别,而不是我想要的均匀分布。所以我确实有很多想念。但是,它创建了一个坚实的基础,并且使用上面突出显示的脚手架,看起来很容易只需将 tokens/category 添加到 dTrainingData
字典以获取更具体的类别。
我找到了另一种更简单的方法。有一项名为 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 representation of the solution space, and some general info. List of table representation