色情评论识别

1.简短的介绍一下项目:

我们是想训练一个模型,针对每一条评论,判断这条评论是不是一条色情评论,也就是一个二分类问题,这样我们在需要进行评论展示的时候,就会过滤掉这些色情评论。

2.输入数据:

我们先制定了色情评论的一个标注标准,然后把数据给mark去标注。后来在mark试标的时候,发现标注的质量不高,因为每个人对色情评论的容忍度不同,虽然制定了标准,但是还是有每个人的主观性在里面。所以我们想了一下,就采用我们自己先提供个标签给mark,就是说一条评论,我们给出“是/否”的标签,让用户判断对不对。发现这样子不仅质量提高了,标注速度也变快了。最后总共标注了4w的色情评论,4w的正常评论。

设置关键词确实可以拦截掉部分谩骂评论,但会出现两个大问题。首先,如果选取关键词时追求准确率(也就是减少误伤),那么必然会导致关键词的覆盖度不够;反之,如果选取关键词时追求召回率(也就是减少误放),那么很多和谩骂沾边的词都必须选进来,但是如果对命中这些词的评论一棍子干掉,可想而知精确率会有多么得惨不忍睹。比如上面例子中的包含“他*的”、“垃圾”、“*痹”等词语的评论,不能一概而论地全判成谩骂或全判为非谩骂。还有就是有的网友会用各种错别字,首字母,火星文等来替代敏感词,这种使用词表的话是添加不完的。

3.数据预处理:

采用的预处理:过滤了表情,颜文字、和特殊符号。因为发现有的人发的评论是“看黄网就找xx”,但是他每个字之间都会加一些表情或者特殊符号之类的分隔开。设置了评论文本的最大长度,这里我们设定的是200个字,如果超过的话,截断的时候是从右往左截断,这里是因为标注的时候我们发现色情词都很大概率会在后边出现。还有一个就是一般的色情评论都是比较短的,不会有人写一大段文字来发表个色情评论。

4.模型:训练了两个模型,一个是贝叶斯模型,一个是Fasttext 模型。

两个模型:一个是multinomialNB模型,一个是fasttext模型。然后用两个模型的结果进行了一个投票的融合,来获得最终的结果。在训练贝叶斯模型的时候,使用IDF来提取每条评论的关键信息作为特征词,并且把特征词转换成了拼音或小写字母。在训练fasttext的时候,我们使用的预训练的词向量是用3000多万的各个垂类下面的评论数据得到的。没有去停用词,然后用两个模型得到的结果求平均,得到一个0-1之间的数,最后自己设置阈值来确定这个评论是否色情。训练完成之后,我们分析了未召回的色情评论,发现有一些色情词分词的时候被分开了,比如“飞机杯”,分成了“飞机”和“杯”,所以收集了这些词汇,添加到自定义的分词词典中,重新进行分词,并且上线之后,在使用过程中还积累了一些未召回的色情样本,进行再次训练,来优化我们的模型。

5.multinomialNB模型

其实就是朴素贝叶斯,但是朴素贝叶斯有三种常见的实现模型,一种是多项式、一种是高斯、另外一种是伯努利。

高斯是针对数据分布服从高斯分布,针对的特征是连续的情况。多项式和伯努利是适用于离散特征的情况。他们俩的区别是二者的计算粒度不一样,多项式模型以单词为粒度,也就是他的先验概率是在某个类别下某个单词出现的概率。伯努利模型以文件为粒度,先验概率指的是某个类别下某个单词出现的文件数。因此二者的先验概率和类条件概率的计算方法都不同。

因为我们的训练样本是均衡的,但是实际的样本是非常不平衡的,所以我们调整了模型的先验概率,来模拟实际使用的场景,这样可以提供精度,防止误判过多的正常评论。

分析bad case,发现有一些未召回的实际是分词的原因,就是结巴分词的时候,会把诸如“飞机杯”这类的词,分成“飞机” 和“杯”, 所以我们给结巴添加了一个分词词汇,将这些肯定没有分词歧义的,添加到词表中。

这样之后我们发现最后没有召回的是我们样本中没有覆盖到的那种,整个评论里面没有出现敏感的色情词,而是用一些非常隐晦的说法,比如说“先干为紧”这种来表示的,所以我们的一个方案就是根据线上结果,积累这些色情样本,不断地迭代优化我们的模型。

https://blog.csdn.net/u012162613/article/details/48323777

特征是离散的,所以我们就考虑了多项式和伯努利两个模型。

当特征是连续变量的时候,运用多项式模型就会导致很多P(xi|yk)=0P(xi|yk)=0(不做平滑的情况下),此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。

多项式模型:

多项式模型(multinomial model)即为词频型和伯努利模(Bernoulli model)即文档型。二者的计算粒度不一样,多项式模型以单词为粒度,伯努利模型以文件为粒度,因此二者的先验概率和类条件概率的计算方法都不同。(召回会高,精度会下降)

选择使用贝叶斯模型的原因:首先不选用神经网络类方法的原因是因为发现识别一个评论是不是色情,是根据关键词来进行判断的。

