自然语言处理系列四》新词发现与短语提取》新词发现

29 篇文章 1 订阅
21 篇文章 1 订阅

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

自然语言处理系列二

新词发现与短语提取

新词发现是一个非常重要的NLP课题。在处理文本对象时,非常关键的问题在于“切词”这个环节,几乎所有的后续结果都依赖第一步的切词。因此切词的准确性在很大程度上影响着后续的处理,切词结果的不同,也就影响了特征的提取,跟数据挖掘一样,特征提取的好坏特别重要,不论用什么算法,特征好数据好结果才会好。
短语提取是指从文章中提取典型的、有代表性的短语,期望能够表达文章的关键内容。关键短语抽取对于文章理解、搜索、分类、聚类都很重要。而高质量的关键短语抽取算法,还能有效助力构建知识图谱。
本章对新词发现和短语提取的算法原理进行介绍,并用开源工具代码演示其功能。

新词发现

新词发现是 NLP 的基础任务之一,通过对已有语料进行挖掘,从中识别出新词。新词发现也可称为未登录词识别,严格来讲,新词是指随时代发展而新出现或旧词新用的词语。同时,我认为特定领域的专有名词也可归属于新词的范畴。何出此言呢?通常我们会很容易找到通用领域的词表,但要找到某个具体领域的专有名词则非常困难,因此特定领域的专有名词相对于通用领域的词语即为新词。换言之,“新”并非只是时间上的概念,同样可以迁移到领域或空间上。因此,新词发现不仅可以挖掘随时间变化而产生的新词,也可以挖掘不同领域的专有名词。
接下来,让我们开始一场新词发现的探索之旅吧。首先,对于“新词发现”这个标题,我们可将其拆分为“发现”和“新词”两个步骤:
“发现”:依据某种手段或方法,从文本中挖掘词语,组成新词表;
“新词”:借助挖掘得到的新词表,和之前已有的旧词表进行比对,不在旧词表中的词语即可认为是新词。
“新词发现”的难点主要在于“发现”的过程——如何从文本中挖掘到词语?那么有办法回避这个问题吗?让我们思索一下“新词”的过程:比对挖掘得到的新词表和旧词表,从代码的角度来说。
for 新词 in 新词表:
if 新词 not in 旧词表:
print(“这是新词”)
简单地讲,只要不是旧词就是新词呗,那么我们在对文本进行分词时,假设分词工具可以得到旧词,那么分词工具不能切分、切分有误或切分后不在旧词表中的词语不就是新词了吗?这就是“新词发现”的传统做法——基于分词的方法。除了分词方法外,还有基于规则和基于统计的方法,下面一一讲解。

  1. 基于分词的方法
    先对文本进行分词,余下未能成功匹配的片段(分词后的中文、连续的数字、连续的英文)就是新词。
    新词发现的目标是挖掘文本中的新词,或者说未登录词,来帮助后续的分词等工作。而基于分词的方法则相当于从目标反推过程,这种方法未尝不可行,但分词的准确性本身依赖于词库的完整性,如果词库中根本没有新词,又怎么能信任分词的结果呢?自然,最终得到的效果也不会特别好。
  2. 基于规则的方法
    根据新词的构词特征或外型特征建立规则库、专业词库或模式库,通过编写正则表达式的方式,从文章中将这些内容抽取出来,并依据相应的规则作清洗和过滤,然后通过规则匹配发现新词。因此,我们需要对已有的语料有着足够的了解,继而从语料中抽取固定的模式来匹配和发现新词。
    【优点】新词挖掘的效果非常好,夹杂中文、英文和标点符号的词语(短语)也能抽取出来。
    【缺点】与领域耦合过深,无法将建立的规则库、专业词库以及模式库迁移到其他领域中,需要根据领域内容重新搭建。甚至与特定类型、出版社、渠道的文章耦合过深,需要为不同的数据源搭建相应的规则库。一旦数据源的文章格式变动,规则库也需要作相应的修改。无论是搭建还是后续的维护,都需要大量的人工成本。
  3. 基于统计的方法
    基于统计的方法根据有无标注数据可分为有监督方法和无监督方法。
    1)有监督方法
    有监督方法利用标注语料,将新词发现看作分类或者序列标注问题:
    基于文本片段的某些统计量,以此作为特征训练二分类模型;
    基于序列信息进行序列标注直接得到新词,或对得到的新词再进行判定。
    通常可以用 HMM、CRF、SVM 等机器学习算法实现。但是在实际应用中,获取大量的标注语料数据是非常困难的一件事情,并且既然已经有了手工标注的数据,那么直接把标注得到的新词加入到新词词库就好了,又何必建模来解决呢?所以,探索无监督的挖掘方法在新词发现领域中更有价值。
    2)无监督方法
    不依赖于任何已有的词库、分词工具和标注语料,仅仅根据词的共同特征,利用统计策略将一段大规模语料中可能成词的文本片段全部提取出来,然后再利用语言知识排除不是新词语的“无用片段”或者计算相关度,寻找相关度最大的字与字的组合。最后,把所有抽取得到的词和已有的词库进行比较,就能得到新词。
    实际上,利用统计策略对语料进行切分,形成若干块文本片段,这相当于一次粗浅的分词。接下来,再对这些文本片段作一次清洗与过滤,余下的文本片段即可作为新词词库。
  4. HanLP工具的新词发现代码示例
    HanLP工具提供了新词发现的功能,代码如下:
