示例#1
0
def input_from_line(line, max_seq_length, tag_to_id):
    """
    Take sentence data and return an input for
    the training or the evaluation function.
    """
    string = [w[0].strip() for w in line]
    # chars = [char_to_id[f(w) if f(w) in char_to_id else '<UNK>']
    #         for w in string]
    char_line = ' '.join(string)  # 使用空格把汉字拼起来
    text = tokenization.convert_to_unicode(char_line)

    tags = ['O' for _ in string]

    labels = ' '.join(tags)  # 使用空格把标签拼起来
    labels = tokenization.convert_to_unicode(labels)

    ids, mask, segment_ids, label_ids = convert_single_example(
        char_line=text,
        tag_to_id=tag_to_id,
        max_seq_length=max_seq_length,
        tokenizer=tokenizer,
        label_line=labels)
    import numpy as np
    segment_ids = np.reshape(segment_ids, (1, max_seq_length))
    ids = np.reshape(ids, (1, max_seq_length))
    mask = np.reshape(mask, (1, max_seq_length))
    label_ids = np.reshape(label_ids, (1, max_seq_length))
    return [string, segment_ids, ids, mask, label_ids]
示例#2
0
def prepare_dataset(sentences, max_seq_length, tag_to_id, lower=False, train=True):
    """
    Prepare the dataset. Return a list of lists of dictionaries containing:
        - word indexes
        - word char indexes
        - tag indexes
    """
    def f(x):
        return x.lower() if lower else x
    data = []
    for s in sentences:
        string = [w[0].strip() for w in s]
        #chars = [char_to_id[f(w) if f(w) in char_to_id else '<UNK>']
        #         for w in string]
        char_line = ' '.join(string)   #使用空格把汉字拼起来
        text = tokenization.convert_to_unicode(char_line)

        if train:
            tags = [w[-1] for w in s]
        else:
            tags = ['O' for _ in string]

        labels = ' '.join(tags)     #使用空格把标签拼起来
        labels = tokenization.convert_to_unicode(labels)

        ids, mask, segment_ids, label_ids = convert_single_example(char_line=text,
                                                                   tag_to_id=tag_to_id,
                                                                   max_seq_length=max_seq_length,
                                                                   tokenizer=tokenizer,
                                                                   label_line=labels)
        data.append([string, segment_ids, ids, mask, label_ids])

    return data
示例#3
0
    def transforms(self, example, label_list):
        feature = convert_single_example(example, label_list,
                                         self.max_seq_length,
                                         self.bert_tokenizer)
        label_ids = feature.label_ids
        label_map = feature.label_map
        gold_labels = [-1] * self.max_seq_length
        # Get "Element" or "Main" token indices
        for i, lid in enumerate(label_ids):
            if lid == label_map['B-Element']:
                gold_labels[i] = 0
            elif lid == label_map['B-Main']:
                gold_labels[i] = 1
            elif lid in (label_map['I-Element'], label_map['I-Main']):
                gold_labels[i] = 2
            elif lid == label_map['X']:
                gold_labels[i] = 3
        # flush data to bert model
        input_ids = torch.tensor(feature.input_ids).unsqueeze(0).to(
            self.device)
        if self.train_bert:
            model_output = self.bert_model(input_ids)
        else:
            with torch.no_grad():
                model_output = self.bert_model(input_ids)

        # lstm (ignore padding parts)
        model_fv = model_output[0]
        input_ids = torch.tensor(feature.input_ids)
        label_ids = torch.tensor(feature.label_ids)
        gold_labels = torch.tensor(gold_labels)
        return model_fv, input_ids, label_ids, gold_labels
def request_from_raw_text():
    """

    :return:
    """
    BERT_VOCAB = "/home/data1/ftpdata/pretrain_models/bert_tensoflow_version/bert-base-chinese-vocab.txt"
    text_list = [
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。",
        "权人宏伟支行及宝成公司共22次向怡天公司催收借款全部本金及利息,均产生诉讼时效中断的法律效力,本案债权未过诉讼时效期间",  # LN8
        "2012年11月30日,原债权人工行锦州市分行向保证人锦州锅炉有限责任公司发出督促履行保证责任通知书,要求其履行保证责任,"
        "2004年11月18日,原债权人工行锦州市分行采用国内挂号信函的方式向保证人锦州锅炉有限责任公司邮寄送达中国工商银行辽宁省分行督促履行保证责任通知书,"  # LN4
        "锦州市凌河区公证处相关公证人员对此过程进行了公证。"
    ]
    data_list = []
    tokenizer = tokenization.FullTokenizer(vocab_file=BERT_VOCAB,
                                           do_lower_case=True)
    predict_examples = create_examples_text_list(text_list)
    # pdb.set_trace()
    for (ex_index, example) in enumerate(predict_examples):
        feature = convert_single_example(ex_index, example, 512, tokenizer)

        def create_int_feature(values):
            f = tf.train.Feature(int64_list=tf.train.Int64List(
                value=list(values)))
            return f

        features = {}
        features["input_ids"] = feature.input_ids
        features["input_mask"] = feature.input_mask
        # pdb.set_trace()
        features["segment_ids"] = feature.segment_ids
        if isinstance(feature.label_ids, list):
            label_ids = feature.label_ids
        else:
            label_ids = feature.label_ids[0]
        features["label_ids"] = label_ids
        # tf_example = tf.train.Example(features=tf.train.Features(feature=features))
        data_list.append(features)

    # pdb.set_trace()
    data = json.dumps({
        "signature_name": "serving_default",
        "instances": data_list
    })
    headers = {"content-type": "application/json"}
    json_response = requests.post(
        'http://localhost:8501/v1/models/cail_elem:predict',
        data=data,
        headers=headers)
    # print(json_response.text)
    # pdb.set_trace()
    predictions = json.loads(json_response.text)['predictions']
    # print(predictions)
    for p in range(len(predictions)):
        p_list = predictions[p]
        label_index = np.argmax(p_list)
        print("content={},label={}".format(text_list[p], label_index + 1))
    print("total number=", len(text_list))