自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要

自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要详细讲述了自然语言处理中预处理步骤的常用方法

自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要"

NLP相关工具包的介绍

1.1 jieba

  • “结巴”中文分词,理念是做最好的 Python 中文分词组件。
  • 支持三种分词模式:
    (1)精确模式,试图将句子最精确地切开,适合文本分析;
    (2)全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    (3)搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  • 提供的功能:
    (1)支持繁体文字分词(简体的更可以)
    (2)支持自定义词典
    (3)提供词性识别
  • 底层算法特点:
    (1)基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
    (2)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
    (3)对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

1.2 hanlp

  • HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
  • 功能相较于jieba丰富很多。
  • 提供的功能
    (1)中文分词
    (2)索引全切分模式
    (3)用户自定义词典
    (4)兼容繁体中文
    (5)训练用户自己的领域模型
    (6)极速词典分词
    (7)感知机分词、CRF分词
    (8)最短路分词、N-最短路分词
    (9)HMM-Bigram(速度与精度最佳平衡;一百兆内存)
    (10)由字构词(侧重精度,可识别新词;适合NLP任务)
    (11)词典分词(侧重速度,每秒数千万字符;省内存)
    (12)所有分词器都支持:
    (13)词性标注
    (14)HMM词性标注(速度快)
    (15)感知机词性标注、CRF词性标注(精度高)
    (16)命名实体识别
    (17)感知机命名实体识别、CRF命名实体识别
    (18)中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别
    (19)基于HMM角色标注的命名实体识别 (速度快)
    (20)基于线性模型的命名实体识别(精度高)
    (21)关键词提取
    (22)TextRank关键词提取
    (23)自动摘要
    (24)TextRank自动摘要
    (25)短语提取
    (26)基于互信息和左右信息熵的短语提取
    (27)拼音转换
    (28)多音字、声母、韵母、声调
    (29)简繁转换
    (30)简繁分歧词(简体、繁体、臺灣正體、香港繁體)
    (31)文本推荐
    (32)语义推荐、拼音推荐、字词推荐
    (33)依存句法分析
    (34)基于神经网络的高性能依存句法分析器
    (35)MaxEnt依存句法分析
    (36)文本分类
    (37)情感分析
    (38)word2vec
    (39)词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类
    (40)文档语义相似度计算
    (41)语料库工具
    (42)默认模型训练自小型语料库,鼓励用户自行训练。所有模块提供训练接口,语料可参考OpenCorpus。
  • 在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的模型。

1.3 SnowNLP

  • SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。
  • 提供的功能
    (1)中文分词(Character-Based Generative Model)
    (2)词性标注(TnT 3-gram 隐马)
    (3)情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)
    (4)文本分类(Naive Bayes)
    (5)转换成拼音(Trie树实现的最大匹配)
    (6)繁体转简体(Trie树实现的最大匹配)
    (7)提取文本关键词(TextRank算法)
    (8)提取文本摘要(TextRank算法)tf(词频),idf(反文档频率)(信息衡量)
    (9)Tokenization(分割成句子)
    (10)文本相似(BM25)

1.4 textrank4zh

  • TextRank算法可以用来从文本中提取关键词摘要(重要的句子)。
    TextRank4ZH是针对中文文本的TextRank算法的python算法实现。(摘要句子长一点,按理是效果比SnowNLP好一些)

2 分词

  • 分词是自然语言处理NLP基本上所有任务都必须处理的问题,其目的是让文本文件的内容变成一个一个的单词或者词组,从而为后续的转变为词向量提供基础。
  • 中文分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂得多、困难得多。
  • 分词应用场景:
    比如搜索引擎,会将你输入的查询文本分词后再进行搜索。

2.1 jieba分词

  • jieba中文分词的安装:
    再当前的环境中使用以下代码
pip install jieba

然后再python文件里通过import jieba来引用

  • jieba.cut 方法接受三个输入参数:
    1 需要分词的字符串;
    2 cut_all 参数用来控制是否采用全模式;
    3 HMM 参数用来控制是否使用 HMM 模型
  • jieba.cut_for_search 方法接受两个参数:
    1 需要分词的字符串;
    2 是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。
    注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,
    可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
  • jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,
    可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
import jieba
import jieba.analyse
import jieba.posseg

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("【全模式】: " + "|".join(seg_list))  # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("【精确模式】: " + "|".join(seg_list))  # 精确模式

seg_list = jieba.cut("我来到北京清华大学")  # 默认是精确模式
print("【默认:精确模式】"+"|".join(seg_list))

# 搜索引擎模式
seg_list = jieba.cut_for_search("我来到北京清华大学")
print("【搜索引擎模式】"+"|".join(seg_list))

3 词性标注

  • 例子:
    充电了么App是专注上班族职业技能提升充电学习的在线教育平台
    充电/v,了/ul,么/y,App/eng,是/v,专注/v,上班族/nz,职业技能/n,提升/v,充电/v,学习/v,的/uj,在线教育/l,平台/n,
  • 词性表如下所示:
    Ag:形语素 形容词性语素。形容词代码为 a,语素代码g前面置以A。
    a:形容词 取英语形容词 adjective的第1个字母。
    ad:副形词 直接作状语的形容词。形容词代码 a和副词代码d并在一起。
    an:名形词 具有名词功能的形容词。形容词代码 a和名词代码n并在一起。
    b:区别词 取汉字“别”的声母。
    c:连词 取英语连词 conjunction的第1个字母。
    dg:副语素 副词性语素。副词代码为 d,语素代码g前面置以D。
    d:副词 取 adverb的第2个字母,因其第1个字母已用于形容词。
    e:叹词 取英语叹词 exclamation的第1个字母。
    f:方位词 取汉字“方”。
    g:语素 绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。
    h:前接成分 取英语 head的第1个字母。
    i:成语 取英语成语 idiom的第1个字母。
    j:简称略语 取汉字“简”的声母。
    k:后接成分
    l:习用语 习用语尚未成为成语,有点“临时性”,取“临”的声母。
    m:数词 取英语 numeral的第3个字母,n,u已有他用。
    Ng:名语素 名词性语素。名词代码为 n,语素代码g前面置以N。
    n:名词 取英语名词 noun的第1个字母。
    nr:人名 名词代码 n和“人(ren)”的声母并在一起。
    ns:地名 名词代码 n和处所词代码s并在一起。
    nt:机构团体 “团”的声母为 t,名词代码n和t并在一起。
    nz:其他专名 “专”的声母的第 1个字母为z,名词代码n和z并在一起。
    o:拟声词 取英语拟声词 onomatopoeia的第1个字母。
    p:介词 取英语介词 prepositional的第1个字母。
    q:量词 取英语 quantity的第1个字母。
    r:代词 取英语代词 pronoun的第2个字母,因p已用于介词。
    s:处所词 取英语 space的第1个字母。
    tg:时语素 时间词性语素。时间词代码为 t,在语素的代码g前面置以T。
    t:时间词 取英语 time的第1个字母。
    u:助词 取英语助词 auxiliary
    vg:动语素 动词性语素。动词代码为 v。在语素的代码g前面置以V。
    v:动词 取英语动词 verb的第一个字母。
    vd:副动词 直接作状语的动词。动词和副词的代码并在一起。
    vn:名动词 指具有名词功能的动词。动词和名词的代码并在一起。
    w:标点符号
    x:非语素字 非语素字只是一个符号,字母 x通常用于代表未知数、符号。
    y:语气词 取汉字“语”的声母。
    z:状态词 取汉字“状”的声母的前一个字母。
    un:未知词 不可识别词及用户自定义词组。取英文Unkonwn首两个字母。(非北大标准,CSW分词中定义)

3.1 jieba词性标注

import jieba
def dosegment_all(sentence):
    ''' 带词性标注,对句子进行分词,不排除停用词等 :param sentence:输入字符 :return: '''
    sentence_seged = jieba.posseg.cut(sentence.strip())
    outstr = ''
    for x in sentence_seged:
        outstr+="{}/{},".format(x.word,x.flag)
    #上面的for循环可以用python递推式构造生成器完成
    # outstr = ",".join([("%s/%s" %(x.word,x.flag)) for x in sentence_seged])
    return outstr

str = dosegment_all("我来到北京清华大学")
print(str)

3.2 hanlp词性标注

  • 这里使用java实现
    (1)在pom.xml文件中导入依赖
        <dependency>
            <groupId>com.hankcs</groupId>
            <artifactId>hanlp</artifactId>
            <version>portable-1.2.10</version>
        </dependency>

(2)编写测试类

import com.hankcs.hanlp.HanLP;
import java.util.List;
public class HanLPDemo { 
   
    public static void main(String[] args) { 
   
        //HanLP分词
        //https://github.com/hankcs/HanLP
        String text = "我来到北京清华大学";
        System.out.println("\n词性分析:");
        System.out.println(HanLP.segment(text));
    }
}

4 关键词提取

4.1 jieba关键词提取

