标签: document-classification

什么尝试和真正的算法建议相关的文章在那里?

很常见的情况,我打赌.你有一个博客或新闻网站,你有很多文章或blags或你称之为的任何东西,你想在每个网站的底部建议其他似乎相关的东西.

让我们假设每个项目的元数据非常少.也就是说,没有标签,类别.视为一大块文本,包括标题和作者姓名.

你如何找到可能相关的文件?

我对实际的算法很感兴趣,而不是现成的解决方案,虽然我可以看看在ruby或python中实现的东西,或者依赖于mysql或pgsql.

编辑:目前的答案还不错,但我想看到更多.对于一两件事,可能有一些非常简单的示例代码.

text information-retrieval machine-learning document-classification

23
推荐指数
2
解决办法
4300
查看次数

如何计算要分类的单个新文档的TF*IDF?

我使用文档术语向量来表示文档集合.我使用TF*IDF来计算每个文档向量的术语权重.然后我可以使用这个矩阵来训练文档分类的模型.

我期待将来对新文档进行分类.但是为了对其进行分类,我需要首先将文档转换为文档术语向量,并且向量也应该由TF*IDF值组成.

我的问题是,如何只用一个文件来计算TF*IDF?

据我所知,TF可以根据单个文档本身计算,但IDF只能用文档集合计算.在我目前的实验中,我实际上计算了整个文档集合的TF*IDF值.然后我使用一些文档作为训练集,其他文档作为测试集.

我突然意识到这似乎不适用于现实生活.

添加1

因此,实际上有两种微妙的分类方案:

  1. 对某些内容已知但标签未知的文件进行分类.
  2. 对一些完全看不见的文件进行分类.

对于1,我们可以组合所有文档,包括标签和不标签.并获得所有这些TF*IDF.这样,即使我们只使用带有标签的文件进行培训,培训结果仍然会包含没有标签的文件的影响.

但我的情况是2.

假设我从训练集语料库的摘要中获得了关于术语T的以下信息:

  • 训练集中T的文档计数为n
  • 培训文件总数为N.

我应该如下计算看不见的文件D 的ID的IDF 吗?

IDF(t,D)= log((N + 1)/(n + 1))

添加2

如果我在新文档中遇到一个之前没有出现在训练语料库中的术语怎么办?我应该如何计算doc-term向量中的权重?

information-retrieval classification machine-learning text-mining document-classification

21
推荐指数
1
解决办法
1万
查看次数

scikit-learn TfidfVectorizer意思?

我正在阅读有关scfit -learn的TfidfVectorizer 实现,我不明白该方法的输出,例如:

new_docs = ['He watches basketball and baseball', 'Julie likes to play basketball', 'Jane loves to play baseball']
new_term_freq_matrix = tfidf_vectorizer.transform(new_docs)
print tfidf_vectorizer.vocabulary_
print new_term_freq_matrix.todense()
Run Code Online (Sandbox Code Playgroud)

输出:

