精华内容
下载资源
问答
  • 中文分词关键词提取概述

    千次阅读 2019-10-16 15:22:10
    中文分词是自然语言处理(NLP)在中文环境下,首要解决的问题。主要难点为中文不同于英文,存在明确的分隔符(如空格)用于切分词语,且不同的切分方式,不一定存在语病,举个例子: 结婚的/和尚/未结婚的人。 结婚...

    本文基于题库查重需求实现过程及《NLP自然语言处理原理与实践》学习过程总结得出。定有不足之处,恳请指出。

    介绍

    中文分词是自然语言处理(NLP)在中文环境下,首要解决的问题。主要难点为中文不同于英文,存在明确的分隔符(如空格)用于切分词语,且不同的切分方式,不一定存在语病,举个例子:

    1. 结婚的/和尚/未结婚的人。
    2. 结婚的和尚未结婚的人

    基本概念

    评价指标

    一般,中文分词从Precision、Recall、F-score三个维度评价。一般我们比较关注的是F-score。如下图(图片来源 https://github.com/lancopku/pkuseg-python),该图描述了三种中文分词工具的三个指标,便于用户比较三个工具关于某特定数据集合进行分词的结果评价指标。
    在这里插入图片描述

    有时 F-score 也被描述为 F1-Measure,这两者是同一概念。

    模型评价标准

    对于模型(包括语义模型、分类/聚类模型等),一般有四个指标判断模型效果:

    1. Accuracy(准确率)——总样本数被正确判定数占比
    2. Recall(召回率)——总正确数被正确判定数占比
    3. Precision(精确度、精确率)——总结果数被正确判定数占比
    4. F1-Measure——Precision与Recall的harmonic mean(调和平均数; 倒数平均数),意义在于同时关联被正确判定数、被错误判定数、总结果数之间的关系。

    常见方案

    中文分词有两大思路:

    1. 基于语义实现
    2. 基于统计概率

    受编程语言发展历程、社会环境、市场需求等多种因素影响,目前主流的中文分词工具以python、java居多。常见分词工具如下列出,这里过多copy网上介绍。私以为支持自定义词库、词频的情况下,这些项目经过多年在开源社区的迭代,应该都能满足多数不太复杂的语言分析场景。

    1. 结巴分词——原生基于python,也有go、java、php、Node.js版本,但都非官方维护项目,以php版本为例,目前使用后发现其存在更新缓慢、代码bug、代码缺乏灵活性、缺乏可扩展性等问题。
    2. HanLp——基于Java开发。
    3. funNLP——基于python开发。
    4. sego——基于go语言开发。
    5. scws——原生即为php,github中最后一次更新已为2016年,实际中英数混合文本使用效果远不如结巴分词的php版本。

    关于中文分词中的HMM和Viterbi,可以参考我的另一篇博文HMM、Viterbi与中文分词,欢迎各路大佬提出意见,交流学习。

    应用案例

    敏感词检测

    敏感词检测一般有两种方式实现。

    1. 基于词库+有限自动状态机(Deterministic Finite Automaton, DFA)

      ​ 由词库构建前缀索引森林,再基于DFA+敏感词前缀索引森林遍历判断敏感词。

    2. 基于词库+中文分词工具

      ​ 相比于有限自动状态机。实际上,该方法关键在于只对分词结果中的各个词进行敏感词判定。从效果来看,其准确程度依赖于敏感词检测训练结果(词频)。但不会像DFA一样不考虑上下文地进行匹配,显得更智能些。当敏感词检测结果会以某种形式反馈给用户时,该使用该方法实现的用户体验会比基于DFA实现的用户体验更好。

    但可以看出,不论依赖上述哪种方式,根本上都要首先解决词库的问题。关于词库,在github中存在一些私人上传的词库,也可以尝试检索微博、百度、腾讯等企业团队公布的免费敏感词库。但不论哪种来源,敏感词总是有时效性的,需要不断维护。

    关键词提取

    关键词提取其实是一个细分的应用场景,其更上层应用多见于长文本关键词检索(不可直接套用于ES的文本检索原理,ES索引分词方式和检索分词方式依赖于分词工具的选取)、文本相似性检索、自动摘要。常见算法有TF-IDF和TextRank算法,结巴分词同时支持这两种算法。
    关键词的准确度依赖于分词准确度。此外,关于TF-IDF,关键词提取的一个基本方法是:一个词在该文本中出现越多,其他文本中出现越少,该词作为关键字的概率就越大。因此,在实际应用中,处理有限文本集或某一垂直领域文本集时,先对该有限文本集或垂直领域样本统计idf词典,再基于该idf进行关键词提取,能有效提高Precision。

    相似文本去重

    相似文本去重有很多种方案,这里仅列举几种重要思路。实际应用中,要结合算法效率、数据量、实现难易程度、输出方式等多种因素考虑。

    1. 基于关键词提取,基于关键词计算相似哈希。当两个文本相似时,提取出的关键词也是相似或相等的,对应计算得到的相似哈希值也应该是相似或相等的。常见于海量数据查重,但不可能百分百可靠。对应判断相似或相等问题,可以转为对相似哈希值判定相似或相等问题。
    2. 暴力,每个文本都与集合中的其他文本计算汉明距或编辑距distance,当distance与总长度的比值大于一定阈值时,则判定相似。在文本不太复杂时,数据量不多时,实现成本低、算法简单、经过针对具体文本特点进行优化后的Precision可以很高。可以想象,当文本集合空间大小为n,则需要执行 n2n^2 次比较。

    实际上,相似文本最大的难点,个人认为不在于性能,而在于Precision。以下文为例:

    1. 请选择下述正确的选项。
    2. 请选择下述不正确的选项。

    这里看来,两者仅一字之差,实际含义却天差地别。这种问题实际可能多见于短文本的相似性比较中。关于这点,目前个人没有比较好的解决方案,欢迎有想法的同学提出建议。我临时的解决办法是,尽管二者相似,但sim hash值依然是不想等的,(分词能区分正确、不正确)。因此,只要sim hash值不等,就暂不归类,但这显然降低了Recall。

    常见问题

    Q: 基于中文分词工具进行分词,性能会很低吗?

    文本不是很长时,分词性能是很高的。以结巴分词为例,我在 php7.3 环境下,1000条平均长度200左右的文本,请求数据 + 分词 + 关键词提取 + SimHash计算 + 入库(batch update)仅需 1s 左右,单条长度不超过300的文本,分词时间不足 1ms。现在的cpu性能很强,如果不是任务太多,cpu资源有限的情况下,我们要关注的往往不是分词性能,更多的在于**自己实现的代码的时间复杂度;数据库获取效率(如MySQL select是否优化);数据库写入效率;是否发生外部请求,如果是,则外部请求消耗的时间。**当然,具体问题要视实际情况具体分析,导致性能问题的可能性一定不仅限于我所述这几点。

    Q: 中文分词工具是开箱即用吗?

    我的经验是,如果只是用于学习,可以认为开箱即用。但如果希望用于敏感词检测或其它垂直领域(包括但不仅限于文本去重、文本检索等)。建议是,尽可能多的收集可靠的垂直领域的词库,并基于持有的数据统计一份词库,加载到分词工具中(一般开源分词工具都有提供加载用户自定义词典的接口),可以有效提高分词、关键词提取的F-score。除此之外,实际应用中,存在很多特殊符号、无用符号时,建议先增加逻辑代码处理一下(比如转义文本中的html entity、标签、多余的不可见字符等),也可以帮助提升F-score。

    Q: 对于基于NLP的功能,F-score多少合适?

    实际上,我也不知道F-score多少合适。可能结合实际业务场景,更容易解答这个问题(如果是学术研究,那显然是越高越好)。我的经验是,F-score达到90%以上后,每提高1%,成本都是指数上升的(需要反复的调整取词策略、完善词库和词频文件、重新统计/分析相关字段),而每一次调整,都不一定具备普适性。因此,个人建议结合实际场景判断。比如,题库有1300W+数据,Precision已经提高到了90%+(针对特定学科的特定题型,甚至可以认为达到99%+)。这时预估错误数据关于总数据占比是很小的(可能小于1%),那么,这些查重数据暂时采用隐藏处理(软删除),后续发现时再恢复即可,这种方式对整个产品体验影响并不明显。

    Q: 实际应用中,Precision要求很高怎么办?

    这种问题在生产环境中可能比较常见。比如说,有1000W+数据,即使只错误判定了1%,也会导致 10W条数据别错判,10W条错误数据也可能带来很大的损失。这时候我们可以主动分析文本集合特征,通过针对性的修改工具代码;补充词库;增加停用词;修改词频等方法,提高拟合度(可以参照上述问题的解答:中文分词工具是开箱即用的吗?)。这可能会造成过拟合问题,但我认为,如果只是针对已知且有限的数据集合进行处理,过拟合并非坏事。

    展开全文
  • 基本概念评价指标一般,中文分词从Precision、Recall、F-score三个维度评价。一般我们比较关注的是F-score。如下图(图片来源 https://github.com/lancopku/pkuseg-python),该图描述了三种中文分词工具的三个指标,...

    本文基于题库查重需求实现过程及《NLP自然语言处理原理与实践》学习过程总结得出。定有不足之处,恳请指出。

    基本概念

    评价指标

    一般,中文分词从Precision、Recall、F-score三个维度评价。一般我们比较关注的是F-score。如下图(图片来源 https://github.com/lancopku/pkuseg-python),该图描述了三种中文分词工具的三个指标,便于用户比较三个工具关于某特定数据集合进行分词的结果评价指标。

    有时 F-score 也被描述为 F1-Measure,这两者是同一概念。

    模型评价标准

    对于模型(包括语义模型、分类/聚类模型等),一般有四个指标判断模型效果:Accuracy(准确率)——总样本数中被正确判定数占比

    Recall(召回率)——总正确数中被正确判定数占比

    Precision(精确度、精确率)——总结果数中被正确判定数占比

    F1-Measure——Precision与Recall的harmonic mean(调和平均数; 倒数平均数),意义在于同时关联被正确判定数、被错误判定数、总结果数之间的关系。

    常见方案

    中文分词有两大思路:基于语法规则

    基于概率统计

    受编程语言发展历程、社会环境、市场需求等多种因素影响,目前主流的中文分词工具以python、java居多。常见分词工具如下列出,这里过多copy网上介绍。私以为支持自定义词库、词频的情况下,这些项目经过多年在开源社区的迭代,应该都能满足多数不太复杂的语言分析场景。结巴分词——原生基于python,也有go、java、php、Node.js版本,但都非官方维护项目,以php版本为例,目前使用后发现其存在更新缓慢、代码bug、代码缺乏灵活性、缺乏可扩展性等问题。

    HanLp——基于Java开发。

    funNLP——基于python开发。

    sego——基于go语言开发。

    scws——原生即为php,github中最后一次更新已为2016年,实际中英数混合文本使用效果远不如结巴分词的php版本。

    应用案例

    敏感词检测

    敏感词检测一般有两种方式实现。基于词库+有限自动状态机(Deterministic Finite Automaton, DFA)

    ​ 由词库构建前缀索引森林,再基于DFA+敏感词前缀索引森林遍历判断敏感词。

    基于词库+中文分词工具

    ​ 相比于有限自动状态机。实际上,该方法关键在于只对分词结果中的各个词进行敏感词判定。从效果来看,其准确程度依赖于敏感词检测训练结果(词频)。但不会像DFA一样不考虑上下文地进行匹配,显得更智能些。当敏感词检测结果会以某种形式反馈给用户时,该使用该方法实现的用户体验会比基于DFA实现的用户体验更好。

    但可以看出,不论依赖上述哪种方式,根本上都要首先解决词库的问题。关于词库,在github中存在一些私人上传的词库,也可以尝试检索微博、百度、腾讯等企业团队公布的免费敏感词库。但不论哪种来源,敏感词总是有时效性的,需要不断维护。

    关键词提取

    关键词提取其实是一个细分的应用场景,其更上层应用多见于长文本关键词检索(不可直接套用于ES的文本检索原理,ES索引分词方式和检索分词方式依赖于分词工具的选取)、文本相似性检索、自动摘要。常见算法有TF-IDF和TextRank算法,结巴分词(原版Python实现)同时支持这两种算法。

    关键词的准确度依赖于分词准确度。此外,关于TF-IDF,关键词提取的一个基本方法是:一个词在该文本中出现越多,其他文本中出现越少,该词作为关键字的概率就越大。因此,在实际应用中,处理有限文本集或某一垂直领域文本集时,先对该有限文本集或垂直领域样本统计idf词典,再基于该idf进行关键词提取,能有效提高Precision。

    相似文本去重

    相似文本去重有很多种方案,这里仅列举几种重要思路。实际应用中,要结合算法效率、数据量、实现难易程度、输出方式等多种因素考虑。基于关键词提取,基于关键词计算相似哈希。当两个文本相似时,提取出的关键词也是相似或相等的,对应计算得到的相似哈希值也应该是相似或相等的。常见于海量数据查重,但不可能百分百可靠。对应判断相似或相等问题,可以转为对相似哈希值判定相似或相等问题。

    暴力,每个文本都与集合中的其他文本计算汉明距或编辑距distance,当distance与总长度的比值大于一定阈值时,则判定相似。在文本不太复杂时,数据量不多时,实现成本低、算法简单、经过针对具体文本特点进行优化后的Precision可以很高。可以想象,当文本集合空间大小为n,则需要执行 $n^2$ 次比较。

    实际上,相似文本最大的难点,个人认为不在于性能,而在于Precision。以下文为例:请选择下述正确的选项。

    请选择下述不正确的选项。

    这里看来,两者仅一字之差,实际含义却天差地别。这种问题实际可能多见于短文本的相似性比较中。关于这点,目前没有比较好的解决方案,欢迎有想法的同学提出建议。目前的办法是,尽管二者相似,但sim hash值依然是不想等的,(分词能区分正确、不正确)。因此,只要sim hash值不等,就暂不归类,但这显然降低了Recall。

    知识树

    本小节主要面向技术人员,为了给大家提供学习思路,这里给出我在完成题库去重过程中,踩坑、学习后的一个知识树,这个知识树一定是不完善的,但是按照这个知识树逐步剖析一定能对大家学习中文分词、关键词提取提供一定思路(如希望理解原理,需要对数据结构和概率论有基本了解)。也期待诸位同学帮助完善知识树。

    常见问题

    Q: 基于中文分词工具进行分词,性能会很低吗?

    文本不是很长时,分词性能是很高的。以结巴分词为例,我在 php7.3 环境下,1000条平均长度200左右的文本,请求数据 + 分词 + 关键词提取 + SimHash计算 + 入库(batch update)仅需 1s 左右,单条长度不超过200的文本,分词时间不足 1ms。如果数据不太多时,我们应该首先关注自己实现的代码的时间复杂度;数据库获取效率(如MySQL select是否优化);数据库写入效率;是否发生外部请求,如果是,则外部请求消耗的时间。当然,具体问题要视实际情况具体分析,导致性能问题的可能性一定不仅限于我所述这几点。

    但是,当数据量很大(单条文本很长;文本空间千万起步)时,基于词典的分词、基于HMM对未登录词处理以及基于TF—IDF的关键词,随着处理数据的增长,都有可能带来很大的内存消耗。关于内存要在实际执行任务前测试预估。此外,数据量很大时,除了协程、多线程、多进程等方式外,还可以考虑多机集群,为了平衡读、写、分析等过程的性能不平衡,还可以通过生产者-消费者模型解决。

    Q: github上的中文分词工具是开箱即用吗?

    以结巴分词为例。我的经验是,如果只是用于学习,可以认为开箱即用。但如果希望用于敏感词检测或其它垂直领域(包括但不仅限于文本去重、文本检索等)。建议是,尽可能多的收集可靠的垂直领域词库(可靠第三方来源,如搜狗拼音、百度拼音、微博等),并基于持有的数据统计一份词库,加载到分词工具中(一般开源分词工具都有提供加载用户自定义词典的接口),可以有效提高分词、关键词提取的F-score。除此之外,实际应用中,存在很多特殊符号、无用符号时,建议先增加逻辑代码处理一下(比如转义文本中的html entity、标签、多余的不可见字符等,依据具体情况进行过滤或保留),也可以帮助提升F-score。

    Q: 对于基于NLP的功能,F-score多少合适?

    实际上,我也不知道F-score多少合适。可能结合实际业务场景,更容易解答这个问题(如果是学术研究,那显然是越高越好)。我的经验是,F-score达到90%以上后,每提高1%,成本都是指数上升的(需要反复的调整取词策略、完善词库和词频文件、重新统计/分析相关字段),而每一次调整,都不一定具备普适性。因此,个人建议结合实际场景判断。比如,题库有1300W+数据,Precision已经提高到了90%+(针对特定学科的特定题型,甚至可以认为达到99%+)。这时预估错误数据关于总数据占比是很小的(可能小于1%),那么,这些查重数据暂时采用隐藏处理(软删除),后续发现时再恢复即可,这种方式对整个产品体验影响并不明显。

    Q: 实际应用中,Precision要求很高怎么办?

    这种问题在生产环境中可能比较常见。比如说,有1000W+数据,即使只错误判定了1%,也会导致 10W条数据错判,10W条错误数据也可能带来很大的损失。这时候我们可以主动分析文本集合特征,通过针对性的修改工具代码;补充词库;增加停用词;修改词频等方法,提高拟合度(可以参照上述问题的解答:中文分词工具是开箱即用的吗?)。这可能会造成过拟合问题,但我认为,如果只是针对已知且有限的数据集合进行处理,过拟合并非坏事。

    展开全文
  • 算法通过依据小词典的快速分词、二次分词、高维聚类及关键词甄选四个步骤实现关键词的提取。理论分析和实验显示,基于高维聚类技术的中文关键词提取方法具备更好的稳定性、更高的效率及更准确的结果。 引言  ...

    [摘要]关键词提取是中文信息处理技术的热点和难点,基于统计信息的方法是其中一个重要分支。本文针对基于统计信息关键词提取方法准确率低的问题,提出基于高维聚类技术的中文关键词提取算法。算法通过依据小词典的快速分词、二次分词、高维聚类及关键词甄选四个步骤实现关键词的提取。理论分析和实验显示,基于高维聚类技术的中文关键词提取方法具备更好的稳定性、更高的效率及更准确的结果。 

    引言   

      关键词提取是通过对一篇输入文章做内容分析,按一定比例或字数要求提取出重要且语义相似性凝聚的关键词的过程。关键词自动提取是文本挖掘领域的一个重要分支,在自动摘要、文本分类、文本聚类、文本过滤、话题跟踪、信息检索、自动问答等很多领域有重要作用。 

      迄今为止,关键词自动提取吸引了不少国内外学者的关注和研究,其理论成果主要包括基于统计信息的方法、机器学习方法和浅层式语义分析方法三大类。其中应用最为广泛的是基于统计信息的关键词提取方法,具备简洁易懂、通用性强等优势。 

      本文针对基于统计信息关键词提取方法准确率不高的问题,引入高维聚类思想进行改进,提出基于高维聚类技术的中文关键词自动提取算法。经过基于小词典的快速分词、二次分词、高维聚类、关键词甄选四个步骤,算法抽取出的关键词更加准确,并且具有更好的稳定性和更高的效率。 

    关键词提取方法 

      关键词自动提取方法分为基于统计信息的方法、机器学习方法和浅层式语义分析方法三大类。 

      基于统计信息的方法主要包括基于词频的关键词抽取方法[ ]、基于TFIDF指标的关键词抽取方法[ ]、利用字同现信息的关键词抽取方法、利用词共现信息的关键词抽取方法、基于N-Gram信息统计的关键词获取方法、构建复杂网络提取关键词的方法[ ]等。尽管具有简单易用的优势,但这类方法的准确性不高,提取出的关键词往往包含文章中普遍出现却与主题无关的高频词。此外,这类方法需统计所有词汇出现的频率,制约了运行效率。 

      机器学习方法是建立在大量语料库上的关键词自动提取方法,包括基于决策树的方法、基于Naive Bayes 的方法、基于SVM的方法[ ]、基于最大熵模型的方法等。这类方法将关键词提取问题视为二元分类问题,构造关键词提取分类模型,判断词语类别是否为关键词。由于在实际应用中有限的训练样本难以接近整个样本空间上的数据分布,这类方法很难训练出效果好的分类器。此外,这类方法在训练分类器的过程中可能存在过拟合问题,且生成的分类器只在与训练样本类似的文章中才能取得较理想效果。 

      浅层式语义分析方法[ ]是近几年发展起来的一种关键词自动提取方法。通常,这类方法借助一种中间模型表示文章语义结构,通过分析词语间的语义关系,获取关键词。显然,这类方法需要专业相关的先验知识。 

      本文提出的基于高维聚类技术的中文关键词提取算法是针对基于统计信息的方法所作的改进。在依据动词、虚词、停用词小词典实现快速分词及二次分词后,将待处理文本数据转化为以句子为对象、以词为属性的高维二态关系数据。调用高属性维聚类算法CABOSFV实现聚类后,进行类内词频统计,甄选出其中的高频词作为最终的关键词。分析可知,算法具有更高的准确度,更好的稳定性,并提高了运行效率。 

    基于高维聚类技术的中文关键词提取算法 

      基于高维聚类技术的中文关键词提取算法分为依据小词典的快速分词、二次分词、高维聚类及关键词甄选四个步骤,见图1。 

    依据小词典快速分词 

      汉语以字为单位,词与词之间没有天然的分隔符,因此中文关键词提取的第一步是进行分词。常用的中文分词法是依据名词、形容词大词典的机械分词法。由于名词、形容词的数量约占总体词汇的70%,且难以及时收录很多新生词,所以依据大词典进行匹配存在效率低、扩展性不强的问题。 

      鉴于此,算法选用较为新颖的依据动词、虚词、停用词小词典的快速分词法[ ]。其中,虚词包括连词、介词、副词及助词,停用词包括数词、量词、代词、方位词、拟声词、叹词、无实际意义的动词(如“可能”)及太过常用的名词(如“操作”)。 

      对于文章中的每个句子,首先分别依据这三个小词典对其进行切分,即将句中的动词、虚词、停用词分别抽取出来,生成集合V,X,T: 

      V={c | c经动词切分后被匹配为动词}; 

      X={c | c经虚词切分后被匹配为虚词}; 

      T={c | c经停用词切分后被匹配为停用词}, 

      而每类切分余下的字符串构成集合 。 

      随后通过下述处理,生成初始分词集W。设某句可表示为Sentence = S1,S2,…,Sn,其中,Si,i=1,2,…,n为字符串,则具体操作如下: 

      While SiSi+1 ∈ , i=1,2,…,n-1, 

     if [Si (or Si+1)∈ ] && [Si+1 (or Si)]; 

      Then W=W∪{ Si+1 (or Si)}; 

      } 

      由于动词词典、虚词词典以及停用词词典的词汇量不多,算法初次分词的效率得到改善。同时由于少有这三类新生词汇,无需经常性地扩充词典,算法具有很好的稳定性。 

    二次分词 

      由于没有与大容量名词词库进行匹配,经过快速分词后产生的初始分词集W中存在不必要的复合词。为此,对初始分词集进行二次切分,生成最终分词集。二次分词的具体做法如下: 

      Step1:假设初始分词集W={Z1,Z2,…,Zn},其中Zi (i =1,2,…,n)代表字符串,设定字符串长度阈值α; 

      Step2:对任意Zi ( i =1,2,…,n), 

      { 若Zi.Length > α, 

       则将Zi与Z1,Z2,…,Zi-1,Zi+1,…Zn分别匹配, 

      {若Zi包含Zj ( j1,2,…,n且j≠i); 

       则将Zi以Zj为界进行切分,并用切分后 

      的词替换原词,存入集合W;} 

       } 

      经过二次切分后,清除了词与词之间不必要的包含关系,生成了最终分词集,为后续聚类做好铺垫。 

    高维聚类 

      将最终分词集中的词视作属性,将文章中的每个句子视作对象,若某个句子中包含某个词,则该句子对象相应的词属性取值为1,否则为0。经过这样的处理将原来的文本信息被转化成一张高属性维稀疏二维表。针对该表,调用高维聚类算法CABOSFV(Clustering Algorithm Based On Sparse Feature Vector)[ ]对句子对象进行聚类。 

      CABOSFV算法专门用于求解二态变量高属性维稀疏聚类问题,利用其稀疏差异度计算方法及“稀疏特征向量”对数据进行有效压缩,只需一次数据扫描就可完成聚类。假设有n个对象,描述第i个对象的m个稀疏特征取值分别对应于二态变量值xi1, xi2,…, xim,一个类内对象的差异度上限为b,则算法处理步骤如下: 

      Step1:为每个对象建立一个集合,分别记为 ,i{1,2,…,n}。 

      Step2:计算 和 合并后集合的稀疏差异度,若不大于类内对象的差异度上限b,则将 和 合并到一个集合,作为一个初始类,记为 ;若合并后集合的内部差异度大于上限b,那么将 和 分别作为一个初始类,记为 和 。将类的个数记为c。 

      Step3:针对集合 ,计算其与现存所有类合并后的集合稀疏差异度,并寻找i0,使得 与类 合并后的差异度最小。随后判断其是否符合b的要求,若符合,将 加入到类 中;否则,则将 作为一个新的初始类,记为 ,类的个数c=c+1。 

      Step4: 对 , ,依次进行类似于Step3的操作。 

      Step5:在最终形成的每一个类 ,k1,2,…,c中,删除对象个数较少的孤立点,余下各类为最终聚类结果。 

      算法详见文献[9]。 

      由于将文本信息转化成了计算机易于处理的结构化数据,且CABOSFV计算复杂度低,整体算法的处理速度非常理想。同时,由于将文章中一些主题不相关的句子判断为孤立点删除,保证了后续关键词甄选的准确率。 

    关键词甄选 

      通过高维聚类技术CABOSFV,算法将文章中意思相近的句子聚集在一起,它们对文章主题具有更强的表达力。因此,以高维聚类结果中的各个类为基础,对词频进行统计,并甄选出文章的关键词,具体做法如下: 

      Step1:计算最终分词集中每个词的类内词频,即用包含该词的类内句子数除以类内句子总数。 

      Step2:判断每个词的类内词频是否大于事先设定的词频阈值λ,将大于阈值的词加入到初始关键词集。 

      Step3:结合具体问题,对初始关键词集进行修剪,生成最终关键词集。 

      算法在类内统计词频,避免了传统统计方法将常用名词误判为关键词的情况,提高了关键词抽取的准确率。    

    算法实验 

      为检验算法效果,对《智利发生8.8级强震,多国拉响海啸预警》[ ]、《莫斯科地铁遭两女人弹袭击,至少38人丧生》[ ]及《云南局部干旱已达100年一遇》[ ]三篇发表于新华网、人民网上的新闻文章进行实验。实验数据的统计信息见表1。 
      在依据小词典分词及二次分词后,将文本数据转化为二维表。表2所示为文章智利地震对应的二维表。 
      调用CABOSFV算法聚类后,计算最终分词集中每个词的类内词频,并判断产生初始关键词集。三篇文章初始关键词的类内词频统计分别见图2、图3及图4。 
      经过对初始关键词集的修剪,三篇文章生成的最终关键词集分别为{智利、地震}、{地铁、爆炸}及{云南、干旱}。 
      结合原文可以看出,基于高维聚类技术的中文关键词提取算法准确挖掘出了文章的关键词。此外,从运行时间可以看出,算法具有较高的效率。  

    结论   

      通过依据动词、虚词、停用词小词典的快速分词、针对复合词拆分的二次分词、基于CABOSFV算法的高维聚类、类内词频统计及关键词的最终甄选,基于 高维聚类技术的中文关键词提取算法完成了对关键词的识别。理论分析和实验结果显示,算法的准确度较高,运算效率理想,并具有很强的稳定性。

    转载于:https://www.cnblogs.com/a198720/p/3990717.html

    展开全文
  • 中文分词及词性标注

    2020-10-11 13:03:53
    支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本...

    支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析、CRF依存句法分析)

    TL;DR

    启动服务

    docker pull samurais/hanlp-api:1.0.0
    docker run -it --rm -p 3002:3000 samurais/hanlp-api:1.0.0
    

    访问服务

    • 中文分词
    POST /tokenizer HTTP/1.1
    Host: localhost:3002
    Content-Type: application/json
     
    {
        "type": "nlp",
        "content": "刘德华和张学友创作了很多流行歌曲"
    }
    
    • 关键词提取
    POST /keyword HTTP/1.1
    Host: localhost:3002
    Content-Type: application/json
     
    {
        "num": 1,
        "content": "刘德华和张学友创作了很多流行歌曲"
    }
    

    词性标记规范

    包含 ICTPOS3.0词性标记集、ICTCLAS 汉语词性标注集、jieba 字典中出现的词性、simhash 中可以忽略的部分词性

    词的分类

    • 实词:名词、动词、形容词、状态词、区别词、数词、量词、代词
    • 虚词:副词、介词、连词、助词、拟声词、叹词。

    ICTPOS3.0词性标记集

    n 名词
    	nr 人名
    		nr1 汉语姓氏
    		nr2 汉语名字
    		nrj 日语人名
    		nrf 音译人名
    	ns 地名
    	 nsf 音译地名
    	nt 机构团体名
    	nz 其它专名
    	nl 名词性惯用语
    	ng 名词性语素
    
    t 时间词
      tg 时间词性语素
    
    s 处所词
    
    f 方位词
    
    v 动词
    	vd 副动词
    	vn 名动词
    	vshi 动词“是”
    	vyou 动词“有”
    	vf 趋向动词
    	vx 形式动词
    	vi 不及物动词(内动词)
    	vl 动词性惯用语
    	vg 动词性语素
    a 形容词
    	ad 副形词
    	an 名形词
    	ag 形容词性语素
    	al 形容词性惯用语
    b 区别词
    	bl 区别词性惯用语
    z 状态词
    r 代词
    	rr 人称代词
    	rz 指示代词
    		rzt 时间指示代词
    		rzs 处所指示代词
    		rzv 谓词性指示代词
    	ry 疑问代词
    		ryt 时间疑问代词
    		rys 处所疑问代词
    		ryv 谓词性疑问代词
    	rg 代词性语素
    m 数词
    	mq 数量词
    q 量词
    	qv 动量词
    	qt 时量词
    

    虚词

    d 副词
    p 介词
    	pba 介词“把”
    	pbei 介词“被”
    c 连词
    	cc 并列连词
    u 助词
    	uzhe 着
    	ule 了 喽
    	uguo 过
    	ude1 的 底
    	ude2 地
    	ude3 得
    	usuo 所
    	udeng 等 等等 云云
    	uyy 一样 一般 似的 般
    	udh 的话
    	uls 来讲 来说 而言 说来
    
    	uzhi 之
    	ulian 连 (“连小学生都会”)
    
    e 叹词
    y 语气词(delete yg)
    o 拟声词
    h 前缀
    k 后缀
    x 字符串
    	xx 非语素字
    	xu 网址URL
    w 标点符号
    	wkz 左括号,全角:( 〔  [  {  《 【  〖 〈   半角:( [ { <
    	wky 右括号,全角:) 〕  ] } 》  】 〗 〉 半角: ) ] { >
    	wyz 左引号,全角:“ ‘ 『
    	wyy 右引号,全角:” ’ 』
    	wj 句号,全角:。
    	ww 问号,全角:? 半角:?
    	wt 叹号,全角:! 半角:!
    	wd 逗号,全角:, 半角:,
    	wf 分号,全角:; 半角: ;
    	wn 顿号,全角:、
    	wm 冒号,全角:: 半角: :
    	ws 省略号,全角:……  …
    	wp 破折号,全角:——   --   ——-   半角:---  ----
    	wb 百分号千分号,全角:% ‰   半角:%
    	wh 单位符号,全角:¥ $ £  °  ℃  半角:$
    

    ICTCLAS 汉语词性标注集

    代码 名称 帮助记忆的诠释
    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 的第2个字母,因a已用于形容词。
    Vg 动语素 动词性语素。动词代码为v。在语素的代码g前面置以V。
    v 动词 取英语动词verb的第一个字母。
    vd 副动词 直接作状语的动词。动词和副词的代码并在一起。
    vn 名动词 指具有名词功能的动词。动词和名词的代码并在一起。
    w 标点符号
    x 非语素字 非语素字只是一个符号,字母x通常用于代表未知数、符号。
    y 语气词 取汉字“语”的声母。
    z 状态词 取汉字“状”的声母的前一个字母。

    来源

    Further Reading

    http://www.hankcs.com/nlp/hanlp.html
    https://www.npmjs.com/package/node-hanlp

    展开全文
  • 文本关键词提取小结

    万次阅读 2018-06-01 11:22:24
    从达观数据应用的三种算法说起),想到这是一个很重要的课题还是有必要小结一下的,有不足之处大家可以讨论讨论还有几个比较好的链接供大家参考中文分词原理工具中文分词工具测评自然语言处理入门(4)——中文...
  • [python] 使用Jieba工具中文分词及文本聚类概念

    万次阅读 多人点赞 2015-12-11 02:38:17
    这篇文章主要是爬取百度5A景区摘要...关键词提取 4.对百度百科获取摘要分词 5.去除停用词 三. 基于VSM的文本聚类算法 不论如何,希望文章对你有所帮助,如果文章中有错误或不足之处,还请海涵!写文不易,且看且分析~
  • 中文分词中文分词(Chinese Word Segmentation),将中文语句...分词主要用于NLP 自然语言处理(Natural Language Processing),使用场景有:搜索优化,关键词提取(百度指数)语义分析,智能问答系统(客服系统)非结构...
  • 中文分词中文分词(Chinese Word Segmentation),将中文语句...分词主要用于NLP 自然语言处理(Natural Language Processing),使用场景有:搜索优化,关键词提取(百度指数)语义分析,智能问答系统(客服系统)非结构...
  • 购买课程后,老师免费答疑。 零基础Python人工智能自然语言处理文本挖掘关键词提取:零基础入门学习自然语言处理,自然语言处理基本流程,...中文分词工具Jieba讲解使用,gensim库使用,自然语言处理实战项目。
  • (3)关键词提取,主题提取,摘要提取 (4)命名体识别 (5)分词 (6)情感分析,正负类分析 (7)近义词,同义词,句子相似性 (8)聚类,监督,无监督 (9)词性标注 (10)词向量提取 . ├── chatbot ########...
  • jieba 中文分词介绍使用

    千次阅读 2019-12-09 21:13:09
    3. 关键词提取 3.1 基于 TF-IDF 算法的关键词抽取 3.2 基于 TextRank 算法的关键词抽取 4. 词性标注 5. 并行分词 6. kenize:返回词语在原文的起止位置 基本介绍 支持 3 种分词模式 1)精确模式:将句子最...
  • HanLP是一款免费开源(Apache License 2.0协议)中文语义分词工具,它提供中文分词、词性标注、命名实体识别、依存句法分析、语义依存分析、新词发现、关键词短语提取、自动摘要、文本分类聚类、拼音简繁转换、自然...
  • 2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件。首先它的安装十分便捷...Jieba库包含许多功能,如分词、词性标注、自定义词典、关键词提取。基于jieba的关键词提取有两种...
  • 本资源属于代码类,是一些...(3)关键词提取,主题提取,摘要提取 (4)命名体识别 (5)分词 (6)情感分析,正负类分析 (7)近义词,同义词,句子相似性 (8)聚类,监督,无监督 (9)词性标注 (10)词向量提取
  • 该系统以Win2000为开发平台,C#(实现界面及关键词提取)、C++(实现中文分词算法)为编程语言,采用了面向对象的程序设计方法,开发出了具有友好的用户界面和具有分句、分词等功能的关键词抽取系统,同时该系统还...
  • (3)关键词提取,主题提取,摘要提取 (4)命名体识别 (5)分词 (6)情感分析,正负类分析 (7)近义词,同义词,句子相似性 (8)聚类,监督,无监督 (9)词性标注 (10)词向量提取 . ├── chatbot ######.....
  • “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module. Scroll down for English ...
  • 中文医学文档分词及关键词提取研究 聚类分析等算法在学习型临床路径中的应用 胃癌住院病例费用、疗效、疗程的决策树模型 建立医院数据中心意义及技术方案探讨 一种关系型数据库系统的多维化设计方法 ...
  • IKAnalyzer介绍使用

    千次阅读 2017-08-17 15:00:29
    所有我们要用开源分词工具把语句中的关键词提取出来。至于详细的介绍我们后期进行项目实战的时候会一一介绍,目前我们只需要学会用这个工具,为之后的项目实战打下基础。 IK Analyzer是什么呢,就是我们需要的这个...
  • NLPIR简介使用配置

    2015-05-10 11:53:00
    NLPIR汉语分词系统(又名ICTCLAS2013),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取; 官方网址:http://ictclas.nlpir.org...
  • 标签:自定义 mpat 高效 path nlp sys 文件 pri from Hanlp HanLP是由一系列模型与算法组成的Java工具包,...功能:中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 新词发现 短语提取 自动摘要 文本分类 ...
  • NLPIR2014配置使用(C语言)

    千次阅读 2015-11-06 21:40:06
    张华平博士在多年研究工作积累的基础上,研制出了NLPIR 分词系统,主要功能包括中文分词;英文分词;词性标注;命名实体识别;新词识别;关键词提取;支持用户专业词典与微博分析。NLPIR系统支持多种编码(GBK 编码...
  • 本篇文章介绍了我在初次使用Hanlp的记录,记录生活点滴,快乐编码!...功能:中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 新词发现 短语提取 自动摘要 文本分类 拼音简繁Hanlp环境安装•...
  • HanLP是由一系列模型与算法...功能:中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 新词发现 短语提取 自动摘要 文本分类 拼音简繁 Hanlp环境安装 • 1、安装Java和Visual C++:我装的是Java 1.8和V...
  • 功能:中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 新词发现 短语提取 自动摘要 文本分类 拼音简繁 Hanlp环境安装 • 1、安装Java和Visual C++:我装的是Java 1.8和Visual C++ 2015。 • 2、安裝Jpype,...
  • 本篇文章介绍了我在初次使用Hanlp的记录,记录生活点滴,快乐编码!...功能:中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 新词发现 短语提取 自动摘要 文本分类 拼音简繁Hanlp环境安装•...
  • 最近在研究中文分词及自然语言相关的内容,关注到JAVA环境下的HanLP,HanLP是一个致力于向生产环境普及NLP技术的开源Java工具包,支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
热门标签
关键字:

中文分词及关键词提取