我是 NLP 的新手,第一次做。我正在尝试解决一个问题。
我的问题是我有一些手动标记的文档,例如:
doc1 - categoryA, categoryB
doc2 - categoryA, categoryC
doc3 - categoryE, categoryF, categoryG
.
.
.
.
docN - categoryX
Run Code Online (Sandbox Code Playgroud)
这里我有一组固定的类别,任何文档都可以有任意数量的与其关联的标签。我想使用这个输入来训练分类器,以便这个标记过程可以自动化。
谢谢
我目前正在尝试扩展使用Scala和Spark的机器学习应用程序.我正在使用我在Github上发现的Dieterich Lawson先前项目的结构
https://github.com/dieterichlawson/admm
该项目基本上使用SparkContext构建训练样本块的RDD,然后对每个集合执行局部计算(例如求解线性系统).
我遵循相同的方案,但对于我的本地计算,我需要在每个训练样本块上执行L-BFGS算法.为了做到这一点,我想使用mlLib中的L-BFGS算法,该算法具有以下特征.
runLBFGS(RDD<scala.Tuple2<Object,Vector>> data, Gradient gradient,
Updater updater, int numCorrections, double convergenceTol,
int maxNumIterations, double regParam, Vector initialWeights)
Run Code Online (Sandbox Code Playgroud)
如上所述,该方法将训练样本的RDD [Object,Vector]作为输入.问题是在每个工作者本地我不再保留数据的RDD结构.因此,我正在尝试在矩阵的每个块上使用SparkContext的并行化功能.但是当我这样做时,我得到了一个序列化器异常.(确切的异常消息在问题的最后).
这是我如何处理SparkContext的详细解释.
首先,在主应用程序中,它用于打开文本文件,它在LogRegressionXUpdate类的工厂中使用:
val A = sc.textFile("ds1.csv")
A.checkpoint
val f = LogRegressionXUpdate.fromTextFile(A,params.rho,1024,sc)
Run Code Online (Sandbox Code Playgroud)
在应用程序中,LogRegressionXUpdate类实现如下
class LogRegressionXUpdate(val training: RDD[(Double, NV)],
val rho: Double) extends Function1[BDV[Double],Double] with Prox with Serializable{
def prox(x: BDV[Double], rho: Double): BDV[Double] = {
val numCorrections = 10
val convergenceTol = 1e-4
val maxNumIterations = 20
val regParam = 0.1
val (weights, loss) = LBFGS.runLBFGS(
training,
new …Run Code Online (Sandbox Code Playgroud)