假设我有一堆文章(成千上万)我要标记,分类等等。理想情况下,我想通过手动分类/标记几百个来训练某些东西,以及然后放松一下。
您会为推行此类任务推荐哪些资源(书籍,博客,语言)?我的一部分认为这适合Bayesian Classifier甚至Latent Semantic Analysis,但除了我从少数ruby {发现的内容之外,我并不熟悉{3}}
贝塞斯分类器可以解决这样的问题吗?我应该更多地关注语义分析/自然语言处理吗?或者,我应该从那里寻找关键字密度和映射吗?
任何建议都表示赞赏(我不介意拿几本书,如果需要的话)!
答案 0 :(得分:5)
首先,您需要决定是否要将论文分类为预定义的主题/类别(分类问题),或者您希望算法自行决定不同的群组(群集问题)。根据您的描述,您似乎对分类感兴趣。
现在,在进行分类时,首先需要创建足够的训练数据。您需要将一些文章分成不同的组。例如5篇物理论文,5篇化学论文,5篇编程论文等。通常,您需要尽可能多的训练数据,但多少就取决于具体的算法。您还需要验证数据,这与训练数据基本相似,但完全分开。这些数据将用于判断算法的质量(或数学说话的表现)。
最后,算法本身。我熟悉的两个是基于贝叶斯和TF-IDF。对于贝叶斯,我目前正在为红宝石开发类似的东西,我在博客中记录了我的经历。如果您有兴趣,请阅读本文 - http://arubyguy.com/2011/03/03/bayes-classification-update/,如果您有任何后续问题,我会尝试回答。
TF-IDF是TermFrequence的缩写--InverseDocumentFrequency。基本上,这个想法是任何给定的文档在训练集中找到与它最相似的许多文档,然后根据它来计算它的类别。例如,如果文档D类似于T1,即物理,T2是物理,T3是化学,你猜D最有可能是物理学和化学。
它的方式是你最重视稀有词,而不重视常用词。例如'nuclei'是罕见的物理词,但'work'是非常常见的非有趣词。 (这就是为什么它被称为逆项频率)。如果您可以使用Java,那么有一个非常好的Lucene库,可以提供大部分开箱即用的东西。寻找“类似文档”的API并研究它是如何实现的。或者只是谷歌搜索'TF-IDF',如果你想实现自己的
答案 1 :(得分:1)
我过去曾做过类似的事情(虽然是短篇新闻文章)使用了一些矢量集群算法。我现在不记得了,这正是谷歌在婴儿时期所使用的。 使用他们的论文,我可以在一两天内在PHP中运行原型,然后为了速度目的将其移植到Java。
http://en.wikipedia.org/wiki/Vector_space_model
http://www.la2600.org/talks/files/20040102/Vector_Space_Search_Engine_Theory.pdf