文本分类和序列标注“深度”实践

©PaperWeekly 原创 · 作者|周晓江

研究方向|文本分类、文本聚类

本文的主要目的是推广 UNF 代码库,该代码库由笔者在实际工作中做文本分类和序列标注的相关经验抽象而来,欢迎 fork 和交流。

项目地址:https://github.com/waterzxj/UNF

全文分三部分,第一部分是相关动机,介绍这个项目为什么会出现;第二部分是理论分析部分,通过近些年一些顶会论文来简要梳理文本分类和序列标注两个任务的发展脉络;第三部分是实践部分,也是本文最重要的部分,会介绍笔者实现的一个通用代码库,方便实现上述理论部分的模型,并且提供基础组件方便应用者做二次开发,详细的介绍会放到实践部分介绍。

项目动机

文本分类和序列标注是入门 NLP 最好的两个任务,覆盖了常用 NLP 任务的流程,因此掌握了这两个任务,也能方便的拓展到其他任务。

笔者搜索了网上这两个任务相关的项目,发现一个痛点:项目太单一,不够系统化,这里的系统化是说涵盖理论介绍,高效的算法实现,到工程化的 server 以及可视化 web 界面(通常一个算法从研究到落地必经的几个环节)。于是,笔者决定自己动手解决这一痛点。

理论分析

文本分类相关理论 

这部分将通过 6 篇顶会论文,简要介绍文本分类领域是如何从最初的浅层的 CNN 发展到深层的 CNN,到如何在 LSTM 中有效结合 attention 结构,再到结合 label-embedding 的 zero-shot 文本分类,最后是当下比较火的基于 transformer 的文本分类。因为本文的重点是工程实践部分,所以详细的论文介绍读者可以直接参考原 paper。

论文标题:Convolutional Neural Networks for Sentence Classification

论文链接:https://arxiv.org/abs/1408.5882

源码链接:https://github.com/yoonkim/CNN_sentence

TextCNN 分类算法的核心架构如上图表示所示。算法通常通过四步完成:

  • 将原始的 one-hot 文本经过 word embedding 变成稠密的向量表示;

  • 经过一层 1 维的卷积层,可选择多个 filter,每个 filter 表示一个特征;

  • 对上一步得到的每个卷积向量做 max-pooling 操作,最后每一个卷积得到一维向量,把所有的 max-pooling 结果 concat 起来,最终得到句子的向量表示;

  • 将句子向量经过一层全连接层,然后过 softmax-loss。

论文标题:Deep Pyramid Convolutional Neural Networks for Text Categorization

论文链接:https://www.aclweb.org/anthology/P17-1052

源码链接:https://github.com/riejohnson/ConText

DpCNN 分类算法在 TextCNN 的基础上引入了多层 CNN 的机制,主要是为了解决语言中长距离语义关系捕获的问题,并且经过精心设计的网络结构在算法复杂度上是常数,并不会因为网络的加深而增加复杂度。整个网络结构如上图所示。

DpCNN 算法的关键点: 

reigion embedding:region embedding 可以看做是在原始的 word embedding 基础上先做了一层浅层的 TextCNN,不过论文中没有保留词序的信息,作者通过实验证明了原始的 TextCNN 的做法更加容易过拟合。 

等长卷积:等长卷积物理意义是序列信息经过卷积层之后是等长输出的,表示输出的每个词都建模了这个词左右 n/2 个词的语义信息。 

堆叠卷积层:为了能解决长距离语义特征的问题,作者采用了加深卷积层来解决。然而"Do Convolutiona

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值