1 前言

2 收集数据

3 探索数据

4 选择模型

5 准备数据

数据被输入模型之前,需要将数据转换成模型能理解的格式,该过程被称之为数据标准化。

首先,已收集到的数据样本可能是以指定的顺序存储,而在实际分析中,期望文本与标签的关系是不能受到与数据样本的顺序相关的信息的影响。例如,如果数据集合是根据类别排序的,然后,数据集合被分割成训练数据集合与验证数据集合两个部分,则这些数据集合并不能表示出原始数据的整体分布。

保证模型不受数据顺序影响的一个简单的最佳实践是,在处理数据之前对数据集合执行乱序的处理(比较随机的顺序),一般情况下,在对数据执行乱序处理之后,将原始数据集合的80%划分为训练数据集合,将原始数据集合的20%划分为验证数据集合,在数据集合分割完成之后,需要保证使用相同的数据标准化的处理方法转换原始数据集合。

其次,机器学习算法输入的数据类型是数字类型。也就是,需要将前面所述的文本数据集合转换成数字化的向量集合,这是一个数据标准化的处理过程,其包括以下两个步骤:

步骤1:分词

将文本分割成单词或者更小的子文本单元,有利于更好地生成文本与标签的关系,该方法可以确定数据集合的词汇。

步骤2:向量化

定义一个好的数字度量单位对文本执行特征化处理。

以下内容将描述如何使用以上方法的两个处理步骤执行n-gram向量与序列向量的处理,同时,也将描述如何使用特征选择以及标准化的技术优化向量的表示。

N-gram向量集

n-gram向量集是指如何使用n-gram模型执行分词以及向量化,其中也包括如何使用特征选择以及标准化的技术优化n-gram模型的表示。

在一个n-gram的向量集合中,文本被表示成一个包括唯一性元素的n-grams集合:n个相邻分词的分组(一般是单词分组),例如,对于句子【The mouse ran up the clock】,当n等于1,则1-gram分词的集合是['the', 'mouse', 'ran', 'up', 'clock'],当n等于2,则2-gram分词的集合是['the mouse', 'mouse ran', 'ran up', 'up the', 'the clock'],当n等于其他数值,也是按照这种分词方法实现n-gram分词的集合。

分词

理论上,将文本分割成混合的组成,例如,包括1-gram与2-gram的混合模型,具有更好的准确度以及消耗更小的计算时间。

向量化

分词的步骤执行完成之后,向量化需要把分词所得的1-gram以及2-gram集合中的元素转换成数字向量集合,该数字化的向量集合能够被机器学习的模型识别与处理。如下所示,两个文本句子的分词与索引列表:

如上所示,其中Texts表示输入的两个文本句子,Index表示赋予每个分词元素的索引,这些数据样本集合中的元素在索引上是乱序的,并不能表示出原始数据文本的顺序。

使用以上的索引列表(12个索引元素,索引位置从0到11,索引位0表示clock,索引位1表示down,依次类推),分别使用三种编码方式实现文本的向量化,One-hot encoding、Count encoding与Tf-idf encoding。

One-hot encoding

该方式是以索引列表为基础,根据以上索引列表的索引顺序的每个元素,确定文本中是否出现,0表示不出现,1表示出现,如下所示:

如上所示,数字化向量集合中共12个元素,刚好对应以上索引列表的12个元素,分别识别索引元素是否在文本中出现,例如,第一位1表示clock索引元素出现(索引位是从0开始识别),第二位0表示索引元素down不出现,第三位1表示索引元素mouse出现,依次类推,从而,得出数字化的向量列表。

Count encoding

该方式是以索引列表为基础,根据以上索引列表的顺序的每个元素,确定文本中出现的次数,0表示不出现,大于0表示出现的次数,如下所示:

如上所示,第七位2表示索引元素the在文本中共出现两次,其他元素与One-hot encoding中统计的信息保持一致。

Tf-idf encoding

由以上的分析可知,One-hot encoding、Count encoding两种方法并没有处理常用的词语,例如,a或者the,这类词语在一个文本中通常出现的频率都很高,但是又没有实质性的作用,这些问题使用Tf-idf encoding编码方式可以解决,其输出的格式如下所示:

处理文本向量的表示的编码方式很多,但是以上这三种编码方式是最常用的。很明显,Tf-idf encoding比其他两种方式One-hot encoding、Count encoding的准确度更高(大概平均高出0.25-15%),因此,推荐使用Tf-idf encoding作为n-grams的向量化方式,但是该方式需要消耗更多的内存资源,因为其使用浮点数作为向量表示,在大数据集合的处理场景中,需要消耗更多的计算时间(大概是其他方式的2倍)。

特征选择

对所有的文本执行分词完成之后产生分词集合,并不是所有分词集合中的分词或者特征在特征预测中都发挥作用,因此,需要删除某些无用的分词或者特征(例如,一些出现几率很小的分词),从中抽取有用的分词或者特征,该过程被称之为特征选择,也就是,需要运用有效的方法测量这些分词或者特征的重要性(对特征预测的贡献度),并从中选取一些最有用的分词或者特征用于分析。

满足用于特征选择的算法或者函数很多,这些函数输入特征以及特征对应的标签、输出特征的重要性对应的分数。其中,函数f_classif 与函数chi2是常用的函数,实验证明这两个函数的执行效果相当。

如上所示,使用的是英文文本,使用不同的数据集合以及不同的数据量对算法准确度执行评估、执行准确度的对比分析,其中,top-20k特征数据量的准确度处于稳定的水平,大于20k特征数据量的评估,则算法的运行性能会下降。