{u'me': 8, u'basketball': 1, u'julie': 4, u'baseball': 0, u'likes': 5, u'loves': 7, u'jane': 3, u'linda': 6, u'more': 9, u'than': 10, u'he': 2}
[[ 0.57735027  0.57735027  0.57735027  0.          0.          0.          0.
   0.          0.          0.          0.        ]
 [ 0.          0.68091856  0.          0.          0.51785612  0.51785612
   0.          0.          0.          0.          0.        ]
 [ 0.62276601  0. …
Run Code Online (Sandbox Code Playgroud)

nlp machine-learning feature-extraction document-classification scikit-learn

17
推荐指数
2
解决办法
1万
查看次数

文本分类/分类算法

我的目标是[半]自动将文本分配到不同的类别.每个类别都有一组用户定义的类别和一组文本.理想的算法应该能够从人类定义的分类中学习,然后自动对新文本进行分类.任何人都可以建议这样的算法,也许是实现ше的.NET库吗?

algorithm text-mining document-classification

15
推荐指数
3
解决办法
2万
查看次数

用于文档分类的监督潜在Dirichlet分配?

我在一些群体中有一堆已经人为分类的文件.

是否有lda的修改版本,我可以用它来训练模型,然后用它来分类未知文档?

nlp classification machine-learning document-classification lda

12
推荐指数
2
解决办法
1万
查看次数

可扩展或在线的核外多标签分类器

在这个问题上,过去2-3周我一直在绞尽脑汁.我有一个多标签(不是多级)的问题,每个样品可以属于多个标签的.

我有大约450万个文本文档作为训练数据,大约100万个作为测试数据.标签大约35K.

我正在使用scikit-learn.对于特征提取我以前使用TfidfVectorizer它没有规模可言,我现在用的HashVectorizer这是更好的,但不是可扩展鉴于我有文件的数量.

vect = HashingVectorizer(strip_accents='ascii', analyzer='word', stop_words='english', n_features=(2 ** 10))
Run Code Online (Sandbox Code Playgroud)

SKlearn提供OneVsRestClassifier,我可以在其中提供任何估算器.对于多标签,我发现LinearSVC和SGDClassifier只能正常工作.根据我的基准,SGD在内存和时间方面都优于LinearSVC.所以,我有这样的事情

clf = OneVsRestClassifier(SGDClassifier(loss='log', penalty='l2', n_jobs=-1), n_jobs=-1)
Run Code Online (Sandbox Code Playgroud)

但是这有一些严重的问题:

  1. OneVsRest没有partial_fit方法,这使得无法进行核外学习.那有什么替代品吗?
  2. HashingVectorizer/Tfidf都可以在单个核心上运行,并且没有任何n_jobs参数.散列文档需要花费太多时间.任何替代/建议?n_features的值是否正确?
  3. 我测试了100万份文件.Hashing需要15分钟,当涉及到clf.fit(X,y)时,我收到一个MemoryError,因为OvR内部使用LabelBinarizer并且它试图分配一个维度矩阵(yx类),这是不可能分配的.我该怎么办?
  4. 还有其他任何具有可靠和可扩展的多标签算法的库吗?我知道genism和mahout但他们两个都没有任何多标签情况?

classification machine-learning document-classification scikit-learn text-classification

12
推荐指数
2
解决办法
2275
查看次数

理解贝叶斯定理

我正在研究A Naive Bayes分类器的实现.编程集体智慧通过将贝叶斯定理描述为:

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B)
Run Code Online (Sandbox Code Playgroud)

以及与文档分类相关的特定示例:

Pr(Category | Document) = Pr(Document | Category) x Pr(Category) / Pr(Document)
Run Code Online (Sandbox Code Playgroud)

我希望有人可以向我解释这里使用的符号,Pr(A | B)和Pr(A)是什么意思?它看起来像某种功能,但管道是什么意思,等等?(我有点迷路)

提前致谢.

statistics bayesian document-classification naivebayes

11
推荐指数
1
解决办法
4273
查看次数

RTextTools中的Create_Analytics

我试图将Text文档分类为多个类别.我的下面的代码工作正常

matrix[[i]] <- create_matrix(trainingdata[[i]][,1], language="english",removeNumbers=FALSE,stemWords=FALSE,weighting=weightTf,minWordLength=3)                              
container[[i]] <- create_container(matrix[[i]],trainingdata[[i]][,2],trainSize=1:50,testSize=51:100) ,
models[[i]] <- train_models(container[[i]], algorithms=c("MAXENT","SVM"))
results[[i]] = classify_models(container[[i]],models[[i]])
Run Code Online (Sandbox Code Playgroud)

当我尝试下面的代码来获得精度,召回,准确度值:

analytic[[i]]  <- create_analytics(container[[i]], results[[i]])
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error in `row.names<-.data.frame`(`*tmp*`, value = c(NA_real_, NA_real_ : 
  duplicate 'row.names' are not allowed
Run Code Online (Sandbox Code Playgroud)

Categoriestext格式.如果我转换categoriesNumeric- 上面的代码工作正常.

是否有工作来保持text格式的类别,并获得精度,召回,准确值.

我的目标是获得多级分类器的精度,召回率,准确度值和混淆矩阵.是否有任何其他包来获取多类文本分类器的上述值(一个与所有)

precision r text-mining document-classification confusion-matrix

8
推荐指数
1
解决办法
1780
查看次数

多标签文档分类

我有一个数据库,我根据以下三个字段存储数据:id,text,{labels}.请注意,每个文本都已分配给多个label\tag\class.我想构建一个模型(weka\rapidminer\mahout),它可以推荐\将一堆标签\标签\类分类到给定的文本.

我听说过SVM和朴素贝叶斯分类器,但不确定它们是否支持多标签分类.任何指导我正确方向的东西都非常受欢迎!

java machine-learning text-mining document-classification

7
推荐指数
1
解决办法
3410
查看次数

NLTK - 多标记分类

我正在使用NLTK来对文档进行分类 - 每个文档有1个标签,有10种类型的文档.

对于文本提取,我正在清理文本(标点删除,html标记删除,小写),删除nltk.corpus.stopwords,以及我自己的停用词集合.

对于我的文档功能,我查看所有50k文档,并按频率(frequency_words)收集前2k个单词,然后为每个文档识别文档中哪些单词也在全局frequency_words中.

然后我将每个文档作为hashmap传递{word: boolean}到nltk.NaiveBayesClassifier(...)中,我对文档总数的测试训练比率为20:80.

我遇到的问题:

  1. 这是NLTK的分类器,适用于多标记数据吗?- 我所看到的所有例子都更多地是关于2级分类,例如某些事物被宣告为正面还是负面.
  2. 这些文件应该具备一套关键技能 - 不幸的是,我没有这些技能所在的语料库.所以我采取了理解的方法,每个文件的字数不是一个好的文件提取器 - 这是正确的吗?每份文件都是由个人撰写的,因此我需要为文件中的个别变化留出让路.我知道SkLearn MBNaiveBayes处理字数.
  3. 是否有我应该使用的替代库,或者此算法的变体?

谢谢!

python nlp nltk document-classification

7
推荐指数
1
解决办法
1753
查看次数