nlp工具_nlp工具 指代消解 - CSDN
精华内容
参与话题
  • 中文 NLP 工具总结

    千次阅读 2019-04-09 11:27:18
    中文 NLP 工具总结 前言: 最近由于实验室研究需要,需要调研一下目前已有的中文 NLP 工具,于是在调研完了之后就写了这篇总结,如果哪里有错误还请指出。 1. Jieba 分词 1.1 简介 官网介绍:“结巴”中文分词:做...

    中文 NLP 工具总结

    前言: 最近由于实验室研究需要,需要调研一下目前已有的中文 NLP 工具,于是在调研完了之后就写了这篇总结,如果哪里有错误还请指出。

    1. Jieba 分词

    1.1 简介

    官网介绍:“结巴”中文分词:做最好的 Python 中文分词组件

    但是不是最好的呢?详情见最后的横向对比。

    GitHub地址:https://github.com/fxsjy/jieba

    1.2 模型原理

    • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
    • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
    • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

    1.3 安装

    安装方式很简单,只要一个命令即可:

    pip install jieba 
    #或者
    pip3 install jieba
    

    1.4 使用

    # encoding=utf-8
    import jieba
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
    print(", ".join(seg_list))
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
    print(", ".join(seg_list))
    

    输出:

    【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
    
    【精确模式】: 我/ 来到/ 北京/ 清华大学
    
    【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
    
    【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
    

    1.5 分词评测

    ctb6 msra pku
    jieba 80.79 81.45 81.82

    2. pyltp——哈工大

    2.1 简介

    pyltp 是 LTP 的 Python 封装,提供了分词,词性标注,命名实体识别,依存句法分析,语义角色标注的功能。

    官网:https://ltp.readthedocs.io/zh_CN/latest/begin.html

    官方pyltp介绍:https://pyltp.readthedocs.io/zh_CN/develop/api.html

    标注体系等详细介绍:http://www.ltp-cloud.com/intro

    GitHub 主页:https://github.com/HIT-SCIR/pyltp

    2.2 模型原理

    2.2.1 分词

    基于字的序列标注,对于输入句子的字序列,模型给句子中的每个字标注一个标识词边界的标记,通过机器学习算法框架从标注数据中学习参数。

    2.2.2 词性标注

    与分词模块相同,将词性标注任务建模为基于词的序列标注问题。对于输入句子的词序列,模型给句子中的每个词标注一个标识词边界的标记。

    2.2.3 依存分析

    依存句法分析模块的主要算法依据神经网络依存句法分析算法,Chen and Manning (2014)。同时加入丰富的全局特征和聚类特征。在模型训练时,我们也参考了Yoav等人关于dynamic oracle的工作。

    2.3 安装

    1. 安装 pyltp 的包
    pip install pyltp
    
    1. 下载模型文件:https://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2F

    目前最新的模型是 3.4.0 ,解压之……
    pyltp目录

    2.4 使用

    2.4.1 分词

    # -*- coding: utf-8 -*-
    import os
    LTP_DATA_DIR = '/home/username/pyltp/ltp_model'  # ltp模型目录的路径
    cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
    
    from pyltp import Segmentor
    segmentor = Segmentor()  # 初始化实例
    segmentor.load(cws_model_path)  # 加载模型
    words = segmentor.segment('元芳你怎么看')  # 分词
    print(list(words))
    for word in list(words):
        print(word)
    segmentor.release()  # 释放模型
    

    输出:

    ['元芳', '你', '怎么', '看']
    元芳
    你
    怎么
    看
    

    2.4.2 词性标注

    # -*- coding: utf-8 -*-
    import os
    LTP_DATA_DIR = '/home/knight/pyltp/ltp_model'  # ltp模型目录的路径
    pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')  # 词性标注模型路径,模型名称为`pos.model`
    
    from pyltp import Postagger
    postagger = Postagger() # 初始化实例
    postagger.load(pos_model_path)  # 加载模型
    
    words = ['元芳', '你', '怎么', '看']  # 分词结果
    postags = postagger.postag(words)  # 词性标注
    
    print('\t'.join(postags))
    postagger.release()  # 释放模型
    

    输出:

    nh	r	r	v
    

    2.4.3 依存分析

    # -*- coding: utf-8 -*-
    import os
    LTP_DATA_DIR = '/home/username/pyltp/ltp_model'  # ltp模型目录的路径
    par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')  # 依存句法分析模型路径,模型名称为`parser.model`
    
    from pyltp import Parser
    parser = Parser() # 初始化实例
    parser.load(par_model_path)  # 加载模型
    
    words = ['元芳', '你', '怎么', '看']
    postags = ['nh', 'r', 'r', 'v']
    arcs = parser.parse(words, postags)  # 句法分析
    
    print("\t".join("%d:%s" % (arc.head, arc.relation) for arc in arcs))
    parser.release()  # 释放模型
    

    输出:

    4:SBV	4:SBV	4:ADV	0:HED
    

    2.4.4 分词、词性标注和依存分析的整合

    # -*- coding: utf-8 -*-
    import os
    LTP_DATA_DIR = '/home/username/pyltp/ltp_model'  # ltp模型目录的路径
    cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
    
    pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')  # 词性标注模型路径,模型名称为`pos.model`
    
    parse_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')  # 词性标注模型路径,模型名称为`parser.model`
    
    from pyltp import Segmentor, Postagger, Parser
    
    class PyltpTool:
    
        def __init__(self, filname, corpus_name):
            self.filname = filname
            self.corpus_name = corpus_name
            self.segmentor = Segmentor()  # 初始化实例
            self.segmentor.load(cws_model_path)  # 加载模型
            self.postagger = Postagger()
            self.postagger.load(pos_model_path)
            self.parser = Parser()
            self.parser.load(parse_model_path)
            self.raw_data = []
            self.seg_sentences= []
            self.pos_tags = []
            self.deps = []
    
        def read_data_from_file(self):
            with open(self.filname, encoding='utf-8') as f_obj:
                data = f_obj.readlines()
                for row in data:
                    self.raw_data.append(row.rstrip())
            print(self.raw_data)
    
        def get_seg_sentences(self):
            for sentence in self.raw_data:
                seg_sentence = self.segmentor.segment(sentence)
                self.seg_sentences.append(list(seg_sentence)) 
            print(self.seg_sentences)
            self.write_to_file(self.seg_sentences, "pyltp_" + self.corpus_name + "_seg_sentences.txt")
    
        def get_pos_tags(self):
            for seg_sentence in self.seg_sentences:
                pos_tag = self.postagger.postag(seg_sentence)
                self.pos_tags.append(list(pos_tag))
            print(self.pos_tags)
            self.write_to_file(self.pos_tags, "pyltp_" + self.corpus_name + "_pos_tags.txt")
    
        def get_deps(self):
            index = 0
            while index < len(self.pos_tags):
                dep = self.parser.parse(self.seg_sentences[index], self.pos_tags[index])
                dep_list = [str(dep_info.head) for dep_info in dep]
                self.deps.append(dep_list)
                index += 1
            print(self.deps)
            self.write_to_file(self.deps, "pyltp_" + self.corpus_name + "_deps.txt")
    
        def write_to_file(self, data, filename):
            with open(filename, 'w', encoding='utf-8') as f_obj:
                for row in data:
                    for char in row:
                        f_obj.write(char + " ")
                    f_obj.write('\n')
                
        def realease(self):
            self.segmentor.release()
            self.postagger.release()
            self.parser.release()
    
    #输入存放一行一行句子的文件,分别输出分词、词性标注和依存分析三个文件。
    ctb6_pyltp_tool = PyltpTool("raw_ctb6_test.txt", "ctb6")
    ctb6_pyltp_tool.read_data_from_file()
    ctb6_pyltp_tool.get_seg_sentences()
    ctb6_pyltp_tool.get_pos_tags()
    ctb6_pyltp_tool.get_deps()
    ctb6_pyltp_tool.realease()
    

    2.5 分词评测

    ctb6 msra pku
    pyltp 91.81 88.34 95.32

    3. thulca——清华

    3.1 简介

    THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:

    1. 能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。
    2. 准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。
    3. 速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。

    官网:http://thulac.thunlp.org/

    GitHub地址:https://github.com/thunlp/THULAC-Python

    3.2 模型原理

    看官方介绍应该是基于概率语言模型的。

    3.3 安装

    sudo pip install thulac
    

    3.4 使用

    # encoding=utf-8
    import thulac  
    
    thu1 = thulac.thulac(seg_only=True)  #默认模式
    thu1.cut_f("raw_ctb6_test.txt", "thulca_ctb6_seg_sentences.txt")
    thu1.cut_f("raw_msra_test.txt", "thulca_msra_seg_sentences.txt")
    thu1.cut_f("raw_pku_test.txt", "thulca_pku_seg_sentences.txt")
    

    3.5 分词评测

    ctb6 msra pku
    thulca 88.94 85.56 92.28

    4. NLPIR —— 中科院

    4.1 简介

    主要功能包括中文分词;英文分词;词性标注;命名实体识别;新词识别;关键词提取;支持用户专业词典与微博分析。NLPIR系统支持多种编码、多种操作系统、多种开发语言与平台。

    官网:http://ictclas.nlpir.org/

    GitHub地址:https://github.com/NLPIR-team/NLPIR

    4.2 模型原理

    主要也是基于概率语言模型,详情可以见 \NLPIR-master\NLPIR\paper 这目录下的 paper

    4.3 安装

    GitHub 上面有给出 SVN 的安装方法,但一直都没下载成功,后来通过把那个项目克隆到码云,从码云下载压缩包才下载成功,所以这里直接把我下载好的压缩包上传到百度云了,直接贴贴出来:

    链接:https://pan.baidu.com/s/1cpiTd_QAxTtYTNuy09dWxg
    提取码:8r3x

    下载解压即可。

    4.4 使用

    目前我只用了它的分词,打开目录:D:\NLPIR-master\NLPIR\NLPIR-Parser\bin-win64 下的 NLPIR-Parser.exe的可执行文件

    在这里插入图片描述

    4.5 分词评测

    ctb6 msra pku
    NLPIR 87.30 88.76 93.11

    5. Zpar —— 新加坡科技大学

    5.1 简介

    这是一款新加坡科技大学开发的中文分词工具,C++编写,效率很高,并且支持自己训练模型

    GitHub地址:https://github.com/frcchang/zpar

    5.2 模型原理

    对于该模型原理的资料比较少,只知道也是基于概率语言模型的。

    5.3 安装

    直接克隆 GitHub 的代码进行编译安装

    git clone https://github.com/frcchang/zpar.git
    

    之后依次执行:

    make zpar.zh
    
    make zpar
    
    make postagger
    
    make depparser
    
    make conparser
    
    make segmentor
    
    make chinese.postagger
    
    make chinese.depparser
    
    make chinese.conparser
    

    5.4 使用

    源码里面没有模型,因此模型需要自己训练或者去下载

    模型下载:https://github.com/frcchang/zpar/releases

    因为模型文件有点大,所以一直没能下载下来,因此就用自己下的一些语料自己训练了一下。

    5.4.1 训练

    进入到路径:/zpar/dist/segmentor ,可以看到 segmentortrain 文件, train 是用来训练模型,segmentor 是用训练好的模型来进行分词的。

    ./train [train-file] [model-name] [number of iterations]	#训练的参数
    
    #msr_training.utf8是训练的分词文件, msra_model是训练后的模型名字,4 表示迭代次数,& 表示放在后台进行训练
    ./train msr_training.utf8 msra_model 4 &	
    

    等执行结束后,我们就获得了一个模型文件:msra_model

    之后再加载这个模型文件进行分词

    5.4.2 使用训练的模型进行分词

    ./segmentor [model-name] [input-file] [output-file]	#分词的参数
    
    #用刚才训练好的模型文件对 msr_test.utf8 里面的每句话进行分词,并输出到 msr_result.txt
    ./segmentor msra_model msr_test.utf8 msr_result.txt
    

    5.5 分词评测

    ctb6 msra pku
    Zpar 95.48 96.56 93.57

    **注:**由于下载不到官方提供的模型,因此分别用 ctb6msrapku 的训练集来训练三个模型,然后再分别用各自的测试集测试,才得出以上结果。

    6. CoreNLP —— 斯坦福大学

    6.1 简介

    斯坦福大学这个工具可以支持多种语言的 NLP 任务,具体介绍看官网。

    官网:https://stanfordnlp.github.io/CoreNLP/

    6.2 模型原理

    现在最新的模型大多采用神经网络了。

    6.3——6.4 安装与使用

    详情看简书的这篇文章,讲得很清楚了。

    https://www.jianshu.com/p/77c29af0c574

    在这里我就讲一个里面没有讲到的功能:如果要对分好的词进行词性标注怎么弄?

    修改配置文件既可以:

    在配置文件 StanfordCoreNLP-chinese.properties 注释掉 tokenize.language = zh ,写上 tokenize.language = Whitespace

    # Pipeline options - lemma is no-op for Chinese but currently needed because coref demands it (bad old requirements system)
    #annotators = tokenize, ssplit, pos, lemma, ner, parse, coref
    annotators = tokenize, ssplit, pos, parse
    #tokenize.language = zh
    tokenize.language = Whitespace
    

    6.5 分词评测

    ctb6 msra pku
    CoreNLP 96.75 83.99 89.71

    7. Hanlp —— 开源库

    7.1 简介

    HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。不仅仅是分词,而是提供词法分析、句法分析、语义理解等完备的功能。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。

    HanLP完全开源,包括词典。不依赖其他jar,底层采用了一系列高速的数据结构,如双数组Trie树、DAWG、AhoCorasickDoubleArrayTrie等,这些基础件都是开源的。官方模型训练自2014人民日报语料库,您也可以使用内置的工具训练自己的模型。

    通过工具类HanLP您可以一句话调用所有功能,文档详细,开箱即用。底层算法经过精心优化,极速分词模式下可达2,000万字/秒,内存仅需120MB。在IO方面,词典加载速度极快,只需500 ms即可快速启动。HanLP经过多次重构,欢迎二次开发。

    官网:http://hanlp.linrunsoft.com/

    GitHub主页:https://github.com/hankcs/HanLP

    7.2 模型原理

    最新的模型已经转用神经网络实现了,但同样是用 java 实现,效率没有斯坦福的 CoreNLP 高。

    7.3 安装

    1. 下载工程代码压缩包:https://github.com/hankcs/HanLP/releases,下载后用 idea 打开(我是用IDEA打开的,不知道 eclipse 可不可以)

    2. 下载模型文件:https://github.com/hankcs/HanLP/releases ,根据里面提供的网盘地址下载最新模型文件

    3. 解压模型文件,把里面的文件拷到 \HanLP-master\data\model 路径下。

    7.4 使用

    可以直接使用 HanLP/src/test/java/com/hankcs/demo/ 里面的代码

    /*
     * <summary></summary>
     * <author>He Han</author>
     * <email>hankcs.cn@gmail.com</email>
     * <create-date>2014/12/7 20:14</create-date>
     *
     * <copyright file="DemoPosTagging.java" company="上海林原信息科技有限公司">
     * Copyright (c) 2003-2014, 上海林原信息科技有限公司. All Right Reserved, http://www.linrunsoft.com/
     * This source is subject to the LinrunSpace License. Please contact 上海林原信息科技有限公司 to get more information.
     * </copyright>
     */
    package com.hankcs.demo;
    
    import com.hankcs.hanlp.HanLP;
    import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLSentence;
    import com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord;
    import com.hankcs.hanlp.dependency.IDependencyParser;
    import com.hankcs.hanlp.dependency.perceptron.parser.KBeamArcEagerDependencyParser;
    import com.hankcs.hanlp.utility.TestUtility;
    
    import java.io.IOException;
    
    /**
     * 依存句法分析(神经网络句法模型需要-Xms1g -Xmx1g -Xmn512m)
     *
     * @author hankcs
     */
    public class DemoDependencyParser extends TestUtility
    {
        public static void main(String[] args) throws IOException, ClassNotFoundException
        {
            //CoNLLSentence sentence = HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。");
            //也可以用基于ArcEager转移系统的依存句法分析器
            IDependencyParser parser = new KBeamArcEagerDependencyParser();
            CoNLLSentence sentence = parser.parse("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。");
            System.out.println(sentence);
            // 可以方便地遍历它
            for (CoNLLWord word : sentence)
            {
                System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
            }
            // 也可以直接拿到数组,任意顺序或逆序遍历
            CoNLLWord[] wordArray = sentence.getWordArray();
            for (int i = wordArray.length - 1; i >= 0; i--)
            {
                CoNLLWord word = wordArray[i];
                System.out.printf("%s --(%s)--> %s\n", word.LEMMA, word.DEPREL, word.HEAD.LEMMA);
            }
            // 还可以直接遍历子树,从某棵子树的某个节点一路遍历到虚根
            CoNLLWord head = wordArray[12];
            while ((head = head.HEAD) != null)
            {
                if (head == CoNLLWord.ROOT) System.out.println(head.LEMMA);
                else System.out.printf("%s --(%s)--> ", head.LEMMA, head.DEPREL);
            }
        }
    }
    

    注:这里建议使用基于ArcEager转移系统的依存句法分析器,准确率更高!

    7.5 分词评测

    ctb6 msra pku
    Hanlp 93.83 88.71 91.29

    8. 对比总结

    8.1 分词对比

    ctb6 msra pku 平均
    jieba 80.79 81.45 81.82 81.35
    pyltp 91.81 88.34 95.32 91.82
    thulca 88.94 85.56 92.28 88.93
    NLPIR 87.30 88.76 93.11 89.72
    CoreNLP 96.75 83.99 89.71 90.15
    Hanlp 93.83 88.71 91.29 91.28

    从结果可知:

    CTB6 数据集上面,CoreNLP 表现是最好的

    msra 数据集上,NLPIR 变现是最好的

    pku 数据集上, pyltp 表现是最好的

    jieba 在三个数据集中的表现都是最差的

    整体表现 pyltpHanlp 表现相对较好,而 jieba 依旧是最差的

    综合准确率和分词速度,我认为 pyltp 是目前最优秀的分词工具了。

    另外:

    这次没有具体测速度,但是从目前比较直观的感受看,jieba 应该是最快的,其次是 pyltpthulcaNLPIR,而CoreNLPHanlp 的速度比较慢,其中 Hanlp 的速度最慢。

    8.2 各个工具的词性标注体系

    词性标注体系
    pyltp 863词性标注集:http://www.ltp-cloud.com/intro
    thulac 自己的标注集:http://thulac.thunlp.org/#词性解释
    NLPIR 北大标准:https://blog.csdn.net/kevin_darkelf/article/details/39520881/
    Zpar 好像是CTB,但是由于没有下载到官方模型,所以不得而知
    CoreNLP CTB 标注集
    Hanlp 最新的模型也是 CTB 标注集

    8.3 各个工具所支持的功能

    分词 词性标注 依存句法分析 命名实体识别 语义角色标注 语义依存分析 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁 情感分析
    Jieba
    Pyltp
    thulac
    NLPIR
    Zpar
    CoreNLP
    Hanlp

    9. 附录

    语料库下载:http://sighan.cs.uchicago.edu/bakeoff2005/

    主要是MSRAPKU的语料库

    展开全文
  • NLP开源工具详解

    千次阅读 2019-06-19 23:33:11
    面向工业应用的中文NLP开源工具集、基于PaddlePaddle深度学习框架打造的工业级NLP开源工具集。 一、文本分类 1、文本情感分析 情感是人类的一种高级智能行为,为了识别文本的情感倾向,需要深入的语义建模。另外,...

    一、PaddleNLP
    面向工业应用的中文NLP开源工具集、基于PaddlePaddle深度学习框架打造的工业级NLP开源工具集。
    一、文本分类
    1、文本情感分析
    情感是人类的一种高级智能行为,为了识别文本的情感倾向,需要深入的语义建模。另外,不同领域(如餐饮、体育)在情感的表达各不相同,因而需要有大规模覆盖各个领域的数据进行模型训练。为此,我们通过基于深度学习的语义模型和大规模数据挖掘解决上述两个问题。百度自主研发的中文特色情感倾向分析模型(Sentiment Classification,简称Senta)针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度。情感类型分为积极、消极。情感倾向分析能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。

    基于开源情感倾向分类数据集ChnSentiCorp评测结果如下表所示,此外,PaddleNLP还开源了百度基于海量数据训练好的模型,该模型在ChnSentiCorp数据集上fine-tune之后(基于开源模型进行Finetune的方法详见Github),可以得到更好的效果。

    BOW(Bag Of Words)模型,是一个非序列模型,使用基本的全连接结构。
    
    CNN(Convolutional Neural Networks),是一个基础的序列模型,能处理变长序列输入,提取局部区域之内的特征。
    
    GRU(Gated Recurrent Unit),序列模型,能够较好地解决序列文本中长距离依赖的问题。
    
    LSTM(Long Short Term Memory),序列模型,能够较好地解决序列文本中长距离依赖的问题。
    
    BI-LSTM(Bidirectional Long Short Term Memory),序列模型,采用双向LSTM结构,更好地捕获句子中的语义特征。
    
    ERNIE(Enhanced Representation through kNowledge IntEgration),百度自研基于海量数据和先验知识训练的通用文本语义表示模型,并基于此在情感倾向分类数据集上进行fine-tune获得。
    
    ERNIE+BI-LSTM,基于ERNIE语义表示对接上层BI-LSTM模型,并基于此在情感倾向分类数据集上进行Fine-tune获得。
    

    在这里插入图片描述
    项目地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/sentiment_classification

    2.对话情绪识别
    对话情绪识别适用于聊天、客服等多个场景,能够帮助企业更好地把握对话质量、改善产品的用户交互体验,也能分析客服服务质量、降低人工质检成本。对话情绪识别(Emotion Detection,简称EmoTect),专注于识别智能对话场景中用户的情绪,针对智能对话场景中的用户文本,自动判断该文本的情绪类别并给出相应的置信度,情绪类型分为积极、消极、中性。

    基于百度自建测试集(包含闲聊、客服)和nlpcc2014微博情绪数据集评测效果如下表所示,此外,PaddleNLP还开源了百度基于海量数据训练好的模型,该模型在聊天对话语料上fine-tune之后,可以得到更好的效果。

    BOW:Bag Of Words,是一个非序列模型,使用基本的全连接结构。
    
    CNN:浅层CNN模型,能够处理变长的序列输入,提取一个局部区域之内的特征。
    
    TextCNN:多卷积核CNN模型,能够更好地捕捉句子局部相关性。
    
    LSTM:单层LSTM模型,能够较好地解决序列文本中长距离依赖的问题。
    
    BI-LSTM:双向单层LSTM模型,采用双向LSTM结构,更好地捕获句子中的语义特征。
    
    ERNIE:百度自研基于海量数据和先验知识训练的通用文本语义表示模型,并基于此在对话情绪分类数据集上进行fine-tune获得。
    
    

    在这里插入图片描述
    项目地址:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/emotion_detection

    二、文本匹配
    1、短文本语义匹配

    百度自主研发的短文本语义匹配语义匹配框架(SimilarityNet, SimNet)是一个计算短文本相似度的框架,可以根据用户输入的两个文本,计算出相似度得分。SimNet 在语义表示上沿袭了隐式连续向量表示的方式,但对语义匹配问题在深度学习框架下进行了 End-to-End 的建模,将point-wise与 pair-wise两种有监督学习方式全部统一在一个整体框架内。在实际应用场景下,将海量的用户点击行为数据转化为大规模的弱标记数据,在网页搜索任务上的初次使用即展现出极大威力,带来了相关性的明显提升。SimNet框架在百度各产品上广泛应用,主要包括BOW、CNN、RNN、MMDNN等核心网络结构形式,提供语义相似度计算训练和预测框架,适用于信息检索、新闻推荐、智能客服等多个应用场景,帮助企业解决语义匹配问题。

    基于百度海量搜索数据,PaddleNLP训练了一个SimNet-BOW-Pairwise语义匹配模型,在一些真实的FAQ问答场景中,该模型效果比基于字面的相似度方法AUC提升5%以上。基于百度自建测试集(包含聊天、客服等数据集)和语义匹配数据集(LCQMC)进行评测,效果如下表所示。

    LCQMC数据集以Accuracy为评测指标,而pairwise模型的输出为相似度,因此采用0.958作为分类阈值,相比于基线模型中网络结构同等复杂的CBOW模型(准确率为0.737),BOW_Pairwise的准确率提升为0.7532。
    在这里插入图片描述
    项目地址:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/similarity_net

    三、序列标注
    1、词法分析

    百度自主研发中文特色模型词法分析任务(Lexical Analysis of Chinese),输入是一个字符串,而输出是句子中的词边界和词性、实体类别。序列标注是词法分析的经典建模方式。LAC使用基于 GRU 的网络结构学习特征,将学习到的特征接入 CRF 解码层完成序列标注。CRF 解码层本质上是将传统 CRF 中的线性模型换成了非线性神经网络,基于句子级别的似然概率,因而能够更好的解决标记偏置问题。LAC能整体性地完成中文分词、词性标注、专名识别任务。

    基于自建的数据集上对分词、词性标注、专名识别进行整体的评估效果,效果如下表所示。此外,在飞桨开放的语义表示模型 ERNIE 上 finetune,并对比基线模型、BERT finetuned 和 ERNIE finetuned 的效果,可以看出会有显著的提升。

    项目代码:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/lexical_analysis

    四、文本生成
    1、机器翻译

    机器翻译(machine translation, MT)是利用计算机将一种自然语言(源语言)转换为另一种自然语言(目标语言)的过程,输入为源语言句子,输出为相应的目标语言的句子。Transformer是论文 「Attention Is All You Need 」中提出的用以完成机器翻译(machine translation, MT)等序列到序列(sequence to sequence, Seq2Seq)学习任务的一种全新网络结构。

    其同样使用了 Seq2Seq 任务中典型的编码器-解码器(Encoder-Decoder)的框架结构,但相较于此前广泛使用的循环神经网络(Recurrent Neural Network, RNN),其完全使用注意力(Attention)机制来实现序列到序列的建模,基于公开的 WMT’16 EN-DE 数据集训练 Base、Big 两种配置的Transformer 模型后,在相应的测试集上进行评测,效果如下表所示。

    项目代码:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/neural_machine_translation/transformer

    五、语义表示与语言模型
    1、语言表示工具箱

    BERT 是一个迁移能力很强的通用语义表示模型,以 Transformer 为网络基本组件,以双向 Masked Language Model和 Next Sentence Prediction 为训练目标,通过预训练得到通用语义表示,再结合简单的输出层,应用到下游的 NLP 任务,在多个任务上取得了 SOTA 的结果。

    ELMo(Embeddings from Language Models) 是重要的通用语义表示模型之一,以双向 LSTM 为网路基本组件,以 Language Model 为训练目标,通过预训练得到通用的语义表示,将通用的语义表示作为Feature 迁移到下游 NLP 任务中,会显著提升下游任务的模型性能。PaddleNLP发布了基于百科类数据训练的预训练模型。

    百度自研的语义表示模型ERNIE 通过建模海量数据中的词、实体及实体关系,学习真实世界的语义知识。相较于 BERT 学习原始语言信号,ERNIE直接对先验语义知识单元进行建模,增强了模型语义表示能力。

    这里我们举个例子:

    Learnt by BERT :哈 [mask] 滨是 [mask] 龙江的省会,[mask] 际冰 [mask] 文化名城。

    Learnt by ERNIE:[mask] [mask][mask] 是黑龙江的省会,国际 [mask] [mask] 文化名城。

    在 BERT 模型中,我们通过『哈』与『滨』的局部共现,即可判断出『尔』字,模型没有学习与『哈尔滨』相关的任何知识。而 ERNIE 通过学习词与实体的表达,使模型能够建模出『哈尔滨』与『黑龙江』的关系,学到『哈尔滨』是『黑龙江』的省会以及『哈尔滨』是个冰雪城市。

    训练数据方面,除百科类、资讯类中文语料外,ERNIE 还引入了论坛对话类数据,利用 DLM(Dialogue Language Model)建模 Query-Response 对话结构,将对话 Pair 对作为输入,引入 Dialogue Embedding 标识对话的角色,利用 Dialogue Response Loss学习对话的隐式关系,进一步提升模型的语义表示能力。

    ERNIE在自然语言推断,语义相似度,命名实体识别,情感分析,问答匹配多项NLP中文任务上效果领先。

    项目地址:
    https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE

    https://github.com/PaddlePaddle/LARK/tree/develop/BERT

    https://github.com/PaddlePaddle/LARK/tree/develop/ELMo

    2、语言模型

    基于LSTM的语言模型任务是给定一个输入词序列(中文分词、英文tokenize),计算其PPL(语言模型困惑度,用户表示句子的流利程度),基于循环神经网络语言模型的介绍可以参阅论文「Recurrent Neural Network Regularization」。相对于传统的方法,基于循环神经网络的方法能够更好的解决稀疏词的问题。此任务采用了序列任务常用的RNN网络,实现了一个两层的LSTM网络,然后LSTM的结果去预测下一个词出现的概率。

    在small、meidum、large三个不同配置情况的ppl对比如下表所示。

    项目地址:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/language_model

    六、复杂任务
    1、对话模型工具箱

    Auto Dialogue Evaluation

    对话自动评估模块主要用于评估开放领域对话系统的回复质量,能够帮助企业或个人快速评估对话系统的回复质量,减少人工评估成本。

    1)在无标注数据的情况下,利用负采样训练匹配模型作为评估工具,实现对多个对话系统回复质量排序;
    
    2)利用少量标注数据(特定对话系统或场景的人工打分),在匹配模型基础上进行微调,可以显著提高该对话系统或场景的评估效果。
    

    以四个不同的对话系统(seq2seq_naive/seq2seq_att/keywords/human)为例,使用对话自动评估工具进行自动评估。

    1)无标注数据情况下,直接使用预训练好的评估工具进行评估;在四个对话系统上,自动评估打分和人工评估打分spearman相关系数,如下表所示。
    在这里插入图片描述
    2) 对四个系统平均得分排序:
    在这里插入图片描述
    3)利用少量标注数据微调后,自动评估打分和人工打分spearman相关系数,如下表所示。
    在这里插入图片描述
    项目地址:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation

    Deep Attention Matching Network

    深度注意力机制模型是开放领域多轮对话匹配模型。根据多轮对话历史和候选回复内容,排序出最合适的回复。

    多轮对话匹配任务输入是多轮对话历史和候选回复,输出是回复匹配得分,根据匹配得分排序,更多内容请参阅论文「Multi-Turn Response Selection for Chatbots with Deep Attention Matching Network」。

    两个公开数据集上评测效果如下表所示。
    在这里插入图片描述
    项目地址:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/deep_attention_matching

    对话通用理解模型DGU

    对话相关的任务中,Dialogue System常常需要根据场景的变化去解决多种多样的任务。任务的多样性(意图识别、槽位解析、DA识别、DST等等),以及领域训练数据的稀少,给Dialogue System的研究和应用带来了巨大的困难和挑战,要使得dialogue system得到更好的发展,需要开发一个通用的对话理解模型。基于BERT的对话通用理解模块(DGU: Dialogue General Understanding),通过实验表明,使用base-model(BERT)并结合常见的学习范式,在几乎全部对话理解任务上取得比肩甚至超越各个领域业内最好的模型的效果,展现了学习一个通用对话理解模型的巨大潜力。

    DGU针对数据集开发了相关的模型训练过程,支持分类,多标签分类,序列标注等任务,用户可针对自己的数据集,进行相关的模型定制。基于对话相关的业内公开数据集进行评测,效果如下表所示。
    在这里插入图片描述
    项目地址:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding

    2、知识驱动对话

    人机对话是人工智能(AI)中最重要的话题之一,近年来受到学术界和工业界的广泛关注。目前,对话系统仍然处于起步阶段,通常是被动地进行交谈,并且更多地将他们的言论作为回应而不是他们自己的倡议,这与人与人的谈话不同。因此,我们在一个名为知识驱动对话的新对话任务上设置了这个竞赛,其中机器基于构建的知识图与人交谈。它旨在测试机器进行类似人类对话的能力。

    我们提供基于检索和基于生成的基线系统。这两个系统都是由PaddlePaddle(百度深度学习平台)和Pytorch(Facebook深度学习框架)实现的。两个系统的性能如下表所示。
    在这里插入图片描述
    项目地址:
    https://github.com/baidu/knowledge-driven-dialogue/tree/master

    3、阅读理解

    在机器阅读理解(MRC)任务中,我们会给定一个问题(Q)以及一个或多个段落§/文档(D),然后利用机器在给定的段落中寻找正确答案(A),即Q + P or D => A. 机器阅读理解(MRC)是自然语言处理(NLP)中的关键任务之一,需要机器对语言有深刻的理解才能找到正确的答案。基于PaddlePaddle的阅读理解升级了经典的阅读理解BiDAF模型,去掉了char级别的embedding,在预测层中使用了pointer network,并且参考了R-NET中的一些网络结构,效果上有了大幅提升(在DuReader2.0验证集、测试集的表现见下表)。

    DuReader是一个大规模、面向真实应用、由人类生成的中文阅读理解数据集。DuReader聚焦于真实世界中的不限定领域的问答任务。相较于其他阅读理解数据集,DuReader的优势包括:

    问题来自于真实的搜索日志
    
    文章内容来自于真实网页
    
    答案由人类生成
    
     面向真实应用场景
    
    标注更加丰富细致
    

    在这里插入图片描述
    项目地址:
    https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/reading_comprehension

    参考:https://nlp.baidu.com/homepage/nlptools

    展开全文
  • NLP常用工具

    2019-01-08 07:28:43
    NLP常用工具 各种工具包的有效利用可以使研究者事半功倍。以下是NLP版版友们提供整理的NLP研究工具包。同时欢迎大家提供更多更好用的工具包,造福国内的NLP研究。*NLP Toolbox CLT ...
    各种工具包的有效利用可以使研究者事半功倍。
    以下是NLP版版友们提供整理的NLP研究工具包。
    同时欢迎大家提供更多更好用的工具包,造福国内的NLP研究。

    *NLP Toolbox
      CLT http://complingone.georgetown.edu/~linguist/compling.html
      GATE http://gate.ac.uk/
      Natural Language Toolkit(NLTK) http://nltk.org
      MALLET http://mallet.cs.umass.edu/index.php/Main_Page
      OpenNLP http://opennlp.sourceforge.net/

    *English Stemmer
      Snowball http://snowball.tartarus.org/

    *English POS Tagger
      Stanford POS Tagger http://nlp.stanford.edu/software/tagger.shtml
      TreeTagger http://www.ims.uni-stuttgart.de/projekte/corplex/TreeTagger/
      TnT http://www.coli.uni-saarland.de/~thorsten/tnt/

    *English&Chinese Parser
      Stanford Parser http://nlp.stanford.edu/software/lex-parser.shtml
      Berkeley Parser http://nlp.cs.berkeley.edu/Main.html#Parsing

    *English Keyphrase Extractor
      KEA http://www.nzdl.org/Kea/index_old.html
      
    *English Name Entity Recognizer
      Stanford NER http://nlp.stanford.edu/software/CRF-NER.shtml

    *Chinese Word Segmentator
      中科院ICTCLAS http://www.nlp.org.cn/project/project.php?proj_id=6
      Stanford Word Segmenter http://nlp.stanford.edu/software/segmenter.shtml

    *Topic Modeling Tools
      Matlab http://psiexp.ss.uci.edu/research/programs_data/toolbox.htm
      GibbsLDA++ http://gibbslda.sourceforge.net/
      GLDA http://code.google.com/p/glda/

    *Conditional Random Fields
      FlexCRFs http://flexcrfs.sourceforge.net/ 含有MPI并行版本。
      CRF++  http://crfpp.sourFceforge.net/
      CRF Package http://crf.sourceforge.net/
      CRF Matlab http://www.cs.ubc.ca/~murphyk/Software/CRFall.zip
      CRFSuit http://www.chokkan.org/software/crfsuite/
      SGD with CRF http://leon.bottou.org/projects/sgd
      HCRF http://sourceforge.net/projects/hcrf/

    *Support Vector Machine 
      LIBSVM http://www.csie.ntu.edu.tw/~cjlin/libsvm/
      LIBLINEAR http://www.csie.ntu.edu.tw/~cjlin/liblinear/
      Pegasos http://www.cs.huji.ac.il/~shais/code/index.html

    *Search Engines
      Lucene http://lucene.apache.org/
      中科院FirteX http://www.firtex.org/

    *Machine Learning and Data Mining Toolbox
      Weka http://www.cs.waikato.ac.nz/ml/weka/
    展开全文
  • NLP常用工具总结

    2019-06-09 04:03:54
    NLP常用工具总结分词/词性标注1.1 jieba分词:1.2 jieba词性标注:2 hanlp2.1 hanlp分词2.2 命名实体识别与词性标注2.3 关键词提取2.4 自动摘要2.5短语提取3 standfordcorenlp 分词/词性标注 1.1 jieba分词: #全...

    分词/词性标注

    1.1 jieba分词:

    #全模式

    import jieba
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    

    输出:Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

    #精确模式(默认)

    seg_list = jieba.cut("我来到北京清华大学")
    

    输出:我/ 来到/ 北京/ 清华大学

    #搜索引擎模式

    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")
    

    输出:小明/ 硕士/ 毕业/ 于/ 中国/ 科学/ 学院/ 科学院/ 中国科学院/ 计算/ 计算所/ ,/ 后/ 在/ 日本/ 京都/
    大学/ 日本京都大学/ 深造

    1.2 jieba词性标注:

    import jieba.posseg as pseg
    
    strings="是广泛使用的中文分词工具,具有以下特点:"
    words = pseg.cut(strings)
    

    2 hanlp

    from jpype import *
    
    #启动JVM
    startJVM(getDefaultJVMPath(), "-Djava.class.path=D:\python\hanlp\hanlp-1.7.3.jar;D:\python\hanlp",
             "-Xms1g",
             "-Xmx1g")
    

    2.1 hanlp分词

    #HanLp分词

    HanLP = JClass('com.hankcs.hanlp.HanLP')
    print(HanLP.segment('你好,欢迎在Python中调用HanLP的API'))
    

    输出:[你好/vl, ,/w, 欢迎/v, 在/p, Python/nx, 中/f, 调用/v, HanLP/nx, 的/ude1,
    API/nx]

    #标准分词

    StandardTokenizer = JClass('com.hankcs.hanlp.tokenizer.StandardTokenizer')
    print(StandardTokenizer.segment('你好,欢迎在Python中调用HanLP的API'))
    

    输出:[你好/vl, ,/w, 欢迎/v, 在/p, Python/nx, 中/f, 调用/v, HanLP/nx, 的/ude1,
    API/nx]

    #NLP分词 NLPTokenizer会执行全部命名实体识别和词性标注

     NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
     print(NLPTokenizer.segment('中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程'))
    

    输出:[中国科学院计算技术研究所/nt, 的/u, 宗/q, 成庆/vn, 教授/n, 正在/d, 教授/v, 自然语言处理/nz,
    课程/n]

    #索引分词

    IndexTokenizer = JClass('com.hankcs.hanlp.tokenizer.IndexTokenizer')
    termList = IndexTokenizer.segment("主副食品")
    for term in termList:
    	print(str(term) + " [" + str(term.offset) + ":" + str(term.offset + len(term.word)) + "]")
    

    输出:
    主副食品/n [0:4]
    主副食/j [0:3]
    副食品/n [1:4]
    副食/n [1:3]
    食品/n [2:4]

    #极速词典分词

    SpeedTokenizer = JClass('com.hankcs.hanlp.tokenizer.SpeedTokenizer')
    print(SpeedTokenizer.segment('江西鄱阳湖干枯,中国最大淡水湖变成大草原'))
    

    输出:[江西/null, 鄱阳湖/null, 干枯/null, ,/null, 中国/null, 最大/null, 淡水湖/null,
    变成/null, 大草原/null]

    #自定义分词

    CustomDictionary = JClass('com.hankcs.hanlp.dictionary.CustomDictionary')
    CustomDictionary.add('攻城狮')
    CustomDictionary.add('单身狗')
    HanLP = JClass('com.hankcs.hanlp.HanLP')
    print(HanLP.segment('攻城狮逆袭单身狗,迎娶白富美,走上人生巅峰'))
    

    输出:[攻城狮/nz, 逆袭/nz, 单身狗/nz, ,/w, 迎娶/v, 白富美/nr, ,/w, 走上/v, 人生/n, 巅峰/n]

    2.2 命名实体识别与词性标注

    NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
    print(NLPTokenizer.segment('中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程'))
    

    输出:[中国科学院计算技术研究所/nt, 的/u, 宗/q, 成庆/vn, 教授/n, 正在/d, 教授/v, 自然语言处理/nz,
    课程/n] H2O is是液体

    2.3 关键词提取

    HanLP = JClass('com.hankcs.hanlp.HanLP')
    document = "水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露"
    print(HanLP.extractKeyword(document, 8))
    

    输出:[国务院新闻办, 陈明忠, 9月, 举行, 司长, 司, 新闻, 水资源]

    2.4 自动摘要

    HanLP = JClass('com.hankcs.hanlp.HanLP')
    document = "水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露," \
        "根据刚刚完成了水资源管理制度的考核,有部分省接近了红线的指标," \
               "有部分省超过红线的指标。对一些超过红线的地方,陈明忠表示,对一些取用水项目进行区域的限批," \
               "严格地进行水资源论证和取水许可的批准。"
    print(HanLP.extractSummary(document, 3))
    

    输出:[严格地进行水资源论证和取水许可的批准, 水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露,
    有部分省超过红线的指标]

    2.5短语提取

    HanLP = JClass('com.hankcs.hanlp.HanLP')
    text = r"算法工程师\n 算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法工程师就是利用算法处理事物的人。\n \n 1职位简介\n 算法工程师是一个非常高端的职位;\n 专业要求:计算机、电子、通信、数学等相关专业;\n 学历要求:本科及其以上的学历,大多数是硕士学历及其以上;\n 语言要求:英语要求是熟练,基本上能阅读国外专业书刊;\n 必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。\n\n2研究方向\n 视频算法工程师、图像处理算法工程师、音频算法工程师 通信基带算法工程师\n \n 3目前国内外状况\n 目前国内从事算法研究的工程师不少,但是高级算法工程师却很少,是一个非常紧缺的专业工程师。算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。\n 在计算机音视频和图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法:机器视觉成为此类算法研究的核心;另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。\n 在通信物理层等一维信息领域目前常用的算法:无线领域的RRM、RTT,传送领域的调制解调、信道均衡、信号检测、网络优化、信号分解等。\n 另外数据挖掘、互联网搜索算法也成为当今的热门方向。\n"
    print(HanLP.extractPhrase(text, 10))
    

    输出:[算法工程师, 算法处理, 一维信息, 算法研究, 信号处理, 信息算法, 通信物理层, 处理算法, 视频算法, 互联网搜索算法]

    3 standfordcorenlp

    from stanfordcorenlp import StanfordCoreNLP
    nlp = StanfordCoreNLP(r'D:\python\stanfordnlp', lang='zh')
    
    sentence = '清华大学位于北京。'
    
    print (nlp.word_tokenize(sentence)) 					#分词
    print (nlp.pos_tag(sentence))							#词性标注
    print (nlp.ner(sentence))								#命名实体识别
    print (nlp.parse(sentence))								#依存句法分析
    print (nlp.dependency_parse(sentence))                  #语义依存分析
    
    展开全文
  • NLP中文分词工具比较

    万次阅读 2018-01-19 09:09:18
    THULAC四款python中中文分词的...尝试的有:jieba、SnowNLP(MIT)、pynlpir(大数据搜索挖掘实验室(北京市海量语言信息处理与云计算应用工程技术研究中心))、thulac(清华大学自然语言处理与社会人文计算实验室)
  • 中文NLP工具和教程

    千次阅读 2018-11-12 14:30:26
    awesome-chinese-nlp A curated list of resources for NLP ...中文自然语言处理相关资料 图片来自复旦大学邱锡鹏教授 Contents 列表 1. Chinese NLP Toolkits 中文NLP工具 Toolkits 综合NLP工具包 Popular...
  • 英语 MeTA Turbo StanfordNLP NLTK spacy 中文 NLTK ltp lac StanfordNLP
  • 学习自然语言这一段时间以来接触和听说了好多开源的自然语言处理工具,在这里做一下汇总方便自己以后学习,其中有自己使用过的也有了解不是很多的,对于不甚了解的工具以后学习熟悉了会做更新的。 1.IKAnalyzer IK...
  • OPENNLP——java的NLP工具

    千次阅读 2012-06-01 22:42:27
    Apache OpenNLP库是一个基于机器学习的自然语言文本处理的开发工具包,它支持自然语言处理中一些共有的任务,例如:标记化、句子分割、词性标注、固有实体提取(指在句子中辨认出专有名词,例如:人名)、浅层分析...
  • R语言安装NLP自然语言分析包

    千次阅读 2015-11-15 20:22:16
    1. 自然语言处理NLP)  对于英语体系,基于空格可以直接进行分词,而中文则不同,需要进行分词,然后进行后续处理。NLP是natural language processing的缩写,专指此类的工作。  自然语言处理包: Snowba
  • NLP算法和工具汇总

    千次阅读 热门讨论 2018-07-25 10:54:15
    自然语言处理的算法和工具汇总
  • 使用Stanford CoreNLP工具处理中文

    千次阅读 2018-06-11 21:38:52
    转载:https://blog.csdn.net/u014749291/article/details/51152007这几天刚刚接触自然语言处理,使用了Stanford CoreNLP工具。但毕竟是第一次用,所以遇到很多问题,现将解决方案记下(容易百度到的错误就不记了)...
  • 复旦的NLP——fudanNLP

    千次阅读 2012-06-03 01:13:37
    FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。 演示地址: http://jkx.fudan.edu.cn/nlp/query FudanNLP目前实现的内容如下: 中文处理工具  中文分词 ...
  • NLP的四大基本任务

    千次阅读 2019-04-15 08:36:26
    1. 序列标注:分词/POS Tag/NER/语义标注 2. 分类任务:文本分类/情感计算 3. 句子关系判断:Entailment/QA/自然语言推理 4. 生成式任务:机器翻译/文本摘要
  • CoreNLP:斯坦福大学的CoreNLP提供一系列的自然语言处理工具,输入原始英语文本,可以给出单词的基本形式(下面Stanford开头的几个工具都包含其中)。(https://nlp.stanford.edu/software/corenlp.shtml) ...
  • 自然语言处理中文 工具

    千次阅读 2012-09-04 15:35:19
    LingPipe是一个自然语言处理的Java开源工具包。LingPipe目前已有很丰富的功能,包括主题分类(Top Classification)、命名实体识别(Named Entity Recognition)、词性标注(Part-of Speech Tagging)、句题检测...
  • Apache OpenNLP介绍(一)

    千次阅读 2017-02-17 11:48:30
     Apache OpenNLP库是一种基于机器学习的工具包,用于处理自然语言文本。 它支持最常见的NLP任务,如标记化,句子分割,词性标记,命名实体提取,分块,解析和参考解析。 通常需要这些任务来构建更高级的文本处理...
  • Python自然语言处理NLP工具小结

    万次阅读 2018-01-03 14:42:09
    Python 的几个自然语言处理工具自然语言处理(Natural Language Processing,简称NLP)是人工智能的一个子域。自然语言处理的应用包括机器翻译、情感分析、智能问答、信息提取、语言输入、舆论分析、知识图谱等方面...
  • 自然语言处理NLP常用开源/免费工具

    千次阅读 2016-03-26 13:58:02
    NLP常用开源/免费工具 (转载自水木社区NLP版) *Computational Linguistics Toolbox  CLT http://complingone.georgetown.edu/~linguist/compling.html  GATE http://gate.ac.uk/  Natural Language ...
  • 自然语言处理NLP开源软件工具

    千次阅读 2019-06-24 15:28:36
    自然语言处理NLP) 开源软件工具包 基础研究领域 1、文本分类 2、依存分析 3、命名实体 4、词性标注 5、中文分词 6、情感分析 7、信息抽取 8、文本摘要 一、NLTK NLTLK官方文档地址:http://www.nltk.org/ ...
1 2 3 4 5 ... 20
收藏数 148,477
精华内容 59,390
关键字:

nlp工具