我有大约3000个文本文档,这些文档与文档“有趣”的持续时间有关.因此,假设文档1包含300行文本和内容,这导致持续时间为5.5天,而另一个包含40行文本的文档导致6.7天的持续时间为“有趣”,依此类推.
现在的任务是根据文本内容预测感兴趣的持续时间(这是一个连续的值).
我有两个想法来解决这个问题:
>使用http://radimrehurek.com/gensim/simserver.html等技术构建类似文档的模型.当新文档到达时,可以尝试查找过去10个最相似的文档,并简单计算其持续时间的平均值,并将该值作为预测持续时间的预测值对于新文件.
>将文件分为持续时间类别(例如1天,2天,3-5天,6-10天……).然后训练分类器以基于文本内容预测持续时间的类别.
想法#1的优点是我也可以计算出我的预测的标准偏差,而对于想法#2,我不太清楚,我如何计算我的预测的不确定性的类似度量.另外我不清楚选择哪些类别从分类器中获得最佳结果.
那么,有一条经验法则是如何构建一个系统来最好地预测文本文档中的连续值(如时间)吗?是应该使用分类器还是应该使用类似文档中的平均值?我在该领域没有真正的经验,并且想知道,您认为哪种方法可能会产生最好的结果.如果您了解可用于解决此问题的简单现有技术(基于Java或Python),则会给出奖励积分.
这是一个使用scikit-learn(*)拟合线性回归模型的骨架脚本:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDRegressor
# build a term-document matrix with tf-idf weights for the terms
vect = TfidfVectorizer(input="filename")
Xtrain = vect.fit_transform(documents) # documents: list of filenames
# now set ytrain to a list of durations,such that ytrain[i] is the duration
# of documents[i]
ytrain = ...
# train a linear regression model using stochastic gradient descent (SGD)
regr = SGDRegressor()
regr.fit(Xtrain,ytrain)
而已.如果您现在有想要预测感兴趣持续时间的新文档,请执行此操作
Xtest = vect.transform(new_documents)
ytest = regr.predict(Xtest)
这是一个简单的线性回归.实际上,我希望兴趣持续时间不是文本内容的线性函数,但这可能会让你开始.下一步是拿起任何有关机器学习或统计数据的教科书来处理更高级的回归模型.
(*)我是这个项目的贡献者,所以这不是公正的建议.几乎任何半体面的机器学习工具包都有线性回归模型.