05月28, 2018

基于概率语义分析和贝叶斯方法的短文本分类实践

0x00 什么是语义分析

自然语言处理一直以来被誉为人工智能皇冠上的明珠,语义分析指的运用NLP和机器学习方法挖掘与学习文本深层次概念,wikipedia上的解释如下:

In machine learning, semantic analysis of a corpus is the task of building structures that approximate concepts from a large set of documents (or images).

0x01 智能运维语义分析现状

包含语义分析在内,智能运维领域的NLP面临的挑战颇多,比如:

  • 问句领域性强
  • 用户意图复杂
  • 上下文相关性强
  • 问题多样
  • 指代缺失
  • 口语化严重

在实际应用场景中,所有数据将会来源于真实业务沟通场景,部分协同工具、邮件等结构化摘要数据还包含业务和运维工程师针对当次问答数据的推理知识,这些内容都会让自然语言处理的落地更具挑战。

0x02 分词与构建语言模型

通常在拿到一段文本后要先做分词处理,目前较常用的几种分词方法如下:

  1. 基于字符串匹配的分词方法。此方法按照不同的扫描方式,逐个查找词库进行分词。根据扫描方式可细分为:正向最大匹配,反向最大匹配,双向最大匹配,最短路径最小切分等等
  2. 全切分方法。它首先切分出与词库匹配的所有可能的词,再运用统计语言模型决定最优的切分结果。它的优点在于可以解决分词中的歧义问题。
  3. 由字构词的分词方法。可以理解为字的分类问题,也就是自然语言处理中的sequence labeling问题,通常做法里利用HMM,MAXENT,MEMM,CRF等预测文本串每个字的tag。由于CRF既可以像最大熵模型一样加各种领域feature,又避免了HMM的齐次马尔科夫假设,所以基于CRF的分词目前是效果最好的。除了HMM,CRF等模型,分词也可以基于深度学习方法来做。

语言模型是用来计算一个句子产生概率的概率模型,即P(1, 2, 3…m),m表示词的总个数。

根据贝叶斯公式:

P(A|B)=\frac{P(B|A)P(A)}{P(B)}

以已知邮件文本正样本和负样本为训练集,来判断下一封包含 keyword 信息的邮件是目标点的概率。跟传统的内容过滤技术不同,贝叶斯方法特征的来源比较多,可以采用邮件正文单词、邮件 Header 信息 (message-id, references, in-reply-to, etc) 和邮件的 HTML 编码等作为判断的特征元素,因此对目标信息的判断能够做到更全面、更准确。更重要的是,贝叶斯方法还具有自学习功能,能够学习分辨正样本与负样本之间的差别,差别是用概率来表示的,并且自动应用到以后的检测中。在收到几百封信件后,一个好的贝叶斯过滤器就可以自动识别各类邮件。

0x03 构建贝叶斯邮件 keyword 状态分类器

使用贝叶斯算法来进行包含 keyword 信息邮件分类的基本步骤是:

1.根据需求场景收集正负样本邮件信息,建立训练数据集;
2.分别在正负样本中提取特征来源中的独立字符串,并统计该字符串出现的次数(字频)。针对不同样本,分别建立哈希表 hash_positive 和 hash_negative,在哈希表中存储特征字符串字频的映射关系;
3.计算每个哈希表中特征字符串出现的概率Pi

P(A|B)=\frac{Ai}{Bi}

其中Ai为该特征字符串的字频,Bi为对应哈希表的长度
4.由 hash_positive 和 hash_negative 推断包含 keyword 的新邮件限定域内出现特征字符串 si 时,keyword 状态为positive的概率 P(A|si)。

P(A|si)=\frac{P1(si)}{P1(si)+P2(si)}

其中,P1(si) 为特征字符串 si 在 hash_positive 中的值, P2(si) 为 si 在hash_negative 中的值
5.建立新的哈希表 hash_probability 存储特征字符串 si 到 P(A|si)的关系映射;
6.根据新建立的哈希表 hash_probability 可以估计新邮件中 keyword 状态为 positive 的可能性。

这样,当接收到一封新邮件时,首先按照 Step 2 生成特征字符串。查询 hash_probability 得到该字符串的 possibility,假设在 keyword 限定域内共得到 N 个特征字符串 s1,s2....sn,hash_probability 中对应的值为 P1,P2...PN,P(A|s1,s2...sn)表示在 keyword 限定域中同时出现多个 positive 特征字符串 s1,s2...sn 时,该邮件为垃圾邮件的概率 P(A|s[n]):

P(A|s[n])=\frac{\prod{n=0}^n{Pn}}{\sum\limits{n=1}^N{(1 - Pn)} + \prod_{n=0}^n{Pn}}

当 P(A|s[n]) 超过预定阀值时,就可以判断 keyword 状态为 positive 了。

当新邮件到达的时候,就通过贝叶斯过滤器分析,通过使用各个特征来计算 keyword 是 positive 状态的概率。通过不断的分析,分析器也不断地获得自更新。如果通过各种特征判断一个包含单词abc的邮件是垃圾邮件,那么单词abc成为垃圾邮件特征的概率就增加了。

贝叶斯方法对于新消息内容进行分析,不仅仅是根据其中的某个或几个关键词,而且它能判别邮件属性是还是正常邮件。例如:包含“回收”,“退还”,“下架”字样的邮件不一定属于属性“已回收”,如果采用关键字过滤方法,显然难以达到理想的分类效果。而贝叶斯方法既考虑了这些词在正样本邮件中出现的概率、又考虑了它在负样本邮件中的概率,综合考虑这些因素做出判断。

总之,贝叶斯对此类邮件和信息关键词能综合地进行评估分类,准确率远高于传统静态过滤技术。

本文链接:https://www.opsdev.cn/post/bayes.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。