精华内容
下载资源
问答
  • 序列标注的网络原始数据集
  • 基于 TensorFlow & PaddlePaddle 的通用序列标注算法库(目前包含 BiLSTM+CRF 和 IDCNN+CRF,更多算法正在持续添加中)实现中文分词(Tokenizer / segmentation)、词性标注(Part Of Speech, POS)和命名实体识别...
  • 《自然语言处理入门》第04章 隐马尔可夫模型与序列标注.pptx
  • 中文NLP序列标注工具。利用CRF进行命名实体识别NER,自动标注数据集产生语料库,可以选择BIO或者BMES标注体系。
  • 文本分类和序列标注是入门 NLP 最好的两个任务,覆盖了常用 NLP 任务的流程,因此掌握了这两个任务,也能方便的拓展到其他任务。搜索网上这两个任务相关的项目,发现一个痛点:项目太单一,不够系统化,这里的系统化...
  • 使用深度学习方法BiLSTM,并结合CRF模型的标签依赖性特点,解决命名实体识别的序列标注问题
  • 序列标注

    2017-07-19 09:21:18
    序列标注问题应该说是自然语言处理中最常见的问题,而且很可能是最而没有之一。在深度学习没有广泛渗透到各个应用领域之前,传统的最常用的解决序列标注问题的方案是最大熵、CRF等模型,尤其是CRF,基本是最主流的...

    序列标注问题应该说是自然语言处理中最常见的问题,而且很可能是最而没有之一。在深度学习没有广泛渗透到各个应用领域之前,传统的最常用的解决序列标注问题的方案是最大熵、CRF等模型,尤其是CRF,基本是最主流的方法。随着深度学习的不断探索和发展,很可能RNN模型会取代CRF的传统霸主地位,会成为解决序列标注问题的标配解决方案。


    本文主要抽象出利用RNN解决序列标注问题的通用优化思路。这个RNN优化思路应该说是使用场景非常广泛,目前NLP中绝大多数问题都可以套用这套优化思路来统一解决问题。它有个独特的好处,就是说只要你构建好完整的这一套优化模型,绝大多数NLP的问题,包括分词、词性标注、命名实体识别、关键词抽取、语义角色标注等等,等于说问题已经被解决了,只需要你使用不同问题对应的训练数据跑一遍,就等于说上面问题的实际解决工具你就拥有了,而不用像传统模型一样还需要不断定义问题特征模板等,这就是End-to-End的好处。


    再啰嗦两句,为什么说RNN一定会取代CRF?当然这不代表CRF完全会被抛弃,以后一定有人去研究怎么结合RNNCRF,这个估计也没有疑问。但是RNN取代CRF获得主流地位是一定的,原因就是上面说的DLEnd-to-End的优势。意思是,即使RNN只能取得和CRF方法类似的效果,但是由于End-to-End的优势,你不需要对研究领域有任何领域知识也能把它干好,因为有用的领域特征DL自己会去学,这个好处是巨大的(但是对于传统依靠NLP经验混饭吃的NLP老手们来说,这是个坏消息),况且目前看RNN在不少领域已经获得了最好的结果。结合这些特点,这就是为何说RNN会取代CRF成为新的主流模型的原因。


    如果看将来的技术发展趋势,从目前情况看,如果再把Encoder-Decoder框架引进来,加上这篇文章讲的RNN解决序列标注问题,以及后面可能会写的用RNN解决句子分类问题的通用思路,我相信NLP90%以上的问题都可以被这两个模型覆盖(当然Encoder-Decoder实际上和RNN不是一个层级的模型,这个我们暂且放一边,但且把它们并列来提)。所谓:RNN在手,全都我有,此言诚不我欺也。


    我觉得还在坚韧不拔地坚持用传统方法搞NLP的同志应该好好读一读我上面这几段话,里面有深意,自己去体会。


    |序列标注问题


    如上文所述,序列标注问题是NLP中最常见的问题,因为绝大多数NLP问题都可以转化为序列标注问题,虽然很多NLP任务看上去大不相同,但是如果转化为序列标注问题后其实面临的都是同一个问题。所谓“序列标注”,就是说对于一个一维线性输入序列:


    给线性序列中的每个元素打上标签集合中的某个标签


    所以,其本质上是对线性序列中每个元素根据上下文内容进行分类的问题。一般情况下,对于NLP任务来说,线性序列就是输入的文本,往往可以把一个汉字看做线性序列的一个元素,而不同任务其标签集合代表的含义可能不太相同,但是相同的问题都是:如何根据汉字的上下文给汉字打上一个合适的标签。


    我们以中文分词任务来说明序列标注的过程。图1给出了个例子,假设现在输入句子“跟着TFboys学左手右手一个慢动作”,我们的任务是正确地把这个句子进行分词。首先,把句子看做是一系列单字组成的线性输入序列,即:


              “跟  Tfboys                    作”


    序列标注的任务就是给每个汉字打上一个标签,对于分词任务来说,我们可以定义标签集合为:


      

    其中B代表这个汉字是词汇的开始字符,M代表这个汉字是词汇的中间字符,E代表这个汉字是词汇的结束字符,而S代表单字词。



                                               1. 中文分词序列标注过程


    有了这四个标签就可以对中文进行分词了。这时你看到了,中文分词转换为对汉字的序列标注问题,假设我们已经训练好了序列标注模型,那么分别给每个汉字打上标签集合中的某个标签,这就算是分词结束了,因为这种形式不方便人来查看,所以可以增加一个后处理步骤,把B开头,后面跟着M的汉字拼接在一起,直到碰见E标签为止,这样就等于分出了一个单词,而打上S标签的汉字就可以看做是一个单字词。于是我们的例子就通过序列标注,被分词成如下形式:

           {跟着  Tfboys 左手 右手 一个 慢动作}


    要学习NLP,首先要把面对问题时的思维意识转换一下,就是如上所示,把你直观感觉的问题转换为序列标注思维,这个思维意识转换过程很重要,如果你没有这种意识,那很明显属于业余选手,专业选手看NLP问题肯定首先是把它们看做一个序列标注问题的。


    为了促进意识转换,下面再用命名实体识别(NER)问题举个序列标注解决问题的例子,命名实体识别任务是识别句子中出现的实体,通常识别人名、地名、机构名这三类实体。现在的问题是:假设输入中文句子


      {花园北路的北医三院里,昏迷三年的我听杨幂的爱的供养时起身关了收音机。}


    我们要识别出里面包含的人名、地名和机构名。如果以序列标注的角度看这个问题,应该怎么解决呢?图2给出了整个流程的说明。


    首先,我们把输入序列看成一个个汉字组成的线性序列,这是基础。


    然后,我们定义标签集合如下(这个标签用什么代表不重要,重要的是它们代表的含义):



    其中,BA代表这个汉字是地址首字,MA代表这个汉字是地址中间字,EA代表这个汉字是地址的尾字;BO代表这个汉字是机构名的首字,MO代表这个汉字是机构名称的中间字,EO代表这个汉字是机构名的尾字;BP代表这个汉字是人名首字,MP代表这个汉字是人名中间字,EP代表这个汉字是人名尾字,而O代表这个汉字不属于命名实体。


                                    2. 命名实体(NER)序列标注过程


    有了输入汉字序列,也有了标签集合,那么剩下的问题是训练出一个序列标注ML系统,能够对每一个汉字进行分类,假设我们已经学好了这个系统,那么就给输入句子中每个汉字打上标签集合中的标签,于是命名实体就被识别出来了,为了便于人查看,增加一个后处理步骤,把人名、地名、机构名都明确标识出来即可。


    很多NLP中的其它任务同样可以转换为序列标注问题,比如词性标注、CHUNK识别、句法分析、语义角色识别,甚至包括关键词抽取等很多应用问题也是如此。


    传统解决序列标注问题的方法包括HMM/MaxEnt/CRF等,很明显RNN很快会取代CRF的主流地位,成为解决序列标注问题的标准解决方案,那么如果使用RNN来解决各种NLP基础及应用问题,有什么优化轨迹可循吗?有的,下面我们就归纳一下使用RNN解决序列标注问题的一般优化思路。


    |使用RNN解决序列标注问题的一般优化思路


    首先,我们可以说,对于序列标注问题,都可以用RNN来替代传统解决方案,这个目前看没什么问题,也是大势所趋。


    然后,如果归纳的话,一般的优化流程是:首先用RNN来解决序列标注问题,然后可以上LSTM或者GRU来替代RNN中的隐层单元,因为LSTMGRU对于解决长距离依赖的场景明显要优于RNN本身,接着可以上BLSTM,即双向LSTM,因为双向RNN或者双向LSTM相对RNN来说,能够看到下文特征,所以明显引入了更多的特征,如果你觉得效果还是不够好,那么可以增加BLSTM的深度,不断叠加网络形成深度BLSTM网络,当然,这里要注意,随着优化的进行,模型越来越复杂,如果训练数据规模不够的话,很可能会出现过拟合现象,所以使用LSTM的时候,记得用上DropOut以及L1/L2正则来避免过拟合,但是如果模型相对训练数据规模确实复杂,你加上这些可能也没用。至于GRULSTM两者相比,到底哪个更好目前并无定论,倾向于认为两者性能差不多,但是GRULSTM的简化模型,所以同样结构的神经网络其参数要少,在训练数据不太大情况下,优先考虑使用GRU


    当然,根据NLP的不同任务特点,是先上BiRNN好还是先上LSTM好这个可能不同任务情况不一样,比如对于分词、POSNER这种依赖不会太远的任务,RNN应该就够了,但是BiRNN肯定是要上的,因为下文特征有重要参考意义,但是对于语义级别的任务比如指代消解、语义角色标注等,估计肯定是要上LSTM的。所以要根据具体情况具体分析,不过通用的优化手段也不外乎以上几种。


    下面给出深层双向LSTM来做NER的神经网络结构示意图:


                                           图3. 深层双向LSTMNER


    图比较直观,就不解释了,其它的NLP序列标注任务其实都可以套用这个模型来解决。

    展开全文
  • 提出了一种基于序列标注模型的中文依存句法分析方法。 该方法将依存句法分析转化成序列标注问题, 利用条件随机 场 CRF ( Cond itionalR andom F ie ld)建立序列标注模型。 在宾州中文树库的测试中, 达得了 76. 59% ...
  • 序列标注 | (1) 序列标注问题概述

    千次阅读 2020-04-02 20:44:43
     序列标注问题是自然语言中最常见的问题,在深度学习火起来之前,常见的序列标注问题的解决方案都是借助于HMM模型,最大熵模型,CRF模型。尤其是CRF,是解决序列标注问题的主流方法。随着深度学习的发展,RNN在序列...

    原文地址
     序列标注问题是自然语言中最常见的问题,在深度学习火起来之前,常见的序列标注问题的解决方案都是借助于HMM模型,最大熵模型,CRF模型。尤其是CRF,是解决序列标注问题的主流方法。随着深度学习的发展,RNN在序列标注问题中取得了巨大的成果。而且深度学习中的end-to-end,也让序列标注问题变得更简单了。

    序列标注问题包括自然语言处理中的分词,词性标注,命名实体识别(实体抽取),关键词抽取,词义角色标注等等。我们只要在做序列标注时给定特定的标签集合,就可以进行序列标注。

    序列标注问题是NLP中最常见的问题,因为绝大多数NLP问题都可以转化为序列标注问题,虽然很多NLP任务看上去大不相同,但是如果转化为序列标注问题后其实面临的都是同一个问题。所谓“序列标注”,就是说对于一个一维线性输入序列:
     在这里插入图片描述
      给线性序列中的每个元素打上标签集合中的某个标签:
      在这里插入图片描述
      所以,其本质上是对线性序列中每个元素根据上下文内容进行分类的问题。一般情况下,对于NLP任务来说,线性序列就是输入的文本,往往可以把一个汉字看做线性序列的一个元素,而不同任务其标签集合代表的含义可能不太相同,但是相同的问题都是:如何根据汉字的上下文给汉字打上一个合适的标签(无论是分词,还是词性标注,或者是命名实体识别,道理都是相通的)。

    序列标注问题之中文分词

    以中文分词任务来说明序列标注的过程。假设现在输入句子“跟着TFboys学左手右手一个慢动作”,我们的任务是正确地把这个句子进行分词。首先,把句子看做是一系列单字组成的线性输入序列,即:
    在这里插入图片描述
      序列标注的任务就是给每个汉字(序列中的每个元素)打上一个标签,对于分词任务来说,我们可以定义标签集合为(jieba分词中的标签集合也是这样的):
      在这里插入图片描述
      其中B代表这个汉字是词汇的开始字符,M代表这个汉字是词汇的中间字符,E代表这个汉字是词汇的结束字符,而S代表单字词。
      在这里插入图片描述
      有了这四个标签就可以对中文进行分词了。这时你看到了,中文分词转换为对汉字的序列标注问题,假设我们已经训练好了序列标注模型,那么分别给每个汉字打上标签集合中的某个标签,这就算是分词结束了,因为这种形式不方便人来查看,所以可以增加一个后处理步骤,把B开头,后面跟着M的汉字拼接在一起,直到碰见E标签为止,这样就等于分出了一个单词,而打上S标签的汉字就可以看做是一个单字词。于是我们的例子就通过序列标注,被分词成如下形式:
    在这里插入图片描述
    在这里我们可以采用双向LSTM来处理该类问题,双向会关注上下文的信息。
    在NLP中最直观的处理问题的方式就是要把问题转换为序列标注问题,思考问题的思维方式也就转换为序列标注思维,这个思维很重要,决定你能否真的处理好NLP问题。

    序列标注之命名实体识别(NER,实体抽取)

    我们再来看看命名实体识别问题中的序列标注,命名实体识别任务是识别句子中出现的实体,通常识别人名、地名、机构名这三类实体。现在的问题是:假设输入中文句子
    在这里插入图片描述
    我们要识别出里面包含的人名、地名和机构名。如果以序列标注的角度看这个问题,我们首先得把输入序列看成一个个汉字组成的线性序列,然后我们要定义标签集合,标签集合如下(在这里的标签用什么代表不重要,重要的是它代表的含义):  在这里插入图片描述
     其中,BA代表这个汉字是地址首字,MA代表这个汉字是地址中间字,EA代表这个汉字是地址的尾字;BO代表这个汉字是机构名的首字,MO代表这个汉字是机构名称的中间字,EO代表这个汉字是机构名的尾字;BP代表这个汉字是人名首字,MP代表这个汉字是人名中间字,EP代表这个汉字是人名尾字,而O代表这个汉字不属于命名实体。
     在这里插入图片描述
     有了输入汉字序列,也有了标签集合,那么剩下的问题是训练出一个序列标注ML系统,能够对每一个汉字(每个元素)进行分类(打标签),假设我们已经学好了这个系统,那么就给输入句子中每个汉字打上标签集合中的标签,于是命名实体就被识别出来了,为了便于人查看,增加一个后处理步骤,把人名、地名、机构名都明确标识出来即可。
      除了上面的分词和命名实体标注,很多其他的NLP问题同样可以转换为序列标注问题,比如词性标注、CHUNK识别、句法分析、语义角色识别、关键词抽取等。

    传统解决序列标注问题的方法包括HMM/MaxEnt/CRF等,很明显RNN很快会取代CRF的主流地位,成为解决序列标注问题的标准解决方案,那么如果使用RNN来解决各种NLP基础及应用问题,我们又该如何处理呢,下面我们就归纳一下使用RNN解决序列标注问题的一般优化思路。

    对于分词、词性标注(POS)、命名实体识别(NER)这种前后依赖不会太远的问题,可以用RNN或者BiRNN处理就可以了。而对于具有长依赖的问题,可以使用LSTM、RLSTM、GRU等来处理。关于GRU和LSTM两者的性能差不多,不过对于样本数量较少时,有限考虑使用GRU(模型结构较LSTM更简单)。此外神经网络在训练的过程中容易过拟合,可以在训练过程中加入Dropout或者L1/L2正则来避免过拟合。

    CRF和LSTM在序列标注上的优劣

    **LSTM:**像RNN、LSTM、BILSTM这些模型,它们在序列建模上很强大,它们能够capture长远的上下文信息,此外还具备神经网络拟合非线性的能力,这些都是crf无法超越的地方,对于t时刻来说,输出层yt受到隐层ht(包含上下文信息)和输入层xt(当前的输入)的影响,但是yt和其他时刻的yt是相互独立的,感觉像是一种point wise,对当前t时刻来说,我们希望找到一个概率最大的yt,但其他时刻的yt对当前yt没有影响,如果yt之间存在较强的依赖关系的话(例如,形容词后面一般接名词,存在一定的约束),LSTM无法对这些约束进行建模,LSTM模型的性能将受到限制。

    **CRF:**它不像LSTM等模型,能够考虑长远的上下文信息,它更多考虑的是整个句子的局部特征的线性加权组合(通过特征模版去扫描整个句子)。关键的一点是,CRF的模型为p(y | x, w),注意这里y和x都是序列,它有点像list wise,优化的是一个序列y = (y1, y2, …, yn),而不是某个时刻的yt,即找到一个概率最高的序列y = (y1, y2, …, yn)使得p(y1, y2, …, yn| x, w)最高,它计算的是一种联合概率,优化的是整个序列(最终目标),而不是将每个时刻的最优拼接起来,在这一点上CRF要优于LSTM。

    **HMM:**CRF不管是在实践还是理论上都要优于HMM,HMM模型的参数主要是“初始的状态分布”,“状态之间的概率转移矩阵”,“状态到观测的概率转移矩阵”,这些信息在CRF中都可以有,例如:在特征模版中考虑h(y1), f(yi-1, yi), g(yi, xi)等特征。

    **CRF与LSTM:**从数据规模来说,在数据规模较小时,CRF的试验效果要略优于BILSTM,当数据规模较大时,BILSTM的效果应该会超过CRF。从场景来说,如果需要识别的任务不需要太依赖长久的信息,此时RNN等模型只会增加额外的复杂度,此时可以考虑类似科大讯飞FSMN(一种基于窗口考虑上下文信息的“前馈”网络)。

    **CNN+BILSTM+CRF:**这是目前学术界比较流行的做法,BILSTM+CRF是为了结合以上两个模型的优点,CNN主要是处理英文的情况,英文单词是由更细粒度的字母组成,这些字母潜藏着一些特征(例如:前缀后缀特征),通过CNN的卷积操作提取这些特征,在中文中可能并不适用(中文单字无法分解,除非是基于分词后的结果),这里简单举一个例子,例如词性标注场景,单词football与basketball被标为名词的概率较高, 这里后缀ball就是类似这种特征。

    展开全文
  • 序列标注任务

    2021-08-28 23:49:59
    目录基本概念序列标注常见序列标注任务NERPOSChunk一个NER任务需要安装的库数据加载数据预处理微调预训练模型 基本概念 序列标注 序列标注可以认为是token级别的文本分类。 常见序列标注任务 NER NER(Named-entity ...

    基本概念

    序列标注

    序列标注可以认为是token级别的文本分类。

    常见序列标注任务

    NER

    NER(Named-entity recognition) :分辨出文本中的名词和实体是 person人名, organization组织机构名, location地点名还是其他。

    POS

    POS (Part-of-speech tagging): 对token进行词性标注

    Chunk

    将同一个短语的tokens组块放在一起

    一个NER任务

    需要安装的库

    • datasets transformers seqeval

    数据加载

    from datasets import load_dataset, load_metric
    datasets = load_dataset("conll2003")
    label_list = datasets["train"].features[f"{task}_tags"].feature.names # 查看训练集分类标签
    

    标签:

    • ‘O’ for no special entity
    • ‘PER’ for person
    • ‘ORG’ for organization
    • ‘LOC’ for location
    • ‘MISC’ for miscellaneous
      每一种实体类别又分别有B-(实体开始的token)前缀和I-(实体中间的token)前缀

    数据预处理

    from transformers import AutoTokenizer
    tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
    import transformers
    assert isinstance(tokenizer, transformers.PreTrainedTokenizerFast)
    #tokenize
    def tokenize_and_align_labels(examples):
        tokenized_inputs = tokenizer(examples["tokens"], truncation=True, is_split_into_words=True)
        labels = []
        for i, label in enumerate(examples[f"{task}_tags"]):
            word_ids = tokenized_inputs.word_ids(batch_index=i)
            previous_word_idx = None
            label_ids = []
            for word_idx in word_ids:
                # Special tokens have a word id that is None. We set the label to -100 so they are automatically
                # ignored in the loss function.
                if word_idx is None:
                    label_ids.append(-100) #特殊字符的label设置为-100,在模型中会被忽略掉不计算loss
                # We set the label for the first token of each word.
                elif word_idx != previous_word_idx:
                    label_ids.append(label[word_idx])
                # For the other tokens in a word, we set the label to either the current label or -100, depending on
                # the label_all_tokens flag.
                else:
                    label_ids.append(label[word_idx] if label_all_tokens else -100)
                previous_word_idx = word_idx
    
            labels.append(label_ids)
    
        tokenized_inputs["labels"] = labels
        return tokenized_inputs
    
    tokenize_and_align_labels(datasets['train'][:5])
    tokenized_datasets = datasets.map(tokenize_and_align_labels, batched=True)
    
    

    微调预训练模型

    from transformers import AutoModelForTokenClassification, TrainingArguments, Trainer
    
    task = "ner" 
    model_checkpoint = "distilbert-base-uncased"
    batch_size = 16
    
    model = AutoModelForTokenClassification.from_pretrained(model_checkpoint, num_labels=len(label_list))
    args = TrainingArguments(
        f"test-{task}",
        evaluation_strategy = "epoch",
        learning_rate=2e-5,
        per_device_train_batch_size=batch_size,
        per_device_eval_batch_size=batch_size,
        num_train_epochs=3,
        weight_decay=0.01,
    )
    #加载数据收集器
    from transformers import DataCollatorForTokenClassification
    data_collator = DataCollatorForTokenClassification(tokenizer)
    #评价指标
    import numpy as np
    metric = load_metric("seqeval")
    def compute_metrics(p):
        predictions, labels = p
        predictions = np.argmax(predictions, axis=2)
    
        # Remove ignored index (special tokens)
        true_predictions = [
            [label_list[p] for (p, l) in zip(prediction, label) if l != -100]
            for prediction, label in zip(predictions, labels)
        ]
        true_labels = [
            [label_list[l] for (p, l) in zip(prediction, label) if l != -100]
            for prediction, label in zip(predictions, labels)
        ]
    
        results = metric.compute(predictions=true_predictions, references=true_labels)
        return {
            "precision": results["overall_precision"],
            "recall": results["overall_recall"],
            "f1": results["overall_f1"],
            "accuracy": results["overall_accuracy"],
        }
    # trainer
    trainer = Trainer(
        model,
        args,
        train_dataset=tokenized_datasets["train"],
        eval_dataset=tokenized_datasets["validation"],
        data_collator=data_collator,
        tokenizer=tokenizer,
        compute_metrics=compute_metrics
    )
    # 模型训练
    trainer.train()
    # 模型评价
    trainer.evaluate()
    
    

    参考

    datawhale文档

    展开全文
  • 基于循环神经网络序列标注的中文分词研究.pdf
  • ner数据集,斯坦福出品,用于序列标注,实体命名等等的一个数据集。是测试非常好用的一个数据集
  • 当前主流的中文分词方法是基于字标注的传统机器学习方法,但传统机器学习方法需要人为地从中文文本中配置并提取特征,存在词库维度高且...LSTM网络模型的方法也更容易推广并应用到其他自然语言处理中序列标注的任务。
  • 序列标注简介

    千次阅读 2018-11-09 15:05:17
    1. 序列标注 序列标注:简单的来说序列标注就是:给定一个序列,对序列中的每一个元素做一个标记,或者说给每一个元素打一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。 2. 标签 ...

    1. 序列标注

    序列标注:简单的来说序列标注就是:给定一个序列,对序列中的每一个元素做一个标记,或者说给每一个元素打一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。

    2. 标签

    标签列表如下:

    • B,即Begin,表示开始
    • I,即Intermediate,表示中间
    • E,即End,表示结尾
    • S,即Single,表示单个字符
    • O,即Other,表示其他,用于标记无关字符

    常见标签方案

    基于上面的标签列表,通过选择该列表的子集,可以得到不同的标签方案。同样的标签列表,不同的使用方法,也可以得到不同的标签方案。
    常用的较为流行的标签方案有如下几种:

    • IOB1: 标签I用于文本块中的字符,标签O用于文本块之外的字符。标签B用于在该文本块前面接着一个同类型的文本块情况下的第一个字符。
    • IOB2: 每个文本块都以标签B开始,除此之外,跟IOB1一样。
    • IOE1: 标签I用于独立文本块中,标签E仅用于同类型文本块连续的情况,假如有两个同类型的文本块,那么标签E会被打在第一个文本块的最后一个字符。
    • IOE2: 每个文本块都以标签E结尾,无论该文本块有多少个字符,除此之外,跟IOE1一样。
    • START/END (也叫SBEIO、IOBES): 包含了全部的5种标签,使用S标签表示文本块由单个字符组成;由一个以上的字符组成时,首字符总是使用B标签,尾字符总是使用E标签,中间的字符使用I标签。
    • IO: 只使用I和O标签,显然,如果文本中有连续的同种类型实体的文本块,使用该标签方案不能够区分这种情况。
    • 其中最常用的是IOB2、IOBS、IOBES。

    3. 序列标注模型基本任务及其的区别:

    1. 命名实体识别

    给定一个词的序列,找出最可能的标签序列(内外符号:[I]表示词属于命名实体,[O]表示不属于命名实体)。
    比如我们希望识别一句话里面的人名(PER),地名(LOC),组织机构名(ORG),即命名实体识别的过程。

    举例说明:

    • 琪斯美是日本的“东方project”系列弹幕游戏及其衍生作品的登场角色之一。

    为每个字做标注之后的结果就是:

    • 琪(B-PER)斯(I-PER)美(E-PER)是(O)日(B-LOC)本(E-LOC)的(O)“(O)东(B-ORG)方(I-ORG)project(E-ORG)”(O)系(O)列(O)弹(O)幕(O)游(O)戏(O)及(O)其(O)衍(O)生(O)作(O)品(O)的(O)登(O)场(O)角(O)色(O)之(O)一(O)。(O)*

    这里标注采用的是BIEO,即Begin, Intermediate, End, Other

    • 琪(B-PER)斯(I-PER)美(E-PER) 表示的含义就是 “琪”是人名开始,“斯”是人名中间的字,“美”是人名的末尾的字。其它符号同理。

    实际上就是用一串符号来标注出你感兴趣的部分,在上面的例子中是对文本序列的实体感兴趣,所以对实体打上标签,其他任务中会对针对任务的不同打上不同的标签。

    2. 分词

    给定一个字的序列,找出最可能的标签序列(标签是断句符号:[词尾]或[非词尾]构成的序列)。结巴分词目前就是利用BMES标签来分词的,B(开头),M(中间),E(结尾),S(独立成词)

    举例说明:

    • 琪斯美是日本的“东方project”系列弹幕游戏及其衍生作品的登场角色之一。

    • 琪斯美 是 日本 的 “ 东方project ” 系列 弹幕 游戏 及 其 衍生 作品 的 登场 角色 之一。

    • 琪(B)斯(I)美 (E)是(S) 日(B)本(E) 的(S) “(S) 东(B)方(I)project(E) ”(S) 系(B)列(E) 弹(B)幕(E) 游(B)戏(E) 及(S) 其(S) 衍(B)生(E) 作(B)品(E) 的(S) 登(B)场(E) 角(B)色(E) 之(B)一(E)。(S)

    3. 词性标注:给定一个词的序列(句子),找出最可能的标签序列(标签是词性)。如ANSJ分词和ICTCLAS分词等。

    汉语词性对照表

    代码名称说明举例
    a形容词取英语形容词adjective的第1个字母最/d 大/a 的/u
    ad副形词直接作状语的形容词.形容词代码a和副词代码d并在一起一定/d 能够/v 顺利/ad 实现/v 。/w
    ag形语素形容词性语素。形容词代码为a,语素代码g前面置以a喜/v 煞/ag 人/n
    an名形词具有名词功能的形容词。形容词代码a和名词代码n并在一起人民/n 的/u 根本/a 利益/n 和/c 国家/n 的/u 安稳/an 。/w
    b区别词取汉字“别”的声母副/b 书记/n 王/nr 思齐/nr
    c连词取英语连词conjunction的第1个字母全军/n 和/c 武警/n 先进/a 典型/n 代表/n
    d副词取adverb的第2个字母,因其第1个字母已用于形容词两侧/f 台柱/n 上/ 分别/d 雄踞/v 着/u
    dg副语素副词性语素。副词代码为d,语素代码g前面置以d用/v 不/d 甚/dg 流利/a 的/u 中文/nz 主持/v 节目/n 。/w
    e叹词取英语叹词exclamation的第1个字母嗬/e !/w
    f方位词取汉字“方” 的声母从/p 一/m 大/a 堆/q 档案/n 中/f 发现/v 了/u
    g语素绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母例如dg 或ag
    h前接成分取英语head的第1个字母目前/t 各种/r 非/h 合作制/n 的/u 农产品/n
    i成语取英语成语idiom的第1个字母提高/v 农民/n 讨价还价/i 的/u 能力/n 。/w
    j简称略语取汉字“简”的声母民主/ad 选举/v 村委会/j 的/u 工作/vn
    k后接成分权责/n 明确/a 的/u 逐级/d 授权/v 制/k
    l习用语习用语尚未成为成语,有点“临时性”,取“临”的声母是/v 建立/v 社会主义/n 市场经济/n 体制/n 的/u 重要/a 组成部分/l 。/w
    m数词取英语numeral的第3个字母,n,u已有他用科学技术/n 是/v 第一/m 生产力/n
    n名词取英语名词noun的第1个字母希望/v 双方/n 在/p 市政/n 规划/vn
    ng名语素名词性语素。名词代码为n,语素代码g前面置以n就此/d 分析/v 时/Ng 认为/v
    nr人名名词代码n和“人(ren)”的声母并在一起建设部/nt 部长/n 侯/nr 捷/nr
    ns地名名词代码n和处所词代码s并在一起北京/ns 经济/n 运行/vn 态势/n 喜人/a
    nt机构团体“团”的声母为t,名词代码n和t并在一起[冶金/n 工业部/n 洛阳/ns 耐火材料/l 研究院/n]nt
    nx字母专名ATM/nx 交换机/n
    nz其他专名“专”的声母的第1个字母为z,名词代码n和z并在一起德士古/nz 公司/n
    o拟声词取英语拟声词onomatopoeia的第1个字母汩汩/o 地/u 流/v 出来/v
    p介词取英语介词prepositional的第1个字母往/p 基层/n 跑/v 。/w
    q量词取英语quantity的第1个字母不止/v 一/m 次/q 地/u 听到/v ,/w
    r代词取英语代词pronoun的第2个字母,因p已用于介词有些/r 部门/n
    s处所词取英语space的第1个字母移居/v 海外/s 。/w
    t时间词取英语time的第1个字母当前/t 经济/n 社会/n 情况/n
    tg时语素时间词性语素。时间词代码为t,在语素的代码g前面置以t秋/Tg 冬/tg 连/d 旱/a
    u助词取英语助词auxiliary 的第2个字母,因a已用于形容词工作/vn 的/u 政策/n
    ud结构助词有/v 心/n 栽/v 得/ud 梧桐树/n
    ug时态助词你/r 想/v 过/ug 没有/v
    uj结构助词的迈向/v 充满/v 希望/n 的/uj 新/a 世纪/n
    ul时态助词了完成/v 了/ ul
    uv结构助词地满怀信心/l 地/uv 开创/v 新/a 的/u 业绩/n
    uz时态助词着眼看/v 着/uz
    v动词举行/v 老/a 干部/n 迎春/vn 团拜会/n
    vd副动词强调/vd 指出/v
    vg动语素动词性语素。动词代码为v。在语素的代码g前面置以V做好/v 尊/vg 干/j 爱/v 兵/n 工作/vn
    vn名动词指具有名词功能的动词。动词和名词的代码并在一起股份制/n 这种/r 企业/n 组织/vn 形式/n ,/w
    w标点符号生产/v 的/u 5G/nx 、/w 8G/nx 型/k 燃气/n 热水器/n
    x非语素字非语素字只是一个符号,字母x通常用于代表未知数、符号
    y语气词取汉字“语”的声母已经/d 30/m 多/m 年/q 了/y 。/w
    z状态词取汉字“状”的声母的前一个字母势头/n 依然/z 强劲/a ;/w

    4. 常见序列标注模型

    • 最大熵模型(The maximum Entropy Principle)
    • 条件随机场模型(Conditional Random Field,CRF模型)
    • 隐马尔可夫模型(Hidden Markov Model, HMM)
    展开全文
  • 序列标注模型综述

    千次阅读 2018-11-09 17:55:45
    命名实体识别是序列标注的子问题,需要将元素进行定位和分类,如人名、组织名、地点、时间、质量等。命名实体识别的任务就是识别出待处理文本中三大类(实体类、时间类和数字类)、七小类(人名、机构名、地名、时间...
  • 序列标注模型详解

    千次阅读 2018-11-14 15:47:19
    HMM、MaxEnt、CRF 模型...而在自然语言处理中,序列标注模型是最常见的模型,也有着广泛地应用。与一般分类问题不同的是,序列标注模型输出的是一个标签序列。通常而言,标签之间是相互联系的,构成标签之间的结构...
  • NLP | 一文完全搞懂序列标注算法

    千次阅读 2020-01-06 08:30:00
    序列标注模型用到了长短期记忆网络(LSTM),条件随机场(CRF),Highway网络,本文循序渐进的介绍了序列标注算法,Be patience ! 跟着小编的文章完全搞懂序列标注算法吧...
  • 序列标注任务是中文自然语言处理(NLP)领域在句子层面中的主要任务,在给定的文本序列上预测序列中需要作出标注的标签。常见的子任务有命名实体识别(NER)、Chunk提取以及词性标注(POS)等。序列标注任务在e成的...
  • 笔记(总结)-序列标注问题与求解

    千次阅读 2018-07-18 10:52:30
    在讲述了大量的概率图模型后,本篇介绍下它发挥作用的主要场景——序列标注(Sequence Labaling)。序列包括时间序列以及general sequence,但两者无异。连续的序列在分析时也会先离散化处理。常见的序列有如:时序...
  • 新手探索NLP(八)——序列标注

    千次阅读 2019-05-28 10:14:07
    NLP中的序列标注问题(隐马尔可夫HMM与条件随机场CRF) Introduction 序列标注问题(sequence labeling, also named as tagging)可以看作许多自然语言处理问题的前驱,如情感分析,信息检索、推荐和过滤等等。同时...
  • NLP(三十四)使用keras-bert实现序列标注任务

    千次阅读 热门讨论 2020-12-26 14:04:32
    本系列文章将致力于应用keras-bert对BERT进行微调,完成基础的NLP任务,比如文本多分类、文本多标签分类以及序列标注等。   keras-bert是Python的第三方模块,它方便我们使用Keras来调用BERT,借助几行代码就可以...
  • 1 序列标注的场景 文本分类是对整个句子的把握,而NER就是深入到句子内部,对句子的局部进行深入分析,这个粒度的分析往往更为精准详尽,当然难度也会更高,下面列举几个比较常见的场景: 搜索、对话的实体、关系...
  • 结构学习:序列标注

    万次阅读 2018-01-22 11:52:17
    序列标注为背景,介绍了隐马尔科夫模型,条件随机场模型
  • 序列标注相关方案

    千次阅读 2018-06-14 16:13:52
    序列标注是一个比较广泛的任务,包括分词,词性标注,命名实体识别,关系抽取等等,甚至你也可以用来做抽取式QA,直接在文章中标注出答案。 这里跟大家提一下分词,很基础也是很重要的一个任务,我说重要指的是我们...
  • 在上一篇文章我们学习了基本的数据增强的 N 种方法,今天我们针对“序列标注”任务具体聊一聊如何数据增强?“序列标注”是一个 token-level 的分类任务,当进行全局结构化预测时候,一些增强方式产生的数据噪音可能...
  • Bert应用于序列标注

    2019-11-15 16:38:47
    NER 命名实体识别(NER)(也称为实体识别、实体分块和实体提取)是信息提取的一个子任务,旨在将文本中的命名实体定位并分类为预先定义的类别,如人员、组织、位置、时间表达式、数量、货币值、百分比等。...
  • 隐形马尔科夫模型和序列标注 引出 在做n元语法模型中,利用的维特比算法求解似然概率最大的路径词语级别的模型无法应对OOV(Out of Vocabulary,即未登录词) 。对于相对陌生的新词之前的分词算法识别不出,因此...
  •   在文章NLP(三十四)使用keras-bert实现序列标注任务中,我们已经用keras-bert模块实现了中文序列标注任务,其中对BERT进行微调。当前,我们也可以顺便实现下英语序列标注任务。   本文将介绍如何使用keras-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,721
精华内容 26,688
关键字:

序列标注