Anit Spam
in python自然语言处理 with 1 comment

Anit Spam

in python自然语言处理 with 1 comment

反垃圾系统是互联网产品中重要的组成部分,但因为实现起来较为复杂,同时因为其并不直接被用户接触,所以反垃圾系统得到的重视极为低下。而文本垃圾是反垃圾系统的重点。

:smirk:

1. 文本匹配

不得不说这是最简单而且最愚蠢的方法没有之一。说起简单,只需要一些敏感词汇(Sensitive Word),即可完成反垃圾的所有功能。如:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
sensitive_word = u'冰毒'
sentence = u'制售冰毒联系电话:186XXXXXXXX'
print sensitive_word in sensitive_word

即可匹配出冰毒这一预先设定的敏感词。但这种方式也存在着很大的弊端。如:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
sensitive_word = u'冰毒'
sentence = u'警方取缔了制毒窝点,缴获冰毒 XXX 斤'
print sensitive_word in sensitive_word

针对不同的语境,文本匹配已经无法正确识别预设的敏感词是否在句中担当了敏感词的意义,这种情况俗称歧义。

文本匹配的方法不仅无法处理歧义,而且有着效率低下的特点。因为字符串比较是一个很费时的过程(理想状况下为 O(m+n) )。同时,对于敏感词较多时,需要遍历比较,更是加大了比较的成本。

对于敏感词较多时,可以使用 Python 中的 map() 函数进行并行计算或使用协程或多进程进行并发。所以,问题将会转移至如何缩短单次计算的时间上。目前,有多种方式对时间复杂度进行优化,常见的算法有 DFA 算法 AC 自动机

2. 简单的机器学习——朴素贝叶斯

回到高中数学,记得当时习题册上会有一道类似的题目,某种产品中,合格品率为0.96。一个合格品被检查成次品的概率是0.02,一个次品被检查成合格品的概率为0.05。求一个被检查成合格品的产品确实为合格品的概率。

对,没错,这就是熟悉的贝叶斯公式的运用。贝叶斯计算了在 B 事件发生的情况下 A 事件发生的概率。

那么,派生出反垃圾系统的贝叶斯公式,在存在某个词的情况下,这句话是文本垃圾的概率。

3. 自然语言处理的做法

4. 神经网络和自然语言处理

Responses
  1. roman

    cool

    Reply