我有 50 000 个 1000 字或更多的文档,排名在 0 到 2000 之间。它们都处理类似的主题。我想创建一个可以学习为新文档评分的算法。
你认为我应该采取什么方法?
我是机器学习领域的新手,所以如果你能指出我关于你想到的特定解决方案的介绍材料。我会很高兴的。
我有 50 000 个 1000 字或更多的文档,排名在 0 到 2000 之间。它们都处理类似的主题。我想创建一个可以学习为新文档评分的算法。
你认为我应该采取什么方法?
我是机器学习领域的新手,所以如果你能指出我关于你想到的特定解决方案的介绍材料。我会很高兴的。
首先为文档提出一些功能。与该主题相关的一些流行词的频率之类的东西可能会起作用。通过这种方式获取所有文档的特征,然后应用一些算法。您可以应用它们的一些方法是:
1)k手段——根据特征对文档进行聚类。每个集群应主要与特定的分值相关联。然后查看新文档将分配到哪个集群。
2) 监督学习 - 使用神经网络、多类 SVM 等使用您生成的模型将新文档分类到特定类(分数)。
所有这些都是分类到离散分值的示例。但是,由于您处理的分数范围很大(0-2000),您也可以尝试回归之类的方法,它会给您一个连续值,但可以四舍五入到最接近的离散值。
查看 Coursera 机器学习课程,了解精彩介绍!
基本上这是一个分类问题。
您需要对 y(rank) ~ x(Document) 建模。当你得到一份新文件时,你需要一个估计的排名。
您可能需要考虑的事项。
线性代数和 Andrew Ngs ML 课程是一个很好的起点。
这要求数据集可以保留在 RAM 中,但它可以使用 sklearn 完成我想要的操作:
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import Ridge
corpus = [
'postgresql is great software for database engineering',
'postgresql is spam',
'spam & egg',
'postgresql is the same as pg',
'more database is great stuff',
]
test = [
'postgresql is spam & egg',
'pg is a great database software',
]
vectorizer = CountVectorizer(min_df=1)
X = vectorizer.fit_transform(corpus)
y = np.array([[10, 1, 0, 7, 6]]).T # documents score
clf = Ridge(alpha=1.0)
clf.fit(X, y)
Z = vectorizer.transform(test)
print(clf.predict(Z))