精华内容
下载资源
问答
  • 序列标注

    2020-11-27 08:44:21
    序列标注序列标注序列标注 1.E2ECRF-2016

    序列标注

    1.E2ECRF-2016

    展开全文
  •  序列标注问题是自然语言中最常见的问题,在深度学习火起来之前,常见的序列标注问题的解决方案都是借助于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就是类似这种特征。

    展开全文
  • 在NLP中,序列标注算法是常见的深度学习模型,但是,对于序列标注算法的评估,我们真的熟悉吗?在本文中,笔者将会序列标注算法的模型效果评估方法和seqeval的使用。序列标注算法的模型效果评估在序列标注算法中,...

    在NLP中,序列标注算法是常见的深度学习模型,但是,对于序列标注算法的评估,我们真的熟悉吗?

    在本文中,笔者将会序列标注算法的模型效果评估方法和seqeval的使用。

    序列标注算法的模型效果评估

    在序列标注算法中,一般我们会形成如下的序列列表,如下:

    ['O', 'O', 'B-MISC', 'I-MISC', 'B-MISC', 'I-MISC', 'O', 'B-PER', 'I-PER']

    一般序列标注算法的格式有BIOIOBESBMES等。其中,实体指的是从B开头标签开始的,同一类型(比如:PER/LOC/ORG)的,非O的连续标签序列。

    常见的序列标注算法的模型效果评估指标有准确率(accuracy)、查准率(percision)、召回率(recall)、F1值等,计算的公式如下:

    • 准确率: accuracy = 预测对的元素个数/总的元素个数

    • 查准率:precision = 预测正确的实体个数 / 预测的实体总个数

    • 召回率:recall = 预测正确的实体个数 / 标注的实体总个数

    • F1值:F1 = 2 *准确率 * 召回率 / (准确率 + 召回率)

    举个例子,我们有如下的真实序列y_true和预测序列y_pred,如下:

    y_true = ['O''O''O''B-MISC''I-MISC''I-MISC''O''B-PER''I-PER']
    y_pred = ['O''O''B-MISC''I-MISC''B-MISC''I-MISC''O''B-PER''I-PER']

    列表中一个有9个元素,其中预测对的元素个数为6个,那么准确率为2/3。标注的实体总个数为2个,预测的实体总个数为3个,预测正确的实体个数为1个,那么precision=1/3, recall=1/2, F1=0.4。

    seqeval的使用

    一般我们的序列标注算法,是用conlleval.pl脚本实现,但这是用perl语言实现的。在Python中,也有相应的序列标注算法的模型效果评估的第三方模块,那就是seqeval,其官网网址为:https://pypi.org/project/seqeval/0.0.3/ 。

    seqeval支持BIOIOBES标注模式,可用于命名实体识别,词性标注,语义角色标注等任务的评估。

    官网文档中给出了两个例子,笔者修改如下:

    例子1:

    # -*- coding: utf-8 -*-
    from seqeval.metrics import f1_score
    from seqeval.metrics import precision_score
    from seqeval.metrics import accuracy_score
    from seqeval.metrics import recall_score
    from seqeval.metrics import classification_report

    y_true = ['O''O''O''B-MISC''I-MISC''I-MISC''O''B-PER''I-PER']
    y_pred = ['O''O''B-MISC''I-MISC''B-MISC''I-MISC''O''B-PER''I-PER']

    print("accuary: ", accuracy_score(y_true, y_pred))
    print("p: ", precision_score(y_true, y_pred))
    print("r: ", recall_score(y_true, y_pred))
    print("f1: ", f1_score(y_true, y_pred))
    print("classification report: ")
    print(classification_report(y_true, y_pred))

    输出结果如下:

    accuary:  0.6666666666666666
    p:  0.3333333333333333
    r:  0.5
    f1:  0.4
    classification report
               precision    recall  f1-score   support

         MISC       0.00      0.00      0.00         1
          PER       1.00      1.00      1.00         1

    micro avg       0.33      0.50      0.40         2
    macro avg       0.50      0.50      0.50         2

    例子2:

    # -*- coding: utf-8 -*-
    from seqeval.metrics import f1_score
    from seqeval.metrics import precision_score
    from seqeval.metrics import accuracy_score
    from seqeval.metrics import recall_score
    from seqeval.metrics import classification_report

    y_true = [['O''O''O''B-MISC''I-MISC''I-MISC''O'], ['B-PER''I-PER']]
    y_pred =  [['O''O''B-MISC''I-MISC''B-MISC''I-MISC''O'], ['B-PER''I-PER']]

    print("accuary: ", accuracy_score(y_true, y_pred))
    print("p: ", precision_score(y_true, y_pred))
    print("r: ", recall_score(y_true, y_pred))
    print("f1: ", f1_score(y_true, y_pred))
    print("classification report: ")
    print(classification_report(y_true, y_pred))

    输出结果同上。

    在Keras中使用seqeval

    笔者一年多年写过文章:使用CRF++实现命名实体识别(NER), 我们对模型训练部分的代码加以改造,使之在训练过程中能输出F1值。在Github上下载项目DL_4_NER,网址为:https://github.com/percent4/DL_4_NER 。修改utils.py中的文件夹路径,以及模型训练部分的代码(DL_4_NER/Bi_LSTM_Model_training.py)如下:

    # -*- coding: utf-8 -*-
    import pickle
    import numpy as np
    import pandas as pd
    from utils import BASE_DIR, CONSTANTS, load_data
    from data_processing import data_processing
    from keras.utils import np_utils, plot_model
    from keras.models import Sequential
    from keras.preprocessing.sequence import pad_sequences
    from keras.layers import Bidirectional, LSTM, Dense, Embedding, TimeDistributed


    # 模型输入数据
    def input_data_for_model(input_shape):

        # 数据导入
        input_data = load_data()
        # 数据处理
        data_processing()
        # 导入字典
        with open(CONSTANTS[1], 'rb'as f:
            word_dictionary = pickle.load(f)
        with open(CONSTANTS[2], 'rb'as f:
            inverse_word_dictionary = pickle.load(f)
        with open(CONSTANTS[3], 'rb'as f:
            label_dictionary = pickle.load(f)
        with open(CONSTANTS[4], 'rb'as f:
            output_dictionary = pickle.load(f)
        vocab_size = len(word_dictionary.keys())
        label_size = len(label_dictionary.keys())

        # 处理输入数据
        aggregate_function = lambda input: [(word, pos, label) for word, pos, label in
                                                zip(input['word'].values.tolist(),
                                                    input['pos'].values.tolist(),
                                                    input['tag'].values.tolist())]

        grouped_input_data = input_data.groupby('sent_no').apply(aggregate_function)
        sentences = [sentence for sentence in grouped_input_data]

        x = [[word_dictionary[word[0]] for word in sent] for sent in sentences]
        x = pad_sequences(maxlen=input_shape, sequences=x, padding='post', value=0)
        y = [[label_dictionary[word[2]] for word in sent] for sent in sentences]
        y = pad_sequences(maxlen=input_shape, sequences=y, padding='post', value=0)
        y = [np_utils.to_categorical(label, num_classes=label_size + 1for label in y]

        return x, y, output_dictionary, vocab_size, label_size, inverse_word_dictionary


    # 定义深度学习模型:Bi-LSTM
    def create_Bi_LSTM(vocab_size, label_size, input_shape, output_dim, n_units, out_act, activation):
        model = Sequential()
        model.add(Embedding(input_dim=vocab_size + 1, output_dim=output_dim,
                            input_length=input_shape, mask_zero=True))
        model.add(Bidirectional(LSTM(units=n_units, activation=activation,
                                     return_sequences=True)))
        model.add(TimeDistributed(Dense(label_size + 1, activation=out_act)))
        model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
        return model


    # 模型训练
    def model_train():

        # 将数据集分为训练集和测试集,占比为9:1
        input_shape = 60
        x, y, output_dictionary, vocab_size, label_size, inverse_word_dictionary = input_data_for_model(input_shape)
        train_end = int(len(x)*0.9)
        train_x, train_y = x[0:train_end], np.array(y[0:train_end])
        test_x, test_y = x[train_end:], np.array(y[train_end:])

        # 模型输入参数
        activation = 'selu'
        out_act = 'softmax'
        n_units = 100
        batch_size = 32
        epochs = 10
        output_dim = 20

        # 模型训练
        lstm_model = create_Bi_LSTM(vocab_size, label_size, input_shape, output_dim, n_units, out_act, activation)
        lstm_model.fit(train_x, train_y, validation_data=(test_x, test_y), epochs=epochs, batch_size=batch_size, verbose=1)


    model_train()

    模型训练的结果如下(中间过程省略):

    ......
    12598/12598 [==============================] - 26s 2ms/step - loss: 0.0075 - acc: 0.9981 - val_loss: 0.2131 - val_acc: 0.9592

    我们修改代码,在lstm_model.fit那一行修改代码如下:

        lables = ['O''B-MISC''I-MISC''B-ORG''I-ORG''B-PER''B-LOC''I-PER''I-LOC''sO']
        id2label = dict(zip(range(len(lables)), lables))
        callbacks = [F1Metrics(id2label)]
        lstm_model.fit(train_x, train_y, validation_data=(test_x, test_y), epochs=epochs,
                       batch_size=batch_size, verbose=1, callbacks=callbacks)

    此时输出结果为:

    12598/12598 [==============================] - 26s 2ms/step - loss: 0.0089 - acc: 0.9978 - val_loss: 0.2145 - val_acc: 0.9560
     - f1: 95.40
               precision    recall  f1-score   support

         MISC     0.9707    0.9833    0.9769     15844
          PER     0.9080    0.8194    0.8614      1157
          LOC     0.7517    0.8095    0.7795       677
          ORG     0.8290    0.7289    0.7757       745
           sO     0.7757    0.8300    0.8019       100

    micro avg     0.9524    0.9556    0.9540     18523
    macro avg     0.9520    0.9556    0.9535     18523

    这就是seqeval的强大之处。

    关于seqeval在Keras的使用,有不清楚的地方可以参考该项目的Github网址:https://github.com/chakki-works/seqeval 。

    作者:jclian,喜欢算法,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!

    推荐阅读

    5分钟完全掌握PyPy

    用 PyPy 让你的 Python 代码运行得更快!

    有人在代码里下毒!慎用 pip install 命令

    df481c90b6b4dc3d3682631a9ffc8a1a.png

    8a3e5f032ea36004521e80e0af8c19e5.gif

    社区会员

    点赞鼓励一下

    6f421372f037c8d20fa9f80eaebd6dcc.gif
    展开全文
  • lstm-span,这些方案和代码我都进行了训练测试,并反复调试,但是实际工业问题上,往往标注数据很少,本次的招投标数据标注的就只有2m的数据,使用常规方法来进行标注很困难,所以本文就来分享下少样本的序列标注和...

    目前有很多命名实体标注的方法,bert-crf 、bert-lstm-crf、bert-span bert-lstm-span,这些方案和代码我都进行了训练测试,并反复调试,但是实际工业问题上,往往标注数据很少,本次的招投标数据标注的就只有2m的数据,使用常规方法来进行标注很困难,所以本文就来分享下少样本的序列标注和少样本信息抽取问题。

    常见的少样本标注的方式有以下几种:

    b82b3fc9c3d196c837f149a8df32110f.png

    本文主要分享一篇少样本序列标注的文章:

    • 论文名称:Few-shot SlotTagging with Collapsed Dependency Transfer and Label-enhanced Task-adaptiveProjection Network
    • 论文作者:侯宇泰,车万翔,赖勇魁,周之涵,刘一佳,刘晗,刘挺
    • 原创作者:侯宇泰
    • 论文链接:
    • https://arxiv.org/abs/1906.08711
    • 代码链接:
    https://github.com/AtmaHou/FewShotTagginggithub.com

    1、论文模型结构如下图所示:

    df3ce7091af774842951fd2e6aceb87d.png

    2、转移打分模块Transition Scorer

    Transition Scorer 负责估计标签的转移概率。如Fig 6所示,它通过将特定领域的标签划分为几个抽象标签类别,并建模抽象标签之间依赖关系。由于我们的抽象分类标准是可以跨领域的,我们得以将抽象的标签依赖信息从源域迁移到目标域。在目标域上,我们直接将迁移的抽象标签依赖关系扩展为特定领域的具体标签之间的依赖关系。扩展过程如图所示,我们把抽象转移概率表(Collapsed LabelTransition)中的值,填到具体转移表(Expanded Label Transition)中颜色相同的位置,从而得到具体的转移概率。由于整个过程是可导的,因而我们直接端到端地在一个个具体的源领域,用反向传播的方式学习抽象转移概率。

    ed4f90afca0ae75dcb5d202ad4557f92.png

    3、目前的问题和策略:

    340df07b7a2d2f0e37ad13f807307e44.png

    bfea4a8c16a63ee6281e55253a593d12.png

    02007eb2c4dd5954b1158614e85f94cf.png

    4、标签概率打分模块Emission Scorer

    如Fig 7所示,Emission Scorer利用词(Token)和标签表示(Label Representation)的相似度,得到待预测语句每一个词的标签分布概率分布。这个过程中,标签表示是通过观察少量已有标签样本得到的,如平均所有该标签词的embedding,而相似度度量函数是在富数据源于学得的。在我们的框架中,Emission Scorer可以替换为任意的少样本分类模型如Prototypical Network,Matching Network等。这里,我们在近期的图像少样本分类模型TapNet基础上,利用标签名称语义来表示标签,提出了一种标签增强的任务自适应投影网络(L-TapNet)。具体的,我们通过利用标签名中的语义信息得到更好的标签表示,并通过以及线性偏差消除法(Linear-error Nulling)方法,用运算的方法得到一个映射空间,使得在映射空间中,不同的,不同的标签表示能有效地分开。

    9dad7ccd5d34e4ec632496262797874c.png

    5、上下文相关词表示模块 Context Embedder

    Context Embedder为语句中的每一个词提供上下文相关的词表示,这里我们使用bert来完成。为了更好的捕获领域特点和消除歧义,我们提出pair-wise embedder成对地表示带标签支持样例和待标注样本。具体如Fig 8 所示,通过利用support句子中的领域特定上下文,我们能够有效地消除词表示的歧义。

    5c8acd0c5b3ea69317b77fde0e8bda95.png

    最后:

    结论

    论文的主要贡献可归纳如下:

    (1)提出了一种基于CRF的少样本序列标记框架,它通过整合token相似度和标签依赖关系的先前经验来预测少样本序列标签。

    (2)引入坍缩依赖迁移(Collapsed Dependency Transfer)来跨标签集、跨领域转移标签依赖性。

    (3)提出了L-TapNet来得到更好的标签表示建模,从而更准确地预测标签概率

    参考文献:

    参考文献

    [1]OriolVinyals, Charles Blundell, Timothy Lillicrap, Daan Wierstra, et al. 2016.Matching networks for one shot learning. In NIPS, pages 3630–3638.

    [2]AliceCoucke, Alaa Saade, Adrien Ball, Theodore ´ Bluche, Alexandre Caulier, DavidLeroy, Clement ´ Doumouro, Thibault Gisselbrecht, Francesco Caltagirone,Thibaut Lavril, Mael Primet, and Joseph ¨ Dureau. 2018. Snips voice platform:an embedded spoken language understanding system for privateby-design voiceinterfaces. CoRR, abs/1805.10190.

    [3]ErikF. Tjong Kim Sang and Fien De Meulder. 2003. Introduction to the conll-2003shared task: Language-independent named entity recognition. In Proc. of the CoNLL-HLT-NAACL,pages 142–147.

    [4]AmirZeldes. 2017. The gum corpus: creating multilayer resources in the classroom.Language Resources and Evaluation, 51(3):581–612.

    [5]LeonDerczynski, Eric Nichols, Marieke van Erp, and Nut Limsopatham. 2017. Resultsof the wnut2017 shared task on novel and emerging entity recognition. In Proc.of the 3rd Workshop on Noisy Usergenerated Text, pages 140–147.

    [6]SameerPradhan, Alessandro Moschitti, Nianwen Xue, Hwee Tou Ng, Anders Bjorkelund,Olga Uryupina, ¨ Yuchen Zhang, and Zhi Zhong. 2013. Towards robust linguisticanalysis using ontonotes. In Proc. of the CoNLL, pages 143–152.

    展开全文
  • 序列标注模型用到了长短期记忆网络(LSTM),条件随机场(CRF),Highway网络,本文循序渐进的介绍了序列标注算法,Be patience ! 跟着小编的文章完全搞懂序列标注算法吧。1.目标序列标注模型的目标是用实体或词性标记...
  • 来源 | 机器学习算法那些事 作者 | 石头序列标注模型用到了长短期记忆网络(LSTM),条件随机场(CRF),Highway网络,本文循序渐进的介绍了序列标注算法,Be patience ! 跟着小编的文章完全搞懂序列标注算法吧。1.目标...
  • 序列标注模型简介序列标注问题包括自然语言处理中的分词,词性标注,命名实体识别,关键词抽取,词义角色标注等等。例如,命名实体识别(NER)的标注问题就是:对长度为N的输入序列,对其中的每个元素打上标签,得到...
  • 序列标注什么是序列标注呢?设输入序列为 ,输出序列为 。序列标注,就是逐帧将 映射到 ,如下图所示。但是,OCR任务的中间字符序列长度不一定能满足等于标注序列的长度。这样一想,似乎前面的方法都是废话了。蓦然....
  • 本篇论文比较新,来自于EMNLP 2019的一篇关于序列标注任务的论文:《Hierarchically-Refined Label Attention Network for Sequence Labeling》引言作者认为,在序列标注任务上,BiLSTM-CRF并不总是比BiLSTM-softmax...
  • 但是,在序列标注任务中,当前时刻的状态,应该同该时刻的前后的状态均相关。于是,在很多序列标注任务中,引入了条件随机场。今天详细介绍条件随机场的理论和及其在实体识别中的应用和tensorflow中的实现。1 条件...
  • 序列标注中的BIO标注介绍

    万次阅读 多人点赞 2018-03-27 18:35:22
    一、序列标注 序列标注(Sequence labeling)是我们在解决NLP问题时经常遇到的基本问题之一。在序列标注中,我们想对一个序列的每一个元素标注一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中...
  • 一、搭建简单的CNN做序列标注代码import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltTIME_STEPS = 15# backpropagation through time 的time_stepsBATCH_SIZE = 1#50INPUT_SIZE = 1 # x数据...
  • 序列标注简介

    千次阅读 2018-11-09 15:05:17
    1. 序列标注 序列标注:简单的来说序列标注就是:给定一个序列,对序列中的每一个元素做一个标记,或者说给每一个元素打一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。 2. 标签 ...
  • 最近在做序列标注的相关任务,为了理解bi-lstm + crf的原理及细节,找了很多相关资料,以及代码实现,这里分享给大家并附上一些自己的理解。CRF相关资料推荐关于crf,我看了很多资料,这里推荐几个 - 英文的crf ...
  • 序列标注的网络原始数据集
  • 背景介绍序列标注任务,例如中文分词(CWS),词性标注(POS),命名实体识别(NER)等是自然语言处理中的基础任务。最近,随着深度学习的发展,神经序列标注方案已经达到了很好的性能,同时也依赖于大规模的标注数据。...
  • 序列标注模型

    千次阅读 2017-03-27 14:19:32
    序列标注模型被广泛应用于文本处理相关领域,例如分词、词性标注、命名实体识别等方面。现有的序列标注模型主要有 HMM , MEMM 以及 CRF ,通过对这几种自然语言处理中常用的序列标注模型进行对比,分析其各自的优...
  • 背景介绍序列标注任务,例如中文分词(CWS),词性标注(POS),命名实体识别(NER)等是自然语言处理中的基础任务。最近,随着深度学习的发展,神经序列标注方案已经达到了很好的性能,同时也依赖于大规模的标注数据。...
  • 『RNN 监督序列标注』笔记-第一/二章 监督序列标注 监督序列标注(Supervised Sequence Labeling)与传统的监督模式分类(supervised pattern classification)的不同之处在与样本点不能被当作是独立的。 序列标注...
  • 序列标注学习笔记

    2019-10-11 16:37:03
    序列标注中,我们想对一个序列的每一个元素标注一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。 序列标注一般可以分为两类: 1、原始标注(Raw labeling):每个元素都需要被标注...
  • EasyDL是百度大脑推出的定制化AI训练及服务平台,支持各行各业有定制AI需求的企业用户及开发者使用。...“EasyDL深度学习实战营”系列课程三《应用NLP序列标注任务实现快递单地址识别》!课程内容要点:·...
  • 现在是国家的非常时期,由于疫情各地陆续延迟复工,以及各大院校延期开学。受疫情的影响,今年的就业形式非常不理想,boss直聘调研,人工智能相关校招岗位相对往年下跌45%。... 短文本匹配和序列标注是NLP领域经典...
  • 公众号关注“忆语臻言”设为 “星标”,一起学习进步!本文介绍ICLR2017的一篇文章,题目为"transfer learning for sequence for sequence tagging with ...一、任务本文系统的研究了序列标注任务中跨语言、跨...
  • 序列标注模型详解

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

    千次阅读 2019-10-08 18:01:49
    命名实体识别-序列标注 标签类型 进行命名实体识别时,通常对每个字进行标注。中文为单个字,英文为单词,空格分割。 标签类型一般如下: 类型 说明 B Begin,代表实体片段的开始 I Internediate,代表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,703
精华内容 1,081
关键字:

序列标注