# TextClassifier **Repository Path**: km601/TextClassifier ## Basic Information - **Project Name**: TextClassifier - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-07-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文本分类项目 > 作者:杨夕 > > github:https://github.com/km1994/ ## 简介 本项目为基于TextCNN,TextRNN 、TextRCNN、Bi-LSTM + Attention、Adversarial LSTM、Transformer和NLP中预训练模型构建的多个常见的文本分类模型。 ## requirements - python >= 3.6 - tensorflow == 1.x ## 文件目录 - data/:数据集 - layers/ : 模型 - textrnn.py - textcnn.py - BiLSTMAttention.py - AdversarialLSTM.py - Transformer.py - model/ : 模型保存路径 - summarys/ :tensorboard - tools/ :工具目录 - metrics.py:评估函数 - utils.py:数据预处理 - train_word2vec_model.py:词向量预训练 - fastTextStudy.ipynb:fastText 模型 - config.py:参数配置 - TextClassifier.ipynb:主模块(项目入口) - predict.py:预测 ## 方法介绍 ### word2vec 词向量预训练 #### 介绍 该方法来自于论文 【[T. Mikolov, I. Sutskever, K. Chen, G. Corrado, and J. Dean. Distributed Representations of Words and Phrases and their Compositionality. NIPS 2013](https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf)】、【[Le Q, Mikolov T. Distributed representations of sentences and documents[C]//International Conference on Machine Learning. 2014: 1188-1196.](https://arxiv.org/abs/1405.4053)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727223323.png) - CBOW - CBOW 是用上下文预测这个词 - 举例:以 {“The”, “cat”, “over”, “the”, “puddle”} 为上下文,能够预测或产生它们中心的词语”jumped”。模型输入为 x(c),模型输出为 y,y 就是中心词 ‘jumped’。对于每个词语 wi 学习了两个向量。 - Skip-gram - Skip-gram 是预测一个词的上下文 - 举例:以中心的词语 ”jumped” 为输入,能够预测或产生它周围的词语 ”The”, “cat”, “over”, “the”, “puddle” 等。这里我们叫 ”jumped” 为上下文。我们把它叫做Skip-Gram 模型。 - 具体介绍:【[从one-hot到word2vec](book/从one-hot到word2vec.pdf)】 ### fastText 文本分类 #### 介绍 fastText 是Facebook 在2016年提出的一个文本分类算法,原理可参照下面论文【[LBag of Tricks for Efficient Text Classification](https://arxiv.org/pdf/1607.01759.pdf)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727224807.png) 模型结构如下图所示,每个单词通过嵌入层可以得到词向量,然后将所有词向量平均可以得到文本的向量表达,在输入分类器,使用softmax计算各个类别的概率。 需要注意以下几个问题,: - fastText没有使用预先训练好的词嵌入层; - 当类别很多时,fastText使用hierarchicla softmax加快计算速度; - fastText采用n-gram额外特征来得到关于局部词顺序的部分信息,用hashing来减少N-gram的存储。 关于如何使用n-gram来获取额外特征,这里可以用一个例子来说明: 对于句子:“我 想 喝水”, 如果不考虑顺序,那么就是每个词,“我”,“想”,“喝水”这三个单词的word embedding求平均。如果考虑2-gram, 那么除了以上三个词,还有“我想”,“想喝水”等词。对于N-gram也是类似。但为了提高效率,实际中会过滤掉低频的 N-gram。否则将会严重影响速度 - 具体介绍: - 【[fastText介绍](book/fastText介绍)】 ### TextCNN 文本分类 #### 介绍 该方法来自于论文 【[Convolutional Neural Networks for Sentence Classification](https://arxiv.org/abs/1408.5882)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727214604.png) 该论文提出的三种feature size 的卷积核可以认为是对应了3-gram,4-gram和5-gram 。整体模型结构如下,先用不同尺寸(3, 4, 5)的卷积核去提取特征,在进行最大池化,最后将不同尺寸的卷积核提取的特征拼接在一起作为输入到softmax中的特征向量。 ### TextRNN 文本分类 #### 介绍 该方法来自于论文 【[Recurrent Neural Network for TextClassification with Multi-Task Learning](https://arxiv.org/abs/1605.05101)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727215358.png) 结构:降维--->双向lstm ---> concat输出--->平均 -----> softmax ### Bi-LSTM + Attention 文本分类 #### 介绍 该方法来自于论文 【[Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification](http://aclweb.org/anthology/Y/Y15/Y15-1009.pdf)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727215616.png) Bi-LSTM + Attention 就是在Bi-LSTM的模型上加入Attention层,在Bi-LSTM中我们会用最后一个时序的输出向量 作为特征向量,然后进行softmax分类。Attention是先计算每个时序的权重,然后将所有时序 的向量进行加权和作为特征向量,然后进行softmax分类。在实验中,加上Attention确实对结果有所提升。 ### RCNN 文本分类 #### 介绍 该方法来自于论文 【[Recurrent Convolutional Neural Networks for Text Classification](https://arxiv.org/abs/1609.04243)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727215740.png) RCNN 整体的模型构建流程如下: - 1)利用Bi-LSTM获得上下文的信息,类似于语言模型。 - 2)将Bi-LSTM获得的隐层输出和词向量拼接[fwOutput, wordEmbedding, bwOutput]。 - 3)将拼接后的向量非线性映射到低维。 - 4)向量中的每一个位置的值都取所有时序上的最大值,得到最终的特征向量,该过程类似于max-pool。 - 5)softmax分类。 ### Adversarial LSTM 文本分类 #### 介绍 该方法来自于论文 【[Adversarial Training Methods For Semi-Supervised Text Classification](https://arxiv.org/abs/1605.07725)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727215928.png) 上图中左边为正常的LSTM结构,右图为Adversarial LSTM结构,可以看出在输出时加上了噪声。   Adversarial LSTM的核心思想是通过对word Embedding上添加噪音生成对抗样本,将对抗样本以和原始样本 同样的形式喂给模型,得到一个Adversarial Loss,通过和原始样本的loss相加得到新的损失,通过优化该新 的损失来训练模型,作者认为这种方法能对word embedding加上正则化,避免过拟合。 ### Transformer 文本分类 #### 介绍 该方法来自于论文 【[Attention Is All You Need](hhttps://arxiv.org/abs/1706.03762)】 #### 思路介绍 ![糟糕!图片都去哪了?](data/img/微信截图_20200727220141.png) - Transformer 整体结构: - encoder-decoder 结构 - 具体介绍: - 左边是一个 Encoder; - 右边是一个 Decoder; 【[【关于Transformer】 那些的你不知道的事](https://gitee.com/km601/nlp_paper_study/tree/master/transformer_study/Transformer)】