精华内容
下载资源
问答
  • 目录 1.简述 2.分析任务 3.构建baseline模型 3.1数据清洗与预处理 3.2选取合适的模型 3.2.1模型选取方法 GELE模型做为baseline模型 4. 评估指标 5.baseline的优化 ...文本分类是自然语...

    目录

    1.简述

    2.分析任务

    3.构建baseline模型

    3.1 数据清洗与预处理

    3.2 选取合适的模型 

    3.2.1 模型选取方法

       3.2.2 GELE模型为baseline

    4. 评估指标

    5.baseline的优化

    5.1 采用预训练好的词向量

    5.2 label smoothing

    5.3 损失函数的选择

    5.4 数据增强和数据噪音的处理

    5.5 引入先验知识

    5.6 模型超参数调整



    1.简述

    文本分类是自然语言处理中一项基本的任务,它的应用非常广泛,比如:垃圾过滤,情感分析,话题分类。它和其他的分类没有本质的区别,核心方法为首先提取分类数据的特征,然后选择最优的匹配,从而分类。但是文本也有自己的特点,根据文本的特点,文本分类的一般流程为:1.数据预处理;2.文本表示及特征选择;3.构造分类器;4.分类。

    通常来讲,文本分类任务是指在给定的分类体系中,将文本指定分到某个或某几个类别中。被分类的对象可以是短文本,例如句子、标题、商品评论等等,也可以是长文本,如文章等。分类体系一般人工划分,例如:

    1)政治、体育、娱乐、经济。

    2)好评、中性、差评。

    3)正面、负面。

    因此,对应的分类模式可以分为:二分类,多分类,以及多标签分类。

    文本分类的应用十分广泛,可以将其应用在:

    • 垃圾邮件的判定:是否为垃圾邮件
    • 新闻文章的分类:政治、体育、娱乐、经济等,可能是一个多标签分类。
    • 电商商品评论分析等等类似的应用:消极、积极
    • 自动问答系统中的问句分类。

    最早的文本分类是用基于知识的方法,构建规则完成文本分类,随之机器学习的发展,慢慢采用基于统计和机器学习的方法,由于机器学习参数的有限性,深度学习地快速发展,现在越来越多的采用深度学习来做文本分类,本文将主要如何用GELE模型(《Enhancing Local Feature Extraction with Global Representation for Neural Text Classification》论文 EMNLP 2019)作为baseline完成文本分类。

    2.分析任务

    当给定的文本分类任务,首先需要结合数据和业务需求,分析现有文本分类任务需要从多个维度分析,需要清楚的几个点:

    1. 是否有标样本,如果没有有标样本能否构建;
    2. 一般的文本分类还是更具有领域性的情感分类;
    3. 是长文本分类还是短文本分类;
    4. 是大规模数据分类,还是小样本分类;
    5. 是二分类、多分类还是多标签分类;
    6. 如果是多标签分类,标签类别是大规模的还是少量的。
    7. 样本均衡还是不均衡。

    3.构建baseline模型

    在模块2的基础上,已经熟悉了要完成文本任务的性质,需要构建baseline模型。

    3.1数据清洗与预处理

    对于模块2提到的第一个问题,是否有有标样本,如果是有标样本,可以采用如下几种方式进行清洗:

    1. 去除非文本数据,很多时候爬取下来的文本数据往往会附带有HTML标签、URL地址等非文本内容,所以需要清除这部分内容对分类没有什么帮助的内容。
    2. 替换中文文本中长串的数字,例如手机号、身份证号、车牌号、用户名ID等文本内容,在非特定的文本分类情境下是可以去除。或者将其转换为归一化的特征,如是否出现长串数字的布尔值特征HAS_DIGITAL。值得一提的是,有时候表情代号常常作为长串数字或字母出现时,却能在情感分析中却能起到巨大作用。
    3. 去除无意义文本,对于文本当中的诸如广告内容、版权信息和个性签名的部分,可以选择去掉。
    4. 去除停用词和标点符号。

    如果没有有标样本,可以采用半监督和无监督学习来做文本分类,可以采用这篇博客数据清洗方法进行数据清洗。

    3.2选取合适的模型 

    3.2.1模型选取方法

    传统的机器学习方法主要利用自然语言处理中的n-gram概念对文本进行特征提取,并且使用TFIDF对n-gram特征权重进行调整,然后将提取到的文本特征输入到Logistics回归、SVM等分类器中进行训练。但是,上述的特征提取方法存在数据稀疏维度爆炸等问题,这对分类器来说是灾难性的,并且使得训练的模型泛化能力有限。因此,往往需要采取降维策略,但是效果往往不理想。

    随着word2vec的技术出现,词向量能够有效的表示词语之间的相似度,而深度学习网络可以很好有效地提取文本特征,提高模型精度。

    从上述分析,可见特征提取在文本分类模型中非常关键,那么如何选取最优的特征提取模型作为文本分类模型呢?可以从ACL(The Association for Computational Linguistics)会议查找文本分类相关论文,ACL网站建立了ACL Anthology页面,支持绝大部分国际学术会议的论文的免费下载,甚至包含了其他组织主办的学术会议。

    首先找出文本分类最近一两年的最新论文,通过阅读摘要,可以大致了解论文解决了什么问题以及提出哪些新的方案,带着目标去阅读论文,如果是一种新的特征提取方法,可以再继续阅读以下论文中图以及表格,通常图会给出模型的框架,表格会给出实验结果以及与其他模型的相关结果比对,如果实验效果提升很明显则可以选择尝试作为baseline。

    通过此类方法,发现EMNLP 2019论文《Enhancing Local Feature Extraction with Global Representation for Neural Text Classification》模型框架灵活,实验结果不管是多标签分类、分类、情感分类任务上优于先前提出的模型框架。

       3.2.2GELE模型为baseline

    论文《Enhancing Local Feature Extraction with Global Representation for Neural Text Classification》提出了一种新颖的Encoder1-Encoder2架构, 将全局信息纳入从头开始提取局部特征的过程中。特别地,Encoder1提供全局信息,而Encoder2则充当局部特征提取器,并直接输入分类器。 同时,还设计了两种模式进行交互。

    模型框架如下图

                                                                                                gele 模型框架

    GELE 模型灵活的原因是encoder1可以选择rnn,cnn,attention中的一种,encoder2也可以选择cnn或者drnn,而且encoder1和encoder2交互也可以选在same或者attened两种模式,从论文给出的实验结果,也明显优于其他方法。

    鉴于上述优点选取GELE作为baseline。

    最终在我自己的数据集上,实验结果比lstm_attention模型要高3%。如果感兴趣的话,可以去看看论文。

    4. 评估指标

    模型评估可以参考这个链接,里面讲的特别详细和全面。不同类型的文本分类往往有不同的评价指标,具体如下:

    • 二分类:accuracy,precision,recall,f1-score, f_beta(beta可调,根据任务,调整准确率和召回率的权重)...
    • 多分类:Micro-Averaged-F1, Macro-Averaged-F1 ... 
    • 多标签分类:Jaccard相似系数 ...

    5.baseline的优化

    采用baeline预训练好模型以后,可以对测试集的实验结果进行分析,对于模型误判的如何进行优化,也可以从以下几个方面进行优化。

    5.1 采用预训练好的词向量

    可以选用Google 预训练bert词向量,在训练过程,保持词向量静态,相对于基线模型,可以提高3%;如果对模型线上运行效率有要求,可以采用word2vce预训练好的词向量,相对于基线模型可以提高1%。

    5.2 label smoothing

    标签平滑是一种损失函数的修正,已被证明是非常有效的训练深度学习网络的方法。标签平滑提高了图像分类、翻译甚至语音识别的准确性。简单的解释是,它将神经网络的训练目标从“1”调整为“1-label smoothing adjustment”,这意味着神经网络被训练得对自己的答案不那么自信。默认值通常是 0.1,这意味着目标答案是 0.9(1 - 0.1)而不是 1。参考链接。在我自己的数据集上,标签平滑提高了0.5%。

    5.3 损失函数的选择

    今年来,越来越多的工作在模型loss上一个改进,一方面loss改进只会影响训练过程,并不影响预测过程。

    对于样本不均衡问题,已经很多方法去解决这个问题,目前用的比较多的是focal loss。

    两大创新点:

    1. 通过控制alpha, 调节正负样本对总的loss的共享权重。
    2. 增加,通过减少易分类样本的权重,从而使得模型在训练时更专注于难分类的样本。

          通过引入focal loss,实验结果确实提高了2%-3%。

         2019年阿里巴巴又提出了新的概念DR loss,参考链接,已经有源码公布出来了,值得一试。

    5.4 数据增强和数据噪音的处理

    针对baseline模型识别错误的样本,需要对实验结果进行分析,如果是因为数据原因造成的,可以采用数据增强的方法来增强样本。常用的数据增强方法有:

    • 简单数据增强方法:
    1. 同义词替换。
    2. 实体替换。
    3. 词语乱序、删除。
    •  复杂数据增强方法:
    1. 使用生成模型。值得注意的是,使⽤⽣成模型增强数据,被验证效果不错。生成模型应该最常用的seq2seq+attention。

    如果训练样本本身就有很大的噪音,一方面可以通过数据清洗的方法去除噪音,另外也可以选择在模型loss函数加入正则项可以防止模型过拟合,增强模型对噪音的容忍程序,可要参考论文《SIMPLE AND EFFECTIVE REGULARIZATION METHODS
    FOR TRAINING ON NOISILY LABELED DATA WITH GENERALIZATION GUARANTEE》。论文提出了一种简单有效的加入正则项运用在噪音数据上来完成文本分类任务。

    5.5 引入先验知识

    文本分类最关键的步骤在于特征的选择,采取baseline提取特征,没有很好地利用人类已知的先验知识。例如经济类别可能包含股票、证券这些词特征明显,理想模型是可以将这些词的特征加入到模型来优化模型。把这些已经知道的知识则认为是先验知识。

    论文《Incorporating Priors with Feature Attribution on Text Classification》论文提出了一种特征属性的方法,将特征属性和基于特定于任务的先验值之间增加了L2距离损失。

    论文《Neural Attentive Bag-of-Entities Model for Text Classification》论文提出了从语料库中的单词构建词汇表,而是使用实体以及相关知识来构建实体知识库。通过向量嵌入和与词相关的实体的向量嵌入,给出了词的最终表示。利用实体嵌入增强文章的语义表示,提高文本分类模型表现。

    论文《Combining Knowledge with Deep Convolutional Neural Networks for Short Text Classification》论文引入知识库概念化短文本,将概念知识和短文本embedding结合起来。整体采用CNN架构,分别针对文本的word和concept embedding 提取特征,和针对字符embedding(输入为编码的字符序列)提取特征,最后将两种提取的特征concat。这个方法效果还不错,文本分类任务中训练过程更稳定,f1提高1%。架构我采用GELE,没有采用论文中提到的方法。

    5.6 模型超参数调整

    1. 建议小的数据集采用低纬度,大的数据集适当提高表征维度。

    2. 模型参数可以参考论文提及到最优参数。

    3. 学习率衰减根据实际训练情况调整。

      但是实际情况我们还是要根据训练收敛程度进行灵活的设置方能获得更好的效果,如果收敛比较可视化,则可以加大学习率使得较快缩短训练时间,当模型在处于摇摆阶段,加快学习率衰减是有必要的。

    4. 为了防止模型过拟合,可适当采用正则化与 dropout 参数。

    5. 优化器可以选择adam和AdaDelta,这篇博客讲到各类优化器的选择,参考链接

      1. 常用的adam优化器,收敛快,可是很难达到最优;而sgd收敛慢,而且不容易跳出鞍点。所以训练模型的时候可以采用Adam自动切换到SGD优化器,从而使得模型找到一个全局最优。ICLR 2018论文《Improving Generalization Performance by Switching from Adam to SGD》提出的一种自动由Adam切换为SGD而实现更好的泛化性能的方法。

    6. batch设置

      训练过程中,batch 的大小也会影响模型的效果。一般设置为4的倍数。

    展开全文
  • 在NLP领域中,文本分类舆情分析等任务相较于文本抽取,和摘要等任务更容易获得大量标注数据。因此在文本分类领域中深度学习相较于传统方法更容易获得比较好的效果。正是有了文本分类模型的快速演进,海量的法律文书...

    在NLP领域中,文本分类舆情分析等任务相较于文本抽取,和摘要等任务更容易获得大量标注数据。因此在文本分类领域中深度学习相较于传统方法更容易获得比较好的效果。正是有了文本分类模型的快速演进,海量的法律文书可以通过智能化处理来极大地提高效率。我们今天就来分析一下当前state of art的文本分类模型以及他们在法律文书智能化中的应用。

    文本分类领域走过路过不可错过的深度学习模型主要有FastText,TextCNN,HAN,DPCNN。本文试图在实践之后总结一下这些这些分类模型的理论框架,把这些模型相互联系起来,让大家在选择模型与调参的时候能有一些直觉与灵感。在深度学习这个实践为王的领域常有人质疑理论理论无用,我个人的感受是理论首先在根据数据特征筛选模型的时候非常有用,其次在调参的过程中也能大幅提升效率,更重要的是调不出结果的时候,往往脑海里的那一句“这个模型不应该是这样的结果”,以及“这不科学”提供了坚持方向信心。

    一、文本分类模型详解

    1. FastText

    其中FastText结构特别简单,对于速度要求特别高场合适用,他把一篇文章中所有的词向量(还可以加上N-gram向量)直接相加求均值,然后过一个单层神经网络来得出最后的分类结果。很显然,这样的做法对于复杂的文本分类任务来说丢失了太多的信息。FastText的一种简单的增强模型是DAN,改变在于在词向量平均完成后多叠了几层全连接神经网络。对应地,FastText也可以看成是DAN全连接神经网络层数为1的的一种特例。

     

    图1 2层DAN网络

    需要特别注意的是,对于不加n-gram向量的FastText模型,他不可能去分辨否定词的位置,看下面的两句话:

    我不喜欢这类电影,但是喜欢这一个。

    我喜欢这类电影,但是不喜欢这一个。

    这样的两句句子经过词向量平均以后已经送入单层神经网络的时候已经完全一模一样了,分类器不可能分辨出这两句话的区别,只有添加n-gram特征以后才可能有区别。因此,在实际应用的时候需要对你的数据有足够的了解。

    2. TextCNN

    TextCNN相较于fastText模型的结构会复杂一些,在2014年提出,他使用了卷积 + 最大池化这两个在图像领域非常成功的好基友组合。我们先看一下他的结构。如下图所示,示意图中第一层输入为7*5的词向量矩阵,其中词向量维度为5,句子长度为7,然后第二层使用了3组宽度分别为2、3、4的卷积核,图中每种宽度的卷积核使用了两个。

    其中每个卷积核在整个句子长度上滑动,得到n个激活值,图中卷积核滑动的过程中没有使用padding,因此宽度为4的卷积核在长度为7的句子上滑动得到4个特征值。然后出场的就是卷积的好基友全局池化了,每一个卷积核输出的特征值列向量通过在整个句子长度上取最大值得到了6个特征值组成的feature map来供后级分类器作为分类的依据。

    图2 TextCNN结构

    我们知道图像处理中卷积的作用是在整幅图像中计算各个局部区域与卷积核的相似度,一般前几层的卷积核是可以很方便地做可视化的,可视化的结果是前几层的卷积核是在原始输入图像中寻找一些简单的线条。NLP中的卷积核没法做可视化,那么是不是就不能理解他在做什么了呢,其实可以通过模型的结构来来推断他的作用。因为TextCNN中卷积过后直接就是全局max pooling,那么它只能是在卷积的过程中计算与某些关键词的相似度然后通过max pooling层来得出模型关注那些关键词是否在整个输入文本中出现,以及最相似的关键词与卷积核的相似度最大有多大。我们假设中文输出为字向量,理想情况下一个卷积核代表一个关键词,如下图所示:

    图3 TextCNN卷积核的意义示意图

    比如说一个2分类舆情分析任务中,如果把整个模型当成一个黑箱,那么去检测他的输出结果,会发现这个模型对于输入文本中是否含有“喜欢”,“热爱”这样的词特别敏感,那么他是怎么做到的呢?整个模型中能够做到遍历整个句子去计算关键词相似度的只有卷积的部分,因为后面直接是对整个句子长度的max pooling。但是因为模型面对的是字向量,并不是字,所以他一个卷积核可能是只学了半个关键词词向量,然后还有另外的卷积核学了另外半个关键词词向量,最后在分类器的地方这些特征值被累加得到了最终的结果。

    TextCNN模型最大的问题也是这个全局的max pooling丢失了结构信息,因此很难去发现文本中的转折关系等复杂模式,TextCNN只能知道哪些关键词是否在文本中出现了,以及相似度强度分布,而不可能知道哪些关键词出现了几次以及出现这些关键词出现顺序。假想一下如果把这个中间结果给人来判断,人类也很难得到对于复杂文本的分类结果,所以机器显然也做不到。针对这个问题,可以尝试k-max pooling做一些优化,k-max pooling针对每个卷积核都不只保留最大的值,他保留前k个最大值,并且保留这些值出现的顺序,也即按照文本中的位置顺序来排列这k个最大值。在某些比较复杂的文本上相对于1-max pooling会有提升。

    3. HAN(Hierarchy Attention Network)

    相较于TextCNN,HAN最大的进步在于完全保留了文章的结构信息,并且特别难能可贵的是,基于attention结构有很强的解释性。

    他的结构如下图所示:

    图4 HAN结构

    输入词向量序列后,通过词级别的Bi-GRU后,每个词都会有一个对应的Bi-GRU输出的隐向量h,再通过uw向量与每个时间步的h向量点积得到attention权重,然后把h序列做一个根据attention权重的加权和,得到句子summary向量s2,每个句子再通过同样的Bi-GRU结构再加attention得到最终输出的文档特征向量v向量,然后v向量通过后级dense层再加分类器得到最终的文本分类结果。模型结构非常符合人的从词->句子->再到篇章的理解过程

    最重要的是该模型在提供了更好的分类精度的情况下,可视化效果非常好。同时在调参过程中,我们发现attention部分对于模型的表达能力影响非常大,整个模型在所有位置调整L2-Loss对模型表达能力带来的影响远不如在两处attention的地方大,这同时也能解释为什么可视化效果比较好,因为attention对于模型的输出贡献很大,而attention又恰恰是可以可视化的。

    下面我们来看一下他在法律领域罪名预测任务上的可视化效果。下面的可视化的结果并不是找了极少数效果好的,而是大部分情况下模型的可视化能够解释他的输出。需要注意的是,此处为了让不太重要句子中相对重要的词并不完全不可见,词的亮度=sqrt(句子权重)*词权重。

    在非常长的文本中,HAN觉得中间那些完全是废话,不如那句“公诉机关认为”有用,就放弃了。

    图5 HAN attention可视化1

    如下图所示,模型虽然在文本第二行中看到了窃取的字样,但是他认为这个案件中主要的事件是抢劫,这就是保留文本结构的好处。

    图6 HAN attention可视化2

    可以看到并不是所有的深度学习模型都是不可以理解的,这种可解释性也会给实际应用带来很多帮助。

    4 DPCNN

    上面的几个模型,论神经网络的层数,都不深,大致就只有2~3层左右。大家都知道何凯明大神的ResNet是CV中的里程碑,15年参加ImageNet的时候top-5误差率相较于上一年的冠军GoogleNet直接降低了将近一半,证明了网络的深度是非常重要的。

    图7 ImageNet历年冠军

    那么问题来了,在文本分类领域网络深度提升会带来分类精度的大幅提升吗?我们在一些比较复杂的任务中,以及数据量比较大(百万级)的情况下有提升,但不是ResNet那种决定性的提升。

    DPCNN的主要结构如下图所示:

    图8 DPCNN结构

    从词向量开始(本文的重点在于模型的大结构,因此不去详解文中的region embedding部分,直接将整个部分认为是一种词向量的输出。)先做了两次宽度为3,filter数量为250个的卷积,然后开始做两两相邻的max-pooling,假设输入句子长度padding到1024个词,那么在头两个卷积完成以后句子长度仍然为1024。在block 1的pooling位置,max pooling的width=3,stride=2,也即序列中相邻的3个时间步中每一维feature map取这三个位置中最大的一个留下,也即位置0,1,2中取一个最大值,然后,移动2个时间步,在2,3,4时间步中取一次max,那么pooling输出的序列长度就是511。

    后面以此类推,序列长度是呈指数级下降的,这也是文章名字Deep Pyramid的由来。然后通过两个卷积的非线性变换,提取更深层次的特征,再在输出的地方叠加上未经过两次卷积的quick connection通路(ResNet中使得深层网络更容易训练的关键)。因为每个block中的max pooling只是相邻的两个位置做max-pooling,所以每次丢失的结构信息很少,后面的卷积层又能提取更加抽象的特征出来。所以最终模型可以在不丢失太多结构信息的情况下,同时又做了比较深层的非线性变换。

    我们实际测试中在非线性度要求比较高的分类任务中DPCNN会比HAN精度高,并且由于他是基于CNN的,训练速度比基于GRU的HAN也要快很多。

    二、法律文书智能化应用

    达观数据在法律文书智能化处理中也应用了上面的几个模型,并在此基础上做法律行业针对性的优化。在刚刚结束的“法研杯”法律人工智能大赛中达观数据代表队取得了单项三等奖的成绩。

    以裁判文书智能化处理为例,达观数据可以通过上述的文本分类器根据一段犯罪事实来向法律工作者推荐与描述的犯罪事实相关的罪名,法律条文,甚至是刑期的预测等。

    下面以裁判文书网的一篇裁判文书为例,我们截取其中的犯罪事实部分文字,输入模型。模型会根据输入的文字判断此段分类事实对应的罪名,并且高亮出犯罪事实中的关键内容。

    截取裁判文书网中的犯罪事实部分:

    9c732e832cc14977a687cc2f7ff8323b.jpg

    图9 裁判文书样例

    输入模型:

    “公诉机关指控:2017年6月30日22时左右,被告人耿艳峰醉酒驾驶冀T×××××号比亚迪小型轿车沿东孙庄村东水泥路由西向东行驶,行至事发处,与对向被告人孙汉斌无证醉酒驾驶无牌二轮摩托车发生碰撞。造成两车不同程度损坏,孙汉斌受伤的道路交通事故。经衡水市公安局物证鉴定所检验:耿艳峰血液酒精含量为283.11mg/lOOmL;孙汉斌血液酒精含量为95.75mg/mL。经武强县交通警察大队认定:耿艳峰、孙汉斌均负此事故的同等责任。”

    得到结果:

    4eaf52bf66da4206a308ea8c2bd13af5.jpg

    图10 模型输出结果

    模型会输出预测的罪名以及相关法条的推荐结果,能够极大地提高律师的效率。并且模型还能将关键的句子以及词高亮出来给律师进一步仔细审阅提供方便。

    目前在刑法相关的大量样本上罪名预测与相关法条推荐的准确率在90%左右。刑期由于存在不同年代不同地区存在一些差异,目前模型的输出结果还不能特别直观地给出评估。

    三、总结

    目前state of the art的深度学习文本发分类模型在十万~百万级以上的数据上已经能取得相当不错的效果,并且也有一些可解释性非常强的模型可用。要在实际业务中把文本分类模型用好,除了像文中深入分析理论以外,在大量的业务实践中总结经验也是必不可少的。达观在裁判文书处理等实际任务上实测输出结果也非常不错,并且达观的深度学习文本分类技术也会在各个业务应用中不断优化升级,希望能为法律行业的智能化以及效率优化作出一些贡献。

    参考文献:

    1.Joulin, Armand, et al. "Bag of Tricks forEfficient Text Classification." Proceedings of the 15th Conferenceof the European Chapter of the Association for Computational Linguistics:Volume 2, Short Papers. Vol. 2. 2017.

    2.Iyyer, Mohit, et al. "Deep unorderedcomposition rivals syntactic methods for text classification." Proceedingsof the 53rd Annual Meeting of the Association for Computational Linguistics andthe 7th International Joint Conference on Natural Language Processing (Volume1: Long Papers). Vol. 1. 2015.

    3.Kim, Yoon. "Convolutional Neural Networksfor Sentence Classification." Proceedings of the 2014 Conferenceon Empirical Methods in Natural Language Processing (EMNLP). 2014.

    4.Yang, Zichao, et al. "Hierarchicalattention networks for document classification." Proceedings of the2016 Conference of the North American Chapter of the Association forComputational Linguistics: Human Language Technologies. 2016.

    5.Johnson, Rie, and Tong Zhang. "Deeppyramid convolutional neural networks for text categorization." Proceedingsof the 55th Annual Meeting of the Association for Computational Linguistics(Volume 1: Long Papers). Vol. 1. 2017.

    展开全文
  • 基于支持向量机的图像分类(下篇:MATLAB实现)

    万次阅读 多人点赞 2018-04-11 00:19:20
    摘要:本文通过图文详细介绍如何利用支持向量机对图像进行分类,经过上篇文章对原理的介绍,这里介绍利用MATLAB编程实现。后续章节将介绍的主要部分有: 图片数据集整理 特征提取 SVM训练与测试 分类结果...

    摘要:本文通过图文详细介绍如何利用支持向量机对图像进行分类,经过上篇文章对原理的介绍,这里介绍利用MATLAB编程实现。更多相关资源详解也可参考博主最新博文基于支持向量机的手写数字识别详解(MATLAB GUI代码,提供手写板)。本文后续章节将介绍的主要部分有:

    • 图片数据集整理
    • 特征提取
    • SVM训练与测试
    • 分类结果评价
    • 结果显示

    点我下载:SVM图像分类的MATLAB完整程序及图片集文件


    1. 前言

    机器学习是人工智能研究发展到一定阶段的必然产物。二十世纪八十年代是机器学习成为一个独立学科的学科领域、各种机器学习技术百花绽放的时期。支持向量机于1995年正式发表[Cortes and Vapnik,1995],由于在文本分类任务中的卓越性能[Joachims,1998],很快成为机器学习的主流技术,并直接掀起了“统计学习”(statistical learning)在2000年前后的高潮。——《机器学习》 周志华

    2010年前后,随着计算能力的迅猛提升和大数据的涌现,神经网络研究在“深度学习”的名义下又重新崛起,并迎来又一次发展高潮。近年研究SVM的论文少了很多,SVM的风头很多时候确实已被强势崛起的深度学习浪潮所淹没,95年的SVM比我们年龄还大,有点仿佛英雄迟暮的感觉。不过在我看来,实现简单而且非常强大的分类算法SVM仍然有其研究价值,与神经网络相比SVM亦有过人之处,如特征维数多于样本数的情况,而小样本学习至今仍是深度学习的一大难题。

    当浅层神经网络效果不佳时,人们将目光转向支持向量机,而支持向量机亦不负众望,以不错的成绩让人们对机器学习重拾信心。感谢支持向量机,感谢在神经网络几经起落的时候,支持向量机继往开来、自成一脉,填补了机器学习的一段空窗期,让这条曲折向上的研究之路绵延至今迎来了现在人工智能百花齐放的时代!

    接下来就通过简单的图片分类问题,通过MATLAB程序理解认识一下这一简单而强大的分类算法——支持向量机.


    2. 图片数据集整理

    首先需要准备好分类的数据集,数据的整理是机器学习中的重要一环。这里我们自行整理一个用于分类的图片集,图片集有四类图片,分别为车、猫、花、鱼。从百度上下载这四种图片,并分别存放在四个文件夹中,如下图所示

    70

    四类图片每类分别下载100张左右的图片,这四百张图片作为分类的数据集,以7:3的比例将其分为训练图片集和测试图片集,分别放到picturestestPictures两个文件夹中。这两个文件夹下同上图一样都有car、cat、flw、fsh四个文件夹,值得注意的是测试样本的图片应可能不出现在训练集图片库中。做好以上工作,用于分类的图片集就准备完毕了。

    (当然用于分类的图片集常用的是cafir10图片集,这个数据集是写论文或研究时普遍用到的,可能会在后面的文章中介绍其用法,这里就暂时不使用cafir了。)

    为了便于后面的特征提取等对每张图片进行的操作,这里在程序中有必要将图片文件的存储位置、数量、类别等信息整理到一个数据结构中,新建一个m文件,程序代码如下

    dir=('D:\pictures');
    testdir=('D:\testPictures\test');
    trainingSet = imageSet(dir,'recursive');
    testSet = imageSet(testdir,'recursive');
    

    以上代码中用到imageSet( )函数是一个图片集整理的函数(MATLAB R2016b及以上版本支持),返回的是dir文件路径下文件夹内的文件信息。例如得到的trainingSet为一个1*4的imageSet变量,每个imageSet变量由Description、ImageLocation、Count三个属性组成,分别代表对子文件的描述、文件存储位置和图片数量。如下图所示是testSet(1)内部情况

    70

    3. 主要步骤

    和深度学习的算法相比,传统的机器学习在进行图片分类时输入的不是原始图片而是先进行一个特征提取的步骤。在上篇中已经介绍了特征提取的相关内容,这里用的是方向梯度直方图(HOG)以及灰度共生矩阵(GLCM)。

    70

    3.1 GLCM提取

    MATLAB中灰度共生矩阵的提取可以调用graycomatrix( )函数,不过这里为了取不同方向(0、45、90、135度)的灰度共生矩阵,通过循环计算各个方向的灰度共生矩阵并进行归一化处理(计算对比度、逆差距、熵、自相关),然后取平均值和方差作为最终提取的特征。

    新建一个m文件并命名为getGLCMFeatures,输入以下代码

    function [features] = getGLCMFeatures(image)
    features_all  = [];
    for i = 1:10
        glcm = graycomatrix(image, 'Offset', [0,i]);
        stats = graycoprops(glcm);
        
        glcm45 = graycomatrix(image, 'Offset', [-i,i]);
        stats45 = graycoprops(glcm45);
        
        glcm90 = graycomatrix(image, 'Offset', [-i,0]);
        stats90 = graycoprops(glcm90);
        
        glcm135 = graycomatrix(image, 'Offset', [-i,-i]);
        stats135 = graycoprops(glcm135);
        
        stats7x4 = [stats.Contrast stats.Correlation stats.Energy stats.Homogeneity;
            stats45.Contrast stats45.Correlation stats45.Energy stats45.Homogeneity;
            stats90.Contrast stats90.Correlation stats90.Energy stats90.Homogeneity;
            stats135.Contrast stats135.Correlation stats135.Energy stats135.Homogeneity];
        features_all = [features_all mean(stats7x4,1) std(stats7x4,0,1)];
    end
    features = features_all;
    

    新建的getGLCMFeatures函数输入为彩色图像转换后的灰度图像矩阵,输出为提取后的灰度共生矩阵特征。

    3.2 合并特征

    自己编写一个提取特征的函数命名为extractFeature,这个函数输入为整理过的训练集和测试集,输出为训练集的特征、标签和测试集的特征、标签。这个函数的功能是将HOG特征和前面提取的GLCM特征合并。

    代码第2到13行是为了确定每张图片提取特征后得到的矩阵大小,以方便后面的操作同时也是为了预分配空间以提高代码效率。首先取第一张图片进行灰度化以及阈值分割,将图片大小调整在256*256的范围(统一大小)分别进行HOG和GLCM的特征提取,分别得到两种特征向量,取两个向量的长度之和就是一张图片特征提取后的总长度了。

    function [trainingFeatures,trainingLabels,testFeatures,testLabels]=extractFeature(trainingSet,testSet)
    %% 确定特征向量尺寸
    img = read(trainingSet(1), 1);
    %转化为灰度图像
    img=rgb2gray(img);
    %转化为2值图像
    lvl = graythresh(img);
    img = im2bw(img, lvl);
    img=imresize(img,[256 256]);
    cellSize = [4 4];
    [hog_feature, vis_hog] = extractHOGFeatures(img,'CellSize',cellSize);
    glcm_feature = getGLCMFeatures(img);
    SizeOfFeature = length(hog_feature)+ length(glcm_feature);
    
    %% 构建训练样本特征向量和训练样本标签
    trainingFeatures = [];
    trainingLabels   = [];
    for digit = 1:numel(trainingSet)       
        numImages = trainingSet(digit).Count;
        features  = zeros(numImages, SizeOfFeature, 'single');%初始化特征向量
        % 遍历每张图片
        for i = 1:numImages
            img = read(trainingSet(digit), i);% 取出第i张图片
            
            img=rgb2gray(img);                % 转化为灰度图像
            glcm_feature = getGLCMFeatures(img);  % 提取GLCM特征
           
            lvl = graythresh(img);            % 阈值化
            img = im2bw(img, lvl);            % 转化为2值图像
            img=imresize(img,[256 256]);
            % 提取HOG特征
            [hog_feature, vis_hog] = extractHOGFeatures(img,'CellSize',cellSize);
            % 合并两个特征
            features(i, :) = [hog_feature glcm_feature];
        end
        % 使用图像描述作为训练标签
        labels = repmat(trainingSet(digit).Description, numImages, 1);  
        % 逐个添加每张训练图片的特征和标签
        trainingFeatures = [trainingFeatures; features];
        trainingLabels   = [trainingLabels; labels];       
    end
    
    
    %% 提取测试图片集的特征向量
    testFeatures = [];
    testLabels   = [];
    for digit = 1:numel(testSet)
               
        numImages = testSet(digit).Count;
        %初始化特征向量
        features  = zeros(numImages, SizeOfFeature, 'single');
        
        for i = 1:numImages
            
            img = read(testSet(digit), i);
            %转化为灰度图像
            img=rgb2gray(img);
            glcm_feature = getGLCMFeatures(img);
            %转化为2值图像
            lvl = graythresh(img);
            img = im2bw(img, lvl);
            img=imresize(img,[256 256]);
            [hog_4x4, vis4x4] = extractHOGFeatures(img,'CellSize',cellSize);
            features(i, :) = [hog_4x4 glcm_feature];
        end
        
        % 使用图像描述作为训练标签
        labels = repmat(testSet(digit).Description, numImages, 1);
            
        testFeatures = [testFeatures; features];
        testLabels=[testLabels; labels];
            
    end
    end
    

    代码18-41行是构建训练样本特征向量和训练样本标签,与前面步骤相似,只不过现在是遍历训练集每一张图片,对其进行灰度化、阈值化、调整大小,然后进行特征提取,将HOG特征和GLCM特征合并成一个向量作为特征矩阵的一行即一张图片的特征向量。样本的标签构建则将每张图片所处的文件夹的名字作为该图片的标签,并与特征向量顺序相对应。

    第47-73行是构建测试样本特征向量和训练样本标签,这里将图片集换成了测试集,而步骤与训练集是一致的。

    3.3 SVM训练与测试

    调用前面的特征提取函数得到训练和测试用的特征向量与对应的标签,便可以进行SVM的训练和测试。MATLAB自带的训练svm函数可以用fitcecoc函数,测试可以用predict函数预测结果,训练和测试的代码如下

    % 训练一个svm分类器
    % fitcecoc 使用11的方案
    classifier = fitcecoc(trainingFeatures, trainingLabels);
    save classifier.mat classifier;
    
    % 使用测试图像的特征向量预测样本标签
    predictedLabels = predict(classifier, testFeatures);
    

    代码中classifier为训练得到的SVM分类器,利用该分类器以及测试集特征向量预测测试集的标签predictLabels。后面可以将predictLabels与实际的测试标签进行对比即可评估分类好坏。

    3.4 分类结果评价

    在上一篇文章中提到过了,为了评价分类的好坏可以通过混淆矩阵,通过计算混淆矩阵对角线上的值占每行总数的比值得出分类正确率,其实现代码如下

    %% 评估分类器
    % 使用没有标签的图像数据进行测试,生成一个混淆矩阵表明分类效果
    confMat=confusionmat(testLabels, predictedLabels)
    accuracy=(confMat(1,1)/sum(confMat(1,:))+confMat(2,2)/sum(confMat(2,:))+...
        confMat(3,3)/sum(confMat(3,:))+confMat(4,4)/sum(confMat(4,:)))/4
    

    其结果如下图所示

    70

    3.5 结果显示

    尽管以上代码能得到分类正确率,但我们希望更直观的看到输入一张图片后SVM分类器的分类结果,这里编写一个函数通过图形窗口显示预测结果。新建一个m文件命名为Predict,输入如下代码

    function [] = Predict(imageurl)
    load classifier.mat;
    figure;
    img = imread(imageurl);
    imshow(img);
    
    %提取图像的特征向量
    %转化为灰度图像
    img=rgb2gray(img);
    glcm_feature = getGLCMFeatures(img);
    %转化为2值图像
    lvl = graythresh(img);
    img = im2bw(img, lvl);
    
    % imshow(img);
    % figure
    img=imresize(img,[256 256]);
    [hog_4x4, ~] = extractHOGFeatures(img,'CellSize',[4 4]);
    testFeature = [hog_4x4 glcm_feature];
    
    
    % 使用测试图像的特征向量预测样本标签
    predictedLabel = predict(classifier, testFeature);
    
    str = ['分类结果:' predictedLabel];
    dim = [0.25 0.0004 0.2 0.2];
    annotation('textbox', dim, 'string', str, 'fontsize', 20, 'color', 'g','edgecolor', 'none');
    

    函数输入为图片的存储路径,调用函数则会通过图形窗口显示图片及分类结果,如在命令窗口输入如下代码

    Predict('D:\testPictures\test\car\car9.jpg');
    

    输出结果如下图

    70

    4. 完整代码

    为了方便使用这里贴出完整代码

    主函数:

    clear;
    dir=('D:\pictures');
    testdir=('D:\testPictures\test');
    trainingSet = imageSet(dir,'recursive');
    testSet = imageSet(testdir,'recursive');
    
    [trainingFeatures,trainingLabels,testFeatures,testLabels]=extractFeature(trainingSet,testSet);
    %% 
    %训练一个svm分类器
    %fitcecoc 使用11的方案
    classifier = fitcecoc(trainingFeatures, trainingLabels);
    save classifier.mat classifier;
    
    % 使用测试图像的特征向量预测样本标签
    predictedLabels = predict(classifier, testFeatures);
    
    %% 评估分类器
    %使用没有标签的图像数据进行测试,生成一个混淆矩阵表明分类效果
    confMat=confusionmat(testLabels, predictedLabels)
    accuracy=(confMat(1,1)/sum(confMat(1,:))+confMat(2,2)/sum(confMat(2,:))+...
        confMat(3,3)/sum(confMat(3,:))+confMat(4,4)/sum(confMat(4,:)))/4
    
    Predict('D:\testPictures\test\car\car9.jpg');
    

    getGLCMFeatures.m:

    function [features] = getGLCMFeatures(image)
    features_all  = [];
    for i = 1:10
        glcm = graycomatrix(image, 'Offset', [0,i]);
        stats = graycoprops(glcm);
        
        glcm45 = graycomatrix(image, 'Offset', [-i,i]);
        stats45 = graycoprops(glcm45);
        
        glcm90 = graycomatrix(image, 'Offset', [-i,0]);
        stats90 = graycoprops(glcm90);
        
        glcm135 = graycomatrix(image, 'Offset', [-i,-i]);
        stats135 = graycoprops(glcm135);
        
        stats7x4 = [stats.Contrast stats.Correlation stats.Energy stats.Homogeneity;
            stats45.Contrast stats45.Correlation stats45.Energy stats45.Homogeneity;
            stats90.Contrast stats90.Correlation stats90.Energy stats90.Homogeneity;
            stats135.Contrast stats135.Correlation stats135.Energy stats135.Homogeneity];
        features_all = [features_all mean(stats7x4,1) std(stats7x4,0,1)];
    end
    features = features_all;
    

    extractFeature.m:

    function [trainingFeatures,trainingLabels,testFeatures,testLabels]=extractFeature(trainingSet,testSet)
    %% 确定特征向量尺寸
    img = read(trainingSet(1), 1);
    %转化为灰度图像
    img=rgb2gray(img);
    %转化为2值图像
    lvl = graythresh(img);
    img = im2bw(img, lvl);
    img=imresize(img,[256 256]);
    cellSize = [4 4];
    [hog_feature, vis_hog] = extractHOGFeatures(img,'CellSize',cellSize);
    glcm_feature = getGLCMFeatures(img);
    SizeOfFeature = length(hog_feature)+ length(glcm_feature);
    
    %% 构建训练样本特征向量和训练样本标签
    trainingFeatures = [];
    trainingLabels   = [];
    for digit = 1:numel(trainingSet)       
        numImages = trainingSet(digit).Count;
        features  = zeros(numImages, SizeOfFeature, 'single');%初始化特征向量
        % 遍历每张图片
        for i = 1:numImages
            img = read(trainingSet(digit), i);% 取出第i张图片
            
            img=rgb2gray(img);                % 转化为灰度图像
            glcm_feature = getGLCMFeatures(img);  % 提取GLCM特征
           
            lvl = graythresh(img);            % 阈值化
            img = im2bw(img, lvl);            % 转化为2值图像
            img=imresize(img,[256 256]);
            % 提取HOG特征
            [hog_feature, vis_hog] = extractHOGFeatures(img,'CellSize',cellSize);
            % 合并两个特征
            features(i, :) = [hog_feature glcm_feature];
        end
        % 使用图像描述作为训练标签
        labels = repmat(trainingSet(digit).Description, numImages, 1);  
        % 逐个添加每张训练图片的特征和标签
        trainingFeatures = [trainingFeatures; features];
        trainingLabels   = [trainingLabels; labels];       
    end
    
    
    %% 提取测试图片集的特征向量
    testFeatures = [];
    testLabels   = [];
    for digit = 1:numel(testSet)
               
        numImages = testSet(digit).Count;
        %初始化特征向量
        features  = zeros(numImages, SizeOfFeature, 'single');
        
        for i = 1:numImages
            
            img = read(testSet(digit), i);
            %转化为灰度图像
            img=rgb2gray(img);
            glcm_feature = getGLCMFeatures(img);
            %转化为2值图像
            lvl = graythresh(img);
            img = im2bw(img, lvl);
            img=imresize(img,[256 256]);
            [hog_4x4, vis4x4] = extractHOGFeatures(img,'CellSize',cellSize);
            features(i, :) = [hog_4x4 glcm_feature];
        end
        
        % 使用图像描述作为训练标签
        labels = repmat(testSet(digit).Description, numImages, 1);
            
        testFeatures = [testFeatures; features];
        testLabels=[testLabels; labels];
            
    end
    end
    

    Predict.m:

    function [] = Predict(imageurl)
    load classifier.mat;
    figure;
    img = imread(imageurl);
    imshow(img);
    
    %提取图像的特征向量
    %转化为灰度图像
    img=rgb2gray(img);
    glcm_feature = getGLCMFeatures(img);
    %转化为2值图像
    lvl = graythresh(img);
    img = im2bw(img, lvl);
    
    % imshow(img);
    % figure
    img=imresize(img,[256 256]);
    [hog_4x4, ~] = extractHOGFeatures(img,'CellSize',[4 4]);
    testFeature = [hog_4x4 glcm_feature];
    
    
    % 使用测试图像的特征向量预测样本标签
    predictedLabel = predict(classifier, testFeature);
    
    str = ['分类结果:' predictedLabel];
    dim = [0.25 0.0004 0.2 0.2];
    annotation('textbox', dim, 'string', str, 'fontsize', 20, 'color', 'g','edgecolor', 'none');
    

    5. 结束语

    本博文的完整MATLAB程序文件与图片集文件已经上传,下载即可运行(注意根据实际修改程序中的图片路径哦)下载地址如下

    点我下载:SVM的图像分类MATLAB完整程序及图片集文件

    更多相关资源详解也可参考博主最新博文基于支持向量机的手写数字识别详解(MATLAB GUI代码,提供手写板)

    公众号获取
        本人微信公众号已创建,扫描以下二维码并关注公众号“AI技术研究与分享”,后台回复“SV20180411”即可获取全部资源文件信息。

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMyODkyMzgz,size_16,color_FFFFFF,t_70

    由于编者能力有限,代码即使经过了多次校对,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

    展开全文
  • 一起来了解垃圾分类

    千次阅读 2017-08-31 22:42:46
    垃圾是放错了地方的金子。 本文大纲-前言 1.什么是垃圾分类 2.为什么需要分类 3.垃圾分类的意义 4.垃圾种类  4.1可回收垃圾  4.2不可回收垃圾  4.2.1餐厨垃圾 ...7.如何做好垃圾分类 -结束语

    这里写图片描述
    (图自网络)

    垃圾是放错了地方的金子。

    本文大纲

    -前言
    1.什么是垃圾分类
    2.为什么需要分类
    3.垃圾分类的意义
    4.垃圾种类
      4.1可回收垃圾
      4.2不可回收垃圾
        4.2.1餐厨垃圾
        4.2.2有害垃圾
        4.2.3其他垃圾
    5.我国垃圾分类现状
    6.国外优秀案例(极致的日本垃圾分类)
    7.如何做好垃圾分类
    -结束语

    前言

    你以为我要讲什么计算机“垃圾回收”?算了吧,我也不懂,我是真的要了解一下生活中的垃圾分类呢!
    原因是今天早上我要丢卫生纸,但是我不知道他是可回收还是不可回收,虽然有生活常识不够的嫌疑,但是想想还是可以理解,好像在中国,从小到大,学校和家庭都没有人教过我们垃圾是如何分类的呢,可能与我来自农村有关,但是我们没见深圳这个大城市垃圾分类做的有多好啊!而且我也一直关注最近的政策,国家在试点一些城市强制进行垃圾分类。

    这里写图片描述
    (图自网络)

    回到之前的问题,用完的卫生纸,我们是应该丢可回收箱呢还是不可回收箱?
    家里摘菜洗菜,剩饭剩菜产生的厨房垃圾,是该丢可回收箱呢还是不可回收箱?
    用完的电池是不是可回收的?

    这些问题对我个人来说都是不明确的,所以就会造成今天早上这样尴尬的事情,我拿着垃圾不知道丢哪边,然后放下垃圾先百度一下。。。
    。。。just kidding

    什么是垃圾分类

    垃圾分类,指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。

    分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用。

    垃圾在分类储存阶段属于公众的私有品,垃圾经公众分类投放后成为公众所在小区或社区的区域性准公共资源,垃圾分类驳运到垃圾集中点或转运站后成为没有排除性的公共资源。从国内外各城市对生活垃圾分类的方法来看,大致都是根据垃圾的成分构成、产生量,结合本地垃圾的资源利用和处理方式来进行分类的。

    为什么需要分类

    我们每个人每天都会扔出许多垃圾,您知道这些垃圾它们到哪里去了吗?它们通常是先被送到堆放场,然后再送去填埋。

    垃圾填埋的费用是高昂的,处理一吨垃圾的费用约为200元至300元人民币。而仅北京市日产垃圾就有12000吨,目前面积在36平方米以上的垃圾堆在北京五环路以内有700多处,占地500多万平方米,每年在3-5%的速度增加。人们大量地消耗资源,大规模生产,大量地消费,又大量地产生着废弃物。

    垃圾增多的原因是人们生活水平的提高,各项消费增加了。据统计,1979年全国城市垃圾的清运量是2500多万吨,1996年城市垃圾的清运量是1.16一吨,是1979年的4倍。

    这里写图片描述
    (图自网络)

    这么大量的垃圾需要把多少土地变成填埋场?占地60公顷,日处理量为2000吨的阿苏卫填埋场仅能处理北京六分 之一 的垃圾,且在第11个年头就会被填满。被废弃的垃圾填埋场不复为耕地,也无法建成生活小区。

    目前,被西方国家广泛应用的另一种垃圾处理方法就是焚烧。经过高温焚化后的垃圾虽然不会占用大量的土地,但它不仅投资惊人,并且会增加二次污染的风险。二恶英这令人谈”恶”色变的剧毒致癌物质,就是垃圾焚烧后产生的主要气体成分之一。

    此外,无论填埋还是焚烧,都是对资源无谓的浪费,我们不断地把有限的地球资源变成垃圾,又把他们埋掉或烧掉,我们将来的子孙在哪里生存?

    难道我们对待垃圾就束手无策了吗?其实,办法是有的,这就是垃圾分类。垃圾分类就是在源头将垃圾分类投放,并通过分类的清运和回收使之重新变成资源

    垃圾分类的好处是显而易见的。垃圾分类后被送到工厂而不是填埋场,既省下了土地,又避免了填埋或焚烧所产生的污染,还可以变废为宝

    垃圾分类的意义

    1、减少占地:生活垃圾中有些物质不易降解,使土地受到严重侵蚀。垃圾分类,去掉能回收的、不易降解的物质,减少垃圾数量达50%以上;

    2、减少环境污染:废弃的电池含有金属汞、镉等有毒的物质,会对人类产生严重的危害;土壤中的废塑料会导致农作物减产;抛弃的废塑料被动物误食,导致动物死亡的事故时有发生,因此回收利用可以减少危害;

    3、变废为宝:中国每年使用塑料快餐盒达40亿个,方便面碗5-7亿个,废塑料占生活垃圾的4-7%。1吨废塑料可回炼600公斤的柴油。回收1500吨废纸,可免于砍伐用于生产1200吨纸的林木。1吨易拉罐熔化后能结成1吨很好的铝块,可少采20吨铝矿。生活垃圾中有30%-40%可以回收利用,我们应珍惜这个小本大利的资源。

    垃圾种类

    垃圾可以分为可回收垃圾和不可回收垃圾,我们平时的生活垃圾分类包含四种:可回收垃圾、厨余垃圾、有害垃圾和其他垃圾。

    这里写图片描述
    (图自网络)

    可回收垃圾

    主要包括废纸、塑料、玻璃、金属和布料五大类。

    这里写图片描述
    (图自网络)

    废纸:主要包括报纸、期刊、图书、各种包装纸等。但是,要注意纸巾和厕所纸由于水溶性太强不可回收。
    塑料:各种塑料袋、塑料泡沫、塑料包装、一次性塑料餐盒餐具、硬塑料、塑料牙刷、塑料杯子、矿泉水瓶等。
    玻璃:主要包括各种玻璃瓶、碎玻璃片、镜子、暖瓶等。
    金属物:主要包括易拉罐、罐头盒等。
    布料:主要包括废弃衣服、桌布、洗脸巾、书包、鞋等。

    这些垃圾通过综合处理回收利用,可以减少污染,节省资源。如每回收1吨废纸可造好纸850公斤,节省木材300公斤,比等量生产减少污染74%;每回收1吨塑料饮料瓶可获得0.7吨二级原料;每回收1吨废钢铁可炼好钢0.9吨,比用矿石冶炼节约成本47%,减少空气污染75%,减少97%的水污染和固体废物。

    不可回收垃圾

    餐厨垃圾
    包括剩菜剩饭、骨头、菜根菜叶、果皮等食品类废物。经生物技术就地处理堆肥,每吨可生产0.6~0.7吨有机肥料。

    有害垃圾
    含有对人体健康有害的重金属、有毒的物质或者对环境造成现实危害或者潜在危害的废弃物。包括电池、荧光灯管、灯泡、水银温度计、油漆桶、部分家电、过期药品、过期化妆品等。这些垃圾一般使用单独回收或填埋处理。

    其他垃圾
    包括除上述几类垃圾之外的砖瓦陶瓷、渣土、卫生间废纸、纸巾等难以回收的废弃物及果壳、尘土。采取卫生填埋可有效减少对地下水、地表水、土壤及空气的污染。

    我国垃圾分类现状

    1、 没有一个完善有效地分类回收体系

      目前在我国垃圾分类回收的处理方法并没有得到普遍的实施,许多城市都是将各种垃圾全部运输到垃圾填埋场,进行填埋或者焚烧。成本高,污染空气,对于分类回收许多省市没有完善的回收计划和路线,装备车处理垃圾的分类不够清晰,国家对于垃圾分类目前只注重于可回收和不可回收两类,街道上的垃圾桶种类极少,且数量也不多,人们对于其他垃圾不知道如何处理,于是造成垃圾的混合,没有达到分类目的。中国没有执行垃圾分类的城市,人们还没有形成垃圾分类的习惯,而且垃圾分类后,国家没有专门负责这部分的设施和部门,没有定期派专人负责清运和分出各户的垃圾,工作方式不很科学。对于垃圾分类处理国家没有制定专门的政策或者没有拨出款项。国家对于垃圾分类所带来的好处,还不是非常的在意。在中国,垃圾分类没有成为固定的处理垃圾的方式。

    2、 人们对于垃圾分类回收的意识非常淡薄

      目前只有部分城市对垃圾进行了分类处理,政府对垃圾分类处理没有进行大力宣传。正常来说垃圾的分类应该按照由各户自行分好,然后政府派专人负责清运和二次分类,最后对各类垃圾进行处理的方式进行。但是从第一步骤开始我们就存在问题,居民完全不清楚各类垃圾所包括的内容,更不用提垃圾分类。政府缺乏对居民进行垃圾分类回收的介绍和宣传。公共垃圾还知道有分类,但大多数并不在意,都随便将垃圾扔在地上,例如,强行执行的塑料袋政策,作用并不是太明显,很多人继续用不合格的塑料袋,百姓没有塑料污染的知识。政府应该在媒体上专门正式的告诉大家,生活垃圾分类的知识和禁用塑料袋的知识。比方说在新闻里,也让主持人报道下,这个政策出台的必要和相关知识。如果只是光喊口号, 出几个政策,是改变不了根本的,必须让大家都有相关知识的了解,知道为什么这样做。改变人们“事不关己”观念,能一点点改变现在不好的习惯。为了能循环利用自然,为了能生活在干净的环境中。

    3、 分类回收垃圾的成本高于利润?

      根据不分类情况下,各处理方式的各项费用情况,和分类后各项费用的增减比例,计算后可以得出分类处理和综合利用各环节费用情况。通过分析,可以看出分类回收垃圾成本比焚烧和堆肥的成本要低得多,但过程较复杂,耗费时间大。所以政府对这种垃圾处理方式并不看重,认为这种分类回收弊大于利,所以对于这部分的支出和所投放的精力较少。但从国家利益、集体利益和长远利益来看,从可持续发展的角度来看,分类回收垃圾是利大于弊!因为可回收垃圾可以重复利用,既节约资源又环保;厨余垃圾可以回收做牲畜饲料;有害垃圾回收可以防止对人类和环境的污染;其他垃圾中的大部分成分也可以回收利用。如果所花费的金钱和时间和这些优点比起来根本微不足道。将来的社会资源将会越来越少,甚至枯竭,那么我们的子孙后代要怎么生活?那么和这些比起来我们现在所做的这些是多么的有价值,所以国家必须重视起来,将这件事作为一件重要的事情来抓。

    总结

      我国对垃圾的分类回收尚缺乏国家和政府的支持。分类处理垃圾的利润一般体现在两个方面:回收利用和节约用力的费用。国外的通行做法是对废物重新利用,即一吨易拉罐熔化后能结成一吨很好的铝块,可少采20吨铝矿。存在的问题也有三个方面,当最主要的是人们缺乏对垃圾分类回收的知识的了解和学习,国家缺乏对这方面的法律强制支持和大力宣传。所以造成了现在只喊口号,树大旗却不能实施的局面。

    国外优秀案例(极致的日本垃圾分类)

    初到日本的外国人,都会对其叹为观止的垃圾分类所折服。瞥其一斑,日本的垃圾分类有以下几大特点。

    一是分类精细,回收及时。

      最大分类有可燃物、不可燃物、资源类、粗大垃圾,这几类再细分为若干子项目,每个子项目又可分为孙项目,以此类推。前几年横滨市把垃圾类别由原来的五类更细分为十类,并给每个市民发了长达27页的手册,其条款有518项之多。试看几例:口红属可燃物,但用完的口红管属小金属物;水壶属金属物,但12英寸以下属小金属物,12英寸以上则属大废弃物;袜子,若为一只属可燃物,若为两只并且“没被穿破、左右脚搭配”则属旧衣料;领带也属旧衣料,但前提是“洗过、晾干”。不过,这与德岛县上胜町相比,那就是小巫见大巫了。该町已把垃圾细分到44类,并计划到2020年实现“零垃圾”的目标。

      在回收方面,有的社区摆放着一排分类垃圾箱,有的没有垃圾箱而是规定在每周特定时间把特定垃圾袋放在特定地点,由专人及时拉走。如在东京都港区,每周三、六上午收可燃垃圾,周一上午收不可燃垃圾,周二上午收资源垃圾。很多社区规定早8点之前扔垃圾,有的则放宽到中午,但都是当天就拉走,不致污染环境或引来害虫和乌鸦。

    二是管理到位,措施得当。

      外国人到日本后,要到居住地政府进行登记,这时往往就会领到当地有关扔垃圾的规定。当你入住出租房时,房东也许在交付钥匙的同时就一并交予扔垃圾规定。有的行政区年底会给居民送上来年的日历,上面一些日期上标有黄、绿、蓝等颜色,下方说明每一颜色代表哪天可以扔何种垃圾。在一些公共场所,也往往会看到一排垃圾箱,分别写着:纸杯、可燃物、塑料类,每个垃圾箱上还写有日文、英文、中文和韩文。

    三是人人自觉,认真细致。

      养成良好习惯,非一日之功。日本的儿童打小就从家长和学校那里受到正确处理垃圾的教育。如果不按规定扔垃圾,就可能受到政府人员的说服和周围舆论的压力。日本居民扔垃圾真可谓一丝不苟,非常严格:废旧报纸和书本要捆得非常整齐,有水分的垃圾要控干水分,锋利的物品要用纸包好,用过的喷雾罐要扎一个孔以防出现爆炸。

    四是废物利用,节能环保。

      分类垃圾被专人回收后,报纸被送到造纸厂,用以生产再生纸,很多日本人以名片上印有“使用再生纸”为荣;饮料容器被分别送到相关工厂,成为再生资源;废弃电器被送到专门公司分解处理;可燃垃圾燃烧后可作为肥料;不可燃垃圾经过压缩无毒化处理后可作为填海造田的原料。日本商品的包装盒上就已注明了其属于哪类垃圾,牛奶盒上甚至还有这样的提示:要洗净、拆开、晾干、折叠以后再扔。

    启示:

      他山之石,可以攻玉。日本的上述事例给我们很多启示。仅就垃圾分类而言,我国大部分地区的硬件还远不能与其相比,但更大的差距恐怕还是在软件上,即在于政府和民众对垃圾分类的认识上,在于政府关于垃圾分类的制度建设上,也在于每个市民对垃圾分类的认真细致精神和环保节能意识上。由此引申开来,只有大家都摒弃嫌麻烦的想法、大概其的思维习惯和安于中流的低标准,才有可能做到垃圾分类赶上世界先进水平,消灭城市管理中“三不管”的死角,有专人来治理脏、乱、差的现象。由此看来,垃圾分类,无疑给我们建设文明城市、培育文明意识树立了一个标杆——环保。

    如何做好垃圾分类?

    国家、政府机构

    从国家来看,应该制定严格的法律强制人们处理垃圾分类处理,颁布政策和要求并且加大对这方面的经济投入,利用媒体的进行宣传关于这方面的知识,让人们树立垃圾分类回收的意识。

    从政府来看,需要做的更加和精细和具体,分类精细,回收及时,把垃圾类别由原来的五类更细分为十类或更多,并给每个市民发了关于垃圾分类知识的手册,明确其条款。外国人到本国后,要到居住地政府进行登记,这时往往就会领到当地有关扔垃圾的规定。当他们入住出租房时,房东也许在交付钥匙的同时就一并交予扔垃圾规定。管理机关要及时进行总结和评价,制定完善的垃圾车行车路线和垃圾回收场的位置和管理,增加管理人员。

    家庭、个人

    家庭应该从家长出发,引导儿童学会垃圾分类,了解垃圾分类的整个流程,让其意识到垃圾分类的重要性。
    养成良好习惯,让儿童从小就从家长那里受到正确处理垃圾的教育。如果不按规定扔垃圾,就可能受到政府人员的说服和周围舆论的压力。从而形成良好的回收方式和回收方法,建立良好的流程和秩序。

    学校教育

    学校每学期应该针对垃圾分类展开一定时长的学习和讲座,在校园中严格实行垃圾分类,并带动学生在学校周边志愿服务,引导更多的人学习并遵守,学校也要建立一套鼓励机制,促进学生实践的动力。

    结束语

    垃圾分类,改善生态环境,
    千难万险,只需迎头赶上,
    同心协力,共建和谐社会。

    参考:
    百度百科:垃圾分类
    https://zhidao.baidu.com/question/646504442479314765.html

    展开全文
  • 华为云人工智能大赛·垃圾分类挑战杯召集了全国各地、各行业、各领域的开发者,在ModelArts开发平台上进行AI模型训练,力求精准识别垃圾种类,帮助居民做好分类。 就在上周的2019华为全联接大会上,本次大赛中最...
  • 模式分类 绪论

    千次阅读 2015-08-09 00:19:42
    模式分类,绪论
  • Wordpress 无刷新分类筛选/多重筛选

    千次阅读 2018-11-26 16:14:18
    也就是从后台文章列表获取文章(文章已经做好分类),以表格的形式展现出来 。默认展现全部分类。 访问者点击“中介类型”的下拉列表,选择某一分类,提交后下面的表格只展现该分类下的文章列表;在企业名称/服务...
  • 语义分类

    千次阅读 2018-05-23 09:43:30
    基于tensorFlow实现2018年01月17日 15:38:14阅读数:503中间经过了漫长的期末考试周,第二步拖了半个多月,终于把第二步做好了,使用了两种方法,现在我先主要介绍基于深度学习的方法GitHub代码点击此处。...
  • 如何快速对搜集到的信息进行分类

    千次阅读 2018-10-13 14:10:11
    今天的学习笔记我想通过代码分享给大家,不知道大家能不能get到我的点,这篇文章来自于偶然在知乎上看到的一个问题:个人知识管理如何做好分类管理,便于后面的学习利用? 里面有两张最重要的图片,这里贴出来分享给...
  • 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类领域特别...
  • 分类和聚类的区别

    2017-03-03 19:24:23
    在机器学习中,分类是一种有监督的学习,每个训练数据都已经做好标签,打上了标记。 比如预测一个人是否喜欢玩电脑游戏的问题。给出的训练数据的特征值包含年龄,性别,收入等, 并且每条数据都标注上是否喜欢玩...
  • 下游的传统分类手段3.Bert原生的分类器 写在前面: 自2018年来,Bert在多个NLP领域都取得了颠覆性的成绩,诸如词性标注、问答系统等等。它本身采用的依然是Transform的机制,但是对于文本它是双向编码表示,,也就是...
  • 一、最近在做机器学习分类问题的评价,写了一些代码和评价方法总的来说,用随机森林和其他分类做好分类后对混淆矩阵进行处理可以得到rr和kappa系数,此外对于二分类变量,还可以计算出roc曲线和auc面积,在对随机...
  • 第一部分:文本分类 训练文本分类器过程见下图: 文本分类问题: 给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个 文本分类应用: 常见的有垃圾邮件识别,情感分析 文本分类方向: 主要有二分类,...
  • 文档分类的实现原理

    千次阅读 2017-11-16 22:47:11
    文本分类是自然语言处理领域比较常见的一类任务,一般是给定多个文档类别,将文档或语句归类到某个类别中。其本质是文本特征提取+机器学习的多分类问题。解决此问题,最终实现文本分类预测的一般步骤总结如下。
  • 分类目录网站怎么做

    2020-11-07 16:07:55
    很多朋友都做了分类目录网站,试图通过目录网站做好关键词排名,获得流量然后就能够暴富了,其实现实是残酷的,很难,也基本不可能,能够月收入几千元已经非常不错了。并且是你做的非常好的前提下,才会有产生收入的...
  • 信息分类编码

    千次阅读 2013-03-05 09:16:28
    信息分类编码  信息分类编码(Information Classifying and Coding)是...美国新兴管理学的开创者莫里斯L· 库克(Morris L· Cooker)说:"只有当我们学会了分类和编码,做好简化和标准化工作,才会出现任何
  • 从决策树学习谈到贝叶斯分类算法、EM、HMM

    万次阅读 多人点赞 2012-05-17 21:06:53
    第一篇:从决策树学习谈到贝叶斯分类算法、EM、HMM (Machine Learning & Data Mining交流群:8986884)引言 最近在面试中,除了基础 & 算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道...
  • ZOJ 分类

    万次阅读 2013-03-16 10:47:46
    ZOJ题目分类 初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 1334 1337 1338 1350 1365 1382 1383 1394 1402 1405 1414 1494 1514 1622 1715 1730 1755 1760 ...
  • BIM软件分类

    千次阅读 2017-09-26 16:53:01
    在CAD时代,设计院的图纸文档管理都没有做好,施工单位的项目管理也很乱,甲方做建成之后的运营维护管理只是招募一家物业公司(物业管理是设施管理的一小部分)而已,再次改造装修时由装饰公司重新画CAD图,于是,...
  • 使用 ResNet 50 训练一个「垃圾分类器」。
  • 文本多任务分类

    千次阅读 2019-01-02 19:39:46
    文本分类是一个很普遍问题,但是往往同一个数据源有多个category需要进行分类。面对这样问题,人本能会只看一次数据,同时对两个任务做分类,那么机器学习的方法是否也可以实现“看一样做多个任务分类”任务呢。答案...
  • 自然语言处理分类

    千次阅读 2020-08-21 16:20:32
    Nlp基本分类 NLP领域的任务分为两个类别: 第一类是人工智能NLP。包括词性标注,分词,语法解析,语言模型,信息检索,信息抽取,语义表示,文本分类。这些任务发展较为成熟,各种相关工作的主要目的是提高当前...
  • 【图像分类】华为云·垃圾分类亚军方案分享

    千次阅读 热门讨论 2019-10-04 13:00:03
    今年7月多结束魔镜杯后,将之前的内容整理了一下,刚好看到华为垃圾分类比赛,由于我的工作内容还是偏图像,所以就想玩玩,有幸拿了一个亚军。 这次比赛是基于华为云的modelArts平台,免费的gpu硬件环境,全新的结果...
  • 垃圾分类:人机搭配,干活不累

    千次阅读 2019-06-28 15:51:33
    场景描述:垃圾分类最近成为上海最受关注的话题,市民们已经快被繁杂的垃圾类别逼疯。不过,人工智能技术早已学会了垃圾分类。通过深度学习、神经网络,训练机械臂像人一样识别垃圾进行分类,效率远高于人工分类,也...
  • 图像分类与检测概述

    千次阅读 2018-10-11 14:13:34
    图像分类与检测是现今计算机视觉处理中最为常见的两项任务,本文尽量综述一下传统的图像分类与检测与现今的图像分类与检测技术。以下是要讲的几个方面: 图像分类与检测概述 传统的图像分类与检测方法 现今的图像...
  • 然后发优质外链,再交换优质友情链接,这样排名上升速度非常快,但是很多朋友都不会怎么找分类目录,也找不到优质免费收录的分类目录,下面博主就分享给发夹30多个免费收录网站的分类目录,帮助你们快速做好seo!...
  • 利用朴素贝叶斯进行新闻文本分类

    千次阅读 2018-09-19 15:50:44
    初探文本分类,本文使用的数据是5000条中文新闻文本数据,目的是使用朴素贝叶斯算法,对中文新闻文本进行分类预测。流程如下: 文本数据载入及清洗 搜狗新闻数据源:http://www.sogou.com/labs/resource/ca.php ...
  • 低碳生活已成为全世界的主流,保护环境是每一个地球公民的义务,今天分享的是一份来自办公资源...如何做好垃圾的分类分类处理垃圾;废物利用;改变生活习惯;减少垃圾制作模板展示:以上就是垃圾分类主题班会的PP...
  • 教程4:图像分类

    2019-01-16 11:59:17
    所谓图像分类问题,就是已有固定的分类标签集合,然后对于输入的图像,从分类标签集合中找出一个分类标签,最后把分类标签分配给该输入图像。虽然看起来挺简单的,但这可是计算机视觉领域的核心问题之一,并且有着各...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,144
精华内容 28,457
关键字:

做好分类