zoukankan      html  css  js  c++  java
  • 文本分类思维导引

    文本分类
    机器学习方法(2012前) 特征+分类器
     
    正则
     
    词典
     
    词典:同义词扩展
     
     
    数据结构:布隆过滤器
     
     
    语义反转:程度词,否定词,问句
     
    特征工程
     
    统计表征: TFIDF,BOW,TextRank等
     
     
    语义表征:LDA,LSI(统计+降维)词向量(后话)
     
    分类器
     
    LR,SVM,GBDT
     
    深度学习方法(2013-2017年) 词向量+端到端
    词向量
    word2vec
     
    两种建模方法:CBOW和SG
     
     
    两种解决大规模词表训练的trick:负采样和层级softmax
     
    GloVe
     
    1.词共现矩阵分解; 2.与word2vec的等价性证明:neural-word-embedding-as-implicit-matrix-factorization(nips 2014)
     
    Fasttext
     
    考虑了OOV的解决: 1 找到每个词的N-grams,_compute_ngrams函数 2 然后与n-grams词库进行匹配 3 匹配到的n-gram向量平均即为最后的输出值
     
    fasttext
     
    最简单的文本分类模型,均值池化+softmax,考虑了OOV,简单任务效果还行非常快
     
    CNN
     
    TextCNN为代表的模型,在语序无关任务上表现很好,如脏话识别
     
     
    演进了一些列CNN:DPCNN,VDCNN,在词向量没有进步的情况下,实测中效果都很一般
     
     
    WWW2017出现了Graph-CNN的,使用词共现图采样子图,相当于改变了语序和语句采样,目测只适合主题分类,没有本质的变化
     
    RNN/LSTM
     
    RNN的演进:RNN-LSTM-GRU
     
     
    池化方法的演进:attention
     
    capsule
     
    暂且不表
     
    深度学习方法(2017年后) 预训练语言模型
    ElMo
     
    NAACL 2018 bestpaper预训练语言模型的开山之作
     
     
    使用维度很大的两层bi-LSTM(4096 hidden)进行大规模语料的语言模型预训练:慢还效果相对不好
     
    GPT
     
    使用transformer替换LSTM
     
    Bert
     
    改进1.wordpiece:有效解决了oov
     
     
    改进2.双向,体现在MLM预训练任务上,不是简单的顺序语言模型
     
     
    MLM可以从任何方向去预测这些挡上的词,而不仅仅是单向的。但是这样做会带来两个缺点:1)预训练用[MASK]提出挡住的词后,在微调阶段是没有[MASK]这个词的,所以会出现不匹配;2)预测15%的词而不是预测整个句子,使得预训练的收敛更慢。但是对于第二点,作者们觉得虽然是慢了,但是效果提升比较明显可以弥补。
     
    XLNET
     
    长文档优化:相对位置编码以及分段RNN机制
     
     
    扩大数据集:16G-> 19G和78G
     
    Robert
     
    修改了BERT原有的训练策略:动态MASK,删除NSP,BPE的粒度变细
     
     
    引入了更大的新数据集16GB->160GB
     
    albert
     
    压缩bert参数,使用了矩阵分解和共享参数两个trick
     
     
    实际上并不减少inference的计算图深度,不能省时间
     
    GPT-2
     
    在GPT基础上变大:增加数据集,网络参数,增大词汇表和上下文长度
     
     
    似乎想证明:只要够大,我就可以超越Bert
     
    GPT-3
     
    1750亿参数VS Bert3亿参数,数据集500GB VS bert 16GB
     
     
    似乎想证明:只要学习了地球上所有的文本,我就可以通过图灵测试
     
     
    ...
     
    难点
     
    输入层面:短文本->长文本和超长文本
     
     
    标签层面:复杂语义识别:如阴阳怪气
     
     
    时间演化:川普VS 川普,开车VS开车
     
     
    上下文:美食论坛苹果小米黑莓 VS手机论坛苹果小米黑莓
     
    演进路径
     
    明线:统计-机器学习-深度学习-更深的深度学习
     
     
    暗线1:简单表达-语义表达-上下文语义表达
     
     
    暗线2:特征输入粒度 从词到BPE
     
     
    暗线3:预训练权重从输入层扩展到网络结构
     
     
    暗线4:自回归派和自编码派的爱恨情仇
     
     
    暗线5:短文档到长文档
     
    算法选型
    定义任务难度的三个维度
    数据量
     
    one/zero shot VS 海量
     
    非线性
     
    阴阳怪气 VS 垃圾邮件
     
     
    反义疑问句 VS 体育财经分类
     
    类间距离
     
    细粒度的情感分类 VS 正负情感
     
     
    典型难度排序:主题分类-情感分类-意图识别-细粒度情感识别-复杂语义识别(如阴阳怪气)
     
    推荐算法选型
     
    Fasttext(垃圾邮件/主题分类)
     
     
    TextCNN(主题分类/领域识别)
     
     
    LSTM(情感分类/意图识别)
     
     
    Bert(细粒度情感/阴阳怪气/小样本识别)
     
    结合业务的思考
     
    1. NLP最最基本的任务,其技术和方法成熟,数据(X和Y)更重要
     
     
    2. 方法之间的绝对差距不大,尤其对于简单任务,可能就是0.95和0.93的区别
     
    3. 精度很容易在当前监督数据(X,Y)下摸到天花板,思考一些别的方向
     
    新意图发现
     
     
    类别空间设计
     
     
    长尾优化
     
    类比基础算法能力的迭代
     
    识别/检测/分隔
     
     
    NER
     
     
    时刻记着自己要成为什么样的人!
  • 相关阅读:
    项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)
    Git 更安全的强制推送,--force-with-lease
    WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则
    冷算法:自动生成代码标识符(类名、方法名、变量名)
    自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference
    如何快速编写和调试 Emit 生成 IL 的代码
    使用 Emit 生成 IL 代码
    UWP 流畅设计中的光照效果(容易的 RevealBorderBrush 和不那么容易的 RevealBackgroundBrush)
    使用 GitVersion 在编译或持续构建时自动使用语义版本号(Semantic Versioning)
    语义版本号(Semantic Versioning)
  • 原文地址:https://www.cnblogs.com/demo-deng/p/14833174.html
Copyright © 2011-2022 走看看