文本分类实战——文本分类流程

文本分类实战--文本分类流程

    • 1.数据收集
    • 2.探索数据及文本预处理
      • 2.1 分词
      • 2.2 去停用词
    • 3.选择方向
      • 3.1 谷歌文本分类指南
    • 4.特征工程
      • 4.1 文本表示
      • 4.2 特征提取
        • 4.2.1 TF-IDF
        • 4.2.2 word2vec
    • 5.训练分类器
    • 6.评测方法
    • 7.调优参数

笔者只是NLP入门,现正在参加一些文本挖掘类竞赛,根据学习过程做笔记,后续按目录顺序将详细记录学习过程并附带上所有流程源代码,逐步完善,保持更新

1.数据收集

途径有爬虫,官网api等途径。
数据集需注意一下几点

  • 数据的每个类的样本数量均衡,不要过度失衡
  • 训练样本越多越好,对于模型的泛化能力有帮助
  • 确保样本充分覆盖了可能的输入空间,而不仅仅是覆盖常见的情况

2.探索数据及文本预处理

观察自己的数据的特征,再根据需求对文本进行相应的预处理,实际需求不同,如果直接使用常规预处理不一定能得到很好的结果。

2.1 分词

分词的方法有以下几种

  1. 基于词典的分词
    原理:将文档中的字符串与词典中的词条进行逐一匹配, 如果词典中找到某个字符串, 则匹配成功, 可以切分, 否则不予切分。基于词典的机械分词法, 实现简单, 实用性强, 但机械分词法的最大的缺点就是词典的完备性不能得到保证。据统计, 用一个含有70 000 个词的词典去切分含有15 000 个词的语料库, 仍然有30% 以上的词条没有被分出来, 也就是说有4500 个词没有在词典中登录
    工具:jieba,Hanlp
  2. 基于统计的分词
    基于统计的分词法的基本原理是根据字符串在语料库中出现的统计频率来决定其是否构成词。词是字的组合, 相邻的字同时出现的次数越多, 就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映它们成为词的可信度。
  3. 基于理解的分词
    其基本思想就是在分词的同时进行句法、语义分析, 利用句法信息和语义信息来进行词性标注, 以解决分词歧义现象。因为现有的语法知识、句法规则十分笼统、复杂, 基于语法和规则的分词法所能达到的精确度远远还不能令人满意, 目前这种分词系统还处在试验阶段。(来源网络)

2.2 去停用词

是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。但是,并没有一个明确的停用词表能够适用于所有的工具。甚至有一些工具是明确地避免使用停用词来支持短语搜索的。(百度百科)

分享一个我个人收集的中文停用词表
https://github.com/Ricardo-h/NLP

但并不是所有文本分类任务都需要去停用词,而且一味套用开源的去停用词表反而不好,需要实际情况实际分析。

3.选择方向

3.1 谷歌文本分类指南

以下内容来自谷歌公司的总结,新智元翻译,知乎链接https://zhuanlan.zhihu.com/p/40541403?utm_source=wechat_session&utm_medium=social&utm_oi=928531897783566336

  1. 计算样本的数量/每个样本中单词的数量这个比率。
  2. 如果这个比率小于1500,那么将文本标记为n-grams并使用简单的MLP模型进行分类(下面的流程图的左边分支):
    a. 将样本分解成word n-grams;把n-grams转换成向量。
    b. 给向量的重要性打分,然后根据分支选择前20K。
    c. 构建一个MLP模型。
  3. 如果比率大于1500,则将文本标记为序列,并使用sepCNN模型进行分类(流程图右边分支):
    a. 将样本分解成单词;根据频率选择前20K的单词。
    b. 将样本转换为单词序列向量。
    c. 如果原始样本数/每个样本的单词数这个比率小于15K,则使用微调的预训练sepCNN模型,可能得到最优的结果。
  4. 用不同的超参数值来测量模型的性能,以找到数据集的最佳模型配置。

文本分类实战——文本分类流程_第1张图片
此流程图回答了两个关键问题:

我们应该使用哪种学习算法或模型?
我们应该如何准备数据,才能有效地学习文本和标签之间的关系?
第二个问题的答案取决于第一个问题的答案;我们预处理数据的方式将取决于我们选择的模型。模型可以大致分为两类:使用单词排序信息的模型(序列模型),以及仅将文本视为单词的“bags”(sets)的模型(n-gram模型)。

序列模型包括卷积神经网络(CNN),递归神经网络(RNN)及其变体。 n-gram模型包括逻辑回归,简单多层感知机(MLP或全连接神经网络),梯度提升树( gradient boosted trees)和支持向量机(SVM)。

在实验中,我们观察到“样本数”(S)与“每个样本的单词数”(W)的比率与模型的性能具有相关性。

当该比率的值很小(<1500)时,以n-gram作为输入的小型多层感知机(选项A)表现得更好,或者说至少与序列模型一样好。 MLP易于定义和理解,而且比序列模型花费的计算时间更少。

当此比率的值很大(> = 1500)时,我们就使用序列模型(选项B)。在接下来的步骤中,你可以根据这个比率值的大小,直接阅读所选模型的相关章节。

对于我们的IMDb评论数据集,样本数/每个样本的单词数的比值在144以下。这意味着我们将创建一个MLP模型。

4.特征工程

4.1 文本表示

主要文本方法有两种

  • 词袋模型(也叫向量空间模型)
    向量空间模型有词频矩阵模型,TFIDF矩阵模型,两者都是单词向量空间,基于语义的LDA方法则是扩展的话题向量空间模型,另外3.1中说得N-gram语言模型中的特例1-gram模型即词袋模型,还有One-hot编码也属于词袋模型
  • 词向量模型
    word2vec,glove等

4.2 特征提取

不同的文本表示方法就有相应特征提取方法

4.2.1 TF-IDF

词袋模型一般使用TF-IDF算法作为特征提取

4.2.2 word2vec

5.训练分类器

训练分类器有两大类方法,分别是传统机器学习算法和深度学习算法
机器学习算法:

  • 逻辑回归
  • 朴素贝叶斯
  • 支持向量机
  • KNN
  • xgboost

深度学习:

  1. FastText
  2. TextCNN
  3. TextRNN
  4. TextRNN+Attention

6.评测方法

  • F1score

7.调优参数

分享几个很好的参考
1.
https://mp.weixin.qq.com/s?__biz=MzI1MzY0MzE4Mg==&mid=2247486356&idx=1&sn=b0dd573fcb05dc9410fd21a1c4a0b132&chksm=e9d01b55dea7924379a655f1c61be7039450ae8917f4556a7e80519cfe0d5c26a57c37aece95&mpshare=1&scene=1&srcid=0322YhzavXurT3K0Qn11drL1&sharer_sharetime=1584857528154&sharer_shareid=251381b879dfa09309c578ce0809b911&exportkey=A42Snl%2FnWCQkrJYBjbb8Qaw%3D&pass_ticket=Gvz2M6S8LmsAwUSQnCJpoi7GzO%2BNqM%2Fsj9UCHmIg49KV0f6b6VQuuqbsXKh84oMm#rd

https://zhuanlan.zhihu.com/p/25928551?utm_source=wechat_session&utm_medium=social&utm_oi=928531897783566336

你可能感兴趣的:(#,NLP)