B.5 朴素贝叶斯用于其他文本分类任务
上一节指出,朴素贝叶斯分类器并不要求把训练数据中的所有词都用作特征。事实上,朴素贝叶斯中的特征可以表达我们希望从输入文本中获得的任何属性。
考虑垃圾邮件检测,即判断一封电子邮件是否为垃圾邮件(未经请求的批量邮件);这是朴素贝叶斯最早的文本分类应用之一(Sahami et al., 1998)。
一种常见方案不是把所有词分别作为特征,而是预先定义可能有用的词或短语集合,并把它们与非纯语言特征结合。例如,开源工具 SpamAssassin 预定义了“one hundred percent guaranteed”这样的短语特征,或 mentions millions of dollars 这样的正则表达式特征,用于匹配大得可疑的金额。它还包含 HTML has a low ratio of text to image area 这类并非纯语言、可能需要复杂计算的特征,乃至邮件传递路径等完全非语言的特征。SpamAssassin 的其他示例特征包括:
邮件主题行全部由大写字母组成;
包含“urgent reply”等表示紧迫性的短语;
邮件主题行包含“online pharmaceutical”;
HTML 中的
head标签不配对;声称收件人可以退出邮件列表。
对于语言识别(判断给定文本使用哪种语言)等任务,最有效的朴素贝叶斯特征根本不是词,而是字符 n 元语法,例如二元语法(zw)、三元语法(nya、Vo)或四元语法(ie z、thei)。甚至可以更简单地使用字节 n 元语法:不采用称为码点的多字节 Unicode 字符表示,而把一切看作原始字节串。因为空格也算一个字节,字节 n 元语法可以对词首、词尾的统计规律建模。广泛使用的朴素贝叶斯系统 langid.py(Lui and Baldwin, 2012)从长度 1~4 的所有可能 n 元语法开始,再通过特征选择缩减到信息量最大的 7000 个最终特征。
语言识别系统在 Wikipedia、新闻通讯等多语文本上训练(Lui and Baldwin, 2011 使用了 68 种语言的 Wikipedia 文本)。为确保多语文本正确反映不同地区、方言和社会经济群体,系统还会加入带有不同地区地理标签的多语 Twitter 文本(这对获得尼日利亚、印度等英语人口大国的世界英语方言十分重要)、《圣经》和《古兰经》的译本、Urban Dictionary 等俚语网站、非裔美国人白话英语语料库(Blodgett et al., 2016)等(Jurgens et al., 2017)。