4.1.1 基于TF-IDF算法

  • 简述
    (1)TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术。
    (2)TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
    (3)字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
    (4)TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,互联网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。
  • 原理
    (1)在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被正规化,以防止它偏向长的文件。同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。
    (2)逆向文件频率(inverse document frequency,IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到
    (3)高权重的TF-IDF:某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。
    因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
  • 使用
''' 关键词抽取基于TF-IDF算法: 基于 TF-IDF(term frequency–inverse document frequency) 算法的关键词抽取: import jieba.analyse jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) sentence :为待提取的文本 topK: 为返回几个 TF/IDF 权重最大的关键词,默认值为 20 withWeight : 为是否一并返回关键词权重值,默认值为 False allowPOS : 仅包括指定词性的词,默认值为空,即不筛选 '''
import jieba.analyse

sentence = """ 现在随着互联网的发展,网络的上传和下载文件的速度有了极大的提高。因此现在的基础设施,越来越多高要求的应用有了可行性。人工智能,深度学习,自然语言处理等网络热词频频出现在我们的视野,那么,到底什么是自然语言处理呢?接下来就由我们来给大家科普一下自然语言处理到底是什么,做什么,以及对我们有什么帮助。 首先,自然语言处理是人工智能的一个分支,最终的目标和人工智能一样都是模仿人的行为,而自然语言处理的终极目标细化到对语言的理解,使计算机像人一样阅读和理解语言,并且给出相应符合人类思维的回答。实现它的方式有很多,可以基于统计,也可以基于深度学习等方法。 简单来说,自然语言处理就是,对计算机中各种各样的语言文本文件进行分析和应用上的处理。比如分析出一段文字的语义是否是消极的,又或者是辨别出一段文字的名词,形容词等。 具体来说,自然语言处理,英文是Natural Language Processing,简写NLP。可以把它分成“自然语言”和“处理”两部分。先来看自然语言。现在世界上所有的语种语言,都属于自然语言,包括汉语、英语、法语等。然后再来看“处理”。这个“处理”是指计算机进行处理。但计算机毕竟不是人,无法像人一样处理文本,需要有自己的处理方式。因此自然语言处理,即是计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期望的结果。 正如机械解放人类的双手一样,自然语言处理的目的在于用计算机代替人工来处理大规模的自然语言信息。它是人工智能、计算机科学、信息工程的交叉领域,涉及统计学、语言学等的知识。由于语言是人类思维的证明,故自然语言处理是人工智能的最高境界,被誉为“人工智能皇冠上的明珠”。 那么,自然语言处理具体能够给我们带来些什么呢: 下面是自然语言处理在整个领域中所处的具体位置和它主要做的一些内容: 自然语言处理的应用非常的广泛而且实用,下面针对自然语言处理的细分领域,让我们一起深入自然语言处理吧! 语义理解: 语义理解技术简单来说就是让计算机像人一样实现对文本篇章的理解,并且回答与篇章相关问题的过程。语义理解更注重于对上下文的理解以及对答案精准程度的把控。比如说,给出一段文字,然后再提出一个问题,计算机通过算法模型,根据文本的语义输出这个问题的答案。下面这张图是一个实例,计算机通过阅读理解了文章Passage和问题Question之后,回答相应的答案。 demo 2.2 文本摘要 就是交给计算机一段文字或者是一整篇论文,然后计算机根据你的正文来输出针对这段文字的摘要。其核心技术是要聚焦到文本文件最核心的部分,然后自动生成摘要。这个技术模仿了人独有的一个特征,那就是注意力。我们人在面对多个事务之前,总是会有优先级。就像你在酒吧当中,很多人都在说话,但是如果有人叫你的名字,或者你对某个人很感兴趣,那么你的大脑就会过滤掉其他的声音,而专注于你关注的事务。你看,计算机能做到这样的事,是不是越来越有人类的呢? 2.3 语言推理和溯因自然语言推理(aNLI) 语言推理:给计算机输入两个句子,然后计算机给你判断出两个句子之间的关系,比如是增强关系,或者是因果关系等。 demo 溯因自然语言推理(aNLI):这是计算机模仿人类想象力的一种实现,因为人在面对一个问题的时候,比如有人问你什么是蓝色的事务,那么你的脑海中就会产生大量的与蓝色相关的事务,如天空,蓝鲸,蓝色汽车等,甚至也会联想到和蓝色不相关的,如篮子,兰花等。Anli就是使计算机模仿人类的日常对话的技术,它相较于自然语言推理的话,想象空间更大,并且更加符合人类的日常交流。 2.4 情绪分析 情绪分析是自然语言处理中文本分类的一种具体的应用。 文本分类是指用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。伴随着信息的爆炸式增长,人工的标注每个数据属于哪一个类别已经变得非常耗时,并且质量低下,因为受到标注人主观意识的影响。因此,利用计算机自动的来实现对文本进行分类的变得具有很大的意义,将重复且枯燥的文本分类任务交由计算机进行处理能够有效克服以上问题,同时所分类的数据具有一致性、高质量等特点。 情绪分析是计算机在学习了人类情绪特点之后对文本进行情绪上的分类,识别给定文本的情绪(比如,非常消极、消极、中性、积极、非常积极)。如果句子措辞清晰明确,比如“我不喜欢冬天的天气”,情绪分析就可以很简单。然而,当人工智能系统遇到具有翻转结构或否定的句子时,情绪分析可能会变得更具挑战性,例如“说讨厌冬天的天气不是我真正的事情,这是完全不准确的。情感分析核心难点在于如何理解文本情绪以及如何度量文本之间的距离。 下面是一个例子如图所示: demo 2.5 机器翻译 简单来说,就是利用计算机技术实现从一种自然语言到另外一种自然语言的翻译过程。现在基于统计,深度学习的机器翻译方法突破了之前基于规则和实例翻译方法的局限性,翻译性能取得巨大提升。基于深度神经网络的机器翻译在日常口语等一些场景的成功应用已经显现出了巨大的潜力。随着上下文的语境表征和知识逻辑推理能力的发展,自然语言知识图谱不断扩充,机器翻译将会在多轮对话翻译及篇章翻译等领域取得更大进展。 2.6 问答系统和对话系统 严格上来说,问答系统和对话系统是人工智能多个领域分支结合起来共同实现的技术,自然语言处理是系统中不可获取的一部分。对话系统是接受用户提出的的问题,并返回像人一样相应的回答。常见形式为检索式、抽取式和生成式三种。近年来交互式也逐渐受到关注。典型应用有智能客服。与问答系统有许多相通之处,区别在于问答系统旨在直接给出精准回答,回答是否口语化不在主要考虑范围内;而对话系统旨在以口语化的自然语言对话的方式解决用户问题。对话系统目前分闲聊式和任务导向型。前者主要应用有siri、小冰等;后者主要应用有车载聊天机器人。(对话系统和问答系统应该是最接近NLP终极目标的领域) 3 应用实现的一般步骤 好了,我们了解了自然语言模仿了人类的方方面面,想象力,注意力,理解能力,情绪和对话等等,那么,我们到底是怎么让计算机实现这些技术的呢?下面我们就了解一下自然语言的基本技术吧! 其实现在要实现这些自然语言的技术,一定离不开大数据的支持。像人一样,人类对一件事情做出什么样的反应,有非常大的比重是来自于人类之前经历过的事情,也就是所谓的经验。有了经验,你才会对做某个事情更加得心应手。比如你去考试,如果你在之前已经做了类似的很多题目了,那么你就学习到了很多经验,基于这些经验,这次考试你做出的选择一般来说都是对的。计算机也同样如此,背后大数据的支撑,就是计算机所谓的“经验”,利用这些数据,计算机就可以做出更好更加正确的模仿人类。 另外,自然语言处理的很多细分应用场景中,一般都离不开几个必要的步骤,在介绍具体的实现细节之前,先举一个简单的现实例子来预热一下,准备好了吗? 比如说你想要做一个模型,让计算机帮你分析一个人是否可以做你的男/女朋友,首先你在现实中是对大量的人本身有一个基本度量的,你会很清楚这些人当中哪些是符合你的预期,适合做男女朋友的,哪些坚决不行。然后把这个人的特征抽取出来,比如你喜欢的人身高要在1.6米以上,善良,有车有房等等,计算机就可以根据这些具体量化的特征进行判断,从而输出适合和不适合两个答案。如果计算机输出不符合你的预期,那么就调整输入的特征参数(因为最开始计算机是不知道你身高的要求是1.6米的),将身高这个特征调整为1.55米,或者调整这个特征占整个特征的比重等等,然后重新计算输出,不断的循环,不断的调整特征的参数,直到输出大概率都符合你的预期为止。这样,一个男女朋友判断模型就做出来了。 好了,我们了解了一个简单的模型是怎么实现了之后,具体展开聊聊每个步骤具体要做的事情。 一是获取数据集,让计算机获得所谓的习题和答案。 二是对数据集进行数据的预处理,预处理过程中要对数据集中没有用和重复的词语进行处理,让计算机获得的数据集是高质量的,然后要对这些数据集进行分词,因为计算机是不能直接识别理解一个一个的文字的,所以为了让计算机可以量化每一个文字,我们要先把数据集分成一个一个的词,然后进行特征工程,也就是把每个词变成一个一个的向量。词向量基于某个规则进行(如one-hot、word2vec),每一个词向量不是随机产生的,而是会和周围的其他文字共同计算之后产生,这样每个词向量就和周围的词向量产生了联系,计算机就是通过这种方式来实现理解每个文字之间的联系的。之后就是针对不同的应用进行具体特征的选择,常用算法有(DF、MI、IG、CHI、WLLR、WFO等),至此,就把一个人可以理解的文字集合转变成了计算机可以理解的词向量集合。 三是对某个应用构造具体的模型,我们把这些词向量集合输入计算机之后,根据某个模型(也就是一个算法),基于数据集的“经验”进行计算,从而产生我们想要的结果,如果计算的结果不符合我们的预期,那么就调整每个输入特征的权重,在不断的循环优化中,逐渐的达成我们想要的预期,就像是不断做题的过程,获得了经验就可以做对这个题目。这个过程就是所谓一个计算机的模型学习,将知识转化为经验的过程。 最后就是对模型进行评估,一般我们把数据集分成训练集和测试集两个部分,训练集就是用于对模型进行训练的过程,过程中会不断优化每个输入特征的参数权重。而测试集就是检验我们模型的准确率,区别就在于使用测试集的这个过程不会改变参数权重,而是仅仅观察模型输出的答案是否符合我们的预期。 以上,就是一般情况下自然语言处理必做的几个步骤。 常见的模型分为机器学习模型和深度学习两种: 常见的机器学习模型有KNN,SVM,Naive Bayes,决策树,GBDT,K-means等。 常见的深度学习模型有CNN,RNN,LSTM,Seq2Seq,Fast Text,Text CNN等。 4 未来发展 现在几乎人人都离不开互联网,而且会将大量的文本数据存储放在网络上,这样就产生了大量的自然语言文本文件,这是一个巨大的资源,自然语言处理现在的发展很快,越来越多的人把注意力放在自然语言处理上面,很多方面的应用都有很大的进展,精度也越来越向人类靠近,甚至某些方面已经超越人类。但是,由于所有应用方面都是基于一个很简单的事情来做,跟具体人能干的事情还是差得很远。这些任务大多都只能对应于人的感知,比如识别一个图片里的东西或视频里的东西,都是人类几秒钟能做的事情,但是对于人类需要几个小时,甚至很多天才能做的事情,是没有涉及到的。所以自然语言处理有非常大的发展空间。 """
keywords = jieba.analyse.extract_tags(sentence,
                                      topK=36,
                                      withWeight=True,
                                      allowPOS=('n', 'nr', 'ns'))
print("TF-IDF算法提取关键词:-------------------------------------------")
for item in keywords:
    print(item[0], item[1])

4.1.2 基于TextRank算法

  • 简介
    将待抽取关键词的文本进行分词。以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
    计算图中节点的PageRank,注意是无向带权图。
  • 原理
    (1)将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。
    由此可以得到句子的集合和单词的集合。
    (2)每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:
    w1, w2, w3, w4, w5, …, wn
    w1, w2, …, wk、w2, w3, …,wk+1、w3, w4, …,wk+2等都是一个窗口。
    (3)在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。
    (4)基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。
  • 使用
import jieba.analyse
sentence = """ 现在随着互联网的发展,网络的上传和下载文件的速度有了极大的提高。因此现在的基础设施,越来越多高要求的应用有了可行性。人工智能,深度学习,自然语言处理等网络热词频频出现在我们的视野,那么,到底什么是自然语言处理呢?接下来就由我们来给大家科普一下自然语言处理到底是什么,做什么,以及对我们有什么帮助。 首先,自然语言处理是人工智能的一个分支,最终的目标和人工智能一样都是模仿人的行为,而自然语言处理的终极目标细化到对语言的理解,使计算机像人一样阅读和理解语言,并且给出相应符合人类思维的回答。实现它的方式有很多,可以基于统计,也可以基于深度学习等方法。 简单来说,自然语言处理就是,对计算机中各种各样的语言文本文件进行分析和应用上的处理。比如分析出一段文字的语义是否是消极的,又或者是辨别出一段文字的名词,形容词等。 具体来说,自然语言处理,英文是Natural Language Processing,简写NLP。可以把它分成“自然语言”和“处理”两部分。先来看自然语言。现在世界上所有的语种语言,都属于自然语言,包括汉语、英语、法语等。然后再来看“处理”。这个“处理”是指计算机进行处理。但计算机毕竟不是人,无法像人一样处理文本,需要有自己的处理方式。因此自然语言处理,即是计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期望的结果。 正如机械解放人类的双手一样,自然语言处理的目的在于用计算机代替人工来处理大规模的自然语言信息。它是人工智能、计算机科学、信息工程的交叉领域,涉及统计学、语言学等的知识。由于语言是人类思维的证明,故自然语言处理是人工智能的最高境界,被誉为“人工智能皇冠上的明珠”。 那么,自然语言处理具体能够给我们带来些什么呢: 下面是自然语言处理在整个领域中所处的具体位置和它主要做的一些内容: 自然语言处理的应用非常的广泛而且实用,下面针对自然语言处理的细分领域,让我们一起深入自然语言处理吧! 语义理解: 语义理解技术简单来说就是让计算机像人一样实现对文本篇章的理解,并且回答与篇章相关问题的过程。语义理解更注重于对上下文的理解以及对答案精准程度的把控。比如说,给出一段文字,然后再提出一个问题,计算机通过算法模型,根据文本的语义输出这个问题的答案。下面这张图是一个实例,计算机通过阅读理解了文章Passage和问题Question之后,回答相应的答案。 demo 2.2 文本摘要 就是交给计算机一段文字或者是一整篇论文,然后计算机根据你的正文来输出针对这段文字的摘要。其核心技术是要聚焦到文本文件最核心的部分,然后自动生成摘要。这个技术模仿了人独有的一个特征,那就是注意力。我们人在面对多个事务之前,总是会有优先级。就像你在酒吧当中,很多人都在说话,但是如果有人叫你的名字,或者你对某个人很感兴趣,那么你的大脑就会过滤掉其他的声音,而专注于你关注的事务。你看,计算机能做到这样的事,是不是越来越有人类的呢? 2.3 语言推理和溯因自然语言推理(aNLI) 语言推理:给计算机输入两个句子,然后计算机给你判断出两个句子之间的关系,比如是增强关系,或者是因果关系等。 demo 溯因自然语言推理(aNLI):这是计算机模仿人类想象力的一种实现,因为人在面对一个问题的时候,比如有人问你什么是蓝色的事务,那么你的脑海中就会产生大量的与蓝色相关的事务,如天空,蓝鲸,蓝色汽车等,甚至也会联想到和蓝色不相关的,如篮子,兰花等。Anli就是使计算机模仿人类的日常对话的技术,它相较于自然语言推理的话,想象空间更大,并且更加符合人类的日常交流。 2.4 情绪分析 情绪分析是自然语言处理中文本分类的一种具体的应用。 文本分类是指用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。伴随着信息的爆炸式增长,人工的标注每个数据属于哪一个类别已经变得非常耗时,并且质量低下,因为受到标注人主观意识的影响。因此,利用计算机自动的来实现对文本进行分类的变得具有很大的意义,将重复且枯燥的文本分类任务交由计算机进行处理能够有效克服以上问题,同时所分类的数据具有一致性、高质量等特点。 情绪分析是计算机在学习了人类情绪特点之后对文本进行情绪上的分类,识别给定文本的情绪(比如,非常消极、消极、中性、积极、非常积极)。如果句子措辞清晰明确,比如“我不喜欢冬天的天气”,情绪分析就可以很简单。然而,当人工智能系统遇到具有翻转结构或否定的句子时,情绪分析可能会变得更具挑战性,例如“说讨厌冬天的天气不是我真正的事情,这是完全不准确的。情感分析核心难点在于如何理解文本情绪以及如何度量文本之间的距离。 下面是一个例子如图所示: demo 2.5 机器翻译 简单来说,就是利用计算机技术实现从一种自然语言到另外一种自然语言的翻译过程。现在基于统计,深度学习的机器翻译方法突破了之前基于规则和实例翻译方法的局限性,翻译性能取得巨大提升。基于深度神经网络的机器翻译在日常口语等一些场景的成功应用已经显现出了巨大的潜力。随着上下文的语境表征和知识逻辑推理能力的发展,自然语言知识图谱不断扩充,机器翻译将会在多轮对话翻译及篇章翻译等领域取得更大进展。 2.6 问答系统和对话系统 严格上来说,问答系统和对话系统是人工智能多个领域分支结合起来共同实现的技术,自然语言处理是系统中不可获取的一部分。对话系统是接受用户提出的的问题,并返回像人一样相应的回答。常见形式为检索式、抽取式和生成式三种。近年来交互式也逐渐受到关注。典型应用有智能客服。与问答系统有许多相通之处,区别在于问答系统旨在直接给出精准回答,回答是否口语化不在主要考虑范围内;而对话系统旨在以口语化的自然语言对话的方式解决用户问题。对话系统目前分闲聊式和任务导向型。前者主要应用有siri、小冰等;后者主要应用有车载聊天机器人。(对话系统和问答系统应该是最接近NLP终极目标的领域) 3 应用实现的一般步骤 好了,我们了解了自然语言模仿了人类的方方面面,想象力,注意力,理解能力,情绪和对话等等,那么,我们到底是怎么让计算机实现这些技术的呢?下面我们就了解一下自然语言的基本技术吧! 其实现在要实现这些自然语言的技术,一定离不开大数据的支持。像人一样,人类对一件事情做出什么样的反应,有非常大的比重是来自于人类之前经历过的事情,也就是所谓的经验。有了经验,你才会对做某个事情更加得心应手。比如你去考试,如果你在之前已经做了类似的很多题目了,那么你就学习到了很多经验,基于这些经验,这次考试你做出的选择一般来说都是对的。计算机也同样如此,背后大数据的支撑,就是计算机所谓的“经验”,利用这些数据,计算机就可以做出更好更加正确的模仿人类。 另外,自然语言处理的很多细分应用场景中,一般都离不开几个必要的步骤,在介绍具体的实现细节之前,先举一个简单的现实例子来预热一下,准备好了吗? 比如说你想要做一个模型,让计算机帮你分析一个人是否可以做你的男/女朋友,首先你在现实中是对大量的人本身有一个基本度量的,你会很清楚这些人当中哪些是符合你的预期,适合做男女朋友的,哪些坚决不行。然后把这个人的特征抽取出来,比如你喜欢的人身高要在1.6米以上,善良,有车有房等等,计算机就可以根据这些具体量化的特征进行判断,从而输出适合和不适合两个答案。如果计算机输出不符合你的预期,那么就调整输入的特征参数(因为最开始计算机是不知道你身高的要求是1.6米的),将身高这个特征调整为1.55米,或者调整这个特征占整个特征的比重等等,然后重新计算输出,不断的循环,不断的调整特征的参数,直到输出大概率都符合你的预期为止。这样,一个男女朋友判断模型就做出来了。 好了,我们了解了一个简单的模型是怎么实现了之后,具体展开聊聊每个步骤具体要做的事情。 一是获取数据集,让计算机获得所谓的习题和答案。 二是对数据集进行数据的预处理,预处理过程中要对数据集中没有用和重复的词语进行处理,让计算机获得的数据集是高质量的,然后要对这些数据集进行分词,因为计算机是不能直接识别理解一个一个的文字的,所以为了让计算机可以量化每一个文字,我们要先把数据集分成一个一个的词,然后进行特征工程,也就是把每个词变成一个一个的向量。词向量基于某个规则进行(如one-hot、word2vec),每一个词向量不是随机产生的,而是会和周围的其他文字共同计算之后产生,这样每个词向量就和周围的词向量产生了联系,计算机就是通过这种方式来实现理解每个文字之间的联系的。之后就是针对不同的应用进行具体特征的选择,常用算法有(DF、MI、IG、CHI、WLLR、WFO等),至此,就把一个人可以理解的文字集合转变成了计算机可以理解的词向量集合。 三是对某个应用构造具体的模型,我们把这些词向量集合输入计算机之后,根据某个模型(也就是一个算法),基于数据集的“经验”进行计算,从而产生我们想要的结果,如果计算的结果不符合我们的预期,那么就调整每个输入特征的权重,在不断的循环优化中,逐渐的达成我们想要的预期,就像是不断做题的过程,获得了经验就可以做对这个题目。这个过程就是所谓一个计算机的模型学习,将知识转化为经验的过程。 最后就是对模型进行评估,一般我们把数据集分成训练集和测试集两个部分,训练集就是用于对模型进行训练的过程,过程中会不断优化每个输入特征的参数权重。而测试集就是检验我们模型的准确率,区别就在于使用测试集的这个过程不会改变参数权重,而是仅仅观察模型输出的答案是否符合我们的预期。 以上,就是一般情况下自然语言处理必做的几个步骤。 常见的模型分为机器学习模型和深度学习两种: 常见的机器学习模型有KNN,SVM,Naive Bayes,决策树,GBDT,K-means等。 常见的深度学习模型有CNN,RNN,LSTM,Seq2Seq,Fast Text,Text CNN等。 4 未来发展 现在几乎人人都离不开互联网,而且会将大量的文本数据存储放在网络上,这样就产生了大量的自然语言文本文件,这是一个巨大的资源,自然语言处理现在的发展很快,越来越多的人把注意力放在自然语言处理上面,很多方面的应用都有很大的进展,精度也越来越向人类靠近,甚至某些方面已经超越人类。但是,由于所有应用方面都是基于一个很简单的事情来做,跟具体人能干的事情还是差得很远。这些任务大多都只能对应于人的感知,比如识别一个图片里的东西或视频里的东西,都是人类几秒钟能做的事情,但是对于人类需要几个小时,甚至很多天才能做的事情,是没有涉及到的。所以自然语言处理有非常大的发展空间。 """
keywords = jieba.analyse.textrank(sentence,
                                  topK=36,
                                  withWeight=True,
                                  allowPOS=('n', 'nr', 'ns'))
print("TextRank算法提取关键词:==============================")
for item in keywords:
    print(item[0], item[1])

4.2 hanlp关键词提取

(1)在pom.xml中导入hanlp依赖

      <dependency>
            <groupId>com.hankcs</groupId>
            <artifactId>hanlp</artifactId>
            <version>portable-1.2.10</version>
        </dependency>

(2)编写测试类

import com.hankcs.hanlp.HanLP;
import java.util.List;
public class HanLPDemo { 
   
    public static void main(String[] args) { 
   
        System.out.println("开始时间:"+System.currentTimeMillis());
        String document = "现在随着互联网的发展,网络的上传和下载文件的速度有了极大的提高。因此现在的基础设施,越来越多高要求的应用有了可行性。人工智能,深度学习,自然语言处理等网络热词频频出现在我们的视野,那么,到底什么是自然语言处理呢?接下来就由我们来给大家科普一下自然语言处理到底是什么,做什么,以及对我们有什么帮助。\n" +
                "首先,自然语言处理是人工智能的一个分支,最终的目标和人工智能一样都是模仿人的行为,而自然语言处理的终极目标细化到对语言的理解,使计算机像人一样阅读和理解语言,并且给出相应符合人类思维的回答。实现它的方式有很多,可以基于统计,也可以基于深度学习等方法。\n" +
                "简单来说,自然语言处理就是,对计算机中各种各样的语言文本文件进行分析和应用上的处理。比如分析出一段文字的语义是否是消极的,又或者是辨别出一段文字的名词,形容词等。\n" +
                "具体来说,自然语言处理,英文是Natural Language Processing,简写NLP。可以把它分成“自然语言”和“处理”两部分。先来看自然语言。现在世界上所有的语种语言,都属于自然语言,包括汉语、英语、法语等。然后再来看“处理”。这个“处理”是指计算机进行处理。但计算机毕竟不是人,无法像人一样处理文本,需要有自己的处理方式。因此自然语言处理,即是计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期望的结果。\n" +
                "正如机械解放人类的双手一样,自然语言处理的目的在于用计算机代替人工来处理大规模的自然语言信息。它是人工智能、计算机科学、信息工程的交叉领域,涉及统计学、语言学等的知识。由于语言是人类思维的证明,故自然语言处理是人工智能的最高境界,被誉为“人工智能皇冠上的明珠”。\n" +
                "那么,自然语言处理具体能够给我们带来些什么呢:\n" +
                "下面是自然语言处理在整个领域中所处的具体位置和它主要做的一些内容:\n" +
                "\n" +
                "自然语言处理的应用非常的广泛而且实用,下面针对自然语言处理的细分领域,让我们一起深入自然语言处理吧!\n" +
                "语义理解:\n" +
                "语义理解技术简单来说就是让计算机像人一样实现对文本篇章的理解,并且回答与篇章相关问题的过程。语义理解更注重于对上下文的理解以及对答案精准程度的把控。比如说,给出一段文字,然后再提出一个问题,计算机通过算法模型,根据文本的语义输出这个问题的答案。下面这张图是一个实例,计算机通过阅读理解了文章Passage和问题Question之后,回答相应的答案。\n" +
                "demo\n" +
                "2.2 文本摘要\n" +
                "就是交给计算机一段文字或者是一整篇论文,然后计算机根据你的正文来输出针对这段文字的摘要。其核心技术是要聚焦到文本文件最核心的部分,然后自动生成摘要。这个技术模仿了人独有的一个特征,那就是注意力。我们人在面对多个事务之前,总是会有优先级。就像你在酒吧当中,很多人都在说话,但是如果有人叫你的名字,或者你对某个人很感兴趣,那么你的大脑就会过滤掉其他的声音,而专注于你关注的事务。你看,计算机能做到这样的事,是不是越来越有人类的呢?\n" +
                "2.3 语言推理和溯因自然语言推理(aNLI)\n" +
                "语言推理:给计算机输入两个句子,然后计算机给你判断出两个句子之间的关系,比如是增强关系,或者是因果关系等。\n" +
                "demo\n" +
                "溯因自然语言推理(aNLI):这是计算机模仿人类想象力的一种实现,因为人在面对一个问题的时候,比如有人问你什么是蓝色的事务,那么你的脑海中就会产生大量的与蓝色相关的事务,如天空,蓝鲸,蓝色汽车等,甚至也会联想到和蓝色不相关的,如篮子,兰花等。Anli就是使计算机模仿人类的日常对话的技术,它相较于自然语言推理的话,想象空间更大,并且更加符合人类的日常交流。\n" +
                "2.4 情绪分析\n" +
                "情绪分析是自然语言处理中文本分类的一种具体的应用。\n" +
                "文本分类是指用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。伴随着信息的爆炸式增长,人工的标注每个数据属于哪一个类别已经变得非常耗时,并且质量低下,因为受到标注人主观意识的影响。因此,利用计算机自动的来实现对文本进行分类的变得具有很大的意义,将重复且枯燥的文本分类任务交由计算机进行处理能够有效克服以上问题,同时所分类的数据具有一致性、高质量等特点。\n" +
                "情绪分析是计算机在学习了人类情绪特点之后对文本进行情绪上的分类,识别给定文本的情绪(比如,非常消极、消极、中性、积极、非常积极)。如果句子措辞清晰明确,比如“我不喜欢冬天的天气”,情绪分析就可以很简单。然而,当人工智能系统遇到具有翻转结构或否定的句子时,情绪分析可能会变得更具挑战性,例如“说讨厌冬天的天气不是我真正的事情,这是完全不准确的。情感分析核心难点在于如何理解文本情绪以及如何度量文本之间的距离。\n" +
                "下面是一个例子如图所示:\n" +
                "demo\n" +
                "2.5 机器翻译\n" +
                "简单来说,就是利用计算机技术实现从一种自然语言到另外一种自然语言的翻译过程。现在基于统计,深度学习的机器翻译方法突破了之前基于规则和实例翻译方法的局限性,翻译性能取得巨大提升。基于深度神经网络的机器翻译在日常口语等一些场景的成功应用已经显现出了巨大的潜力。随着上下文的语境表征和知识逻辑推理能力的发展,自然语言知识图谱不断扩充,机器翻译将会在多轮对话翻译及篇章翻译等领域取得更大进展。\n" +
                "2.6 问答系统和对话系统\n" +
                "严格上来说,问答系统和对话系统是人工智能多个领域分支结合起来共同实现的技术,自然语言处理是系统中不可获取的一部分。对话系统是接受用户提出的的问题,并返回像人一样相应的回答。常见形式为检索式、抽取式和生成式三种。近年来交互式也逐渐受到关注。典型应用有智能客服。与问答系统有许多相通之处,区别在于问答系统旨在直接给出精准回答,回答是否口语化不在主要考虑范围内;而对话系统旨在以口语化的自然语言对话的方式解决用户问题。对话系统目前分闲聊式和任务导向型。前者主要应用有siri、小冰等;后者主要应用有车载聊天机器人。(对话系统和问答系统应该是最接近NLP终极目标的领域)\n" +
                "3 应用实现的一般步骤\n" +
                "好了,我们了解了自然语言模仿了人类的方方面面,想象力,注意力,理解能力,情绪和对话等等,那么,我们到底是怎么让计算机实现这些技术的呢?下面我们就了解一下自然语言的基本技术吧!\n" +
                "其实现在要实现这些自然语言的技术,一定离不开大数据的支持。像人一样,人类对一件事情做出什么样的反应,有非常大的比重是来自于人类之前经历过的事情,也就是所谓的经验。有了经验,你才会对做某个事情更加得心应手。比如你去考试,如果你在之前已经做了类似的很多题目了,那么你就学习到了很多经验,基于这些经验,这次考试你做出的选择一般来说都是对的。计算机也同样如此,背后大数据的支撑,就是计算机所谓的“经验”,利用这些数据,计算机就可以做出更好更加正确的模仿人类。\n" +
                "另外,自然语言处理的很多细分应用场景中,一般都离不开几个必要的步骤,在介绍具体的实现细节之前,先举一个简单的现实例子来预热一下,准备好了吗?\n" +
                "比如说你想要做一个模型,让计算机帮你分析一个人是否可以做你的男/女朋友,首先你在现实中是对大量的人本身有一个基本度量的,你会很清楚这些人当中哪些是符合你的预期,适合做男女朋友的,哪些坚决不行。然后把这个人的特征抽取出来,比如你喜欢的人身高要在1.6米以上,善良,有车有房等等,计算机就可以根据这些具体量化的特征进行判断,从而输出适合和不适合两个答案。如果计算机输出不符合你的预期,那么就调整输入的特征参数(因为最开始计算机是不知道你身高的要求是1.6米的),将身高这个特征调整为1.55米,或者调整这个特征占整个特征的比重等等,然后重新计算输出,不断的循环,不断的调整特征的参数,直到输出大概率都符合你的预期为止。这样,一个男女朋友判断模型就做出来了。\n" +
                "好了,我们了解了一个简单的模型是怎么实现了之后,具体展开聊聊每个步骤具体要做的事情。\n" +
                "一是获取数据集,让计算机获得所谓的习题和答案。\n" +
                "二是对数据集进行数据的预处理,预处理过程中要对数据集中没有用和重复的词语进行处理,让计算机获得的数据集是高质量的,然后要对这些数据集进行分词,因为计算机是不能直接识别理解一个一个的文字的,所以为了让计算机可以量化每一个文字,我们要先把数据集分成一个一个的词,然后进行特征工程,也就是把每个词变成一个一个的向量。词向量基于某个规则进行(如one-hot、word2vec),每一个词向量不是随机产生的,而是会和周围的其他文字共同计算之后产生,这样每个词向量就和周围的词向量产生了联系,计算机就是通过这种方式来实现理解每个文字之间的联系的。之后就是针对不同的应用进行具体特征的选择,常用算法有(DF、MI、IG、CHI、WLLR、WFO等),至此,就把一个人可以理解的文字集合转变成了计算机可以理解的词向量集合。\n" +
                "三是对某个应用构造具体的模型,我们把这些词向量集合输入计算机之后,根据某个模型(也就是一个算法),基于数据集的“经验”进行计算,从而产生我们想要的结果,如果计算的结果不符合我们的预期,那么就调整每个输入特征的权重,在不断的循环优化中,逐渐的达成我们想要的预期,就像是不断做题的过程,获得了经验就可以做对这个题目。这个过程就是所谓一个计算机的模型学习,将知识转化为经验的过程。\n" +
                "最后就是对模型进行评估,一般我们把数据集分成训练集和测试集两个部分,训练集就是用于对模型进行训练的过程,过程中会不断优化每个输入特征的参数权重。而测试集就是检验我们模型的准确率,区别就在于使用测试集的这个过程不会改变参数权重,而是仅仅观察模型输出的答案是否符合我们的预期。\n" +
                "以上,就是一般情况下自然语言处理必做的几个步骤。\n" +
                "常见的模型分为机器学习模型和深度学习两种:\n" +
                "常见的机器学习模型有KNN,SVM,Naive Bayes,决策树,GBDT,K-means等。\n" +
                "常见的深度学习模型有CNN,RNN,LSTM,Seq2Seq,Fast Text,Text CNN等。\n" +
                "4 未来发展\n" +
                "现在几乎人人都离不开互联网,而且会将大量的文本数据存储放在网络上,这样就产生了大量的自然语言文本文件,这是一个巨大的资源,自然语言处理现在的发展很快,越来越多的人把注意力放在自然语言处理上面,很多方面的应用都有很大的进展,精度也越来越向人类靠近,甚至某些方面已经超越人类。但是,由于所有应用方面都是基于一个很简单的事情来做,跟具体人能干的事情还是差得很远。这些任务大多都只能对应于人的感知,比如识别一个图片里的东西或视频里的东西,都是人类几秒钟能做的事情,但是对于人类需要几个小时,甚至很多天才能做的事情,是没有涉及到的。所以自然语言处理有非常大的发展空间。\n";
        List<String> keywordList = HanLP.extractKeyword(document, 3);
        System.out.println("\n关键词提取:");
        for (String keyword : keywordList) { 
   
            System.out.println(keyword);
        }
        /* 语言 自然 计算机 */
        System.out.println("\n结束时间:"+System.currentTimeMillis());
    }
}

4.3 SnowNLP实现文本摘要

  • 安装SnowNLP:pip install snownlp
from snownlp import SnowNLP
text = """ 现在随着互联网的发展,网络的上传和下载文件的速度有了极大的提高。因此现在的基础设施,越来越多高要求的应用有了可行性。人工智能,深度学习,自然语言处理等网络热词频频出现在我们的视野,那么,到底什么是自然语言处理呢?接下来就由我们来给大家科普一下自然语言处理到底是什么,做什么,以及对我们有什么帮助。 首先,自然语言处理是人工智能的一个分支,最终的目标和人工智能一样都是模仿人的行为,而自然语言处理的终极目标细化到对语言的理解,使计算机像人一样阅读和理解语言,并且给出相应符合人类思维的回答。实现它的方式有很多,可以基于统计,也可以基于深度学习等方法。 简单来说,自然语言处理就是,对计算机中各种各样的语言文本文件进行分析和应用上的处理。比如分析出一段文字的语义是否是消极的,又或者是辨别出一段文字的名词,形容词等。 具体来说,自然语言处理,英文是Natural Language Processing,简写NLP。可以把它分成“自然语言”和“处理”两部分。先来看自然语言。现在世界上所有的语种语言,都属于自然语言,包括汉语、英语、法语等。然后再来看“处理”。这个“处理”是指计算机进行处理。但计算机毕竟不是人,无法像人一样处理文本,需要有自己的处理方式。因此自然语言处理,即是计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期望的结果。 正如机械解放人类的双手一样,自然语言处理的目的在于用计算机代替人工来处理大规模的自然语言信息。它是人工智能、计算机科学、信息工程的交叉领域,涉及统计学、语言学等的知识。由于语言是人类思维的证明,故自然语言处理是人工智能的最高境界,被誉为“人工智能皇冠上的明珠”。 那么,自然语言处理具体能够给我们带来些什么呢: 下面是自然语言处理在整个领域中所处的具体位置和它主要做的一些内容: 自然语言处理的应用非常的广泛而且实用,下面针对自然语言处理的细分领域,让我们一起深入自然语言处理吧! 语义理解: 语义理解技术简单来说就是让计算机像人一样实现对文本篇章的理解,并且回答与篇章相关问题的过程。语义理解更注重于对上下文的理解以及对答案精准程度的把控。比如说,给出一段文字,然后再提出一个问题,计算机通过算法模型,根据文本的语义输出这个问题的答案。下面这张图是一个实例,计算机通过阅读理解了文章Passage和问题Question之后,回答相应的答案。 demo 2.2 文本摘要 就是交给计算机一段文字或者是一整篇论文,然后计算机根据你的正文来输出针对这段文字的摘要。其核心技术是要聚焦到文本文件最核心的部分,然后自动生成摘要。这个技术模仿了人独有的一个特征,那就是注意力。我们人在面对多个事务之前,总是会有优先级。就像你在酒吧当中,很多人都在说话,但是如果有人叫你的名字,或者你对某个人很感兴趣,那么你的大脑就会过滤掉其他的声音,而专注于你关注的事务。你看,计算机能做到这样的事,是不是越来越有人类的呢? 2.3 语言推理和溯因自然语言推理(aNLI) 语言推理:给计算机输入两个句子,然后计算机给你判断出两个句子之间的关系,比如是增强关系,或者是因果关系等。 demo 溯因自然语言推理(aNLI):这是计算机模仿人类想象力的一种实现,因为人在面对一个问题的时候,比如有人问你什么是蓝色的事务,那么你的脑海中就会产生大量的与蓝色相关的事务,如天空,蓝鲸,蓝色汽车等,甚至也会联想到和蓝色不相关的,如篮子,兰花等。Anli就是使计算机模仿人类的日常对话的技术,它相较于自然语言推理的话,想象空间更大,并且更加符合人类的日常交流。 2.4 情绪分析 情绪分析是自然语言处理中文本分类的一种具体的应用。 文本分类是指用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。伴随着信息的爆炸式增长,人工的标注每个数据属于哪一个类别已经变得非常耗时,并且质量低下,因为受到标注人主观意识的影响。因此,利用计算机自动的来实现对文本进行分类的变得具有很大的意义,将重复且枯燥的文本分类任务交由计算机进行处理能够有效克服以上问题,同时所分类的数据具有一致性、高质量等特点。 情绪分析是计算机在学习了人类情绪特点之后对文本进行情绪上的分类,识别给定文本的情绪(比如,非常消极、消极、中性、积极、非常积极)。如果句子措辞清晰明确,比如“我不喜欢冬天的天气”,情绪分析就可以很简单。然而,当人工智能系统遇到具有翻转结构或否定的句子时,情绪分析可能会变得更具挑战性,例如“说讨厌冬天的天气不是我真正的事情,这是完全不准确的。情感分析核心难点在于如何理解文本情绪以及如何度量文本之间的距离。 下面是一个例子如图所示: demo 2.5 机器翻译 简单来说,就是利用计算机技术实现从一种自然语言到另外一种自然语言的翻译过程。现在基于统计,深度学习的机器翻译方法突破了之前基于规则和实例翻译方法的局限性,翻译性能取得巨大提升。基于深度神经网络的机器翻译在日常口语等一些场景的成功应用已经显现出了巨大的潜力。随着上下文的语境表征和知识逻辑推理能力的发展,自然语言知识图谱不断扩充,机器翻译将会在多轮对话翻译及篇章翻译等领域取得更大进展。 2.6 问答系统和对话系统 严格上来说,问答系统和对话系统是人工智能多个领域分支结合起来共同实现的技术,自然语言处理是系统中不可获取的一部分。对话系统是接受用户提出的的问题,并返回像人一样相应的回答。常见形式为检索式、抽取式和生成式三种。近年来交互式也逐渐受到关注。典型应用有智能客服。与问答系统有许多相通之处,区别在于问答系统旨在直接给出精准回答,回答是否口语化不在主要考虑范围内;而对话系统旨在以口语化的自然语言对话的方式解决用户问题。对话系统目前分闲聊式和任务导向型。前者主要应用有siri、小冰等;后者主要应用有车载聊天机器人。(对话系统和问答系统应该是最接近NLP终极目标的领域) 3 应用实现的一般步骤 好了,我们了解了自然语言模仿了人类的方方面面,想象力,注意力,理解能力,情绪和对话等等,那么,我们到底是怎么让计算机实现这些技术的呢?下面我们就了解一下自然语言的基本技术吧! 其实现在要实现这些自然语言的技术,一定离不开大数据的支持。像人一样,人类对一件事情做出什么样的反应,有非常大的比重是来自于人类之前经历过的事情,也就是所谓的经验。有了经验,你才会对做某个事情更加得心应手。比如你去考试,如果你在之前已经做了类似的很多题目了,那么你就学习到了很多经验,基于这些经验,这次考试你做出的选择一般来说都是对的。计算机也同样如此,背后大数据的支撑,就是计算机所谓的“经验”,利用这些数据,计算机就可以做出更好更加正确的模仿人类。 另外,自然语言处理的很多细分应用场景中,一般都离不开几个必要的步骤,在介绍具体的实现细节之前,先举一个简单的现实例子来预热一下,准备好了吗? 比如说你想要做一个模型,让计算机帮你分析一个人是否可以做你的男/女朋友,首先你在现实中是对大量的人本身有一个基本度量的,你会很清楚这些人当中哪些是符合你的预期,适合做男女朋友的,哪些坚决不行。然后把这个人的特征抽取出来,比如你喜欢的人身高要在1.6米以上,善良,有车有房等等,计算机就可以根据这些具体量化的特征进行判断,从而输出适合和不适合两个答案。如果计算机输出不符合你的预期,那么就调整输入的特征参数(因为最开始计算机是不知道你身高的要求是1.6米的),将身高这个特征调整为1.55米,或者调整这个特征占整个特征的比重等等,然后重新计算输出,不断的循环,不断的调整特征的参数,直到输出大概率都符合你的预期为止。这样,一个男女朋友判断模型就做出来了。 好了,我们了解了一个简单的模型是怎么实现了之后,具体展开聊聊每个步骤具体要做的事情。 一是获取数据集,让计算机获得所谓的习题和答案。 二是对数据集进行数据的预处理,预处理过程中要对数据集中没有用和重复的词语进行处理,让计算机获得的数据集是高质量的,然后要对这些数据集进行分词,因为计算机是不能直接识别理解一个一个的文字的,所以为了让计算机可以量化每一个文字,我们要先把数据集分成一个一个的词,然后进行特征工程,也就是把每个词变成一个一个的向量。词向量基于某个规则进行(如one-hot、word2vec),每一个词向量不是随机产生的,而是会和周围的其他文字共同计算之后产生,这样每个词向量就和周围的词向量产生了联系,计算机就是通过这种方式来实现理解每个文字之间的联系的。之后就是针对不同的应用进行具体特征的选择,常用算法有(DF、MI、IG、CHI、WLLR、WFO等),至此,就把一个人可以理解的文字集合转变成了计算机可以理解的词向量集合。 三是对某个应用构造具体的模型,我们把这些词向量集合输入计算机之后,根据某个模型(也就是一个算法),基于数据集的“经验”进行计算,从而产生我们想要的结果,如果计算的结果不符合我们的预期,那么就调整每个输入特征的权重,在不断的循环优化中,逐渐的达成我们想要的预期,就像是不断做题的过程,获得了经验就可以做对这个题目。这个过程就是所谓一个计算机的模型学习,将知识转化为经验的过程。 最后就是对模型进行评估,一般我们把数据集分成训练集和测试集两个部分,训练集就是用于对模型进行训练的过程,过程中会不断优化每个输入特征的参数权重。而测试集就是检验我们模型的准确率,区别就在于使用测试集的这个过程不会改变参数权重,而是仅仅观察模型输出的答案是否符合我们的预期。 以上,就是一般情况下自然语言处理必做的几个步骤。 常见的模型分为机器学习模型和深度学习两种: 常见的机器学习模型有KNN,SVM,Naive Bayes,决策树,GBDT,K-means等。 常见的深度学习模型有CNN,RNN,LSTM,Seq2Seq,Fast Text,Text CNN等。 4 未来发展 现在几乎人人都离不开互联网,而且会将大量的文本数据存储放在网络上,这样就产生了大量的自然语言文本文件,这是一个巨大的资源,自然语言处理现在的发展很快,越来越多的人把注意力放在自然语言处理上面,很多方面的应用都有很大的进展,精度也越来越向人类靠近,甚至某些方面已经超越人类。但是,由于所有应用方面都是基于一个很简单的事情来做,跟具体人能干的事情还是差得很远。这些任务大多都只能对应于人的感知,比如识别一个图片里的东西或视频里的东西,都是人类几秒钟能做的事情,但是对于人类需要几个小时,甚至很多天才能做的事情,是没有涉及到的。所以自然语言处理有非常大的发展空间。 """
s = SnowNLP(text)
print(s.keywords(3))

5 文本摘要

  • 文本摘要一般实现原理
    (1)用TextRank算法,它是一种文本排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它能够从一个给定的文本中提取出该文本的关键词、关键词组,并使用抽取式的自动文摘方法提取出该文本的关键句。
    (2)PageRank算法根据万维网上页面之间的链接关系计算每个页面的重要性;
    (3)TextRank算法将词视为“万维网上的节点”,根据词之间的共现关系计算每个词的重要性,并将PageRank中的有向边变为无向边。

5.1 textrank4zh实现文本摘要

  • 安装textrank4zh:
from textrank4zh import TextRank4Keyword, TextRank4Sentence
import jieba
import logging

print("\n下面是textrank4zh的例子:")
# 取消jieba分词的日志输出
jieba.setLogLevel(logging.INFO)
text = """ 现在随着互联网的发展,网络的上传和下载文件的速度有了极大的提高。因此现在的基础设施,越来越多高要求的应用有了可行性。人工智能,深度学习,自然语言处理等网络热词频频出现在我们的视野,那么,到底什么是自然语言处理呢?接下来就由我们来给大家科普一下自然语言处理到底是什么,做什么,以及对我们有什么帮助。 首先,自然语言处理是人工智能的一个分支,最终的目标和人工智能一样都是模仿人的行为,而自然语言处理的终极目标细化到对语言的理解,使计算机像人一样阅读和理解语言,并且给出相应符合人类思维的回答。实现它的方式有很多,可以基于统计,也可以基于深度学习等方法。 简单来说,自然语言处理就是,对计算机中各种各样的语言文本文件进行分析和应用上的处理。比如分析出一段文字的语义是否是消极的,又或者是辨别出一段文字的名词,形容词等。 具体来说,自然语言处理,英文是Natural Language Processing,简写NLP。可以把它分成“自然语言”和“处理”两部分。先来看自然语言。现在世界上所有的语种语言,都属于自然语言,包括汉语、英语、法语等。然后再来看“处理”。这个“处理”是指计算机进行处理。但计算机毕竟不是人,无法像人一样处理文本,需要有自己的处理方式。因此自然语言处理,即是计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期望的结果。 正如机械解放人类的双手一样,自然语言处理的目的在于用计算机代替人工来处理大规模的自然语言信息。它是人工智能、计算机科学、信息工程的交叉领域,涉及统计学、语言学等的知识。由于语言是人类思维的证明,故自然语言处理是人工智能的最高境界,被誉为“人工智能皇冠上的明珠”。 那么,自然语言处理具体能够给我们带来些什么呢: 下面是自然语言处理在整个领域中所处的具体位置和它主要做的一些内容: 自然语言处理的应用非常的广泛而且实用,下面针对自然语言处理的细分领域,让我们一起深入自然语言处理吧! 语义理解: 语义理解技术简单来说就是让计算机像人一样实现对文本篇章的理解,并且回答与篇章相关问题的过程。语义理解更注重于对上下文的理解以及对答案精准程度的把控。比如说,给出一段文字,然后再提出一个问题,计算机通过算法模型,根据文本的语义输出这个问题的答案。下面这张图是一个实例,计算机通过阅读理解了文章Passage和问题Question之后,回答相应的答案。 demo 2.2 文本摘要 就是交给计算机一段文字或者是一整篇论文,然后计算机根据你的正文来输出针对这段文字的摘要。其核心技术是要聚焦到文本文件最核心的部分,然后自动生成摘要。这个技术模仿了人独有的一个特征,那就是注意力。我们人在面对多个事务之前,总是会有优先级。就像你在酒吧当中,很多人都在说话,但是如果有人叫你的名字,或者你对某个人很感兴趣,那么你的大脑就会过滤掉其他的声音,而专注于你关注的事务。你看,计算机能做到这样的事,是不是越来越有人类的呢? 2.3 语言推理和溯因自然语言推理(aNLI) 语言推理:给计算机输入两个句子,然后计算机给你判断出两个句子之间的关系,比如是增强关系,或者是因果关系等。 demo 溯因自然语言推理(aNLI):这是计算机模仿人类想象力的一种实现,因为人在面对一个问题的时候,比如有人问你什么是蓝色的事务,那么你的脑海中就会产生大量的与蓝色相关的事务,如天空,蓝鲸,蓝色汽车等,甚至也会联想到和蓝色不相关的,如篮子,兰花等。Anli就是使计算机模仿人类的日常对话的技术,它相较于自然语言推理的话,想象空间更大,并且更加符合人类的日常交流。 2.4 情绪分析 情绪分析是自然语言处理中文本分类的一种具体的应用。 文本分类是指用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。伴随着信息的爆炸式增长,人工的标注每个数据属于哪一个类别已经变得非常耗时,并且质量低下,因为受到标注人主观意识的影响。因此,利用计算机自动的来实现对文本进行分类的变得具有很大的意义,将重复且枯燥的文本分类任务交由计算机进行处理能够有效克服以上问题,同时所分类的数据具有一致性、高质量等特点。 情绪分析是计算机在学习了人类情绪特点之后对文本进行情绪上的分类,识别给定文本的情绪(比如,非常消极、消极、中性、积极、非常积极)。如果句子措辞清晰明确,比如“我不喜欢冬天的天气”,情绪分析就可以很简单。然而,当人工智能系统遇到具有翻转结构或否定的句子时,情绪分析可能会变得更具挑战性,例如“说讨厌冬天的天气不是我真正的事情,这是完全不准确的。情感分析核心难点在于如何理解文本情绪以及如何度量文本之间的距离。 下面是一个例子如图所示: demo 2.5 机器翻译 简单来说,就是利用计算机技术实现从一种自然语言到另外一种自然语言的翻译过程。现在基于统计,深度学习的机器翻译方法突破了之前基于规则和实例翻译方法的局限性,翻译性能取得巨大提升。基于深度神经网络的机器翻译在日常口语等一些场景的成功应用已经显现出了巨大的潜力。随着上下文的语境表征和知识逻辑推理能力的发展,自然语言知识图谱不断扩充,机器翻译将会在多轮对话翻译及篇章翻译等领域取得更大进展。 2.6 问答系统和对话系统 严格上来说,问答系统和对话系统是人工智能多个领域分支结合起来共同实现的技术,自然语言处理是系统中不可获取的一部分。对话系统是接受用户提出的的问题,并返回像人一样相应的回答。常见形式为检索式、抽取式和生成式三种。近年来交互式也逐渐受到关注。典型应用有智能客服。与问答系统有许多相通之处,区别在于问答系统旨在直接给出精准回答,回答是否口语化不在主要考虑范围内;而对话系统旨在以口语化的自然语言对话的方式解决用户问题。对话系统目前分闲聊式和任务导向型。前者主要应用有siri、小冰等;后者主要应用有车载聊天机器人。(对话系统和问答系统应该是最接近NLP终极目标的领域) 3 应用实现的一般步骤 好了,我们了解了自然语言模仿了人类的方方面面,想象力,注意力,理解能力,情绪和对话等等,那么,我们到底是怎么让计算机实现这些技术的呢?下面我们就了解一下自然语言的基本技术吧! 其实现在要实现这些自然语言的技术,一定离不开大数据的支持。像人一样,人类对一件事情做出什么样的反应,有非常大的比重是来自于人类之前经历过的事情,也就是所谓的经验。有了经验,你才会对做某个事情更加得心应手。比如你去考试,如果你在之前已经做了类似的很多题目了,那么你就学习到了很多经验,基于这些经验,这次考试你做出的选择一般来说都是对的。计算机也同样如此,背后大数据的支撑,就是计算机所谓的“经验”,利用这些数据,计算机就可以做出更好更加正确的模仿人类。 另外,自然语言处理的很多细分应用场景中,一般都离不开几个必要的步骤,在介绍具体的实现细节之前,先举一个简单的现实例子来预热一下,准备好了吗? 比如说你想要做一个模型,让计算机帮你分析一个人是否可以做你的男/女朋友,首先你在现实中是对大量的人本身有一个基本度量的,你会很清楚这些人当中哪些是符合你的预期,适合做男女朋友的,哪些坚决不行。然后把这个人的特征抽取出来,比如你喜欢的人身高要在1.6米以上,善良,有车有房等等,计算机就可以根据这些具体量化的特征进行判断,从而输出适合和不适合两个答案。如果计算机输出不符合你的预期,那么就调整输入的特征参数(因为最开始计算机是不知道你身高的要求是1.6米的),将身高这个特征调整为1.55米,或者调整这个特征占整个特征的比重等等,然后重新计算输出,不断的循环,不断的调整特征的参数,直到输出大概率都符合你的预期为止。这样,一个男女朋友判断模型就做出来了。 好了,我们了解了一个简单的模型是怎么实现了之后,具体展开聊聊每个步骤具体要做的事情。 一是获取数据集,让计算机获得所谓的习题和答案。 二是对数据集进行数据的预处理,预处理过程中要对数据集中没有用和重复的词语进行处理,让计算机获得的数据集是高质量的,然后要对这些数据集进行分词,因为计算机是不能直接识别理解一个一个的文字的,所以为了让计算机可以量化每一个文字,我们要先把数据集分成一个一个的词,然后进行特征工程,也就是把每个词变成一个一个的向量。词向量基于某个规则进行(如one-hot、word2vec),每一个词向量不是随机产生的,而是会和周围的其他文字共同计算之后产生,这样每个词向量就和周围的词向量产生了联系,计算机就是通过这种方式来实现理解每个文字之间的联系的。之后就是针对不同的应用进行具体特征的选择,常用算法有(DF、MI、IG、CHI、WLLR、WFO等),至此,就把一个人可以理解的文字集合转变成了计算机可以理解的词向量集合。 三是对某个应用构造具体的模型,我们把这些词向量集合输入计算机之后,根据某个模型(也就是一个算法),基于数据集的“经验”进行计算,从而产生我们想要的结果,如果计算的结果不符合我们的预期,那么就调整每个输入特征的权重,在不断的循环优化中,逐渐的达成我们想要的预期,就像是不断做题的过程,获得了经验就可以做对这个题目。这个过程就是所谓一个计算机的模型学习,将知识转化为经验的过程。 最后就是对模型进行评估,一般我们把数据集分成训练集和测试集两个部分,训练集就是用于对模型进行训练的过程,过程中会不断优化每个输入特征的参数权重。而测试集就是检验我们模型的准确率,区别就在于使用测试集的这个过程不会改变参数权重,而是仅仅观察模型输出的答案是否符合我们的预期。 以上,就是一般情况下自然语言处理必做的几个步骤。 常见的模型分为机器学习模型和深度学习两种: 常见的机器学习模型有KNN,SVM,Naive Bayes,决策树,GBDT,K-means等。 常见的深度学习模型有CNN,RNN,LSTM,Seq2Seq,Fast Text,Text CNN等。 4 未来发展 现在几乎人人都离不开互联网,而且会将大量的文本数据存储放在网络上,这样就产生了大量的自然语言文本文件,这是一个巨大的资源,自然语言处理现在的发展很快,越来越多的人把注意力放在自然语言处理上面,很多方面的应用都有很大的进展,精度也越来越向人类靠近,甚至某些方面已经超越人类。但是,由于所有应用方面都是基于一个很简单的事情来做,跟具体人能干的事情还是差得很远。这些任务大多都只能对应于人的感知,比如识别一个图片里的东西或视频里的东西,都是人类几秒钟能做的事情,但是对于人类需要几个小时,甚至很多天才能做的事情,是没有涉及到的。所以自然语言处理有非常大的发展空间。 """
def get_key_words(text, num=3):
    """提取关键词"""
    tr4w = TextRank4Keyword()
    tr4w.analyze(text, lower=True)
    key_words = tr4w.get_keywords(num)
    return [item.word for item in key_words]

def get_summary(text, num=3):
    """提取摘要"""
    tr4s = TextRank4Sentence()
    tr4s.analyze(text=text, lower=True, source='all_filters')
    return [item.sentence for item in tr4s.get_key_sentences(num)]

words = get_key_words(text)
print(words)
#['计算机', '自然语言', '人']
summary = get_summary(text)
print(summary)
#['现在几乎人人都离不开互联网,而且会将大量的文本数据存储放在网络上,这样就产生了大量的自然语言文本文件,这是一个巨大的资源,自然语言处理现在的发展很快,越来越多的人把注意力放在自然语言处理上面,很多方面的应用都有很大的进展,精度也越来越向人类靠近,甚至某些方面已经超越人类', 
# '首先,自然语言处理是人工智能的一个分支,最终的目标和人工智能一样都是模仿人的行为,而自然语言处理的终极目标细化到对语言的理解,使计算机像人一样阅读和理解语言,并且给出相应符合人类思维的回答', 
# '简单来说,自然语言处理就是,对计算机中各种各样的语言文本文件进行分析和应用上的处理']

5.2 hanlp实现文本摘要

(1)在pom.xml中导入hanlp依赖

      <dependency>
            <groupId>com.hankcs</groupId>
            <artifactId>hanlp</artifactId>
            <version>portable-1.2.10</version>
        </dependency>

(2)编写测试类

import com.hankcs.hanlp.HanLP;
import java.util.List;
public class HanLPDemo { 
   
    public static void main(String[] args) { 
   
        System.out.println("开始时间:"+System.currentTimeMillis());
        String document = "现在随着互联网的发展,网络的上传和下载文件的速度有了极大的提高。因此现在的基础设施,越来越多高要求的应用有了可行性。人工智能,深度学习,自然语言处理等网络热词频频出现在我们的视野,那么,到底什么是自然语言处理呢?接下来就由我们来给大家科普一下自然语言处理到底是什么,做什么,以及对我们有什么帮助。\n" +
                "首先,自然语言处理是人工智能的一个分支,最终的目标和人工智能一样都是模仿人的行为,而自然语言处理的终极目标细化到对语言的理解,使计算机像人一样阅读和理解语言,并且给出相应符合人类思维的回答。实现它的方式有很多,可以基于统计,也可以基于深度学习等方法。\n" +
                "简单来说,自然语言处理就是,对计算机中各种各样的语言文本文件进行分析和应用上的处理。比如分析出一段文字的语义是否是消极的,又或者是辨别出一段文字的名词,形容词等。\n" +
                "具体来说,自然语言处理,英文是Natural Language Processing,简写NLP。可以把它分成“自然语言”和“处理”两部分。先来看自然语言。现在世界上所有的语种语言,都属于自然语言,包括汉语、英语、法语等。然后再来看“处理”。这个“处理”是指计算机进行处理。但计算机毕竟不是人,无法像人一样处理文本,需要有自己的处理方式。因此自然语言处理,即是计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期望的结果。\n" +
                "正如机械解放人类的双手一样,自然语言处理的目的在于用计算机代替人工来处理大规模的自然语言信息。它是人工智能、计算机科学、信息工程的交叉领域,涉及统计学、语言学等的知识。由于语言是人类思维的证明,故自然语言处理是人工智能的最高境界,被誉为“人工智能皇冠上的明珠”。\n" +
                "那么,自然语言处理具体能够给我们带来些什么呢:\n" +
                "下面是自然语言处理在整个领域中所处的具体位置和它主要做的一些内容:\n" +
                "\n" +
                "自然语言处理的应用非常的广泛而且实用,下面针对自然语言处理的细分领域,让我们一起深入自然语言处理吧!\n" +
                "语义理解:\n" +
                "语义理解技术简单来说就是让计算机像人一样实现对文本篇章的理解,并且回答与篇章相关问题的过程。语义理解更注重于对上下文的理解以及对答案精准程度的把控。比如说,给出一段文字,然后再提出一个问题,计算机通过算法模型,根据文本的语义输出这个问题的答案。下面这张图是一个实例,计算机通过阅读理解了文章Passage和问题Question之后,回答相应的答案。\n" +
                "demo\n" +
                "2.2 文本摘要\n" +
                "就是交给计算机一段文字或者是一整篇论文,然后计算机根据你的正文来输出针对这段文字的摘要。其核心技术是要聚焦到文本文件最核心的部分,然后自动生成摘要。这个技术模仿了人独有的一个特征,那就是注意力。我们人在面对多个事务之前,总是会有优先级。就像你在酒吧当中,很多人都在说话,但是如果有人叫你的名字,或者你对某个人很感兴趣,那么你的大脑就会过滤掉其他的声音,而专注于你关注的事务。你看,计算机能做到这样的事,是不是越来越有人类的呢?\n" +
                "2.3 语言推理和溯因自然语言推理(aNLI)\n" +
                "语言推理:给计算机输入两个句子,然后计算机给你判断出两个句子之间的关系,比如是增强关系,或者是因果关系等。\n" +
                "demo\n" +
                "溯因自然语言推理(aNLI):这是计算机模仿人类想象力的一种实现,因为人在面对一个问题的时候,比如有人问你什么是蓝色的事务,那么你的脑海中就会产生大量的与蓝色相关的事务,如天空,蓝鲸,蓝色汽车等,甚至也会联想到和蓝色不相关的,如篮子,兰花等。Anli就是使计算机模仿人类的日常对话的技术,它相较于自然语言推理的话,想象空间更大,并且更加符合人类的日常交流。\n" +
                "2.4 情绪分析\n" +
                "情绪分析是自然语言处理中文本分类的一种具体的应用。\n" +
                "文本分类是指用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。伴随着信息的爆炸式增长,人工的标注每个数据属于哪一个类别已经变得非常耗时,并且质量低下,因为受到标注人主观意识的影响。因此,利用计算机自动的来实现对文本进行分类的变得具有很大的意义,将重复且枯燥的文本分类任务交由计算机进行处理能够有效克服以上问题,同时所分类的数据具有一致性、高质量等特点。\n" +
                "情绪分析是计算机在学习了人类情绪特点之后对文本进行情绪上的分类,识别给定文本的情绪(比如,非常消极、消极、中性、积极、非常积极)。如果句子措辞清晰明确,比如“我不喜欢冬天的天气”,情绪分析就可以很简单。然而,当人工智能系统遇到具有翻转结构或否定的句子时,情绪分析可能会变得更具挑战性,例如“说讨厌冬天的天气不是我真正的事情,这是完全不准确的。情感分析核心难点在于如何理解文本情绪以及如何度量文本之间的距离。\n" +
                "下面是一个例子如图所示:\n" +
                "demo\n" +
                "2.5 机器翻译\n" +
                "简单来说,就是利用计算机技术实现从一种自然语言到另外一种自然语言的翻译过程。现在基于统计,深度学习的机器翻译方法突破了之前基于规则和实例翻译方法的局限性,翻译性能取得巨大提升。基于深度神经网络的机器翻译在日常口语等一些场景的成功应用已经显现出了巨大的潜力。随着上下文的语境表征和知识逻辑推理能力的发展,自然语言知识图谱不断扩充,机器翻译将会在多轮对话翻译及篇章翻译等领域取得更大进展。\n" +
                "2.6 问答系统和对话系统\n" +
                "严格上来说,问答系统和对话系统是人工智能多个领域分支结合起来共同实现的技术,自然语言处理是系统中不可获取的一部分。对话系统是接受用户提出的的问题,并返回像人一样相应的回答。常见形式为检索式、抽取式和生成式三种。近年来交互式也逐渐受到关注。典型应用有智能客服。与问答系统有许多相通之处,区别在于问答系统旨在直接给出精准回答,回答是否口语化不在主要考虑范围内;而对话系统旨在以口语化的自然语言对话的方式解决用户问题。对话系统目前分闲聊式和任务导向型。前者主要应用有siri、小冰等;后者主要应用有车载聊天机器人。(对话系统和问答系统应该是最接近NLP终极目标的领域)\n" +
                "3 应用实现的一般步骤\n" +
                "好了,我们了解了自然语言模仿了人类的方方面面,想象力,注意力,理解能力,情绪和对话等等,那么,我们到底是怎么让计算机实现这些技术的呢?下面我们就了解一下自然语言的基本技术吧!\n" +
                "其实现在要实现这些自然语言的技术,一定离不开大数据的支持。像人一样,人类对一件事情做出什么样的反应,有非常大的比重是来自于人类之前经历过的事情,也就是所谓的经验。有了经验,你才会对做某个事情更加得心应手。比如你去考试,如果你在之前已经做了类似的很多题目了,那么你就学习到了很多经验,基于这些经验,这次考试你做出的选择一般来说都是对的。计算机也同样如此,背后大数据的支撑,就是计算机所谓的“经验”,利用这些数据,计算机就可以做出更好更加正确的模仿人类。\n" +
                "另外,自然语言处理的很多细分应用场景中,一般都离不开几个必要的步骤,在介绍具体的实现细节之前,先举一个简单的现实例子来预热一下,准备好了吗?\n" +
                "比如说你想要做一个模型,让计算机帮你分析一个人是否可以做你的男/女朋友,首先你在现实中是对大量的人本身有一个基本度量的,你会很清楚这些人当中哪些是符合你的预期,适合做男女朋友的,哪些坚决不行。然后把这个人的特征抽取出来,比如你喜欢的人身高要在1.6米以上,善良,有车有房等等,计算机就可以根据这些具体量化的特征进行判断,从而输出适合和不适合两个答案。如果计算机输出不符合你的预期,那么就调整输入的特征参数(因为最开始计算机是不知道你身高的要求是1.6米的),将身高这个特征调整为1.55米,或者调整这个特征占整个特征的比重等等,然后重新计算输出,不断的循环,不断的调整特征的参数,直到输出大概率都符合你的预期为止。这样,一个男女朋友判断模型就做出来了。\n" +
                "好了,我们了解了一个简单的模型是怎么实现了之后,具体展开聊聊每个步骤具体要做的事情。\n" +
                "一是获取数据集,让计算机获得所谓的习题和答案。\n" +
                "二是对数据集进行数据的预处理,预处理过程中要对数据集中没有用和重复的词语进行处理,让计算机获得的数据集是高质量的,然后要对这些数据集进行分词,因为计算机是不能直接识别理解一个一个的文字的,所以为了让计算机可以量化每一个文字,我们要先把数据集分成一个一个的词,然后进行特征工程,也就是把每个词变成一个一个的向量。词向量基于某个规则进行(如one-hot、word2vec),每一个词向量不是随机产生的,而是会和周围的其他文字共同计算之后产生,这样每个词向量就和周围的词向量产生了联系,计算机就是通过这种方式来实现理解每个文字之间的联系的。之后就是针对不同的应用进行具体特征的选择,常用算法有(DF、MI、IG、CHI、WLLR、WFO等),至此,就把一个人可以理解的文字集合转变成了计算机可以理解的词向量集合。\n" +
                "三是对某个应用构造具体的模型,我们把这些词向量集合输入计算机之后,根据某个模型(也就是一个算法),基于数据集的“经验”进行计算,从而产生我们想要的结果,如果计算的结果不符合我们的预期,那么就调整每个输入特征的权重,在不断的循环优化中,逐渐的达成我们想要的预期,就像是不断做题的过程,获得了经验就可以做对这个题目。这个过程就是所谓一个计算机的模型学习,将知识转化为经验的过程。\n" +
                "最后就是对模型进行评估,一般我们把数据集分成训练集和测试集两个部分,训练集就是用于对模型进行训练的过程,过程中会不断优化每个输入特征的参数权重。而测试集就是检验我们模型的准确率,区别就在于使用测试集的这个过程不会改变参数权重,而是仅仅观察模型输出的答案是否符合我们的预期。\n" +
                "以上,就是一般情况下自然语言处理必做的几个步骤。\n" +
                "常见的模型分为机器学习模型和深度学习两种:\n" +
                "常见的机器学习模型有KNN,SVM,Naive Bayes,决策树,GBDT,K-means等。\n" +
                "常见的深度学习模型有CNN,RNN,LSTM,Seq2Seq,Fast Text,Text CNN等。\n" +
                "4 未来发展\n" +
                "现在几乎人人都离不开互联网,而且会将大量的文本数据存储放在网络上,这样就产生了大量的自然语言文本文件,这是一个巨大的资源,自然语言处理现在的发展很快,越来越多的人把注意力放在自然语言处理上面,很多方面的应用都有很大的进展,精度也越来越向人类靠近,甚至某些方面已经超越人类。但是,由于所有应用方面都是基于一个很简单的事情来做,跟具体人能干的事情还是差得很远。这些任务大多都只能对应于人的感知,比如识别一个图片里的东西或视频里的东西,都是人类几秒钟能做的事情,但是对于人类需要几个小时,甚至很多天才能做的事情,是没有涉及到的。所以自然语言处理有非常大的发展空间。\n";
        List<String> sentenceList = HanLP.extractSummary(document, 3);
        System.out.println("\n文本摘要:");
        for (String s : sentenceList) { 
   
            System.out.println(s);
        }
        System.out.println("\n结束时间:"+System.currentTimeMillis());
    }
}

今天的文章自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33860.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注