举例:你是个好人

你是个bitch。

一个为0,一个为1,如果用语义模型来做的话,就效果很不好。

但是这种又符合贝叶斯的条件独立性的假设。

贝叶斯模型训练速度快,模型简单稳定,解释性强。

6.fasttext

http://www.52nlp.cn/fasttext

想一下要说的流程。

预处理,模型是,输入,输出。

1. 对于低频词生成的词向量效果会更好。因为它们的n-gram可以和其它词共享。

2. 对于训练词库之外的单词,仍然可以构建它们的词向量。我们可以叠加它们的字符级n-gram向量。

字符级别的n-gram。可以看到,和CBOW一样,fastText模型也只有三层:输入层、隐含层、输出层(Hierarchical Softmax),输入都是多个经向量表示的单词,输出都是一个特定的target,隐含层都是对多个词向量的叠加平均。

不同的是,CBOW的输入是目标单词的上下文,fastText的输入是多个单词及其n-gram特征,这些特征用来表示单个文档;CBOW的输入单词被onehot编码过,fastText的输入特征是被embedding过;CBOW的输出是目标词汇,fastText的输出是文档对应的类标。值得注意的是,fastText在输入时,将单词的字符级别的n-gram向量作为额外的特征;在输出时,fastText采用了分层Softmax,大大降低了模型训练时间。

对数损失,logloss

使用idf提取关键词,是用了全部的色情样本和正常样本作为语料库。计算的时候是提取此样本在色情评论中idf高的词(根据样本长短决定保留的个数),然后减去在正常评论中idf高的,并且没有在色情词表中出现过的词。

这样得到的样本特征就是能保留样本色情信息的关键特征词。

计算tf的话没用,因为基本上每个词都是出现了1次。

在色情的语料库中存在的多的也是那些正常的词。选择idf高的词来表示正样本,可以留下来色情信息,其次就是在这些里面,再进行一个过滤,删除掉那些在正常语料库中idf也高的词,并且不在色情词表的词,这样就相当于又进行了一个正常词的过滤,最后留下的词,就是能表征评论是否含有色情言论的关键信息了。(这种和直接的词表匹配有啥区别。词表不一定覆盖全面。这种方法能筛选出来词表中没有的色情词。)

这里是我们发现,有的网友他会故意用一些错别字,大小写混杂的那种色情词来进行混淆,所以我们将所有的特征词都转换成了拼音或小写字母,就相当于增大了这个色情词的类条件概率。

是想做一个色情评论的识别模型,模型的输入是我们通过idf提取出来的评论的关键词信息,输出是预测结果,为1表示此评论色情,0表示正常。最后在1000条评论库随机抽取的评论中,(14条色情,986条非色情)模型的召回率有85.7%,(预测出来12条,有2条是因为样本未覆盖)总共预测为1的有82条,精准度有14.6%。这个精度不高,一个是我们想保召回,一个是样本的比例不均衡,正的样本太少了。

fasttext 切词,没有去停用词

模型,textcnn图,attenttion,fasttext算法,多项式贝叶斯分布,把公式讲出来,图画出来,根据图告诉它输入输出。

输入的时候做了什么预处理,再讲预处理的亮点。

先讲全了,话要简短,反复练习。

https://www.baidu.com/link?url=oGIihhVWduPfPdd73AOPiyGvsgRWaIj6fFpCkxCUNDgKgTnO0P3JKPwBLt4JWaP2&wd=&eqid=9afa5a5000007ae7000000035b2f04fd

            

textcnn试了,一个是模型训练太慢了,加载了预训练的词向量,使用relu函数 ,卷积核的尺寸是 filter Windows的h大小:3,4,5;对应的Feature Map的数量为100  dropout 0.5  学习率 梯度下降 0.05

然后我们用fasttext和textcnn来进行模型训练。在最后模型选择的时候我们选择了fasttext,是因为通过对比实验,两者的效果相当,但是fasttext因为没有卷积操作,所以速度要比Textcnn快很多。用的0.5的阈值来判断。

之前是有一个黄反脏话的词表,根据黄反词的严重程度设置权重, 最后算整个评论的得分,卡个阈值。(有些是比较严重的黄反词,一出现直接过滤,有些是轻微黄反词,出现多次过滤。)这种通过规则来进行过滤的,没有专门的色情识别模型,这样有一个不好处,就是没有考虑到评论中的语义关系,因为她是匹配到了,就计数,但是这样就导致误伤正常的评论,而且词典是加不完的,用户会经常故意写错别字,或者用拼音、首字母等代替一些敏感词,这样用词典就很难做到。还有一点就是现在黄反脏话是放在一起的来过滤的,我们希望能色情评论识别做一个模型,涉政言论识别做一个模型,偏激言论识别做一个模型,以便之后按照相应的需求来选择评论。这就是为什么要做这个事情。

猜你喜欢

转载自blog.csdn.net/baidu_33718858/article/details/81294064
今日推荐