# text-antispam **Repository Path**: gmirror/text-antispam ## Basic Information - **Project Name**: text-antispam - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-12-03 - **Last Updated**: 2021-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 产品级垃圾文本分类器 ### 注意事项: 垃圾文本分类器所用到的tensorflow版本为2.2.0。 需要[**TensorLayer2.0+**](https://github.com/tensorlayer/tensorlayer)版本,建议从GitHub源码下载。 --- ### 任务场景 文本反垃圾是网络社区应用非常常见的任务。因为各种利益关系,网络社区通常都难以避免地会涌入大量骚扰、色情、诈骗等垃圾信息,扰乱社区秩序,伤害用户体验。这些信息往往隐晦,多变,传统规则系统如正则表达式匹配关键词难以应对。通常情况下,文本反垃圾离不开用户行为分析,本章只针对文本内容部分进行讨论。 为了躲避平台监测,垃圾文本常常会使用火星文等方式对关键词进行隐藏。例如: ``` 渴望 兂 极限 激情 恠 燃烧 加 涐 嶶 信 lovexxxx521 亲爱 的 看 頭潒 约 私人 企鹅 ⓧⓧⓧ㊆㊆⑧⑧⑧ 给 你 爽 你 懂 的 ``` 垃圾文本通常还会备有多个联系方式进行用户导流。识别异常联系方式是反垃圾的一项重要工作,但是传统的识别方法依赖大量策略,攻防压力大,也容易被突破。例如: ``` 自啪 试平 n 罗辽 婊研 危性 xxxx447 自啪 试平 n 罗辽 婊研 危性 xxxxx11118 自啪 试平 n 罗辽 婊研 危性 xxxx2323 ``` 在这个实例中,我们将使用TensorLayer来训练一个垃圾文本分类器,并介绍如何通过TensorFlow Serving来提供高性能服务,实现产品化部署。这个分类器将解决以上几个难题,我们不再担心垃圾文本有多么隐晦,也不再关心它们用的哪国语言或有多少种联系方式。 第一步,[训练词向量](./word2vec),相关代码在word2vec文件夹,执行步骤见word2vec/README.md。 第二步,[训练分类器](./network),相关代码在network文件夹,执行步骤见network/README.md。 第三步,[与TensorFlow Serving交互](./serving),客户端代码在serving文件夹。 ### 网络结构 文本分类必然要先解决文本表征问题。文本表征在自然语言处理任务中扮演着重要的角色。它的目标是将不定长文本(句子、段落、文章)映射成固定长度的向量。 文本向量的质量会直接影响下游模型的性能。神经网络模型的文本表征工作通常分为两步,首先将单词映射成词向量,然后将词向量组合起来。 有多种模型能够将词向量组合成文本向量,例如词袋模型(Neural Bag-of-Words,NBOW)、递归神经网络(Recurrent Neural Network,RNN)和卷积神经网络(Convolutional Neural Network,CNN)。这些模型接受由一组词向量组成的文本序列作为输入,然后将文本的语义信息表示成一个固定长度的向量。 NBOW模型的优点是简单快速,配合多层全连接网络能实现不逊于RNN和CNN的分类效果,缺点是向量线性相加必然会丢失很多词与词相关信息,无法更精细地表达句子的语义。CNN在语言模型训练中也被广泛使用,这里卷积的作用变成了从句子中提取出局部的语义组合信息,多个卷积核则用来保证提取的语义组合的多样性。 RNN常用于处理时间序列数据,它能够接受任意长度的输入,是自然语言处理最受欢迎的架构之一,在短文本分类中,相比NBOW和CNN的缺点是需要的计算时间更长。 实例中我们使用RNN来表征文本,将输入的文本序列通过一个RNN层映射成固定长度的向量,然后将文本向量输入到一个Softmax层进行分类。 本章结尾我们会再简单介绍由NBOW和多层感知机(Multilayer Perceptron,MLP)组成的分类器和CNN分类器。实际分类结果中,以上三种分类器的 准确率都能达到97%以上。如图1所示,相比之前训练的SVM分类器所达到的93%左右的准确率,基于神经网络的垃圾文本分类器表现出非常优秀的性能。