中文短语抽取/挖掘
概述
短语抽取/挖掘(phrase extract/mining, 以下统称短语提取)是信息处理中领域的一项基本任务,但短语抽取与短语挖掘还是有些许不同。
短语挖掘侧重于挖掘,一个常见的场景是半自动/自动从生语料中抽取/挖掘出高质量的短语,形成短语词典,提供给下游使用,这更多叫做短语挖掘。
而短语抽取更关注抽取,侧重于无条件抽取应用,类似关键词抽取那样,使用者无条件抽取一篇文章中的短语,例如通用NLp工具中HanLP1.x的函数extract_phrase。
短语抽取/挖掘与新词发现类似,都是发现“新词”【未登录词】,最大的不同点在于,中文词语长度一般为2/3/4,而短语往往更长【本文默认4-10的词语为短语】,因此也有一些新特性。
坦率的说,中文短语抽取/挖掘任务的发展并不是令人鼓舞的,也没有那么乐观,仅仅有31 papers with code, 2 datasets。
前言
- 和几乎其他所有的自然语言处理NLP任务一样,早期,20世纪80年代以前,短语提取的形式也是基于规则的【语言学】,比如说分块chunk、词性标注pos等 + 规则依然不失为一种短语提取的基础方案,短语,如主谓短语、动宾短语、偏正短语、中补短语、联合短语,通常由动词v、名词n、形容词adj作中心语。
- 20年代80年代开始,计算机领域发生了一系列深刻的变革,尤其是集成电路的发展、微机的崛起,不仅是算力的提升,计算机不再高不可攀,它的迅速普及也使得各种奇思妙想集中迸发出来。 尤其是80年代末,传统统计机器学习开始兴起,其能够非线性、概率地进行计算,很快成为时代的宠儿。1980年代提出的TF-IDF、BM25、决策树DT、主成分分析PCA等算法,至今仍然被人们广泛用于关键词【短语】抽取中。
- 进入90年代,统计机器学习如日中天,这一时期,隐马尔可夫模型HMM、支持向量机SVM、集成学习Ensemble等各种算法层出不穷,代表了传统有监督学习的巅峰【dog-SVM】,也被广泛用于短语的打分函数中。值得注意的是,互联网开始兴起,尤其是90年代末,未登录词的状况也愈发凸显。
- 到了新世纪,00年代,由PageRank领衔的基于图网络算法数不胜数,TextRank、SingleRank、PositionRank、TopicRank、EmbedRank、SIFRank…与此同时,互联网开始进入Web2.0时代,数据激增,大数据开始星期。值得一提的是,搜狗基于搜索引擎技术的新一代的搜狗拼音输入法开始横扫。
- 进入10、20年代,人工智能再次迎来高潮,“人工”+"智能"的范式取得了极大的成功。这一时期,技术再次得以突破,有Word2Vec词向量发展而来的EmbedRank、SIFRank、KeyGames;有浅层神经网络的CNN、BiLSTM、CopyRNN;有弱/远程监督抽取的韩家炜团队三部曲TopMine、SegPhrase、AutoPhrase;也有预训练模型BERT发展而来的Roberta、UCPhrase;此外还有一些生成式、多任务的方法例如One2Seeq、One2Set;BERT-KPE。
- 除此之外,HanLP1.x实现的短语抽取,即论文《利用统计量和语言学规则提取多字词表达》。2012年间Matrix67在博客《互联网时代的社会语言学:基于SNS的文本数据挖掘》一文中,提出了一种影响广泛的、基于统计学概率【左右熵/凝固度】的新词发现算法。Kavita Ganesan2018、2019年苏建林相继给出的,基于高质量种子词聚类的方法。丁香园基于字典进行切割N-Gram、远程监督、词性标注、BERT字向量等获取短语候选集【很迷糊,不理解怎么获取候选集的】,然后采用GDBT进行打分。
技术
定义
短语,在早期的一些论文中被称为”多字词表达“【multi-word expressions】。《利用统计量和语言学规则提取多字词表达》论文中支指出多字词表达包括动词短语(爆发、取决于) ,复合名词(机器翻译、警用车辆) ,成语(雨后春笋、三人 行必有我师) 等等。
百度百科中的定义为,短语是由句法、语义和语用三个层面上能够搭配的语言单位组合起来的没有句调的语言单位,又叫词组,它是大于词而又不成句的语法单位。其基本短语包括主谓短语【粮食//丰收(名//动)】、动宾短语【想//他 (动//代)】、偏正短语【定中短语—他//的马 (代//名)、状中短语—刚//回来 (副//动)】、【中补短语 打量//一番 热//死了】、【联合短语 今天//和//明天(名//名 并列)】。
可以发现,语言学中的短语,与我们NLP中短语提取并不完全重合。比如说,一般NLP中我们会把2-3的词叫做"词语"、4-?的才称为短语【直觉中我们不大会认为"热起来"是短语】。此外,我们更加偏向于抽取有意义的短语【如有动词、名词的,”今天和明天“我们一般也不认为这是"短语"】。
开源方案
从更一般的角度而言,短语提取技术方案可以分为两个步骤: 1.候选短语生成、2.短语打分两个阶段,早期的算法可能融合起来只有一个步骤,比如说基于规则。
同时每个步骤的算法又可以分为无监督、半监督、有监督这三种形式,无论是传统机器学习、亦或是深度学习模型,都可以用于这两个步骤。
- Jieba tfidf/textrank, 抽取的主要是关键词, 而不是短语
- textrank4zh textrank, 还是jieba分词的问题, 抽取的是关键词
- HanLP1.X 词典 + 熵, 依赖语料, Java
- JioNLP=CKPE tfidf【pkuseg】 + 融合连续的动词-名词 + 重新计算权重 + 过滤【词性、LDA主题】
- CKPE 分词 + 词性标注 + tfidf + 连续词融合 + lda
- pke 更多的是支持英文
- Macropodus 新词发现长词(长度大于2), 词频-凝固度-左右熵, 过滤通用词库, 存在噪声, 阈值过滤,以及后期打分并不容易过滤
- EmbedRank sent2vec句子/短语 +MMR
- SIFRank+ 候选短语占句子的权重, ELMO + 向量的余弦相似度
- 种子词+聚类 二段式【词向量聚类】(候选集使用熵等, 然后根据一定的种子词作为聚类初始化), 需要构建种子词, 候选短语切割不是那么准确
- TopMine 二段式【上下文迭代合并】(候选集用新词发现方法, 频次过滤, 类似PMI合并上下文短语, LDA约束打分)
- SegPhrase 二段式【远程监督】200-300个数据进行随机森林RF分类
- AutoPhrase 二段式【随机森林RF】, wiki/Freebase构建高质量词典, 鲁棒-正样本远程监督训练, POS-Guided短语分割
- 丁香园总结-实践tricks 二段式,分词使用领域语料-ngram+pos统计+远程监督+bert, 排序选择GBDT(样本为词典+ngram), 无法保证分词的效果, 需要领域词典
- One2Seq 生成式,顺序[present [存在于原文中的内容]前,absent[不存在于原文]后],对keyphrase 分割, 结束。Semantic Coverage保留语义。
- One2Set 生成式,无序,引入Control code 每个控制编码对应生成一个集合元素,匈牙利算法
- BERT-KPE 多任务, candidate chunking【CRF/SPAN/CNN-SoftMax】和ranking【Max】
- UCPhrase 二段式,当前State-of-the-Art, 预训练, mlm样本为单篇文章中出现频次高的n-gram, 分类器选择为Light-Wise分类器【CNN/LSTM】
实践建议
- 分类模型的高质量短语, 可以来源于百科词条【百度、维基】, 知识图谱【开放知识图谱】, 输入法词典【搜狗, 百度】, 开源项目词典【funNLP, Thunlp, 领域词典】;
- 候选短语生成最好还是严格些, 否则分类模型就需要处理各种奇奇怪怪的问题;
- 分类模型负样本的构建最好是随机N-Gram, 可以过滤上面所说的词典, 也可以用各种经典统计量过滤, 比如新词发现的统计量就很不错;
参考
- 限定域文本语料的短语挖掘(Phrase Mining), https://mp.weixin.qq.com/s/2_6_5i-ycoj4XBS-J6kgDw
- 关键短语抽取及使用BERT-CRF的技术实践, https://zhuanlan.zhihu.com/p/148502336?from_voters_page=true
- 专业领域词汇的无监督挖掘, https://spaces.ac.cn/archives/6540
- keyphrase抽取论文在聊什么? https://mp.weixin.qq.com/s/gfDYHdE_wHDg5YNeJckj5A
希望对你有所帮助!