文本信息过滤中的变体词识别(一)
#文本信息过滤中的变体词识别(一)
变体词识别概述
最近在搞文本过滤的一些工作,有一些变体词识别相关的工作,比较多的参考了达观数据的一些公开分享,我这里准备分三篇文章做一些总结,这是第一篇:
先来一个严谨的定义:
网络书写具有随意性、非正规性等特点。变体词就是网络语言作为一种不规范语言的显著特色, 人们往往出于避免审查、表达情感、讽刺、娱乐等需求将相对严肃、规范、敏感的词用相对不规范、不敏感的词来代替, 用来代替原来词的新词就叫做 变体词(Morph) 。变体词和其对应的原来的词(目标实体词)会分别在非规范文本和规范文本中共存, 甚至变体词会渗透到规范文本中。变体词使行文更加生动活泼, 相关事件、消息也传播得更加广泛。但是因为变体词通常是某种隐喻, 已不再是其表面字词的意义了, 从而使网络上文体与正式文本(如新闻等)具有巨大的差异。由此如何识别出这些变体词及其所对应的目标实体词对于下游的自然语言处理技术具有重要的意义。
在信息过滤的场景中,变体词识别问题是进行语义特征抽取需要解决的重要问题
图片来自达观数据电子杂志
针对变体词识别的方法,现在是有通用的架构
包括如下步骤:
- 变体词的识别: 候选变体词的发现, 候选变 体词的验证。
- 变体词的规范化: 变体词的候选目标实体词 的发现, 变体词的候选目标实体词的打分排序, 输 出最优的目标实体词。
##变体词识别
变体词发现
在文本过滤的场景中,识别特定关键词,一般会使用关键词匹配的技术(基于哈希或者有限状态机),我们需要维护一个特定关键词库,(有一些基于深度学习来识别变体词的方法,本文不做介绍,感兴趣的可以看文末的论文),基于关键词的变形词识别还是比较稳健的方法,我尝试过用词向量技术来选择和语境上下文差异比较大的词来对可能的变形词进行预测,但是我们现在采用的分词技术很多时候并不能很好的把变形词切出来,有些变体词可能作为单字切分了,效果并不好。word 基本的词向量和 char级别的词向量效果都不太理想
变体词的生成
我们人工来维护变体词库,成本会比较大, 扩展困难,面对新类型的垃圾内容往往反映时间也相对比较慢。
变体词的自动生成:分析变体词的生成规律,由计算机自动生成变体词, 与人工生成变体词进行比较, 分析其自动生成的可行性。变体词的自动生成规律如下图所示:
上面的图表来自【中文变体词的识别与规范化综述】,我们可以看到,如果用人工来生成这些变体词库的话,工作量很大,让计算机来通过特定的规律来自动生成是一个非常合理的思路,但是也比较依赖于语料库。笔者的工作集中在语音替换这个点,因为语音替换是最主要的变体词生成来源(基于样本统计)。当然,这也是处于工作量的考虑,另外,基于词向量技术,是可以对变体词词库进行一定程度上的拓展,这个会在后面介绍
达观数据的生成方法
达观数据采用的变体词生成方法,步骤如下:
- 获取关键词库的字作为种子集合
- 构建变体词关联网络(结合拼音相似度,字形相似度,字频,共同出度,共同入度构建关联边的权重)
- 生成关键字的相似度大于阈值的变体词
- 针对已有关键词库构建变体词词库
图片来自达观数据电子杂志
变形词验证
在进行变体词检测的时候,如果单纯依靠词库不考虑上下文语境的话,很有可能正常词语识别为变体词,所以我们有必要对疑似的变体词进行检验,譬如在下面的例子
"Esports 海涛解说视频专题“ 识别出疑似变体词为 【海涛】,可能是 【海淘】 的变体词,当然普通读者很容易就可以区分出这个不是变体词,达观在解决这个问题上,使用了下面两个方法:
贝叶斯分析方法
贝叶斯分析方法统计变体词再正常文本中上下文出现的概率(先验概率),来计算当前文本变体词的后验概率。类似 “微 亻言” 这样的词语,在正常文本(规范文本)出现的概率几乎为0, 所以可以判断为变体词;而对于出现在“Esports 海涛解说视频专题“ 的关键词 【海涛】, 在正常文本出现的概率也相对比较高,在计算出了当前文本上下文的后验概率之后,可以判断为正常词语。
词嵌入方法
词嵌入方法使用了词向量技术,计算上下文的语义重心,然后计算 单词的词向量与上下文语义重心向量的相似度。正常文本的词语跟上下文文本语义接近,所以对应的词向量空间上也比较接近的。通过计算它与上下文语义重心的相似度,可以判断词语是否处于正常的语境中,从而识别出来是否是变体词。(我目前采用词向量平均的方法来求语义重心,不确定是不是正确的方法,囧。。。)
###总结
总结一下,先通过 关键词 匹配来找出 疑似的变体词,然后对疑似变体词进行检验,当确认是变体词之后,在通过词库返回原词,使用这个方法,如果变体词库是严格的一对多的情况,就是一个原型词 对应多个变体词,这样我们在匹配到变体词的时候,只会得到一个候选的原型词,这时就不需要对候选词进行排序打分,直接返回候选的目标就行了,假如遇到多个候选目标的时候,需要通过对候选词进行打分排序,这里笔者也是通过词嵌入的方法来进行打分,比较候选词和上下文的相似度(候选词和上下文相似度越高,分数越高),选择相似度较高的候选词,这步骤也称为变体词的规范化
再话变体词生成
仅仅基于拼音相似度生成变体词的坑
对每个变体词的组成字进行拓展(基本遍历所有拼音编辑距离相近的所有字)
比如 对 【山行】这个关键词的拓展就会生成【闪星】【删性】【善行】…很多很多,很多生成的变体词和候选词基本很难让人联想到一起,这样就导致变体词库异常冗杂,根据排列组合,量级很大,大量无意义的关键词匹配会拖慢性能,当然,如果考虑声调或者拼音严格匹配的话,会减少词库的量级,当然这时容错性就小了
考虑词向量技术的变体词生成
词向量技术可以考虑到的是,相近的词,往往会有相似的上下文,或者拥有相似上下文的词往往会比较接近,一般理想的词向量一般是把一个词嵌入在50维或者100维的向量,为了便于可视化,一般用二维的词向量来展示
两个相近的词,空间距离会比较接近,利用这个特征,原型词【qq】和 变体词 【扣扣】往往会有比较相似的上下文,空间距离会比较近,如下图, 基于词向量,我们找到了qq的多个变体词,有些并不能依靠拼音相似度来生成
当然,单纯依赖词向量也会也是不行的,譬如,【男人】和【女人】,词向量空间上会比较接近,但是我们不能认为【女人】是【男人】的变体词,反之亦然,词向量空间相似度需要结合拼音相似度,在正常文本出现的概率,字形相似度结合起来判定。
基于单字生成,再组合
这是达观数据采用的方法,对关键词进行拆解成字,对每个字建立关联网络(结合拼音相似度,字形相似度,字频,共同出度,共同入度构建关联边的权重),譬如,【微】字 可以生成 【薇】,【徽】等,【信】 可以生成 【亻言】,【亻訁】等,再进行组合,就可以生成【薇亻言】,【徽亻訁】等变体词。
这是我们当前采用的方法。实现方式有点区别,具体细节会在后文介绍。
总结
最近看的一些文章,着重会讲规范文本,不规范文本这两种语料,所谓的规范文本,是那些基本不会或很少会出现变体词,非规范文本,就包括我们的社交网络上产生的文本,有许多的变体词,那么,变体词的识别问题,就成为了找寻 在非规范文本中的变体词到规范文本的原型词的映射关系的问题,同样词,在规范语料和非规范语料含义可以有很大的差距,那么是不是我们在变体词库生成就必须对两种语料库进行分别搜集呢,个人认为是没有必要的,在社交网络语料中,本身就包含规范文本和非规范文本,如果某些词大量出现在非规范文本中,甚至很少会不出现原型词,那么我们是不是可以考虑,把它本身就作为一个新词来对待?
本文描述的是基于关键词匹配的技术来识别变体词,这是在工程上易于实施的方法,并且可以取得还不错的效果,简单易行,效果还ok的方法,可以在你花费较少的精力的情况下,快速看到效果,后面可以再针对某些点去针对性的优化
除了这种方法,还有基于深度学习实现对变体词及其目标实体词的映射关系的发现,论文如下,感兴趣的可以看下
Boliang Zhang, Hongzhao Huang, Xiaoman Pan, Sujian Li,Chin-Yew Lin,
Heng Ji, Kevin Knight, Zhen Wen, Yizhou Sun,Jiawei Han and Bulent
Yener, Context-aware Entity Morph Decoding,the 53rd Annual Meeting of
the Association for ComputationalLinguistics (ACL), 2015.
后文会着重写一些实现的细节问题。
相关信息
- 图像识别、中文分词
- 过滤eWebeditor等富文本中html标签,获得纯文本信息
- php 过滤英文标点符号 过滤中文标点符号
- 模式识别之中文分词---简介
- 获取设备识别信息
- 微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
- 利用百度文字识别API识别图像中的文字
- 搜索存储过程中的信息
- php过滤微信昵称中的表情
- 文字识别工具是怎样识别文字的?
- CRNN-基于图像的序列文本识别
- HanLP中人名识别分析
- 过滤器和拦截器的区别
- 中文电子病历命名实体识别(CNER)研究进展
- javaweb回顾第十一篇过滤器(附实现中文乱码问题)
- flask中过滤器的使用
- 中文分词系列(一) 双数组Tire树(DART)详解
- 获取Android版本信息和电话信息
- 记录--信息隐藏技术实验(识别图片中的文件)
- 百度文字识别技术初体验
- NLP & 中文分词
- ubuntu14.04中文楷体变默认字体
- MXNET手写体识别的例子
- 配置solr的中文分词器
- Vue基础知识之过滤器(四)
- SNP 过滤(二)
- 过滤器和拦截器的区别
- Myeclipse中svn提交过滤class等不需要的文件
- lucene整理3 -- 排序、过滤、分词器
- 不锈钢保安过滤器
- 信息系统开发与管理【二】之 管理信息系统的基本知识
- 【论文写作分析】之五《融合类别特征扩展与N-gram子词过滤的fastText短文本分类》
- List的多字段唯一标识过滤、除重
- SVN提交文件的时候过滤指定文件
- 论文解读二十七:文本行识别模型的再思考
- 中文词向量论文综述(一)
- 通过扫描就能获得信息Vin码识别技术
- spring拦截器-过滤器的区别
- 信息安全名词
- tesseract ocr文字识别
- 一个高效过滤敏感词的方法
- 用JS过滤Emoji表情的输入
- spring boot: 通过filter过滤器实现中文的简体繁体字符集转换(spring boot 2.3.1)
- SpringMVC 过滤器
- ORACLE中如何找出统计信息过期的表
- vue——过滤器(单个和多个过滤器)
- servlet过滤器
- 过滤器链
- 协同过滤
- Vue 过滤器的使用
热门资讯
推荐资讯
最新资讯
- 每个程序员必学的10个Git命令
- Android开发之蓝牙详解(一)
- Android开发之蓝牙详解(三)
- 防止SQL注入的五种方法
- 5种方法防止 jsp被sql注入
- 【译】在React中实现条件渲染的7种方法
- winform防止界面卡死的三种方法 总结:使用委托 + 线程的方法实现 参考:https://blog.csdn.net/handsomexiaominge/article/details/4265...
- Android WifiManager.WifiLock 简介
- [译]Android内存泄漏的八种可能(上)
- python+appnium【第一章-环境搭建】
- 第一章:tornado入门环境搭建
- unittest框架核心要素及应用
- 黑马程序员前端-CSS用户界面样式源码
- 传智健康项目day01
- 传智健康项目day02
- 传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
- 黑马传智健康项目讲义第一章之ElementUI
- 黑马传智健康项目讲义第一章 之Power Designer
- 黑马传智健康项目讲义第一章之项目概述
- MYSQL的master/slave数据同步配置 ZT
评论