网站设计项目,什么公司做网商网站的,百度竞价排名是什么,科技型中小企业税收优惠政策2022前言
在阅读源码之前#xff0c;需要了解Spark机器学习Pipline的概念。 相关阅读#xff1a;SparkMLlib之Pipeline介绍及其应用 这里比较核心的两个概念是#xff1a;Transformer和Estimator。 Transformer包括特征转换和学习后的模型两种情况#xff0c;用来将一个DataFr…前言
在阅读源码之前需要了解Spark机器学习Pipline的概念。 相关阅读SparkMLlib之Pipeline介绍及其应用 这里比较核心的两个概念是Transformer和Estimator。 Transformer包括特征转换和学习后的模型两种情况用来将一个DataFrame转换成另一个DataFrame Estimator接收一个DataFrame并输出一个模型Transformer。
Word2Vec类是一个Estimator实现了fit方法返回模型Word2VecModel即一个Transformer该类实现了transform方法。 代码逐行注释见文章链接 哈夫曼编码复习哈夫曼编码 阅读中有任何疑问请参考PDF《word2vec 中的数学原理详解》 Word2VecBase——Word2Vec和Word2VecModel的参数类
参数名介绍默认大小vectorSize单词的Embedding维度100windowSize窗口大小上下文单词在[-window,window]5numPartitions训练数据的分区数1minCount单词出现的最低次数5maxSentenceLength单个序列的最大长度所有序列合并后根据该值截断1000stepSize优化器的步长0.025maxIter最大迭代次数1inputCol只支持string类型的数据1outputCol训练数据的分区数1seed随机种子this.getClass.getName.hashCode.toLong
Word2Vec Word2Vec训练一个模型Map(String,Vector) ml包——流程构建
ml包中的Word2Vec仅仅是“格式化”成了新版Pipline流程具体的模型训练代码还是调用的mllib包的Word2Vec。
基础功能
各种set方法。设置Word2VecBase里的参数如setInputCol、setOutputCol等重写PipelineStage类的transformSchema方法。用来check输入列的类型以及生成输出列重写Estimator的copy方法。复制一个Word2Vec对象UID相同Embedding矩阵和参数不同
核心功能
重写Estimator的fit方法调用mllib包的Word2Vec
其余功能
实现DefaultParamsWritable具有模型保存的功能。
mllib包——模型训练逻辑 从注释来看该实现完全重写的C版本的。实现了skip-gram模型并使用分层softmax方法来训练模型。 词库实体类
首先映入眼帘的是一个VocabWord的case class包含属性如下
word——词cn——单词出现次数point——存的是从根节点到这个词对应的叶子节点的路径经过的节点最大40code——Huffman编码最大40codeLen——路径长度
fit方法
整体流程
调用learnVocab方法。初始化词表vocabVocabWord数组和vocabHash词-索引映射Map根据词频排序输出一些统计信息。 这块会拉到driver节点计算因此driver内存设置和词表大小相关。 调用createBinaryTree方法。 这一步按照词频构建出一个Huffman树。这里为每个词保存point和code属性point是每个单词的路径经过的非叶子节点每个节点为一个二分类器对应一个参数向量θcode则为值为{0,1}的Huffman编码也即为路径上每个二分类器的真实Label是logloss计算公式中的一个参数。 skip-gram下通过中心词预测上下文词时预测概率就是上下文词对应叶子节点的路径上二分类器预测的概率乘积损失函数就是这条路径上一系列二分类的logloss之和。也就是说层次哈夫曼树方法将Softmax计算转成了logN复杂度的二分类计算。 广播exp计算表、词对象表和词索引表 exp计算表是为了加速计算。x大于6和小于-6的时候simoid函数值都无限接近1和0。将范围限制在[-6,6]之间将该区间划分为1000份近似计算好sigmoid(x)对应的取值能够显著减少计算量。 执行doFit方法分布式梯度上升法参数训练 这里首先需要明确是梯度上升法学习的参数有哪些词向量矩阵V和二分类器参数θ。 doFit流程 构造sentences 梯度上升法训练 注每计算一个context word就更新一次v(·)源码中neu1e为esyn1为θsyn0为v。
Word2VecModel
这块的代码没啥可看的。在doFit训练时通过wordIndex和wordVector两个参数创建。重写的transform函数主要功能是将每个单词转换成一个向量即查map。