标准化

标准化是将所有的特征或者样本转换成小而且类似的值,该处理过程在机器学习算法中被称之为梯度下降(使用收敛函数),在本例中,该处理过程可以简化为以下三个步骤:

  • 使用n-gram对文本分词

  • 使用tf-idf编码执行向量化

  • 从分词集合中只选择top 20k的特征,删除出现次数小于2的分词,使用f_classif函数评估特征的重要性对应的分数

以上的步骤对应代码逻辑如下所示:

由以上的分析可知,n-gram向量集在实现向量化的过程中与文本的顺序无关,与n-gram向量化的表示相关联的算法包括逻辑回归、多层感知、梯度推进机、支持向量机。

(未完待续)

TensorFlow之文本分类算法-2相关推荐

  1. TensorFlow之文本分类算法-3

    1 前言 2 收集数据 3 探索数据 4 选择模型 5 准备数据 N-gram向量集 序列向量集 序列向量集主要是用于序列模型中对文本执行分词与向量化,与n-gram向量集类似,也使用特征选择与标准化 ...

  2. 【NLP从零入门】预训练时代下,深度学习模型的文本分类算法(超多干货,小白友好,内附实践代码和文本分类常见中文数据集)

    如今NLP可以说是预训练模型的时代,希望借此抛砖引玉,能多多交流探讨当前预训练模型在文本分类上的应用. 1. 任务介绍与实际应用 文本分类任务是自然语言处理(NLP)中最常见.最基础的任务之一,顾名思 ...

  3. python中文文本分析_基于CNN的中文文本分类算法(可应用于垃圾邮件过滤、情感分析等场景)...

    基于cnn的中文文本分类算法 简介 参考IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW实现的一个简单的卷积神经网络,用于中文文本分类任 ...

  4. 使用python语言编写常见的文本分类算法

    自然语言处理中一个很常见的操作就是文本分类,比如一组新闻文本,通过分类模型,将新闻文本分为政治.体育.军事.娱乐.财经等等几大类.那么分类第一步就是文本向量化,前一篇博客讲了一些,本文可以说是前文的实 ...

  5. c语言贝叶斯分类,基于朴素贝叶斯分类器的文本分类算法(C语言)

    基于朴素贝叶斯分类器的文本分类算法(C语言) 基于朴素贝叶斯分类器的文本分类算法(C语言).txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情.#include ...

  6. 基于协同训练的半监督文本分类算法

    标签: 半监督学习,文本分类 作者:炼己者 --- 本博客所有内容以学习.研究和分享为主,如需转载,请联系本人,标明作者和出处,并且是非商业用途,谢谢! 如果大家觉得格式看着不舒服,也欢迎大家去看我的 ...

  7. 菜鸟进阶: C++实现KNN文本分类算法

    作者:finallyliuyu(转载请注明原作者和出处) (代码暂不发布源码下载版,以后会发布) KNN文本分类算法又称为(k nearest neighhor).它是一种基于事例的学习方法,也称懒惰 ...

  8. 手把手教你用 TensorFlow 实现文本分类(下)

    手把手教你用 TensorFlow 实现文本分类(下) 本文作者:AI研习社 2017-05-29 13:36 导语:文本分类全流程解析. 雷锋网(公众号:雷锋网)按:本文作者张庆恒,原文载于作者个人 ...

  9. 文本分类算法TextCNN

    目录 前言 一.TextCNN 1-1.TextCNN结构图以及介绍: 1-2.与CNN相比,textCNN的不同之处 1-3.TextCNN的超参数调参 总结 前言 TextCNN是在2014年,由 ...

最新文章

  1. Java String类方法
  2. oracle菜鸟学习之 分析函数-排序
  3. 树的方向,风决定;人的方向,自己决定
  4. php7的foreach遍历数组,PHP中使用foreach遍历三维数组
  5. 配置DispatcherServlet
  6. mysql 插入记录慢_mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决...
  7. execve系统调用_张凯捷—系统调用分析(3) (基于最新Linux5.0版本系统调用日志收集系统)...
  8. 微服务的概念——《微服务设计》读书笔记
  9. linux c之解决使用socket函数返回为0的问题
  10. Apache配置详解(一)
  11. 1 为发现 php,magento 1.8.1中发现sitemap模块的一个bug
  12. Java中简单Http请求
  13. swift 高级进阶1:类与结构体(上)
  14. Oracle查询执行计划
  15. Excel学习日记:L9-图表制作-柱状图
  16. node.js使用手册_权威的Node.js手册
  17. 科研用matlab还是python_科的解释|科的意思|汉典“科”字的基本解释
  18. matlab昆虫繁殖实验,MATLAB--实验四 昆虫繁殖问题.ppt
  19. 网络营销都有什么特点
  20. css中的background属性

热门文章

  1. Spring教程——Spring Bean继承
  2. 发json请求,报415错误。POST http://localhost:8080/ 415
  3. 去外包公司的伙伴们小心了!——亲身经历,数数外包公司的坑
  4. C语言统计一个字符串(包含空格)中字母的种类(不是个数)
  5. Python文本情感分析实战【源码】
  6. 《算法导论》学习笔记第一章
  7. 阿里云ECS共享型、通用型和突发型实例类型有什么区别?如何选择?
  8. 三、数据特性计算(含信道通讯计算、码元速率计算、尼奎斯特定理、香农定理以及相应的练习题)——网络工程师成长之路
  9. AtCoder Regular Contest 154 题解
  10. 7-6 jmu-Java-01入门-开根号