GithubHelp home page GithubHelp logo

cluebenchmark / cluener2020 Goto Github PK

View Code? Open in Web Editor NEW
1.4K 21.0 298.0 888 KB

CLUENER2020 中文细粒度命名实体识别 Fine Grained Named Entity Recognition

Home Page: https://arxiv.org/abs/2001.04351

Python 99.59% Shell 0.41%
ner chinese bert chinese-ner fine-grained-ner roberta named-entity-recognition sequence-labeling albert seq2seq

cluener2020's Introduction

CLUENER 细粒度命名实体识别

更多细节请参考我们的 技术报告https://arxiv.org/abs/2001.04351 ./pics/header.png

clueai工具包: 三分钟三行代码搞定NLP开发(零样本学习)

数据类别:

数据分为10个标签类别,分别为: 地址(address),书名(book),公司(company),游戏(game),政府(government),电影(movie),姓名(name),组织机构(organization),职位(position),景点(scene)

标签类别定义 & 标注规则:

地址(address): **省**市**区**街**号,**路,**街道,**村等(如单独出现也标记)。地址是标记尽量完全的, 标记到最细。
书名(book): 小说,杂志,习题集,教科书,教辅,地图册,食谱,书店里能买到的一类书籍,包含电子书。
公司(company): **公司,**集团,**银行(央行,**人民银行除外,二者属于政府机构), 如:新东方,包含新华网/**军网等。
游戏(game): 常见的游戏,注意有一些从小说,电视剧改编的游戏,要分析具体场景到底是不是游戏。
政府(government): 包括**行政机关和地方行政机关两级。 **行政机关有国务院、国务院组成部门(包括各部、委员会、**人民银行和审计署)、国务院直属机构(如海关、税务、工商、环保总局等),军队等。
电影(movie): 电影,也包括拍的一些在电影院上映的纪录片,如果是根据书名改编成电影,要根据场景上下文着重区分下是电影名字还是书名。
姓名(name): 一般指人名,也包括小说里面的人物,宋江,武松,郭靖,小说里面的人物绰号:及时雨,花和尚,著名人物的别称,通过这个别称能对应到某个具体人物。
组织机构(organization): 篮球队,足球队,乐团,社团等,另外包含小说里面的帮派如:少林寺,丐帮,铁掌帮,武当,峨眉等。
职位(position): 古时候的职称:巡抚,知州,国师等。现代的总经理,记者,总裁,艺术家,收藏家等。
景点(scene): 常见旅游景点如:长沙公园,深圳动物园,海洋馆,植物园,黄河,长江等。

数据下载地址:

数据下载

数据分布:

训练集:10748
验证集集:1343

按照不同标签类别统计,训练集数据分布如下(注:一条数据中出现的所有实体都进行标注,如果一条数据出现两个地址(address)实体,那么统计地址(address)类别数据的时候,算两条数据):
【训练集】标签数据分布如下:
地址(address):2829
书名(book):1131
公司(company):2897
游戏(game):2325
政府(government):1797
电影(movie):1109
姓名(name):3661
组织机构(organization):3075
职位(position):3052
景点(scene):1462

【验证集】标签数据分布如下:
地址(address):364
书名(book):152
公司(company):366
游戏(game):287
政府(government):244
电影(movie):150
姓名(name):451
组织机构(organization):344
职位(position):425
景点(scene):199

数据字段解释:

以train.json为例,数据分为两列:text & label,其中text列代表文本,label列代表文本中出现的所有包含在10个类别中的实体。
例如:
  text: "北京勘察设计协会副会长兼秘书长周荫如"
  label: {"organization": {"北京勘察设计协会": [[0, 7]]}, "name": {"周荫如": [[15, 17]]}, "position": {"副会长": [[8, 10]], "秘书长": [[12, 14]]}}
  其中,organization,name,position代表实体类别,
  "organization": {"北京勘察设计协会": [[0, 7]]}:表示原text中,"北京勘察设计协会" 是类别为 "组织机构(organization)" 的实体, 并且start_index为0,end_index为7 (注:下标从0开始计数)
  "name": {"周荫如": [[15, 17]]}:表示原text中,"周荫如" 是类别为 "姓名(name)" 的实体, 并且start_index为15,end_index为17
  "position": {"副会长": [[8, 10]], "秘书长": [[12, 14]]}:表示原text中,"副会长" 是类别为 "职位(position)" 的实体, 并且start_index为8,end_index为10,同时,"秘书长" 也是类别为 "职位(position)" 的实体,
  并且start_index为12,end_index为14

数据来源:

本数据是在清华大学开源的文本分类数据集THUCTC基础上,选出部分数据进行细粒度命名实体标注,原数据来源于Sina News RSS.

效果对比

模型 线上效果f1
Bert-base 78.82
RoBERTa-wwm-large-ext 80.42
Bi-Lstm + CRF 70.00

各个实体的评测结果(F1 score):

实体 bilstm+crf bert-base roberta-wwm-large-ext Human Performance
Person Name 74.04 88.75 89.09 74.49
Organization 75.96 79.43 82.34 65.41
Position 70.16 78.89 79.62 55.38
Company 72.27 81.42 83.02 49.32
Address 45.50 60.89 62.63 43.04
Game 85.27 86.42 86.80 80.39
Government 77.25 87.03 88.17 79.27
Scene 52.42 65.10 70.49 51.85
Book 67.20 73.68 74.60 71.70
Movie 78.97 85.82 87.46 63.21
Overall@Macro 70.00 78.82 80.42 63.41

基线模型(一键运行)

1.tf版本bert系列:tf_version (test, f1 80.42)

2.pytorch版本baseline:pytorch_version(79.63)

3.bilistm+crf的baseline: bilstm+crf (test, f1 70.0)

技术交流与问题讨论QQ群: 836811304 Join us on QQ group

引用我们 Cite Us

如果本目录中的内容对你的研究工作有所帮助,请在文献中引用下述报告:https://arxiv.org/abs/2001.04351

@article{xu2020cluener2020,
  title={CLUENER2020: Fine-grained Name Entity Recognition for Chinese},
  author={Xu, Liang and Dong, Qianqian and Yu, Cong and Tian, Yin and Liu, Weitang and Li, Lu and Zhang, Xuanwei},
  journal={arXiv preprint arXiv:2001.04351},
  year={2020}
 }

cluener2020's People

Contributors

brightmart avatar dqqcasia avatar joytianya avatar lonepatient avatar sanchez2020 avatar yc-wind avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cluener2020's Issues

如何保存训练模型

如何保存训练模型,下次直接可以拿来推断,而不是每次都需要训练?

训练报错的问题

  1. 一直没搞懂model_name_or_path这个参数如何设置。按照说明,这个是要指向预训练模型的存放文件夹。我将预训练模型文件放在了prev_trained_model/bert-case下面。结果报错:Model-name 'xxxx' was not found in the model name list(bert-based-uncased, bert-large-uncased.....)
  2. 同时,我也查看了下run_ner_crf.sh文件,其中的BERT_BASE_DIR=$CURRENT_DIR/prev_trained_model/roberta_wwm_large_ext, 这个roberta_wwm_large_ext是指什么呢?
  3. 对于参数data_dir,其结构应该是怎样的呢? cluener的数据集里面有json格式的标签文件,有txt的原始数据文件,是要一股脑放一起?
  4. 对于model_type的参数,只有2个可选项--bert, albert,这个比较明确。对于task-name参数,貌似只有一个cluener? 那这个参数设置的意义何在?

原始数据标注问题

实验中的数据是人工标注出来的,还是有工具可以生成,如果我现在有自己的原始数据,要生成以下格式,该如何做,望大佬指点一下

image

关于init_logger(log_file)日志问题

pytorch_verion 里 run_ner_crf.py 389行没法正确的创建log文件

#对args.output_dir目录下创建一个日志文件
# init_logger(log_file= args.output_dir + f'/{args.model_type}-{args.task_name}-{time_}.log')
init_logger(log_file=str('{}-{}-{}.log'.format(args.model_type, args.task_name,time_)))
# init_logger(log_file=str(args.output_dir / '{}-{}.log'.format(args.arch, args.task_name)))

报错:
OSError: [Errno 22] Invalid argument: 'E:\aDemo\NNNER\bert\pytorch\pytorch_version\outputs\cluener_output\bert\bert-cluener-2020-09-09-13:36:12.log"
试了多种方法都不行

转换成onnx格式模型后,推理结果出现偏差

基于pytorch版本的bertspanner训练了一个NER模型。在pytorch下推理结果很好。但是通过torch.onnx.export将其转换成onnx模型后,再用onnx模型推理结果跟之前pytorch模型推理结果不一致。是我漏掉了什么?还是模型中有onnx不支持的op?谢谢!

pytorch 推理代码如下:

from processors.ner_span import InputExample
from processors.ner_span import ner_processors as processors
from processors.ner_span import convert_examples_to_features
from processors.utils_ner import bert_extract_item
from models.transformers import WEIGHTS_NAME,BertConfig,AlbertConfig
from models.bert_for_ner import BertSpanForNer
from processors.utils_ner import CNerTokenizer
from models.albert_for_ner import AlbertSpanForNer
import torch

label_list = ['O', 'TIM', 'UNI', 'TIT', 'COM', 'NAM', 'MAI', 'PHO', 'PNM','X',"[CLS]", "[SEP]"]
num_labels = len(label_list)
id2label = {i: label for i, label in enumerate(label_list)}
MODEL_CLASSES = {
    ## bert ernie bert_wwm bert_wwwm_ext
    'bert': (BertConfig, BertSpanForNer, CNerTokenizer),
    'albert': (AlbertConfig,AlbertSpanForNer,CNerTokenizer)
}
config_class, model_class, tokenizer_class = MODEL_CLASSES['bert']
tokenizer = tokenizer_class.from_pretrained('outputresumebert', do_lower_case=True)

sentence = '王建国,电话:13885699528,email:[email protected],2000年9月-至今北京大学 本科'
example = InputExample(guid=0, text_a=sentence, subject=[])
feature = convert_examples_to_features([example], label_list, 128, tokenizer)
input_ids = torch.tensor([feature[0].input_ids], dtype=torch.long)
input_mask = torch.tensor([feature[0].input_mask], dtype=torch.long)

model = model_class.from_pretrained('outputresumebert')
model.to(torch.device("cpu"))
model.eval()
with torch.no_grad():  # CORE-2
    inputs = {"input_ids": input_ids, "attention_mask": input_mask,"start_positions": None,"end_positions": None}
    outputs = model(**inputs)
start_logits, end_logits = outputs[:2]
R = bert_extract_item(start_logits, end_logits)
label_entities = [[id2label[x[0]],x[1],x[2]] for x in R]
result=[]
for label in label_entities:
    result.append([label[0],sentence[label[1]:label[2]+1],[label[1],label[2]]])
print(result)

推理结果:
[['NAM', '王建国', [0, 2]], ['PHO', '13885699528', [7, 17]], ['MAI', '[email protected]', [25, 35]], ['TIM', '2000年9月', [37, 43]], ['UNI', '北京大学', [47, 50]]]

onnx推理代码如下:

import onnxruntime
import numpy as np

ort_session = onnxruntime.InferenceSession("./convert_pytorch_to_tf/resumebert.onnx")

def to_numpy(tensor):
    return tensor.detach().cpu().numpy() if tensor.requires_grad else tensor.cpu().numpy()

# compute ONNX Runtime output prediction
sentence = '王建国,电话:13885699528,email:[email protected],2000年9月-至今北京大学 本科'
example = InputExample(guid=0, text_a=sentence, subject=[])
feature = convert_examples_to_features([example], label_list, 128, tokenizer)
input_ids = torch.tensor([feature[0].input_ids], dtype=torch.long)
input_mask = torch.tensor([feature[0].input_mask], dtype=torch.long)
ort_inputs = {'input_ids': to_numpy(input_ids), 'input_mask': to_numpy(input_mask)}
ort_outs = ort_session.run(None, ort_inputs)
start_logits = torch.from_numpy(ort_outs[0])
end_logits = torch.from_numpy(ort_outs[1])
R = bert_extract_item(start_logits, end_logits)
label_entities = [[id2label[x[0]],x[1],x[2]] for x in R]
result=[]
for label in label_entities:
    result.append([label[0],sentence[label[1]:label[2]+1],[label[1],label[2]]])
print(result)

推理结果:
[['NAM', '王建国', [0, 2]], ['PHO', '13885699528', [7, 17]], ['TIM', '2000年9月-至今', [37, 46]]]

模型转换代码如下:

from processors.ner_span import InputExample
from processors.ner_span import ner_processors as processors
from processors.ner_span import convert_examples_to_features
from processors.utils_ner import bert_extract_item
from models.transformers import WEIGHTS_NAME,BertConfig,AlbertConfig
from models.bert_for_ner import BertSpanForNer
from processors.utils_ner import CNerTokenizer
from models.albert_for_ner import AlbertSpanForNer
import torch
import numpy as np

label_list = ['O', 'TIM', 'UNI', 'TIT', 'COM', 'NAM', 'MAI', 'PHO', 'PNM','X',"[CLS]", "[SEP]"]
num_labels = len(label_list)
id2label = {i: label for i, label in enumerate(label_list)}
MODEL_CLASSES = {
    ## bert ernie bert_wwm bert_wwwm_ext
    'bert': (BertConfig, BertSpanForNer, CNerTokenizer),
    'albert': (AlbertConfig,AlbertSpanForNer,CNerTokenizer)
}
config_class, model_class, tokenizer_class = MODEL_CLASSES['bert']
tokenizer = tokenizer_class.from_pretrained('outputresumebert', do_lower_case=True)

sentence = '王建国,电话:13885699528,email:[email protected],2000年9月-至今北京大学 本科'

example = InputExample(guid=0, text_a=sentence, subject=[])
feature = convert_examples_to_features([example], label_list, 128, tokenizer)
input_ids = torch.tensor([feature[0].input_ids], dtype=torch.long)
input_mask = torch.tensor([feature[0].input_mask], dtype=torch.long)

model = model_class.from_pretrained('outputresumebert')
model.eval()

torch.onnx.export(model,
                  (input_ids,input_mask),
                  "convert_pytorch_to_tf/resumebert.onnx",
                  opset_version=10,
                  do_constant_folding=True,
                  input_names=['input_ids','input_mask'],
                  output_names=['start', 'end'],
                  dynamic_axes={'input_ids': {0 : 'batch_size'},    # variable lenght axes
                                'input_mask': {0 : 'batch_size'}}
                 )   

where to get model

| | └── vocab.txt
| | └── config.json
| | └── pytorch_model.bin

关于span

请问一下span是什么意思?能不能给一下相关资料的链接 谢谢!

数据截断问题

hi, 请问在使用数据时,发现训练数据中存在,很多截断问题,有的缺少")", 有的缺少"》", 有的直接被截断,请问对原始数据划分样本的原则是什么呢?依据",。!"分割?还是依据字数呢?

(charles 1
{"text": "怎样做才能避免拒签?新浪出国频道邀请到美国使馆签证处的签证官江德力(charles", "label": {"government": {"美国使馆": [[19, 22]]}, "name": {"江德力": [[30, 32]], "(charles": [[33, 40]]}, "company": {"新浪": [[10, 11]]}, "position": {"签证官": [[27, 29]]}}}

《新老金融街争锋— 1
{"text": "【吴海花】:我代表北京《百姓地产》杂志感谢大家赶来参加今天《新老金融街争锋—", "label": {"book": {"《百姓地产》": [[11, 16]], "《
新老金融街争锋—": [[29, 37]]}, "name": {"【吴海花】": [[0, 4]]}}}

《伊苏1&2历代记(YsI&II 1
{"text": "系列2款新作,分别为1、2代强化移植合辑的《伊苏1&2历代记(YsI&II", "label": {"game": {"《伊苏1&2历代记(YsI&II": [[21, 36]]}}}

《最后的神迹(The 1
{"text": "由SQUAREENIX制作,预定4月9日推出的PC角色扮演游戏《最后的神迹(The", "label": {"game": {"《最后的神迹(The": [[31, 40]]}, "company": {"SQUAREENIX": [[1, 10]]}}}

CRF 的几点问题

def _score_sentence(self, feats, tags, lens_):
start = torch.LongTensor([self.tag_dictionary[self.START_TAG]]).to(self.device)
start = start[None, :].repeat(tags.shape[0], 1)
stop = torch.LongTensor([self.tag_dictionary[self.STOP_TAG]]).to(self.device)
stop = stop[None, :].repeat(tags.shape[0], 1)
pad_start_tags = torch.cat([start, tags], 1)
pad_stop_tags = torch.cat([tags, stop], 1)
for i in range(len(lens_)):
pad_stop_tags[i, lens_[i] :] = self.tag_dictionary[self.STOP_TAG]
score = torch.FloatTensor(feats.shape[0]).to(self.device)
for i in range(feats.shape[0]):
r = torch.LongTensor(range(lens_[i])).to(self.device)
score[i] = torch.sum(
self.transitions[
pad_stop_tags[i, : lens_[i] + 1], pad_start_tags[i, : lens_[i] + 1]
]
) + torch.sum(feats[i, r, tags[i, : lens_[i]]])
return score

既然tags已经是包含[CLS]和[SEP]的标签序列了, 为什么还要分别在左边和右边cat上[CLS]和[SEP]? 有点不解.

self.transitions.detach()[self.tag_dictionary[self.START_TAG], :] = -10000
self.transitions.detach()[:, self.tag_dictionary[self.STOP_TAG]] = -10000

还有transition初始化是不是存在问题? 应该写成这样:

self.transitions.detach()[:, :self.tag_dictionary[self.START_TAG]] = -10000
self.transitions.detach()[self.tag_dictionary[self.STOP_TAG]] = -10000 

关于softlabel中target的问题

计算loss的时候,target还是one-hot的编码,这里的softlabel指的计算end_logits的时候把label的上下文信息加入到里面吧? 严格来说,这算是softlabel吗? target并没有softmax

pytroch==1.6.0 需要注释extended_attention_mask = extended_attention_mask.to(dtype=next(self.parameters()).dtype)才能运行

extended_attention_mask = extended_attention_mask.to(dtype=next(self.parameters()).dtype) # fp16 compatibility

pytroch==1.6.0 需要注释extended_attention_mask = extended_attention_mask.to(dtype=next(self.parameters()).dtype)才能运行
可能是和pytorch版本有关
否则会报错StopIteration

`Traceback (most recent call last):
File "/home/admin/zihe.zhu/20200902-CLUENER2020/pytorch_version/run_ner_crf.py", line 499, in
main()
File "/home/admin/zihe.zhu/20200902-CLUENER2020/pytorch_version/run_ner_crf.py", line 440, in main
global_step, tr_loss = train(args, train_dataset, model, tokenizer)
File "/home/admin/zihe.zhu/20200902-CLUENER2020/pytorch_version/run_ner_crf.py", line 134, in train
outputs = model(**inputs)
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 155, in forward
outputs = self.parallel_apply(replicas, inputs, kwargs)
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 165, in parallel_apply
return parallel_apply(replicas, inputs, kwargs, self.device_ids[:len(replicas)])
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/nn/parallel/parallel_apply.py", line 85, in parallel_apply
output.reraise()
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/_utils.py", line 395, in reraise
raise self.exc_type(msg)
StopIteration: Caught StopIteration in replica 0 on device 0.
Original Traceback (most recent call last):
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/nn/parallel/parallel_apply.py", line 60, in _worker
output = module(*input, **kwargs)
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/admin/zihe.zhu/20200902-CLUENER2020/pytorch_version/models/bert_for_ner.py", line 58, in forward
outputs =self.bert(input_ids = input_ids,attention_mask=attention_mask,token_type_ids=token_type_ids)
File "/home/admin/anaconda3/envs/zzh_dp/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/admin/zihe.zhu/20200902-CLUENER2020/pytorch_version/models/transformers/modeling_bert.py", line 606, in forward
extended_attention_mask = extended_attention_mask.to(dtype=next(self.parameters()).dtype) # fp16 compatibility
StopIteration

Process finished with exit code 1
`

数据集下载

你好,请问下数据想离线下载使用,代码中提供的网址是谷歌的需要翻才能打开下载,有没有提供百度网盘的下载方式或者其他离线下载的途径呢?

【有没有更新数据集的计划】

现在的数据集太糟心了:

  • 符号缺失,大量的实体只有一半的书名号、双引号、括号
  • 空格被过滤(英文单词看着别扭,而且识别出的实体也没意义)
  • 更严重的是标注标准不统一,包括边界和类别,前后不一致的地方很多,标注过程有人工复合吗?

我不知道测试集是不是也这样标注的,如果也是这样,那结果没什么意义。还有NER榜现在提交的人也不多,可不可以以搞一个2.0版本的数据集。

albert如何运行?

下载albert中文模型,--model_name_or_path填路径,但是报错找不到config文件?
bert-base可以运行,但是albert就不可以,有没有运行过albert的大佬帮我解答一下子~

线上评测结果是否允许多类别冲突?

例如
{"id": 69, "label": {"address": {"丁桥": [[19, 20]]}, "scene": {"丁桥": [[19, 20]]}}}

线上判断是直接都判错还是一对一错?
是否允许不加处理的上传这种有冲突的结果?

参数求解

里面有些参数,看得不是很明白,求指点:

  1. model_name_or_path,解释说是预训练模型的存放位置,或是配置的json文件?还个选择是model list里面的的模型名称--如果使用模型名称,貌似会报错,提示没有max_length的键名;

  2. markup--应该是指标注数据的格式,但是我用的cluener数据集格式,貌似和bios, bio都不一样?

  3. config-name 这个和前面的model_name_or_path有什么关联么? 比如要加载一个预训练模型文件,这个不能随便使用错误的配置文件,否则可能导致预训练模型文件无法加载?

  4. do_lower_case是否选择一个uncased model,这个是什么意思? 是针对英文字母的大小写??

  5. tokenizer_name ?

  6. cache_dir ? 我是直接下载了预训练模型文件,并将其放在了model_name_or_path中,这里为什么还有个从s3下载的模型缓存?
    恳请指点。。

您这个ner只能是以下分类,我可以用您这个模型自定义分类吗?

您这个ner只能是以下分类,我可以用您这个模型自定义分类吗?
数据分为10个标签类别,分别为: 地址(address),书名(book),公司(company),游戏(game),政府(government),电影(movie),姓名(name),组织机构(organization),职位(position),景点(scene)

部署生产环境

请问如何部署该工程生成的训练模型提供API,有人可以提供思路吗?比如tensorflow-serving等

用CLUENER2020跑正常的分类崩了,用CLUE可以跑该分类,

tf.logging.info("***** Running training *****")
tf.logging.info(" Num examples = %d", len(train_examples))
tf.logging.info(" Batch size = %d", FLAGS.train_batch_size)
tf.logging.info(" Num steps = %d", num_train_steps)
train_input_fn = file_based_input_fn_builder(
input_file=train_file,
seq_length=FLAGS.max_seq_length,
is_training=True,
drop_remainder=True)

死在下面这句。
estimator.train(input_fn=train_input_fn, max_steps=num_train_steps)

训练pytorch_version报错

训练命令: python run_ner_crf.py --task_name cluener --data_dir /home/lmw/deep_learning_data/train/NLP/cluene_data --model_type bert --model_name_or_path bert-base-cased --output_dir /home/lmw/deep_learning_data/model_files_ner

报错如下:(里面的几个基本参数设置,我有点不太明白:--task_name 貌似只有一个选项 cluener? 而 model_type也只有2个选项:bert和albert。 对于model_name_or_path,我是以为有预训练模型可以加载,没有就从头开始训练。。结果貌似不是,会自动从网上去下载相应的vocab.txt文件。。)我是个初学者,建议readme里面能够描述更清楚点,谢谢了~
2

数据中存在问题

抽样看了一下评估数据,句首书名号会被洗掉,这类问题很常见,比如:
{"text": "第一财经日报》记者分析。", "label": {"book": {"第一财经日报》": [[0, 6]]}, "position": {"记者": [[7, 8]]}}}
{"text": "吴三桂演义》小说的想像,说是为牛金星所毒杀。……在小说中加插一些历史背景,", "label": {"book": {"吴三桂演义》": [[0, 5]]}, "name": {"牛金星": [[15, 17]]}}}

dev集里面有一处标注错误:
{"text": "客场1-3惨败于西西里岛。失去小曼奇尼和托蒂缺阵的情况下,整个阵形比较混乱,季初低走在所难免。", "label": {"address": {"西西里岛": [[8, 11]]}, "name": {"小曼奇尼": [[15, 18]], "托蒂": [[20, 21]]}}}
西西里岛应是组织机构而非地址

你好,请问这个CnerProcessor里标签'X',"[START]", "[END]"是用来做什么的?

class CnerProcessor(DataProcessor):
"""Processor for the chinese ner data set."""
def get_train_examples(self, data_dir):
"""See base class."""
return self._create_examples(self._read_text(os.path.join(data_dir, "train.char.bmes")), "train")
def get_dev_examples(self, data_dir):
"""See base class."""
return self._create_examples(self._read_text(os.path.join(data_dir, "dev.char.bmes")), "dev")
def get_test_examples(self, data_dir):
"""See base class."""
return self._create_examples(self._read_text(os.path.join(data_dir, "test.char.bmes")), "test")
def get_labels(self):
"""See base class."""
return ["X",'B-CONT','B-EDU','B-LOC','B-NAME','B-ORG','B-PRO','B-RACE','B-TITLE',
'I-CONT','I-EDU','I-LOC','I-NAME','I-ORG','I-PRO','I-RACE','I-TITLE',
'O','S-NAME','S-ORG','S-RACE',"[START]", "[END]"]

bilstm_crf_pytorch代码中shape mismatch错误可能出现在哪里

File "/home/XXX/CLUENER2020/bilstm_crf_pytorch/crf.py", line 166, in _calculate_loss_old
gold_score = self._score_sentence(features, tags, lengths)
File "/home/XXX/CLUENER2020/bilstm_crf_pytorch/crf.py", line 149, in score_sentence
) + torch.sum(feats[i, r, tags[i, : lens
[i]]])
IndexError: shape mismatch: indexing tensors could not be broadcast together with shapes [589], [563]

你好,感谢提供开源代码,报错信息如上,请问问题可能出现在哪里?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.