package com.chongdianleme.job;
import org.ansj.dic.LearnTool;
import org.ansj.splitWord.analysis.NlpAnalysis;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by 充电了么App - 陈敬雷
 * 充电了么App官网:http://chongdianleme.com/
 * 充电了么App - 专注上班族职业技能提升充电学习的在线教育平台
 * HanLP新词发现功能,开源地址:https://github.com/hankcs/HanLP
*/
public class FindNewWord {
    public static void main(String[] args) {
        String content = "分布式机器学习实战(人工智能科学与技术丛书)作者陈敬雷,责任编辑赵佳霓,此书深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目,并有以下名人陈兴茂,梅一多,杨正洪,刘冬冬,龙旭东联袂推荐:" +
                "——陈兴茂 猎聘CTO\n" +
                "——梅一多 博士 上海市青年拔尖人才,中基凌云科技有限公司联合创始人\n" +
                "——杨正洪 博士 中央财经大学财税大数据实验室首席科学家\n" +
                "——刘冬冬 首席数据官联盟创始人\n" +
                "——龙旭东 北京掌游智慧科技有限公司董事长";
        List<String> newWordList = findNewWords(content);
        System.out.println(StringUtils.join(newWordList,","));
    }
    /**
     * HanLP新词发现
     * @param content
     * @return
     */
    public static List<String> findNewWords(String content){
        LearnTool learnTool = new LearnTool();
        NlpAnalysis nlpAnalysis = new NlpAnalysis().setLearnTool(learnTool) ;
        nlpAnalysis.parseStr(content);
        List<Map.Entry<String, Double>> topTree = learnTool.getTopTree(0);
        List<String> newWords = new ArrayList<String>();
        if(topTree!=null){
            for (Map.Entry<String, Double> entry : topTree) {
                newWords.add(entry.getKey());
            }
        }
        return newWords;

总结

此文章有对应的配套视频,其它更多精彩文章请大家下载充电了么app,可获取千万免费好课和文章,配套新书教材请看陈敬雷新书:《分布式机器学习实战》(人工智能科学与技术丛书)

【新书介绍】
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目

【新书介绍视频】
分布式机器学习实战(人工智能科学与技术丛书)新书【陈敬雷】
视频特色:重点对新书进行介绍,最新前沿技术热点剖析,技术职业规划建议!听完此课你对人工智能领域将有一个崭新的技术视野!职业发展也将有更加清晰的认识!

【精品课程】
《分布式机器学习实战》大数据人工智能AI专家级精品课程

【免费体验视频】:
人工智能百万年薪成长路线/从Python到最新热点技术

从Python编程零基础小白入门到人工智能高级实战系列课

视频特色: 本系列专家级精品课有对应的配套书籍《分布式机器学习实战》,精品课和书籍可以互补式学习,彼此相互补充,大大提高了学习效率。本系列课和书籍是以分布式机器学习为主线,并对其依赖的大数据技术做了详细介绍,之后对目前主流的分布式机器学习框架和算法进行重点讲解,本系列课和书籍侧重实战,最后讲几个工业级的系统实战项目给大家。 课程核心内容有互联网公司大数据和人工智能那些事、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)、就业/面试技巧/职业生涯规划/职业晋升指导等内容。

【充电了么公司介绍】

充电了么App是专注上班族职业培训充电学习的在线教育平台。

专注工作职业技能提升和学习,提高工作效率,带来经济效益!今天你充电了么?

充电了么官网
http://www.chongdianleme.com/

充电了么App官网下载地址
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app

功能特色如下:

【全行业职位】 - 专注职场上班族职业技能提升

覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的视频和文章。其中大数据智能AI、区块链、深度学习是互联网一线工业级的实战经验。

除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。

【牛人课堂】 - 学习牛人的工作经验

1.智能个性化引擎:

海量视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习课程。

2.听课全网搜索

输入关键词搜索海量视频课程,应有尽有,总有适合你的课程。

3.听课播放详情

视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读,对某个技能知识点强化,让你轻松成为某个领域的资深专家。

【精品阅读】 - 技能文章兴趣阅读

1.个性化阅读引擎:

千万级文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习文章。

2.阅读全网搜索

输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。

【机器人老师】 - 个人提升趣味学习

基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。

【精短课程】 - 高效学习知识

海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。

上一篇:自然语言处理系列三》Python代码实现TF-IDF
下一篇:自然语言处理系列五》新词发现与短语提取》短语提取

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈敬雷-充电了么-CEO兼CTO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值