版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文本分类项目实战第11章文本分类是一个典型的机器学习问题,其主要目标是通过训练已有的语料库文本数据得到分类模型,进而预测新文本的类别标签。在很多领域都有实际的应用场景,比如新闻网站的新闻自动分类、垃圾邮件检测、非法信息过滤等等。本章将对一个手机短信样本数据集进行训练,对新的数据样本进行分类,进而检测其是否为垃圾短信。由于本章会涉及词向量化技术和多层感知机网络,所以会在实战之前加入这两方面的基础知识。本章主要知识点:多层感知机词向量化技术短信文本分类实战目录01词向量化技术02多层感知器03文本分类实战04小结词向量化技术文本向量化(又称“词向量模型”、“向量空间模型”)即将文本表示成计算机可识别的实数向量,根据粒度大小不同可将文本特征表示分为字、词、句子或篇章几个层次。文本向量化的方法主要分为离散表示和分布式表示。(1)离散表示一种基于规则和统计的向量化方式,常用的方法包括词集模型和词袋模型,都是基于词之间保持独立性、没有关联为前提,将所有文本中单词形成一个字典,然后根据字典来统计单词出现频数,不同的是:词集模型:例如One-HotRepresentation,只要单个文本中单词出现在字典中,就将其置为1,不管出现多少次。词袋模型:只要单个文本中单词出现在字典中,就将其向量值加1,出现多少次就加多少次。其基本的特点是忽略了文本信息中的语序信息和语境信息,仅将其反映为若干维度的独立概念,这种情况有着因为模型本身原因而无法解决的问题,比如主语和宾语的顺序问题,词袋模型天然无法理解诸如“我为你鼓掌”和“你为我鼓掌”两个语句之间的区别。文本向量化理论对于句子或篇章而言,常用的离散表示方法是词袋模型。词袋模型以One-Hot为基础,忽略词表中词的顺序和语法关系,通过记录词表中的每一个词在该文本中出现的频次来表示该词在文本中的重要程度,解决了One-Hot未能考虑词频的问题。词袋模型的优点是方法简单,当语料充足时,处理简单的问题如文本分类,其效果比较好。词袋模型的缺点是数据稀疏、维度大,且不能很好地展示词与词之间的相似关系。TF-IDFTF-IDF(词频-逆文档频率法,TermFrequency–InverseDocumentFrequency)作为一种加权方法,在词袋模型的基础上对词出现的频次赋予TF-IDF权值,对词袋模型进行修正,进而表示该词在文档集合中的重要程度。CountVectorizerCountVectorizer根据文本构建出一个词表,词表中包含了所有文本中的单词,每一个词汇对应其出现的顺序,构建出的词向量的每一维都代表这一维对应单词出现的频次,这些词向量组成的矩阵称为频次矩阵。但CountVectorizer只能表达词在当前文本中的重要性,无法表示该词在整个文档集合中的重要程度。文本向量化理论(2)分布式表示每个词根据上下文从高维映射到一个低维度、稠密的向量上,向量的维度需要指定。在构成的向量空间中,每个词的含义都可以用周边的词来表示,优点是考虑到了词之间存在的相似关系,减小了词向量的维度。常用的方法包括:基于矩阵的分布表示基于聚类的分布表示基于神经网络的分布表示,其特点是:①利用了激活函数及softmax函数中的非线性特点②保留了语序信息文本向量化理论Word2vec是Google的开源项目,其特点是将所有的词向量化,这样词与词之间就可以定量度量。Word2vec以词嵌入为基础,利用深度学习的思想,对出现在上下文环境中的词进行预测,经过Word2vec训练后的词向量可以很好度量词与词之间的相似性,将所有词语投影到k维的向量空间,每个词语都可以用一个k维向量表示,进而将文本内容的处理简化为K维向量空间中的向量运算。已有的预训练词向量:腾讯AI实验室EmbeddingDataset,该语料库为超过800万个中文单词和短语提供了200维矢量表示,这些单词和短语是在大规模高质量数据上预先训练的。文本向量化理论Word2vec有ContinuousBag-of-Words(CBOW)和Skip-gram两种训练模型,这两种模型可以看做简化的三层神经网络,主要包括输入层、隐藏层以及输出层。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。目前ML中的词向量转换采用的是skip-gram模型。skip-gram模型也是神经网络学习方法的一个特定学习方式,具体如图11-1所示。文本向量化理论其中w(t)是输入的文本,PROJECTION对应的是模型参数,而输出的是每个单词出现的概率,因此整体skip-gram可以用如下公式表示:文本向量化理论其中,ω代表整体文章,
是指在模型参数θ的情况下,某个语句c在ω中出现的概率,因此整体就转化成寻找一个特定θ,从而使得f(x)最大化。词向量是对文本进行处理的一种方法,因此在数据的选择上使用11.1.3节中提供的数据集。完整词向量训练方法如程序11-1所示。Word2Vec词向量化实例
//从Seq或者Doc中加载数据,每一行为分词的结果
valdocumentDF=spark.createDataFrame(Seq("HiIheardaboutSpark".split(""),"IwishJavacouldusecaseclasses".split(""),"Logisticregressionmodelsareneat".split("")).map(Tuple1.apply)).toDF("text")//创建Word2Vec对象并把单词映射到向量中
valword2Vec=newWord2Vec().setInputCol("text").setOutputCol("result").setVectorSize(3).setMinCount(0)valmodel=word2Vec.fit(documentDF)//预测
valresult=model.transform(documentDF)result.collect().foreach{caseRow(text:Seq[_],features:Vector)=>println(s"Text:[${text.mkString(",")}]=>\nVector:$features\n")}//寻找neat的相似词
valsynonyms=model.findSynonyms("neat",2)for(synonym<-synonyms){ //打印找到的内容
println(synonym)}多层感知器多层感知器多层感知器(MLP)是一种多层前馈神经网络模型。所谓前馈神经网络是指它只从输入层接收前一层的输入,并将计算结果输出到下一层,而不对前一层给出反馈。整个过程可以用一个有向无环图来表示。这种类型的神经网络由三层组成,即输入层、一个或多个隐藏层和输出层,如图所示:多层感知器SparkML在1.5版之后提供了一个由BP(反向传播)算法训练的多层感知器实现。BP算法的学习目的是研究网络的连接权值进行调整,使得调整后的网络对任一输入都能得到所期望的输出。BP算法名称里的反向传播指的是该算法在训练网络的过程中逐层反向传递误差,逐一修改神经元间的连接权值,以使网络对输入信息经过计算后所得到的输出能达到期望的误差。Spark的多层感知器隐层神经元使用sigmoid函数作为激活函数,输出层使用的是softmax函数。多层感知器Spark的多层感知器分类器(MultilayerPerceptronClassifer)支持以下可调参数:featuresCol:输入数据DataFrame中指标特征列的名称。labelCol:输入数据DataFrame中标签列的名称。layers:这个参数是一个整型数组类型,第一个元素需要和特征向量的维度相等,最后一个元素需要训练数据的标签取值个数相等,如2分类问题就写2。中间的元素有多少个就代表神经网络有多少个隐层,元素的取值代表了该层的神经元的个数。例如vallayers=Array[Int](100,6,5,2)。maxIter:优化算法求解的最大迭代次数。默认值是100。predictionCol:预测结果的列名称。tol:优化算法迭代求解过程的收敛阀值。默认值是1e-4。不能为负数。blockSize:该参数被前馈网络训练器用来将训练样本数据的每个分区都按照blockSize大小分成不同组,并且每个组内的每个样本都会被叠加成一个向量,以便于在各种优化算法间传递。该参数的推荐值是10-1000,默认值是128。算法的返回是一个MultilayerPerceptronClassificationModel类实例。DataFrame简介在ApacheSpark里面DF优于RDD,但也包含了RDD的特性。RDD和DataFrame的共同特征是内存运行、弹性、分布式计算能力。它允许用户将结构强加到分布式数据集合上。因此提供了更高层次的抽象。我们可以从不同的数据源构建DataFrame。例如结构化数据文件、Hive中的表、外部数据库或现有的RDDs。DataFrame的应用程序编程接口(api)可以在各种语言中使用。示例包括Scala、Java、Python和R。在Scala和Java中,我们都将DataFrame表示为行数据集。在ScalaAPI中,DataFrames是Dataset[Row]的类型别名。在JavaAPI中,用户使用数据集<Row>来表示数据流。文本分类实战文本分类实战目标数据集是来自UCI的SMSSpamCollection数据集,该数据集结构非常简单,只有两列,第一列是短信的标签,第二列是短信内容,两列之间用制表符(tab)分隔。数据集下载链接:/ml/datasets/SMS+Spam+Collection在处理文本短信息分类预测问题的过程中,首先是将原始文本数据按照8:2的比例分成训练和测试数据集。整个过程分为下面几个步骤:从本地读取原始数据集,并创建一个DataFrame。使用StringIndexer将原始的文本标签(“Ham”或者“Spam”)转化成数值型的表型,以便SparkML处理。使用Word2Vec将短信文本转化成数值型词向量。使用MultilayerPerceptronClassifier训练一个多层感知器模型。使用LabelConverter将预测结果的数值标签转化成原始的文本标签。最后在测试数据集上测试模型的预测精确度。(1)首先导入包importorg.apache.spark.ml.Pipelineimportorg.apache.spark.ml.classification.MultilayerPerceptronClassifierimportorg.apache.spark.ml.evaluation.MulticlassClassificationEvaluatorimportorg.apache.spark.ml.feature.{IndexToString,StringIndexer,Word2Vec}文本分类实战(2)创建集并分词valparsedRDD=sc.textFile("SMSSpamCollection").map(_.split("")).map(eachRow=>{(eachRow(0),eachRow(1).split(""))})valmsgDF=spark.createDataFrame(parsedRDD).toDF("label","message")文本分类实战(2)创建集并分词valparsedRDD=sc.textFile("SMSSpamCollection").map(_.split("")).map(eachRow=>{(eachRow(0),eachRow(1).split(""))})valmsgDF=spark.createDataFrame(parsedRDD).toDF("label","message")文本分类实战(3)将标签转化为索引值vallabelIndexer=newStringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(msgDF)文本分类实战(4)创建Word2Vec,分词向量大小100finalvalVECTOR_SIZE=100valword2Vec=newWord2Vec().setInputCol("message").setOutputCol("features").setVectorSize(VECTOR_SIZE).setMinCount(1)文本分类实战(5)创建多层感知器输入层VECTOR_SIZE个,中间层两层分别是6和5个神经元,输出层2个vallayers=Array[Int](VECTOR_SIZE,6,5,2)valmlpc=newMultilayerPerceptronClassifier().setLayers(layers).setBlockSize(512).setSeed(1234L).setMaxIter(128).setFeaturesCol("features").setLabelCol("indexedLabel").setPredictionCol("prediction")文本分类实战(6)将索引转换为原有标签vallabelConverter=newIndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.labels)文本分类实战(7)数据集分割valArray(trainingData,testData)=msgDF.randomSplit(Array(0.8,0.2))文本分类实战(8)创建pipeline并训练数据valpipeline=newPipeline().setStages(Array(labelIndexer,word2Vec,mlpc,labelConverter))valmodel=pipeline.fit(trainingData)val
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年交口县教师招聘考试备考试题及答案解析
- 2026福州市第一总医院皮肤病防治院人员控制数公开招聘工作人员5人考试备考试题及答案解析
- 2026交通银行交银施罗德基金管理有限公司社会招聘考试备考题库及答案解析
- 2026江铃新能源汽车有限公司招聘2人笔试备考题库及答案解析
- 2026重庆市第九人民医院招聘38人笔试参考题库及答案解析
- 2026西安交通大学秋季学期校园招聘及职业指导活动预告笔试备考试题及答案解析
- 2026临海市人民政府邵家渡街道办事处下属事业单位公开选聘工作人员1人考试备考试题及答案解析
- 四川兴东投资集团有限公司及所属子公司2026年第二批公开招聘(20人)考试模拟试题及答案解析
- 2026新疆吐鲁番市维吾尔医医院面向社会招聘编制外聘用人员1人考试模拟试题及答案解析
- 2026-吉林文旅集团管培生储备管理岗招聘考试参考题库-含答案
- 2026年高校辅导员经典面试题(含答案)
- 2026年秋北师大版新教材四年级上册数学(全册)知识点清单梳理
- 关于支付拖欠工程款的催办函(8篇)
- 2026八年级劳动国家质量监测考试卷含答案
- 2024版压力容器设计审核题库(综合题)
- 手术室护理人文关怀与沟通技巧
- (2026年)皮内注射技术课件
- 2025版《广东省护理病历书写管理规范(试行)》
- 福建金投集团招聘笔试题目
- 企业新春员工福利礼品选购指南【课件文档】
- 机泵基础知识培训
评论
0/150
提交评论