zoukankan      html  css  js  c++  java
  • 学界 | Yann LeCun新作,中日韩文本分类到底要用哪种编码?

    https://www.wxwenku.com/d/102093756

    AI科技评论按:前几天,Yann LeCun与其学生 张翔在arXiv上发表了一篇新作「Which Encoding is the Best for Text Classification in Chinese, English, Japanese and Korean?」。这篇文章做了一个包含473种模型的大型对比实验,实验的目的是对文本分类任务中不同语言(英语、汉语、韩语和日语)不同的level(utf-8 、字符等)和不同的encoding(bag-of-words等)在不同模型(linear models、fastText、ConvNets等)中组合使用的效果进行测试,得到了一系列有参考价值的结论。本文中 AI 科技评论将对这篇论文进行详细分析。

    文本分类是自然语言处理中最普遍的一个应用,例如文章自动分类、邮件自动分类、垃圾邮件识别、用户情感分类等等,在生活中有很多例子。但是由于不同语言之间差别很大(例如像汉语、韩语、日语这样的CJK语言与英语这样的字母语言在处理上有很大不同)。例如最近有人使用字符级编码的神经网络(ConvNets)来处理语言中的单词分割问题,但是很不幸的是,用字符来处理CJK语言并不很好,因为这时候字符的数量会变得非常巨大。所以能否找到一种在处理所有这些自然语言上都表现优良的模型呢?作者的方法就是,列出一系列模型(473个), 然后比较它们的表现。

    一、数据集(data sets)

    这篇文章考虑了4种语言,分别为汉语、英语、日语和韩语。作者分别从大众点评(汉语,餐饮)、京东(汉语,网店)、Rakuten(网店,日语)、11st(网店,韩语)、Amazon(英语,网店)、凤凰网(汉语,新闻)、中国日报(汉语,新闻)、NYnews(英语,新闻)等八个网站爬取了8个情感分类数据集。其中京东、Rakuten、11st和Amazon的数据集又分为全五星分类和双分法类(1、2星为负,3星舍弃,4、5星为正)。另外因为这四个网站都是网店类型,所以可以用它们来组合成两个joint数据集(全五星和双分法),这两个数据集由于是混合了四种语言,所以可以用来检测模型处理不同语言的能力。综上共有14个情感分类的数据集。

    二、编码级别(encoding level)

    所谓编码级别,简单说就是考虑文本分析时的最小单位。在文中提及的编码级别包括:字符(characters)、UTF-8(byte)、罗马化字符(romanized characters)、词(words)、罗马化词(romanized words)等。

     

    三、编码机制(encoding Mechanism)

    本文选择的深度学习模型为卷积网络模型(ConvNets),根据网络层数分为large Net(12层)和small Net(8层)。在卷积网络模型训练中,必须对文本进行编码机器才能识别。在这篇文章中包含三种编码机制,分别为:字符字形编码(Character Glyph)、独热编码(One-hot Encoding)、嵌入编码(Embedding)。

    1、字符字形编码(Character Glyph)

    所谓字形就是在读写中可以识别的一个符号,例如汉字中的笔画“丿”或英语中的“a”,都是一个可识别的字形。在这篇文章中作者将每一个字形转化成一个16*16的像素点阵。很明显这种编码机制对于CJK语言(字符较为丰富)非常合适。不过这种方式只能在字符级进行,所以只能构建出一种卷积网络模型,称之为GlyphNet。

    2、独热编码(One-hot Encoding)

    独热码, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。例如,有6个状态的独热码状态编码为:000001,000010,000100,001000,010000,100000。如果是英文字母的编码,那么就需要状态码长度为26了。独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了译码逻辑。但是,很显然,如果字符数量非常多(CJK语言)的情况下,独热码的码长就会非常大。不过在这篇文章中,作者考虑了两种方式来解决这个问题:第一种是将所有的文本(UTF-8)看成是一个字节序列,在字节层次进行编码,构建的卷积网络模型称之为byte-level OnehotNet;第二种是将文本罗马化,也即用英语字母来编码(值得注意的是,这种方式等价于用罗马化文本在字节层次进行编码),构建的卷积网络模型称之为Romanization OnehotNet。字节级处理的优势在于,它们可以应用到任何一种语言当中,无论这种语言在字符或者字体级别有多少实体,所以它们也可以很容易地应用到CJK语言当中。

    3、嵌入编码(Embedding)

    所谓嵌入码,即将每一个实体用一个固定长度的向量来表示。比如,对于“A B A C B F G”这样的一个序列,也许我们最后能得到:A对应的向量为[0.1 0.6 -0.5],B对应的向量为[-0.2 0.9 0.7]  (此处的数值只用于示意)。由于这种向量表示是随机的初始化的,它不像独热码那样严格,所以相比独热码它在内存中会更小。另外一个优点就是它可以应用到任何编码级别。所以在本文当中,作者使用嵌入编码从字节、字符、单词、罗马化字符、罗马化单词等不同的编码级别来分别编码比较,嵌入码向量长度都为256。

    通过这种方式构建的卷积网络模型称之为EmbedNet。这种模型编码可以分别在characters、byte、romanized characters、words、romanized words五个级别进行,所以共有五种模型。

    综上所述,共有(1+2+5)*2=16种卷积网络模型。

    三、线形模型和fastText模型

    除了卷积网络模型外,在这篇文章中作者还选取了线形模型(linear model)和fastText模型进行对比。

    1、线形模型(linear model)

    传统的文本分类方法的流程就是人工设计一些特征,从原始文档中提取特征,然后指定分类器如LR、SVM,训练模型对文本进行分类。比较经典的特征提取方法如频次法(文章中用plain表示)、TF-IDF等。所谓频次法顾名思义就是记录和统计每个文本中实体(例如character、word、romanized word)的次数分布,以此来分类。但是有些词如“的”“了”等虽然出现的次数比较多,但实际并没有意义。所以就提出了另一种线形模型TF-IDF。TF即term frequency,仍然表示项目在文本中出现的频次,但加入了IDF(inverse document frequency)的权重,在全部文档中出现频次越大,该term在样本中的IDF就越小。于是TF*IDF就可以作为一个项目的统计结果了,这要比简单的频率统计更为准确。

    2、fastText模型

    fastText模型是2016年Joulin等人提出的一个快速分类模型。该模型并入了分层softmax和特征散列等技巧,这种模型能够以ConvNets模型几个数量级的速度处理输入文本。本质上fastText模型就是一个没有非线性的2层全连接神经网络。

    在以上这两个模型中,作者选择了character、word、romanized word三种编码级别,但是还有一个问题没有解决,即以多大的单位进行统计/判断?这就涉及到一个概念: n-gram。它的意思就是将给定文本转化为长度为n的项目(term)的序列。例如“你今天休假了吗”,它的2-gram依次是:“你今,今天,天休,休假,假了,了吗”。作者为线形模型选择了1-gram和5-gram两种,为fastText模型选择了1-gram、2-gram和5-gram。

    综上所述,作者共构建了3*2*2=12种线形模型和3*3=9种fastText模型。

    四、结果

    针对以上四种语言,汉语、日语、韩语以及joint共11个数据集,每个数据集都有37个模型;英语的3个数据集,每个有22个模型。总计有473个模型参与到对比中。表格中的数据表示训练误差的百分比。

     

    另外每一种模型所花费的时间也是不一样,其量级差别非常大。作者通过对joint 二分数据集的100万个样本进行训练得到下面这个对比数据。这个对比只是作为参考,具体情况会根据计算环境而变。

     

    五、结论

    通过比较以上表格中的误差率,作者得出以下结论:

    1、fastText模型对中、日、韩文本(CJK语言文本)在character级编码的处理结果更好;而对英语文本则在word级编码的处理结果更好;

    2、对于fastText和线性模型,CJK语言的word级编码在没有完美分割的情况下效果相当;

    3、卷积网络的最佳编码机制是byte级独热编码(byte-level one-hot encoding)。 这表明卷积网络能够从低级别的表示中理解文本,并提供了一致的和统一的方式来处理多种语言。

    4、fastText相比于卷积网络更倾向于过拟合,而相比于线形模型也并没有表现出更多的表示能力(representation capacity)。

    当然,尽管作者在此列了473种模型进行对比,但仍不是全部。例如深度学习模型本文只用了卷积网络模型,但其实还有别的一些有意思的模型,例如周期性网络(recurrent networks)等。作者似乎计划在之后会对周期性网络进行研究,同时还会改进卷积网络模型,看会有什么样的效果。

    AI 科技评论消息,据说论文中用到的源代码和数据集随后将全部公布。

    论文下载:https://arxiv.org/pdf/1708.02657.pdf

  • 相关阅读:
    龙井和碧螺春的功效与作用
    064 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 无参带返回值方法
    063 01 Android 零基础入门 01 Java基础语法 08 Java方法 01 无参无返回值方法
    062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用
    061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结
    060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序
    059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环
    058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值
    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/7459204.html
Copyright © 2011-2022 走看看