Python 标签预测的特征空间缩减
我正在编写一个ML模块(python)来预测stackoverflow问题(tag+body)的标记。我的语料库大约有500万个问题,每个问题都有标题、正文和标签。我把这个分成3:2进行训练和测试。我被这场灾难折磨着Python 标签预测的特征空间缩减,python,machine-learning,scikit-learn,feature-extraction,tf-idf,Python,Machine Learning,Scikit Learn,Feature Extraction,Tf Idf,我正在编写一个ML模块(python)来预测stackoverflow问题(tag+body)的标记。我的语料库大约有500万个问题,每个问题都有标题、正文和标签。我把这个分成3:2进行训练和测试。我被这场灾难折磨着 完成的工作 预处理:标记删除、停止字删除、特殊字符删除和一些位和段。存储到MySQL中。这几乎是测试数据大小的一半 ngram关联:对于每个问题的标题和正文中的每个单字符和双字符,我维护一个关联标签列表。存储到redis中。这导致了大约一百万个唯一的单图和2000万个唯一的双图,
完成的工作
"continuous integration": {"ci":42, "jenkins":15, "windows":1, "django":1, ....}
"continuous integration": {"ci":42, "jenkins":15, ...., "__idf__":7.2123}
tfidf分数存储在documentxfeature
中,目前我不确定如何利用它。(由生成)问题
- 对测试数据进行预处理
- 找到单格图和双格图
- 对于存储在redis中的标签,找到相应的best-k标签
- 为标题和正文文本应用某种权重
- 除此之外,我还可能在文档中搜索确切的已知标记匹配。例如,如果“RubyonRails”出现在标题/正文中,那么它很可能也是一个相关的标记
- 另外,对于以高概率预测的标记,我可能会利用标记图(一个无向图,其中标记经常一起出现,并且它们之间有加权边)来预测更多的标记
脚注
我有一台16核、16GB内存的机器。redis服务器(我将移动到另一台机器)存储在RAM中,容量约为10GB。上述所有任务(tfidf除外)都是使用ipython集群并行完成的 基线统计方法将把这视为一个分类问题。特征是由最大熵分类器(如Mallet)处理的单词包。Maxent(又名逻辑回归)擅长处理大型特征空间。获取与每个标记(即类标签)相关联的概率,并选择一些决策阈值,该阈值为您的项目提供精度/召回权衡。一些Mallet文档甚至提到了主题分类,这与您试图做的非常相似 开放性的问题是Mallet如何处理数据的大小(不是那么大),以及这个特定的工具是否不是您提到的技术堆栈的初学者。您可能能够脱机训练(将reddis数据库转储到Mallet特性格式的文本文件中),并在Python中运行Mallet学习模型。评估maxent模型很简单。如果您想继续使用Python并使其更加自动化,那么NLTK和scikit learn中都有基于Python的maxent实现。这种方法根本不是最先进的,但它可以很好地工作,是比较更复杂方法的一个不错的基准。使用的公共Api,这是一个很好的解决方案。
它从文本中提取概念,因此,为了减少维度,您可以使用这些概念,而不是单词袋范式。您可能会得到更好的交叉验证建议。那里的用户在机器学习和统计方面更有经验。交叉张贴-