├── README.md ├── checkpoints └── 占位.txt ├── config.py ├── data └── cner │ ├── mid_data │ ├── dev.json │ ├── labels.json │ ├── test.json │ └── train.json │ └── raw_data │ ├── __init__.py │ ├── dev.char.bmes │ ├── process.py │ ├── test.char.bmes │ └── train.char.bmes ├── data_loader.py ├── globalpoint.py ├── globalpoint2.py ├── logs ├── bert-1-eff.log ├── bert-1.log └── bert.log ├── main.py ├── model_hub └── 占位.txt ├── preprocess.py ├── tensorboard └── 占位.txt └── utils ├── __init__.py ├── __pycache__ ├── __init__.cpython-37.pyc ├── common_utils.cpython-37.pyc ├── cut_sentence.cpython-37.pyc ├── metric_utils.cpython-37.pyc └── train_utils.cpython-37.pyc ├── common_utils.py ├── cut_sentence.py ├── metric_utils.py └── train_utils.py /README.md: -------------------------------------------------------------------------------- 1 | # pytorch_GlobalPointer_Ner 2 | 3 | 基于pytorch的GlobalPointer进行中文命名实体识别。 4 | 5 | 模型分别来自于参考中的【1】【2】。这里还是按照之前命名实体识别的相关模板,具体模型的介绍及预备知识请移步参考里面的链接。复现方式: 6 | 7 | - 1、raw_data下新建一个process.py将原始数据处理为mid_data下的数据。 8 | - 2、根据参数运行main.py以进行训练、验证、测试和预测。 9 | 10 | 模型和数据下载地址:链接:https://pan.baidu.com/s/1Gh9UQESQmEXuzyyPUG_FgQ?pwd=1a6s 提取码:1a6s 11 | 12 | # 依赖 13 | 14 | ``` 15 | pytorch==1.6.0 16 | transformers==4.5.0 17 | seqeval 18 | ``` 19 | 20 | # 运行 21 | 22 | ```python 23 | python main.py \ 24 | --bert_dir="model_hub/chinese-bert-wwm-ext/" \ 25 | --data_dir="./data/cner/" \ 26 | --log_dir="./logs/" \ 27 | --output_dir="./checkpoints/" \ 28 | --num_tags=8 \ 29 | --head_size=64 \ 30 | --seed=123 \ 31 | --gpu_ids="0" \ 32 | --max_seq_len=150 \ 33 | --lr=5e-5 \ 34 | --other_lr=5e-5 \ 35 | --train_batch_size=32 \ 36 | --train_epochs=7 \ 37 | --eval_steps=50 \ 38 | --eval_batch_size=8 \ 39 | --max_grad_norm=1 \ 40 | --warmup_proportion=0.1 \ 41 | --adam_epsilon=1e-8 \ 42 | --weight_decay=0.01 \ 43 | --dropout_prob=0.1 \ 44 | --use_tensorboard="True" \ 45 | --use_efficient_globalpointer="True" 46 | ``` 47 | 48 | ### 结果 49 | 50 | globalpoint2.py也是可以用的,要选择它需要将main.py导入修改为```import globalpoint2```,并在使用模型时改为```globalpoint2.GlobalPointerNer```,模型名字自己设置为bert-2,参数use_efficient_globalpointer没有作用,因为是针对globalpoint.py的。 51 | 52 | ```python 53 | precision:0.9559 recall:0.9565 micro_f1:0.9562 54 | precision recall f1-score support 55 | 56 | TITLE 0.96 0.96 0.96 762 57 | RACE 1.00 0.93 0.97 15 58 | CONT 1.00 1.00 1.00 33 59 | ORG 0.94 0.94 0.94 539 60 | NAME 0.99 1.00 1.00 110 61 | EDU 0.97 0.99 0.98 109 62 | PRO 0.82 1.00 0.90 18 63 | LOC 1.00 1.00 1.00 2 64 | 65 | micro-f1 0.96 0.96 0.96 1588 66 | 67 | 虞兔良先生:1963年12月出生,汉族,中国国籍,无境外永久居留权,浙江绍兴人,中共党员,MBA,经济师。 68 | Load ckpt from ./checkpoints/bert/model.pt 69 | Use single gpu in: ['0'] 70 | {'TITLE': [['中共党员', 41], ['经济师', 50]], 'RACE': [['汉族', 18]], 'CONT': [['中国国籍', 21]], 'NAME': [['虞兔良', 1]], 'EDU': [['MBA', 46]], 'LOC': [['浙江绍兴人', 35]]} 71 | ``` 72 | 73 | 默认使用的是globalpoint.py里面的模型,包含globalpointer和efficient-globalpoint,通过修改use_efficient_globalpointer来指定选择的模型,结果如下: 74 | 75 | ```python 76 | globalpointer: 77 | precision:0.9528 recall:0.9534 micro_f1:0.9531 78 | precision recall f1-score support 79 | 80 | TITLE 0.95 0.95 0.95 762 81 | RACE 1.00 0.93 0.97 15 82 | CONT 1.00 1.00 1.00 33 83 | ORG 0.94 0.94 0.94 539 84 | NAME 0.99 1.00 1.00 110 85 | EDU 0.96 0.98 0.97 109 86 | PRO 0.86 1.00 0.92 18 87 | LOC 1.00 1.00 1.00 2 88 | 89 | micro-f1 0.95 0.95 0.95 1588 90 | 91 | 虞兔良先生:1963年12月出生,汉族,中国国籍,无境外永久居留权,浙江绍兴人,中共党员,MBA,经济师。 92 | {'TITLE': [['中共党员', 41], ['经济师', 50]], 'RACE': [['汉族', 18]], 'CONT': [['中国国籍', 21]], 'NAME': [['虞兔良', 1]], 'EDU': [['MBA', 46]], 'LOC': [['浙江绍兴人', 35]]} 93 | 94 | efficient-globalpoint: 95 | precision:0.9616 recall:0.9616 micro_f1:0.9616 96 | precision recall f1-score support 97 | 98 | TITLE 0.97 0.96 0.97 762 99 | RACE 1.00 0.93 0.97 15 100 | CONT 1.00 1.00 1.00 33 101 | ORG 0.95 0.94 0.94 539 102 | NAME 0.99 1.00 1.00 110 103 | EDU 0.97 0.98 0.98 109 104 | PRO 0.90 1.00 0.95 18 105 | LOC 1.00 1.00 1.00 2 106 | 107 | micro-f1 0.96 0.96 0.96 1588 108 | 109 | 虞兔良先生:1963年12月出生,汉族,中国国籍,无境外永久居留权,浙江绍兴人,中共党员,MBA,经济师。 110 | {'TITLE': [['中共党员', 41], ['经济师', 50]], 'RACE': [['汉族', 18]], 'CONT': [['中国国籍', 21]], 'NAME': [['虞兔良', 1]], 'EDU': [['MBA', 46]], 'LOC': [['浙江绍兴人', 35]]} 111 | ``` 112 | 113 | ### 补充 114 | 115 | 如果效果不好,尝试调小一些学习率。 116 | 117 | # 参考 118 | 119 | >[1]https://github.com/gaohongkui/GlobalPointer_pytorch 120 | > 121 | >[2]https://github.com/Tongjilibo/bert4torch/ 122 | > 123 | >[3][将“softmax+交叉熵”推广到多标签分类问题 - 科学空间|Scientific Spaces (kexue.fm)](https://kexue.fm/archives/7359) 124 | > 125 | >[4][Transformer升级之路:2、博采众长的旋转式位置编码 - 科学空间|Scientific Spaces (kexue.fm)](https://kexue.fm/archives/8265) 126 | > 127 | >[5][GlobalPointer:用统一的方式处理嵌套和非嵌套NER - 科学空间|Scientific Spaces (kexue.fm)](https://kexue.fm/archives/8373) 128 | > 129 | >[6][Efficient GlobalPointer:少点参数,多点效果 - 科学空间|Scientific Spaces (kexue.fm)](https://kexue.fm/archives/8877) 130 | 131 | # 延申 132 | - 一种基于TPLinker_plus的命名实体识别:https://github.com/taishan1994/pytorch_TPLinker_Plus_Ner 133 | - 一种one vs rest方法进行命名实体识别:https://github.com/taishan1994/pytorch_OneVersusRest_Ner 134 | - 一种级联Bert用于命名实体识别,解决标签过多问题:https://github.com/taishan1994/pytorch_Cascade_Bert_Ner 135 | - 一种多头选择Bert用于命名实体识别:https://github.com/taishan1994/pytorch_Multi_Head_Selection_Ner 136 | - 中文命名实体识别最新进展:https://github.com/taishan1994/awesome-chinese-ner 137 | - 信息抽取三剑客:实体抽取、关系抽取、事件抽取:https://github.com/taishan1994/chinese_information_extraction 138 | - 一种基于机器阅读理解的命名实体识别:https://github.com/taishan1994/BERT_MRC_NER_chinese 139 | - W2NER:命名实体识别最新sota:https://github.com/taishan1994/W2NER_predict 140 | -------------------------------------------------------------------------------- /checkpoints/占位.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/checkpoints/占位.txt -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | 4 | class Args: 5 | @staticmethod 6 | def parse(): 7 | parser = argparse.ArgumentParser() 8 | return parser 9 | 10 | @staticmethod 11 | def initialize(parser): 12 | # args for path 13 | parser.add_argument('--output_dir', default='./checkpoints/', 14 | help='the output dir for model checkpoints') 15 | 16 | parser.add_argument('--bert_dir', default='../model_hub/bert-base-chinese/', 17 | help='bert dir for uer') 18 | parser.add_argument('--data_dir', default='./data/cner/', 19 | help='data dir for uer') 20 | parser.add_argument('--log_dir', default='./logs/', 21 | help='log dir for uer') 22 | 23 | # other args 24 | parser.add_argument('--num_tags', default=53, type=int, 25 | help='number of tags') 26 | parser.add_argument('--head_size', default=64, type=int, 27 | help='') 28 | parser.add_argument('--seed', type=int, default=123, help='random seed') 29 | 30 | parser.add_argument('--gpu_ids', type=str, default='0', 31 | help='gpu ids to use, -1 for cpu, "0,1" for multi gpu') 32 | 33 | parser.add_argument('--max_seq_len', default=256, type=int) 34 | 35 | parser.add_argument('--eval_batch_size', default=12, type=int) 36 | parser.add_argument('--eval_steps', default=100, type=int, 37 | help='多少步验证一次') 38 | 39 | # train args 40 | parser.add_argument('--train_epochs', default=15, type=int, 41 | help='Max training epoch') 42 | 43 | parser.add_argument('--dropout_prob', default=0.1, type=float, 44 | help='drop out probability') 45 | 46 | # 2e-5 47 | parser.add_argument('--lr', default=3e-5, type=float, 48 | help='bert学习率') 49 | # 2e-3 50 | parser.add_argument('--other_lr', default=3e-4, type=float, 51 | help='bilstm和多层感知机学习率') 52 | # 0.5 53 | parser.add_argument('--max_grad_norm', default=1, type=float, 54 | help='max grad clip') 55 | 56 | parser.add_argument('--warmup_proportion', default=0.1, type=float) 57 | 58 | parser.add_argument('--weight_decay', default=0.01, type=float) 59 | 60 | parser.add_argument('--adam_epsilon', default=1e-8, type=float) 61 | 62 | parser.add_argument('--train_batch_size', default=32, type=int) 63 | parser.add_argument('--use_tensorboard', default="True") 64 | parser.add_argument('--use_efficient_globalpointer', default="True") 65 | 66 | 67 | 68 | return parser 69 | 70 | def get_parser(self): 71 | parser = self.parse() 72 | parser = self.initialize(parser) 73 | return parser.parse_args() -------------------------------------------------------------------------------- /data/cner/mid_data/dev.json: -------------------------------------------------------------------------------- 1 | [{"id": 0, "text": "吴重阳,中国国籍,大学本科,教授级高工,享受国务院特殊津贴,历任邮电部侯马电缆厂仪表试制组长、光缆分厂副厂长、研究所副所长,获得过山西省科技先进工作者、邮电部成绩优异高级工程师等多种荣誉称号。", "labels": [["T0", "NAME", 0, 3, "吴重阳"], ["T1", "CONT", 4, 8, "中国国籍"], ["T2", "EDU", 9, 13, "大学本科"], ["T3", "TITLE", 14, 19, "教授级高工"], ["T4", "ORG", 32, 40, "邮电部侯马电缆厂"], ["T5", "TITLE", 40, 46, "仪表试制组长"], ["T6", "TITLE", 47, 54, "光缆分厂副厂长"], ["T7", "TITLE", 55, 61, "研究所副所长"]]}, {"id": 1, "text": "历任公司副总经理、总工程师,", "labels": [["T0", "ORG", 2, 4, "公司"], ["T1", "TITLE", 4, 8, "副总经理"], ["T2", "TITLE", 9, 13, "总工程师"]]}, {"id": 2, "text": "2009年5月至今,受聘为公司首席资深技术顾问;", "labels": [["T0", "ORG", 13, 15, "公司"], ["T1", "TITLE", 15, 23, "首席资深技术顾问"]]}, {"id": 3, "text": "兼任中国科技会堂专家委员会专家、香港新时代国际文化出版社科技专家顾问。", "labels": [["T0", "ORG", 2, 8, "中国科技会堂"], ["T1", "TITLE", 8, 15, "专家委员会专家"], ["T2", "ORG", 16, 28, "香港新时代国际文化出版社"], ["T3", "TITLE", 28, 34, "科技专家顾问"]]}, {"id": 4, "text": "谢卫东先生:1966年12月出生,汉族,硕士研究生、高级工程师、国家注册造价工程师。", "labels": [["T0", "NAME", 0, 3, "谢卫东"], ["T1", "RACE", 17, 19, "汉族"], ["T2", "EDU", 20, 25, "硕士研究生"], ["T3", "TITLE", 26, 31, "高级工程师"], ["T4", "TITLE", 32, 41, "国家注册造价工程师"]]}, {"id": 5, "text": "2000年5月至今在厦门泛华集团工作,历任集团副总经理、集团副总裁。", "labels": [["T0", "ORG", 10, 16, "厦门泛华集团"], ["T1", "ORG", 14, 16, "集团"], ["T2", "ORG", 21, 23, "集团"], ["T3", "TITLE", 23, 27, "副总经理"], ["T4", "ORG", 28, 30, "集团"], ["T5", "TITLE", 30, 33, "副总裁"]]}, {"id": 6, "text": "2013年4月至今任云南罗平锌电股份有限公司董事。", "labels": [["T0", "ORG", 10, 22, "云南罗平锌电股份有限公司"], ["T1", "TITLE", 22, 24, "董事"]]}, {"id": 7, "text": "喻晓春先生:1963年出生,高中学历,中国国籍,无永久境外居留权。", "labels": [["T0", "NAME", 0, 3, "喻晓春"], ["T1", "EDU", 14, 18, "高中学历"], ["T2", "CONT", 19, 23, "中国国籍"]]}, {"id": 8, "text": "1981年至1983年,在兰州军区84564部队工作;", "labels": [["T0", "ORG", 13, 24, "兰州军区84564部队"]]}, {"id": 9, "text": "1984年至1986年,在国营135工厂工作;", "labels": [["T0", "ORG", 13, 20, "国营135工厂"]]}, {"id": 10, "text": "1986年至1997年,在甘肃省畜产公司工作;", "labels": [["T0", "ORG", 13, 20, "甘肃省畜产公司"]]}, {"id": 11, "text": "1998年至今,在上海百润香精香料股份有限公司工作;", "labels": [["T0", "ORG", 9, 23, "上海百润香精香料股份有限公司"]]}, {"id": 12, "text": "现任上海百润香精香料股份有限公司监事、烟草销售部经理。", "labels": [["T0", "ORG", 2, 16, "上海百润香精香料股份有限公司"], ["T1", "TITLE", 16, 18, "监事"], ["T2", "TITLE", 19, 26, "烟草销售部经理"]]}, {"id": 13, "text": "赵伟先生,", "labels": [["T0", "NAME", 0, 2, "赵伟"]]}, {"id": 14, "text": "1955年出生,兰州大学经济系硕士毕业,浙江大学经济学教授、博士生导师。", "labels": [["T0", "ORG", 8, 15, "兰州大学经济系"], ["T1", "EDU", 15, 17, "硕士"], ["T2", "ORG", 20, 24, "浙江大学"], ["T3", "TITLE", 24, 29, "经济学教授"], ["T4", "TITLE", 30, 35, "博士生导师"]]}, {"id": 15, "text": "历任甘肃省建工局工人,兰州大学经济系讲师、副教授,杭州大学经济系教授,瑞士联邦理工学院及德国明思特大学客座教授。", "labels": [["T0", "ORG", 2, 8, "甘肃省建工局"], ["T1", "TITLE", 8, 10, "工人"], ["T2", "ORG", 11, 18, "兰州大学经济系"], ["T3", "TITLE", 18, 20, "讲师"], ["T4", "TITLE", 21, 24, "副教授"], ["T5", "TITLE", 22, 24, "教授"], ["T6", "ORG", 25, 32, "杭州大学经济系"], ["T7", "TITLE", 32, 34, "教授"], ["T8", "ORG", 35, 43, "瑞士联邦理工学院"], ["T9", "ORG", 44, 51, "德国明思特大学"], ["T10", "TITLE", 51, 55, "客座教授"], ["T11", "TITLE", 53, 55, "教授"]]}, {"id": 16, "text": "任浙江大学教授、国际经济研究所所长,兼任浙江省委政策研究室特邀研究员、中国国际经济合作学会理事、中国世界经济学会理事、中国欧洲学会理事、中国经济史学会外国经济史专业委员会副主任、国家留学基金委员会评审专家、浙江省社科规划学科组专家。", "labels": [["T0", "ORG", 1, 5, "浙江大学"], ["T1", "TITLE", 5, 7, "教授"], ["T2", "ORG", 8, 15, "国际经济研究所"], ["T3", "TITLE", 15, 17, "所长"], ["T4", "ORG", 20, 29, "浙江省委政策研究室"], ["T5", "TITLE", 29, 34, "特邀研究员"], ["T6", "ORG", 35, 45, "中国国际经济合作学会"], ["T7", "TITLE", 45, 47, "理事"], ["T8", "ORG", 48, 56, "中国世界经济学会"], ["T9", "TITLE", 56, 58, "理事"], ["T10", "ORG", 59, 65, "中国欧洲学会"], ["T11", "TITLE", 65, 67, "理事"], ["T12", "ORG", 68, 85, "中国经济史学会外国经济史专业委员会"], ["T13", "TITLE", 85, 88, "副主任"], ["T14", "ORG", 89, 98, "国家留学基金委员会"], ["T15", "TITLE", 98, 102, "评审专家"], ["T16", "TITLE", 100, 102, "专家"], ["T17", "ORG", 103, 113, "浙江省社科规划学科组"], ["T18", "TITLE", 113, 115, "专家"]]}, {"id": 17, "text": "金美欧女士,", "labels": [["T0", "NAME", 0, 3, "金美欧"]]}, {"id": 18, "text": "1984年出生,中国国籍,汉族,硕士学历,曾任温州金龙船务有限公司董事长,", "labels": [["T0", "CONT", 8, 12, "中国国籍"], ["T1", "RACE", 13, 15, "汉族"], ["T2", "EDU", 16, 20, "硕士学历"], ["T3", "ORG", 23, 33, "温州金龙船务有限公司"], ["T4", "TITLE", 33, 36, "董事长"]]}, {"id": 19, "text": "2008年10月至今任金龙机电股份有限公司董事、副总经理。", "labels": [["T0", "ORG", 11, 21, "金龙机电股份有限公司"], ["T1", "TITLE", 21, 23, "董事"], ["T2", "TITLE", 24, 28, "副总经理"]]}, {"id": 20, "text": "林金和,男,中国国籍,无永久境外居留权,", "labels": [["T0", "NAME", 0, 3, "林金和"], ["T1", "CONT", 6, 10, "中国国籍"]]}, {"id": 21, "text": "1963年出生,大学学历,工程师。", "labels": [["T0", "EDU", 8, 12, "大学学历"], ["T1", "TITLE", 13, 16, "工程师"]]}, {"id": 22, "text": "2006年10月进入江苏东华测试技术股份有限公司,现任公司副总经理。", "labels": [["T0", "ORG", 10, 24, "江苏东华测试技术股份有限公司"], ["T1", "ORG", 22, 24, "公司"], ["T2", "ORG", 27, 29, "公司"], ["T3", "TITLE", 29, 33, "副总经理"]]}, {"id": 23, "text": "李斐先生,中国国籍,无境外永久居留权,", "labels": [["T0", "NAME", 0, 2, "李斐"], ["T1", "CONT", 5, 9, "中国国籍"]]}, {"id": 24, "text": "1970年出生,经济学硕士,注册会计师、注册税务师。", "labels": [["T0", "PRO", 8, 11, "经济学"], ["T1", "EDU", 11, 13, "硕士"], ["T2", "TITLE", 14, 19, "注册会计师"], ["T3", "TITLE", 20, 25, "注册税务师"]]}, {"id": 25, "text": "1993年至1997年,在山东省地矿实业有限公司从事会计工作;", "labels": [["T0", "ORG", 13, 24, "山东省地矿实业有限公司"], ["T1", "TITLE", 26, 28, "会计"]]}, {"id": 26, "text": "1997年至2004年3月,在山东正源和信会计师事务所和深圳天健信德会计师事务所担任审计经理;", "labels": [["T0", "ORG", 15, 27, "山东正源和信会计师事务所"], ["T1", "ORG", 28, 40, "深圳天健信德会计师事务所"], ["T2", "TITLE", 42, 46, "审计经理"]]}, {"id": 27, "text": "2004年3月至2010年3月,任深圳市天音通信发展有限公司财务部高级经理;", "labels": [["T0", "ORG", 17, 30, "深圳市天音通信发展有限公司"], ["T1", "TITLE", 30, 37, "财务部高级经理"]]}, {"id": 28, "text": "2010年3月正式加入博彦科技股份有限公司,现任博彦科技财务总监兼董事会秘书。", "labels": [["T0", "ORG", 11, 15, "博彦科技"], ["T1", "ORG", 11, 21, "博彦科技股份有限公司"], ["T2", "ORG", 24, 28, "博彦科技"], ["T3", "TITLE", 28, 32, "财务总监"], ["T4", "TITLE", 33, 38, "董事会秘书"]]}, {"id": 29, "text": "李海鹰先生,出生于1967年8月,本科学历,工程师。", "labels": [["T0", "NAME", 0, 3, "李海鹰"], ["T1", "EDU", 17, 21, "本科学历"], ["T2", "TITLE", 22, 25, "工程师"]]}, {"id": 30, "text": "2001年10月至2004年2月任河南辉煌科技股份有限公司董事长兼总经理;", "labels": [["T0", "ORG", 17, 29, "河南辉煌科技股份有限公司"], ["T1", "TITLE", 29, 32, "董事长"], ["T2", "TITLE", 33, 36, "总经理"]]}, {"id": 31, "text": "2004年2月至今担任辉煌科技董事长。", "labels": [["T0", "ORG", 11, 15, "辉煌科技"], ["T1", "TITLE", 15, 18, "董事长"]]}, {"id": 32, "text": "最近5年无在其他单位担任董事、监事、高级管理人员的情况。", "labels": []}, {"id": 33, "text": "段志平先生:1964年9月出生,中国国籍,无境外永久居留权,硕士研究生学历,高级工程师。", "labels": [["T0", "NAME", 0, 3, "段志平"], ["T1", "CONT", 16, 20, "中国国籍"], ["T2", "EDU", 30, 37, "硕士研究生学历"], ["T3", "TITLE", 38, 43, "高级工程师"]]}, {"id": 34, "text": "曾担任甘肃定西制药厂质监科副科长、企管科科长、副厂长、代理厂长、兰州制药厂厂长,恒康医疗集团股份有限公司副总经理、总经理。", "labels": [["T0", "ORG", 3, 10, "甘肃定西制药厂"], ["T1", "TITLE", 10, 16, "质监科副科长"], ["T2", "TITLE", 17, 22, "企管科科长"], ["T3", "TITLE", 23, 26, "副厂长"], ["T4", "TITLE", 24, 26, "厂长"], ["T5", "TITLE", 27, 31, "代理厂长"], ["T6", "TITLE", 29, 31, "厂长"], ["T7", "ORG", 32, 37, "兰州制药厂"], ["T8", "TITLE", 37, 39, "厂长"], ["T9", "ORG", 40, 52, "恒康医疗集团股份有限公司"], ["T10", "TITLE", 52, 56, "副总经理"], ["T11", "TITLE", 53, 56, "总经理"], ["T12", "TITLE", 57, 60, "总经理"]]}, {"id": 35, "text": "恒康医疗集团股份有限公司董事长。", "labels": [["T0", "ORG", 0, 12, "恒康医疗集团股份有限公司"], ["T1", "TITLE", 12, 15, "董事长"]]}, {"id": 36, "text": "黄家学,男,美国俄克拉何马大学健康医学中心微生物与免疫学博士。", "labels": [["T0", "NAME", 0, 3, "黄家学"], ["T1", "ORG", 6, 21, "美国俄克拉何马大学健康医学中心"], ["T2", "PRO", 21, 28, "微生物与免疫学"], ["T3", "EDU", 28, 30, "博士"]]}, {"id": 37, "text": "2011年8月至2014年2月任中源协和细胞基因工程股份有限公司副总经理;", "labels": [["T0", "ORG", 16, 32, "中源协和细胞基因工程股份有限公司"], ["T1", "TITLE", 32, 36, "副总经理"]]}, {"id": 38, "text": "2014年2月至2014年12月,任中源协和细胞基因工程股份有限公司技术质量总监。", "labels": [["T0", "ORG", 18, 34, "中源协和细胞基因工程股份有限公司"], ["T1", "TITLE", 34, 40, "技术质量总监"]]}, {"id": 39, "text": "朱慈蕴女士:独立董事,中国国籍,无永久境外居留权,", "labels": [["T0", "NAME", 0, 3, "朱慈蕴"], ["T1", "TITLE", 6, 10, "独立董事"], ["T2", "CONT", 11, 15, "中国国籍"]]}, {"id": 40, "text": "1955年出生,博士,教授,博士生导师。", "labels": [["T0", "EDU", 8, 10, "博士"], ["T1", "TITLE", 11, 13, "教授"], ["T2", "EDU", 14, 16, "博士"], ["T3", "TITLE", 14, 19, "博士生导师"]]}, {"id": 41, "text": "历任天津财经大学法学院讲师、副教授、教授。", "labels": [["T0", "ORG", 2, 11, "天津财经大学法学院"], ["T1", "TITLE", 11, 13, "讲师"], ["T2", "TITLE", 14, 17, "副教授"], ["T3", "TITLE", 15, 17, "教授"], ["T4", "TITLE", 18, 20, "教授"]]}, {"id": 42, "text": "1999年8月至今在清华大学法学院任教,受聘为责任教授,博士生导师。", "labels": [["T0", "ORG", 10, 17, "清华大学法学院"], ["T1", "TITLE", 23, 27, "责任教授"], ["T2", "TITLE", 28, 33, "博士生导师"]]}, {"id": 43, "text": "2002年,参加由中国证监会培训中心与清华大学经管院联合举办的独立董事培训班,并获结业证书。", "labels": []}, {"id": 44, "text": "2011年4月至今任鼎捷软件股份有限公司独立董事。", "labels": [["T0", "ORG", 10, 20, "鼎捷软件股份有限公司"], ["T1", "TITLE", 20, 24, "独立董事"]]}, {"id": 45, "text": "2004年被选为海淀区第十三届人大代表,并出任海淀区第十三届人大财经委员会委员。", "labels": [["T0", "TITLE", 8, 19, "海淀区第十三届人大代表"], ["T1", "ORG", 23, 37, "海淀区第十三届人大财经委员会"], ["T2", "TITLE", 34, 36, "委员"], ["T3", "TITLE", 37, 39, "委员"]]}, {"id": 46, "text": "2007年继续当选海淀区第十四届人大代表,财经委员会委员。", "labels": [["T0", "TITLE", 9, 20, "海淀区第十四届人大代表"], ["T1", "ORG", 21, 26, "财经委员会"], ["T2", "TITLE", 23, 25, "委员"], ["T3", "TITLE", 26, 28, "委员"]]}, {"id": 47, "text": "2012年继续当选海淀区第十五届人大代表,财经委员会委员。", "labels": [["T0", "TITLE", 9, 20, "海淀区第十五届人大代表"], ["T1", "ORG", 21, 26, "财经委员会"], ["T2", "TITLE", 23, 25, "委员"], ["T3", "TITLE", 26, 28, "委员"]]}, {"id": 48, "text": "曾获全国第二届杰出中青年法学家提名奖、天津市政府第五届社会科学优秀成果二等奖、北京市第六届哲学社会科学二等奖、第四届吴玉章奖优秀奖、第三届中国高校人文社会科学研究优秀成果三等奖、1999年度美国Colby科学文化信息中心优秀论文奖、第一届“中国法学优秀成果奖”论文类三等奖(2008年11月)、第二届“中国法学优秀成果奖”专著二等奖(2011年11月)等。", "labels": []}, {"id": 49, "text": "吴纹,女,毕业于南京大学,学士学位。", "labels": [["T0", "NAME", 0, 2, "吴纹"], ["T1", "ORG", 8, 12, "南京大学"], ["T2", "EDU", 13, 17, "学士学位"]]}, {"id": 50, "text": "曾任职深圳科兴生物工程股份有限公司,现任职深圳市北大高科技股份有限公司。", "labels": [["T0", "ORG", 3, 17, "深圳科兴生物工程股份有限公司"], ["T1", "ORG", 21, 35, "深圳市北大高科技股份有限公司"]]}, {"id": 51, "text": "2003年7月起任深圳中国农大科技股份有限公司职工监事。", "labels": [["T0", "ORG", 9, 23, "深圳中国农大科技股份有限公司"], ["T1", "TITLE", 23, 27, "职工监事"]]}, {"id": 52, "text": "袁国强先生,大专学历,经济师。", "labels": [["T0", "NAME", 0, 3, "袁国强"], ["T1", "EDU", 6, 10, "大专学历"], ["T2", "TITLE", 11, 14, "经济师"]]}, {"id": 53, "text": "历任宏图高科光电线缆分公司(8390厂)计划员、供销经理、军品分厂长,现任宏图高科光电线缆分公司副总经理兼海南电缆厂(海南通信电缆厂)厂长。", "labels": [["T0", "ORG", 2, 13, "宏图高科光电线缆分公司"], ["T1", "TITLE", 20, 23, "计划员"], ["T2", "TITLE", 24, 28, "供销经理"], ["T3", "TITLE", 29, 34, "军品分厂长"], ["T4", "TITLE", 32, 34, "厂长"], ["T5", "ORG", 37, 48, "宏图高科光电线缆分公司"], ["T6", "TITLE", 48, 52, "副总经理"], ["T7", "ORG", 53, 58, "海南电缆厂"], ["T8", "ORG", 59, 66, "海南通信电缆厂"], ["T9", "TITLE", 67, 69, "厂长"]]}, {"id": 54, "text": "罗玫女士,", "labels": [["T0", "NAME", 0, 2, "罗玫"]]}, {"id": 55, "text": "1976年3月生,美国加州伯克利大学博士。", "labels": [["T0", "ORG", 9, 18, "美国加州伯克利大学"], ["T1", "EDU", 18, 20, "博士"]]}, {"id": 56, "text": "清华大学经济管理学院会计系副教授、美国会计协会会员、美国金融协会会员。", "labels": [["T0", "ORG", 0, 13, "清华大学经济管理学院会计系"], ["T1", "TITLE", 13, 16, "副教授"], ["T2", "ORG", 17, 23, "美国会计协会"], ["T3", "TITLE", 23, 25, "会员"], ["T4", "ORG", 26, 32, "美国金融协会"], ["T5", "TITLE", 32, 34, "会员"]]}, {"id": 57, "text": "现任清华大学会计专业硕士MPAcc项目主任;", "labels": [["T0", "ORG", 2, 17, "清华大学会计专业硕士MPAcc"], ["T1", "TITLE", 17, 21, "项目主任"]]}, {"id": 58, "text": "兼任加拿大会计协会期刊《AccountingPerspectives》副主编、《JournalofAccountingandPublicPolicy》审稿人。", "labels": [["T0", "ORG", 2, 35, "加拿大会计协会期刊《AccountingPerspectives》"], ["T1", "TITLE", 35, 38, "副主编"], ["T2", "ORG", 39, 75, "《JournalofAccountingandPublicPolicy》"], ["T3", "TITLE", 75, 78, "审稿人"]]}, {"id": 59, "text": "司增勤,男,", "labels": [["T0", "NAME", 0, 3, "司增勤"]]}, {"id": 60, "text": "1961年11月出生,中共党员,研究生学历,高级会计师。", "labels": [["T0", "TITLE", 11, 15, "中共党员"], ["T1", "EDU", 16, 21, "研究生学历"], ["T2", "TITLE", 22, 27, "高级会计师"]]}, {"id": 61, "text": "1981年7月参加工作,曾任枣庄市电力局副总会计师兼财务部主任,山东鲁能燃料集团有限公司副总会计师,泰安高压开关(集团)厂总会计师,山东鲁能泰山电缆股份有限公司董事、副总经理兼总会计师,现任华能泰山电力有限公司董事、党委书记,山东新能泰山发电股份有限公司董事、总经理、党委副书记。", "labels": [["T0", "ORG", 14, 20, "枣庄市电力局"], ["T1", "TITLE", 20, 25, "副总会计师"], ["T2", "TITLE", 21, 25, "总会计师"], ["T3", "TITLE", 26, 31, "财务部主任"], ["T4", "ORG", 32, 44, "山东鲁能燃料集团有限公司"], ["T5", "TITLE", 44, 49, "副总会计师"], ["T6", "TITLE", 45, 49, "总会计师"], ["T7", "ORG", 50, 61, "泰安高压开关(集团)厂"], ["T8", "TITLE", 61, 65, "总会计师"], ["T9", "ORG", 66, 80, "山东鲁能泰山电缆股份有限公司"], ["T10", "TITLE", 80, 82, "董事"], ["T11", "TITLE", 83, 87, "副总经理"], ["T12", "TITLE", 84, 87, "总经理"], ["T13", "TITLE", 88, 92, "总会计师"], ["T14", "ORG", 95, 105, "华能泰山电力有限公司"], ["T15", "TITLE", 105, 107, "董事"], ["T16", "TITLE", 108, 112, "党委书记"], ["T17", "ORG", 113, 127, "山东新能泰山发电股份有限公司"], ["T18", "TITLE", 127, 129, "董事"], ["T19", "TITLE", 130, 133, "总经理"], ["T20", "TITLE", 134, 139, "党委副书记"]]}, {"id": 62, "text": "章小龙先生:男,", "labels": [["T0", "NAME", 0, 3, "章小龙"]]}, {"id": 63, "text": "1964年4月出生,中国国籍,无境外居留权,美国亚利桑那州立大学凯瑞商学院工商管理硕士。", "labels": [["T0", "CONT", 10, 14, "中国国籍"], ["T1", "ORG", 22, 37, "美国亚利桑那州立大学凯瑞商学院"], ["T2", "PRO", 37, 41, "工商管理"], ["T3", "EDU", 41, 43, "硕士"]]}, {"id": 64, "text": "2007年4月份至今一直担任江苏恩华药业股份有限公司董事,兼任上海彤源投资发展有限公司财务总监。", "labels": [["T0", "ORG", 14, 26, "江苏恩华药业股份有限公司"], ["T1", "TITLE", 26, 28, "董事"], ["T2", "ORG", 31, 43, "上海彤源投资发展有限公司"], ["T3", "TITLE", 43, 47, "财务总监"]]}, {"id": 65, "text": "胡钢亮,男,", "labels": [["T0", "NAME", 0, 3, "胡钢亮"]]}, {"id": 66, "text": "1979年9月生,中国籍,硕士,研究生学历,曾任浙江康恩贝制药股份有限公司第六届监事会监事、杭州茵诺邦医药科技有限公司总经理。", "labels": [["T0", "CONT", 9, 12, "中国籍"], ["T1", "EDU", 13, 15, "硕士"], ["T2", "EDU", 16, 21, "研究生学历"], ["T3", "ORG", 24, 37, "浙江康恩贝制药股份有限公司"], ["T4", "TITLE", 37, 45, "第六届监事会监事"], ["T5", "ORG", 46, 59, "杭州茵诺邦医药科技有限公司"], ["T6", "TITLE", 59, 62, "总经理"]]}, {"id": 67, "text": "现任浙江康恩贝健康产品有限公司总经理。", "labels": [["T0", "ORG", 2, 15, "浙江康恩贝健康产品有限公司"], ["T1", "TITLE", 15, 18, "总经理"]]}, {"id": 68, "text": "报告期内因监事会换届已不在浙江康恩贝制药股份有限公司任职。", "labels": [["T0", "ORG", 13, 26, "浙江康恩贝制药股份有限公司"]]}, {"id": 69, "text": "赵振营先生:1953年4月出生,辽宁海城人,大学学历,教授级高级政工师。", "labels": [["T0", "NAME", 0, 3, "赵振营"], ["T1", "LOC", 16, 21, "辽宁海城人"], ["T2", "EDU", 22, 26, "大学学历"], ["T3", "TITLE", 27, 35, "教授级高级政工师"]]}, {"id": 70, "text": "历任湘潭钢铁公司党委办公室秘书、副主任、主任、党委宣传部部长、第二炼钢厂党委书记兼副厂长、湘潭钢铁公司党委书记助理、党委副书记、纪委书记、副总经理、湖南菱管线股份有限公司湘钢事业部党委副书记、副总经理。", "labels": [["T0", "ORG", 2, 8, "湘潭钢铁公司"], ["T1", "TITLE", 8, 15, "党委办公室秘书"], ["T2", "TITLE", 16, 19, "副主任"], ["T3", "TITLE", 17, 19, "主任"], ["T4", "TITLE", 20, 22, "主任"], ["T5", "TITLE", 23, 30, "党委宣传部部长"], ["T6", "ORG", 31, 36, "第二炼钢厂"], ["T7", "TITLE", 36, 40, "党委书记"], ["T8", "TITLE", 41, 44, "副厂长"], ["T9", "ORG", 45, 51, "湘潭钢铁公司"], ["T10", "TITLE", 51, 55, "党委书记"], ["T11", "TITLE", 51, 57, "党委书记助理"], ["T12", "TITLE", 58, 63, "党委副书记"], ["T13", "TITLE", 64, 68, "纪委书记"], ["T14", "TITLE", 69, 73, "副总经理"], ["T15", "ORG", 74, 85, "湖南菱管线股份有限公司"], ["T16", "TITLE", 85, 95, "湘钢事业部党委副书记"], ["T17", "TITLE", 90, 95, "党委副书记"], ["T18", "TITLE", 96, 100, "副总经理"]]}, {"id": 71, "text": "现任湖南华菱钢铁集团有限责任公司董事、湘潭钢铁集团有限公司党委书记、副总经理、湖南华菱湘钢有限公司党委书记、副总经理、湖南华菱钢铁股份有限公司第三届监事会监事。", "labels": [["T0", "ORG", 2, 16, "湖南华菱钢铁集团有限责任公司"], ["T1", "TITLE", 16, 18, "董事"], ["T2", "ORG", 19, 29, "湘潭钢铁集团有限公司"], ["T3", "TITLE", 29, 33, "党委书记"], ["T4", "TITLE", 34, 38, "副总经理"], ["T5", "ORG", 39, 49, "湖南华菱湘钢有限公司"], ["T6", "TITLE", 49, 53, "党委书记"], ["T7", "TITLE", 54, 58, "副总经理"], ["T8", "ORG", 59, 71, "湖南华菱钢铁股份有限公司"], ["T9", "TITLE", 71, 79, "第三届监事会监事"]]}, {"id": 72, "text": "韩文武(离任):男,", "labels": [["T0", "NAME", 0, 3, "韩文武"]]}, {"id": 73, "text": "1979年6月出生,本科学历。", "labels": [["T0", "EDU", 10, 14, "本科学历"]]}, {"id": 74, "text": "历任廊坊市华元机电工程有限公司财务及税务会计;", "labels": [["T0", "ORG", 2, 15, "廊坊市华元机电工程有限公司"], ["T1", "TITLE", 15, 22, "财务及税务会计"]]}, {"id": 75, "text": "华夏控股出纳、会计;", "labels": [["T0", "ORG", 0, 4, "华夏控股"], ["T1", "TITLE", 4, 6, "出纳"], ["T2", "TITLE", 7, 9, "会计"]]}, {"id": 76, "text": "九通投资主管会计;", "labels": [["T0", "ORG", 0, 4, "九通投资"], ["T1", "TITLE", 4, 8, "主管会计"]]}, {"id": 77, "text": "华夏控股财务高级经理;", "labels": [["T0", "ORG", 0, 4, "华夏控股"], ["T1", "TITLE", 4, 10, "财务高级经理"]]}, {"id": 78, "text": "华夏幸福财务高级经理;", "labels": [["T0", "ORG", 0, 4, "华夏幸福"], ["T1", "TITLE", 4, 10, "财务高级经理"]]}, {"id": 79, "text": "2010年3月至2013年12月期间任华夏幸福职工监事。", "labels": [["T0", "ORG", 19, 23, "华夏幸福"], ["T1", "TITLE", 23, 27, "职工监事"]]}, {"id": 80, "text": "吴幼光先生,大学文化,助理会计师。", "labels": [["T0", "NAME", 0, 3, "吴幼光"], ["T1", "EDU", 6, 10, "大学文化"], ["T2", "TITLE", 11, 16, "助理会计师"]]}, {"id": 81, "text": "曾任宁波雅戈尔制衣有限公司财务部副经理、经理,雅戈尔集团股份有限公司财务部经理。", "labels": [["T0", "ORG", 2, 13, "宁波雅戈尔制衣有限公司"], ["T1", "TITLE", 13, 19, "财务部副经理"], ["T2", "TITLE", 17, 19, "经理"], ["T3", "TITLE", 20, 22, "经理"], ["T4", "ORG", 23, 34, "雅戈尔集团股份有限公司"], ["T5", "TITLE", 34, 39, "财务部经理"], ["T6", "TITLE", 37, 39, "经理"]]}, {"id": 82, "text": "现任本公司董事、雅戈尔集团股份有限公司副总经理兼财务部经理。", "labels": [["T0", "ORG", 2, 5, "本公司"], ["T1", "TITLE", 5, 7, "董事"], ["T2", "ORG", 8, 19, "雅戈尔集团股份有限公司"], ["T3", "TITLE", 19, 23, "副总经理"], ["T4", "TITLE", 24, 29, "财务部经理"]]}, {"id": 83, "text": "龙虹女士,", "labels": [["T0", "NAME", 0, 2, "龙虹"]]}, {"id": 84, "text": "1965年1月出生,中共党员,硕士研究生学历。", "labels": [["T0", "TITLE", 10, 14, "中共党员"], ["T1", "EDU", 15, 22, "硕士研究生学历"]]}, {"id": 85, "text": "曾任北京理工大学管理工程系助教、支部委员,管理学院讲师、室副主任、支部委员、支部书记、院工会委员,管理与经济学院副教授、室主任、系副主任、支部书记、院工会副主席;", "labels": [["T0", "ORG", 2, 13, "北京理工大学管理工程系"], ["T1", "TITLE", 13, 15, "助教"], ["T2", "TITLE", 16, 20, "支部委员"], ["T3", "TITLE", 21, 27, "管理学院讲师"], ["T4", "TITLE", 28, 32, "室副主任"], ["T5", "TITLE", 33, 37, "支部委员"], ["T6", "TITLE", 38, 42, "支部书记"], ["T7", "TITLE", 43, 48, "院工会委员"], ["T8", "ORG", 49, 56, "管理与经济学院"], ["T9", "TITLE", 56, 59, "副教授"], ["T10", "TITLE", 60, 63, "室主任"], ["T11", "TITLE", 64, 68, "系副主任"], ["T12", "TITLE", 69, 73, "支部书记"], ["T13", "TITLE", 74, 80, "院工会副主席"]]}, {"id": 86, "text": "盛京银行北京分行党委副书记、纪委书记、综合管理部总经理。", "labels": [["T0", "ORG", 0, 8, "盛京银行北京分行"], ["T1", "TITLE", 8, 13, "党委副书记"], ["T2", "TITLE", 14, 18, "纪委书记"], ["T3", "TITLE", 19, 27, "综合管理部总经理"]]}, {"id": 87, "text": "现任盛京银行北京分行党委副书记、纪委书记、工会主席,东北证券股份有限公司独立董事。", "labels": [["T0", "ORG", 2, 10, "盛京银行北京分行"], ["T1", "TITLE", 10, 15, "党委副书记"], ["T2", "TITLE", 16, 20, "纪委书记"], ["T3", "TITLE", 21, 25, "工会主席"], ["T4", "ORG", 26, 36, "东北证券股份有限公司"], ["T5", "TITLE", 36, 40, "独立董事"]]}, {"id": 88, "text": "姓名:苏壮强性别:男民族:汉出生年月:1971年10月23日教育程度:大学健康状况:良好1989年9月--1993年9月汕头大学学生1993年10月--2003年10月汕头市联美集团总经理2003年10月—至今沈阳房产实业董事长2004年5月———至今中体产业集团股份有限公司副董事长", "labels": [["T0", "NAME", 3, 6, "苏壮强"], ["T1", "RACE", 13, 14, "汉"], ["T2", "EDU", 35, 37, "大学"], ["T3", "ORG", 60, 64, "汕头大学"], ["T4", "EDU", 62, 64, "大学"], ["T5", "TITLE", 64, 66, "学生"], ["T6", "ORG", 84, 91, "汕头市联美集团"], ["T7", "TITLE", 91, 94, "总经理"], ["T8", "ORG", 105, 111, "沈阳房产实业"], ["T9", "TITLE", 111, 114, "董事长"], ["T10", "ORG", 126, 138, "中体产业集团股份有限公司"], ["T11", "TITLE", 138, 142, "副董事长"], ["T12", "TITLE", 139, 142, "董事长"]]}, {"id": 89, "text": "郑培敏:男,清华大学MBA,现任上海荣正投资咨询有限公司董事长兼首席合伙人,中国海诚、创元科技、东方明珠独立董事,投资银行业专业委员会委员。", "labels": [["T0", "NAME", 0, 3, "郑培敏"], ["T1", "ORG", 6, 10, "清华大学"], ["T2", "EDU", 10, 13, "MBA"], ["T3", "ORG", 16, 28, "上海荣正投资咨询有限公司"], ["T4", "TITLE", 28, 31, "董事长"], ["T5", "TITLE", 32, 37, "首席合伙人"], ["T6", "ORG", 38, 42, "中国海诚"], ["T7", "ORG", 43, 47, "创元科技"], ["T8", "ORG", 48, 52, "东方明珠"], ["T9", "TITLE", 52, 56, "独立董事"], ["T10", "ORG", 57, 67, "投资银行业专业委员会"], ["T11", "TITLE", 64, 66, "委员"], ["T12", "TITLE", 67, 69, "委员"]]}, {"id": 90, "text": "吴健:男,", "labels": [["T0", "NAME", 0, 2, "吴健"]]}, {"id": 91, "text": "1977年11月15日生,大学本科,经济师。", "labels": [["T0", "EDU", 13, 17, "大学本科"], ["T1", "TITLE", 18, 21, "经济师"]]}, {"id": 92, "text": "曾任江阴职教中心会计;", "labels": [["T0", "ORG", 2, 8, "江阴职教中心"], ["T1", "TITLE", 8, 10, "会计"]]}, {"id": 93, "text": "江阴市教育局计财审计科会计;", "labels": [["T0", "ORG", 0, 6, "江阴市教育局"], ["T1", "TITLE", 6, 13, "计财审计科会计"]]}, {"id": 94, "text": "江阴市财政局国库集中支付中心会计;", "labels": [["T0", "ORG", 0, 6, "江阴市财政局"], ["T1", "TITLE", 6, 16, "国库集中支付中心会计"]]}, {"id": 95, "text": "江南水务董事。", "labels": [["T0", "ORG", 0, 4, "江南水务"], ["T1", "TITLE", 4, 6, "董事"]]}, {"id": 96, "text": "现任江南水务监事会主席;", "labels": [["T0", "ORG", 2, 6, "江南水务"], ["T1", "TITLE", 6, 11, "监事会主席"]]}, {"id": 97, "text": "江阴市市属集体资产管理办公室副主任。", "labels": [["T0", "ORG", 0, 14, "江阴市市属集体资产管理办公室"], ["T1", "TITLE", 14, 17, "副主任"]]}, {"id": 98, "text": "杨小勇先生中国国籍1963年4月出生,汉族,中共党员,硕士学位。", "labels": [["T0", "NAME", 0, 3, "杨小勇"], ["T1", "CONT", 5, 9, "中国国籍"], ["T2", "RACE", 19, 21, "汉族"], ["T3", "TITLE", 22, 26, "中共党员"], ["T4", "EDU", 27, 31, "硕士学位"]]}, {"id": 99, "text": "曾就职于太原重机学院、山西省高校工委、山西省委组织部。", "labels": [["T0", "ORG", 4, 10, "太原重机学院"], ["T1", "ORG", 11, 18, "山西省高校工委"], ["T2", "ORG", 19, 26, "山西省委组织部"]]}, {"id": 100, "text": "2000年7月至2002年2月任山西省信托投资公司党组成员、副总经理;", "labels": [["T0", "ORG", 16, 25, "山西省信托投资公司"], ["T1", "TITLE", 25, 29, "党组成员"], ["T2", "TITLE", 30, 34, "副总经理"]]}, {"id": 101, "text": "2002年4月至2008年7月,任国信集团党委委员、副总经理、纪委书记;", "labels": [["T0", "ORG", 17, 21, "国信集团"], ["T1", "TITLE", 21, 25, "党委委员"], ["T2", "TITLE", 26, 30, "副总经理"], ["T3", "TITLE", 31, 35, "纪委书记"]]}, {"id": 102, "text": "2002年2月至今任山西信托副董事长;", "labels": [["T0", "ORG", 10, 14, "山西信托"], ["T1", "TITLE", 14, 18, "副董事长"]]}, {"id": 103, "text": "2005年12月至今兼任汇丰晋信基金管理有限公司董事长;", "labels": [["T0", "ORG", 12, 24, "汇丰晋信基金管理有限公司"], ["T1", "TITLE", 24, 27, "董事长"]]}, {"id": 104, "text": "2008年8月至今任国信集团党委书记;", "labels": [["T0", "ORG", 10, 14, "国信集团"], ["T1", "TITLE", 14, 18, "党委书记"]]}, {"id": 105, "text": "2007年4月至2008年1月任山西证券有限责任公司董事;", "labels": [["T0", "ORG", 16, 26, "山西证券有限责任公司"], ["T1", "TITLE", 26, 28, "董事"]]}, {"id": 106, "text": "2008年2月至今任本公司董事。", "labels": [["T0", "ORG", 10, 13, "本公司"], ["T1", "TITLE", 13, 15, "董事"]]}, {"id": 107, "text": "陈汉先生,董事,", "labels": [["T0", "NAME", 0, 2, "陈汉"], ["T1", "TITLE", 5, 7, "董事"]]}, {"id": 108, "text": "1967年生,中国国籍,无境外永久居留权,清华大学MBA,广东省五一劳动奖章获得者、广东海洋大学客座教授、湛江市人大代表、湛江市水产进出口协会副会长。", "labels": [["T0", "CONT", 7, 11, "中国国籍"], ["T1", "ORG", 21, 25, "清华大学"], ["T2", "EDU", 25, 28, "MBA"], ["T3", "ORG", 42, 48, "广东海洋大学"], ["T4", "TITLE", 48, 52, "客座教授"], ["T5", "ORG", 53, 56, "湛江市"], ["T6", "TITLE", 56, 60, "人大代表"], ["T7", "ORG", 61, 64, "湛江市"], ["T8", "ORG", 61, 71, "湛江市水产进出口协会"], ["T9", "TITLE", 71, 74, "副会长"]]}, {"id": 109, "text": "陈汉拥20年的水产从业经历,", "labels": []}, {"id": 110, "text": "1987年就职于湛江市坡头外经冷冻厂。", "labels": [["T0", "ORG", 8, 18, "湛江市坡头外经冷冻厂"]]}, {"id": 111, "text": "2001年参与创立本公司,曾任公司副总经理,现任公司董事、总经理。", "labels": [["T0", "ORG", 9, 12, "本公司"], ["T1", "ORG", 10, 12, "公司"], ["T2", "ORG", 15, 17, "公司"], ["T3", "TITLE", 17, 21, "副总经理"], ["T4", "TITLE", 18, 21, "总经理"], ["T5", "ORG", 24, 26, "公司"], ["T6", "TITLE", 26, 28, "董事"], ["T7", "TITLE", 29, 32, "总经理"]]}, {"id": 112, "text": "与其他持有公司5%以上股份的股东、实际控制人、其他董事、监事、高级管理人员不存在关联关系。", "labels": []}, {"id": 113, "text": "李苏龙:男,汉族,", "labels": [["T0", "NAME", 0, 3, "李苏龙"], ["T1", "RACE", 6, 8, "汉族"]]}, {"id": 114, "text": "1964年1月出生,在职研究生毕业,中共党员,高级工程师。", "labels": [["T0", "EDU", 10, 15, "在职研究生"], ["T1", "TITLE", 18, 22, "中共党员"], ["T2", "TITLE", 23, 28, "高级工程师"]]}, {"id": 115, "text": "历任晋城煤业集团副总工程师兼人力资源管理中心主任。", "labels": [["T0", "ORG", 2, 8, "晋城煤业集团"], ["T1", "TITLE", 8, 13, "副总工程师"], ["T2", "TITLE", 14, 24, "人力资源管理中心主任"]]}, {"id": 116, "text": "现任山西煤炭进出口集团有限公司总工程师、党委委员,山煤国际能源集团股份有限公司监事。", "labels": [["T0", "ORG", 2, 15, "山西煤炭进出口集团有限公司"], ["T1", "TITLE", 15, 19, "总工程师"], ["T2", "TITLE", 20, 24, "党委委员"], ["T3", "ORG", 25, 39, "山煤国际能源集团股份有限公司"], ["T4", "TITLE", 39, 41, "监事"]]}, {"id": 117, "text": "汤巨祥,男,汉族,", "labels": [["T0", "NAME", 0, 3, "汤巨祥"], ["T1", "RACE", 6, 8, "汉族"]]}, {"id": 118, "text": "1962年11月生,中共党员,本科学历,工程师,历任西钢集团公司副总经理、总法律顾问,江仓能源公司董事长,现任本公司五届董事会董事。", "labels": [["T0", "TITLE", 10, 14, "中共党员"], ["T1", "EDU", 15, 19, "本科学历"], ["T2", "TITLE", 20, 23, "工程师"], ["T3", "ORG", 26, 32, "西钢集团公司"], ["T4", "TITLE", 32, 36, "副总经理"], ["T5", "TITLE", 37, 42, "总法律顾问"], ["T6", "ORG", 43, 49, "江仓能源公司"], ["T7", "TITLE", 49, 52, "董事长"], ["T8", "ORG", 55, 58, "本公司"], ["T9", "TITLE", 58, 65, "五届董事会董事"]]}, {"id": 119, "text": "罗世容,女,汉族,", "labels": [["T0", "NAME", 0, 3, "罗世容"], ["T1", "RACE", 6, 8, "汉族"]]}, {"id": 120, "text": "1962年9月生。", "labels": []}, {"id": 121, "text": "北京商学院毕业,学士学位。", "labels": [["T0", "ORG", 0, 5, "北京商学院"], ["T1", "EDU", 8, 12, "学士学位"]]}, {"id": 122, "text": "1983年7月至1993年6月,就职于四川省轻工厅,任财经教研室副主任;", "labels": [["T0", "ORG", 19, 25, "四川省轻工厅"], ["T1", "TITLE", 27, 35, "财经教研室副主任"]]}, {"id": 123, "text": "1993年6月至1994年7月,就职于海南信托投资公司证券部,任主办会计师;", "labels": [["T0", "ORG", 19, 27, "海南信托投资公司"], ["T1", "TITLE", 32, 37, "主办会计师"]]}, {"id": 124, "text": "1994年8月至1997年2月,就职于长城证券(汇通)深圳二部,任财务经理;", "labels": [["T0", "ORG", 19, 31, "长城证券(汇通)深圳二部"], ["T1", "TITLE", 33, 37, "财务经理"]]}, {"id": 125, "text": "1997年2月至1999年3月,就职于长城证券成都营业部,任副总经理兼财务经理;", "labels": [["T0", "ORG", 19, 28, "长城证券成都营业部"], ["T1", "TITLE", 30, 34, "副总经理"], ["T2", "TITLE", 35, 39, "财务经理"]]}, {"id": 126, "text": "1999年4月至2000年3月,就职于长城证券深圳一部,任副总经理兼财务经理;", "labels": [["T0", "ORG", 19, 27, "长城证券深圳一部"], ["T1", "TITLE", 29, 33, "副总经理"], ["T2", "TITLE", 34, 38, "财务经理"]]}, {"id": 127, "text": "2003年3月至今任长城证券有限责任公司审计部经理。", "labels": [["T0", "ORG", 10, 20, "长城证券有限责任公司"], ["T1", "TITLE", 20, 25, "审计部经理"]]}, {"id": 128, "text": "赵国民先生,", "labels": [["T0", "NAME", 0, 3, "赵国民"]]}, {"id": 129, "text": "1965年4月出生,硕士学历,高级工程师。", "labels": [["T0", "EDU", 10, 14, "硕士学历"], ["T1", "TITLE", 15, 20, "高级工程师"]]}, {"id": 130, "text": "1989年本科毕业于清华大学,浙江大学MBA硕士。", "labels": [["T0", "EDU", 5, 7, "本科"], ["T1", "ORG", 10, 14, "清华大学"], ["T2", "ORG", 15, 19, "浙江大学"], ["T3", "EDU", 19, 24, "MBA硕士"]]}, {"id": 131, "text": "先后就职于杭州市公安局、杭州华特移动通讯有限公司、浙江通普电气股份公司和上海欣民通信技术有限公司,为上海市科学技术委员会科学技术创新类评审专家、上海市人事局电子工程类职称评审专家、上海市科学技术委员会科技管理类评审专家。", "labels": [["T0", "ORG", 5, 11, "杭州市公安局"], ["T1", "ORG", 12, 24, "杭州华特移动通讯有限公司"], ["T2", "ORG", 25, 35, "浙江通普电气股份公司"], ["T3", "ORG", 36, 48, "上海欣民通信技术有限公司"], ["T4", "ORG", 50, 60, "上海市科学技术委员会"], ["T5", "TITLE", 60, 71, "科学技术创新类评审专家"], ["T6", "ORG", 72, 78, "上海市人事局"], ["T7", "TITLE", 78, 89, "电子工程类职称评审专家"], ["T8", "ORG", 90, 100, "上海市科学技术委员会"], ["T9", "TITLE", 100, 109, "科技管理类评审专家"]]}, {"id": 132, "text": "2009年4月9日起任三维通信股份有限公司副总经理,兼任上海三维通信有限公司董事、广州逸信电子科技有限公司董事。", "labels": [["T0", "ORG", 11, 21, "三维通信股份有限公司"], ["T1", "TITLE", 21, 25, "副总经理"], ["T2", "ORG", 28, 38, "上海三维通信有限公司"], ["T3", "TITLE", 38, 40, "董事"], ["T4", "ORG", 41, 53, "广州逸信电子科技有限公司"], ["T5", "TITLE", 53, 55, "董事"]]}, {"id": 133, "text": "马忠礼先生,", "labels": [["T0", "NAME", 0, 3, "马忠礼"]]}, {"id": 134, "text": "1954年出生,本科学历。", "labels": [["T0", "EDU", 8, 12, "本科学历"]]}, {"id": 135, "text": "2004年起出任本公司独立非执行董事。", "labels": [["T0", "ORG", 8, 11, "本公司"], ["T1", "TITLE", 11, 18, "独立非执行董事"]]}, {"id": 136, "text": "马先生1978年毕业于伦敦大学生物化工专业,获学士学位。", "labels": [["T0", "NAME", 0, 1, "马"], ["T1", "ORG", 11, 15, "伦敦大学"], ["T2", "PRO", 15, 21, "生物化工专业"], ["T3", "EDU", 23, 27, "学士学位"]]}, {"id": 137, "text": "现任香港大庆石油有限公司总经理,并担任中华全国工商业联合会(第九届)执行委员、中国人民政治协商会议江苏省委员会(第九届)常务委员、香港中华总商会会董。", "labels": [["T0", "ORG", 2, 12, "香港大庆石油有限公司"], ["T1", "TITLE", 12, 15, "总经理"], ["T2", "ORG", 19, 29, "中华全国工商业联合会"], ["T3", "TITLE", 29, 38, "(第九届)执行委员"], ["T4", "ORG", 39, 55, "中国人民政治协商会议江苏省委员会"], ["T5", "TITLE", 55, 64, "(第九届)常务委员"], ["T6", "ORG", 65, 72, "香港中华总商会"], ["T7", "TITLE", 72, 74, "会董"]]}, {"id": 138, "text": "马先生长期从事企业经营管理工作,具有先进的企业管理理念和经验。", "labels": [["T0", "NAME", 0, 1, "马"]]}, {"id": 139, "text": "汪春华,男,硕士研究生,高级工程师、高级经济师。", "labels": [["T0", "NAME", 0, 3, "汪春华"], ["T1", "EDU", 6, 11, "硕士研究生"], ["T2", "TITLE", 12, 17, "高级工程师"], ["T3", "TITLE", 18, 23, "高级经济师"]]}, {"id": 140, "text": "1984年8月参加工作,曾任广东省公路勘察规划设计院公路规划室工程师和咨询办公室副主任、广东省交通集团投资经营部副主管、主管,", "labels": [["T0", "ORG", 14, 26, "广东省公路勘察规划设计院"], ["T1", "TITLE", 26, 34, "公路规划室工程师"], ["T2", "TITLE", 35, 43, "咨询办公室副主任"], ["T3", "ORG", 44, 51, "广东省交通集团"], ["T4", "TITLE", 51, 59, "投资经营部副主管"], ["T5", "TITLE", 57, 59, "主管"], ["T6", "TITLE", 60, 62, "主管"]]}, {"id": 141, "text": "2006年9月调至广东省高速公路发展股份有限公司任副总经理,", "labels": [["T0", "ORG", 9, 24, "广东省高速公路发展股份有限公司"], ["T1", "TITLE", 25, 29, "副总经理"]]}, {"id": 142, "text": "2013年3月起任广东省高速公路发展股份有限公司董事、副总经理。", "labels": [["T0", "ORG", 9, 24, "广东省高速公路发展股份有限公司"], ["T1", "TITLE", 24, 26, "董事"], ["T2", "TITLE", 27, 31, "副总经理"]]}, {"id": 143, "text": "现任广东省高速公路发展股份有限公司董事、总经理。", "labels": [["T0", "ORG", 2, 17, "广东省高速公路发展股份有限公司"], ["T1", "TITLE", 17, 19, "董事"], ["T2", "TITLE", 20, 23, "总经理"]]}, {"id": 144, "text": "胡立君:男,", "labels": [["T0", "NAME", 0, 3, "胡立君"]]}, {"id": 145, "text": "1961年生,武汉大学博士后,中南财经政法大学教授,博士生导师,MBA学院副院长。", "labels": [["T0", "ORG", 7, 11, "武汉大学"], ["T1", "TITLE", 11, 14, "博士后"], ["T2", "ORG", 15, 23, "中南财经政法大学"], ["T3", "TITLE", 23, 25, "教授"], ["T4", "TITLE", 26, 31, "博士生导师"], ["T5", "ORG", 32, 37, "MBA学院"], ["T6", "TITLE", 37, 40, "副院长"]]}, {"id": 146, "text": "现任中国社会经济系统工程委员会常务理事、中国工业经济协会个人会员、湖北省体育局咨询委员会特聘专家、Academy0fmanagement会员(美国管理学会)。", "labels": [["T0", "ORG", 2, 15, "中国社会经济系统工程委员会"], ["T1", "TITLE", 15, 19, "常务理事"], ["T2", "ORG", 20, 28, "中国工业经济协会"], ["T3", "TITLE", 28, 32, "个人会员"], ["T4", "TITLE", 30, 32, "会员"], ["T5", "ORG", 33, 44, "湖北省体育局咨询委员会"], ["T6", "TITLE", 44, 48, "特聘专家"], ["T7", "ORG", 49, 68, "Academy0fmanagement"], ["T8", "TITLE", 68, 70, "会员"], ["T9", "ORG", 71, 77, "美国管理学会"]]}, {"id": 147, "text": "湖北三环股份有限公司独立董事。", "labels": [["T0", "ORG", 0, 10, "湖北三环股份有限公司"], ["T1", "TITLE", 10, 14, "独立董事"]]}, {"id": 148, "text": "俞光耀:男,", "labels": [["T0", "NAME", 0, 3, "俞光耀"]]}, {"id": 149, "text": "1971年出生,大专学历,现任浙江万丰奥威汽轮股份有限公司监事、总经理办公室主任兼公司工会主席。", "labels": [["T0", "EDU", 8, 12, "大专学历"], ["T1", "ORG", 15, 29, "浙江万丰奥威汽轮股份有限公司"], ["T2", "ORG", 27, 29, "公司"], ["T3", "TITLE", 29, 31, "监事"], ["T4", "TITLE", 32, 40, "总经理办公室主任"], ["T5", "ORG", 41, 43, "公司"], ["T6", "TITLE", 43, 47, "工会主席"]]}, {"id": 150, "text": "曾任浙江万丰奥威汽轮股份有限公司总经理办公室副主任兼工会主席、党支部书记、万丰奥特控股集团有限公司党委办主任、浙江万丰奥威汽轮股份有限公司制造中心内务部经理、外协部经理、厂长等职务。", "labels": [["T0", "ORG", 2, 16, "浙江万丰奥威汽轮股份有限公司"], ["T1", "TITLE", 16, 25, "总经理办公室副主任"], ["T2", "TITLE", 26, 30, "工会主席"], ["T3", "TITLE", 31, 36, "党支部书记"], ["T4", "ORG", 37, 49, "万丰奥特控股集团有限公司"], ["T5", "TITLE", 49, 54, "党委办主任"], ["T6", "ORG", 55, 69, "浙江万丰奥威汽轮股份有限公司"], ["T7", "TITLE", 69, 78, "制造中心内务部经理"], ["T8", "TITLE", 79, 84, "外协部经理"], ["T9", "TITLE", 85, 87, "厂长"]]}, {"id": 151, "text": "所获荣誉,", "labels": []}, {"id": 152, "text": "2002年新昌县总工会优秀工会工作者;", "labels": []}, {"id": 153, "text": "2005年新昌县总工会优秀工会工作者;", "labels": []}, {"id": 154, "text": "2011年绍兴市工会积极工作者。", "labels": []}, {"id": 155, "text": "朱培禄,男,", "labels": [["T0", "NAME", 0, 3, "朱培禄"]]}, {"id": 156, "text": "1967年11月出生,本科学历,高级工程师、经济师。", "labels": [["T0", "EDU", 11, 15, "本科学历"], ["T1", "TITLE", 16, 21, "高级工程师"], ["T2", "TITLE", 22, 25, "经济师"]]}, {"id": 157, "text": "曾任福建省宁德市经贸委技术进步与装备科科长、福建省宁德市经贸委电力科科长、福建省宁德市经贸委能源科科长,现任福建闽东电力股份有限公司副总经理。", "labels": [["T0", "ORG", 2, 11, "福建省宁德市经贸委"], ["T1", "TITLE", 11, 21, "技术进步与装备科科长"], ["T2", "ORG", 22, 31, "福建省宁德市经贸委"], ["T3", "TITLE", 31, 36, "电力科科长"], ["T4", "ORG", 37, 46, "福建省宁德市经贸委"], ["T5", "TITLE", 46, 51, "能源科科长"], ["T6", "ORG", 54, 66, "福建闽东电力股份有限公司"], ["T7", "TITLE", 66, 70, "副总经理"]]}, {"id": 158, "text": "肖荣先生,中国国籍,", "labels": [["T0", "NAME", 0, 2, "肖荣"], ["T1", "CONT", 5, 9, "中国国籍"]]}, {"id": 159, "text": "1963年出生,本科学历,油气集输高级工程师;", "labels": [["T0", "EDU", 8, 12, "本科学历"], ["T1", "TITLE", 13, 22, "油气集输高级工程师"]]}, {"id": 160, "text": "1981年至1989年在河南油田设计院工作,", "labels": [["T0", "ORG", 12, 19, "河南油田设计院"]]}, {"id": 161, "text": "1989年至2001年1月在中国石化集团河南石油勘探局勘察设计研究院工作,先后担任工艺室主任、院副总工程师、院长助理等职;", "labels": [["T0", "ORG", 14, 34, "中国石化集团河南石油勘探局勘察设计研究院"], ["T1", "TITLE", 41, 46, "工艺室主任"], ["T2", "TITLE", 47, 53, "院副总工程师"], ["T3", "TITLE", 54, 58, "院长助理"]]}, {"id": 162, "text": "2001年7月起历任惠博普有限董事、副总经理;", "labels": [["T0", "ORG", 10, 15, "惠博普有限"], ["T1", "TITLE", 15, 17, "董事"], ["T2", "TITLE", 18, 22, "副总经理"]]}, {"id": 163, "text": "自2009年9月华油惠博普科技股份有限公司成立至今,担任华油惠博普科技股份有限公司董事、副总经理。", "labels": [["T0", "ORG", 8, 21, "华油惠博普科技股份有限公司"], ["T1", "ORG", 28, 41, "华油惠博普科技股份有限公司"], ["T2", "TITLE", 41, 43, "董事"], ["T3", "TITLE", 44, 48, "副总经理"]]}, {"id": 164, "text": "贾一览出生年月:1973年11月性别:女政治面貌:中共党员学历:大学主要工作经历:1995年毕业于上海对外贸易学院,获经济学学士学位。", "labels": [["T0", "NAME", 0, 3, "贾一览"], ["T1", "TITLE", 25, 29, "中共党员"], ["T2", "EDU", 32, 34, "大学"], ["T3", "ORG", 49, 57, "上海对外贸易学院"], ["T4", "PRO", 59, 62, "经济学"], ["T5", "EDU", 62, 66, "学士学位"]]}, {"id": 165, "text": "1995年-至今浙江东方集团嘉业进出口有限公司外销员、副经理,浙江东方集团股份公司三届监事会监事。", "labels": [["T0", "ORG", 8, 23, "浙江东方集团嘉业进出口有限公司"], ["T1", "TITLE", 23, 26, "外销员"], ["T2", "TITLE", 27, 30, "副经理"], ["T3", "ORG", 31, 41, "浙江东方集团股份公司"], ["T4", "TITLE", 41, 48, "三届监事会监事"]]}, {"id": 166, "text": "赵智文,男,汉族,国际金融博士,中共党员,", "labels": [["T0", "NAME", 0, 3, "赵智文"], ["T1", "RACE", 6, 8, "汉族"], ["T2", "ORG", 9, 13, "国际金融"], ["T3", "EDU", 13, 15, "博士"], ["T4", "TITLE", 16, 20, "中共党员"]]}, {"id": 167, "text": "1989年至2000年任南开大学金融系教师,", "labels": [["T0", "ORG", 12, 19, "南开大学金融系"], ["T1", "TITLE", 19, 21, "教师"]]}, {"id": 168, "text": "2000年至2005年任渤海证券公司研究所副所长,", "labels": [["T0", "ORG", 12, 21, "渤海证券公司研究所"], ["T1", "TITLE", 21, 24, "副所长"]]}, {"id": 169, "text": "2005年至今任南开大学滨海学院金融学系系主任。", "labels": [["T0", "ORG", 8, 20, "南开大学滨海学院金融学系"], ["T1", "TITLE", 20, 23, "系主任"]]}, {"id": 170, "text": "荣森林先生,男,大专学历,助理工程师,", "labels": [["T0", "NAME", 0, 3, "荣森林"], ["T1", "EDU", 8, 12, "大专学历"], ["T2", "TITLE", 13, 18, "助理工程师"]]}, {"id": 171, "text": "1995年10月进入本公司工作,历任技术员,公司办公室副主任、主任,", "labels": [["T0", "ORG", 10, 13, "本公司"], ["T1", "ORG", 11, 13, "公司"], ["T2", "TITLE", 18, 21, "技术员"], ["T3", "ORG", 22, 24, "公司"], ["T4", "TITLE", 24, 30, "办公室副主任"], ["T5", "TITLE", 28, 30, "主任"], ["T6", "TITLE", 31, 33, "主任"]]}, {"id": 172, "text": "1999年7月起任公司监事。", "labels": [["T0", "ORG", 9, 11, "公司"], ["T1", "TITLE", 11, 13, "监事"]]}, {"id": 173, "text": "陈艳,女,", "labels": [["T0", "NAME", 0, 2, "陈艳"]]}, {"id": 174, "text": "1973年出生,中国国籍,无境外永久居留权,大学本科学历,EMBA在读。", "labels": [["T0", "CONT", 8, 12, "中国国籍"], ["T1", "EDU", 22, 28, "大学本科学历"], ["T2", "EDU", 29, 33, "EMBA"]]}, {"id": 175, "text": "现任上海嘉麟杰纺织品股份有限公司董事、副总经理,嘉麟杰运动用品董事、SCTJap董事、SNEuro董事、CAPAK董事、普澜特复合面料董事;", "labels": [["T0", "ORG", 2, 16, "上海嘉麟杰纺织品股份有限公司"], ["T1", "TITLE", 16, 18, "董事"], ["T2", "TITLE", 19, 23, "副总经理"], ["T3", "ORG", 24, 31, "嘉麟杰运动用品"], ["T4", "TITLE", 31, 33, "董事"], ["T5", "ORG", 34, 40, "SCTJap"], ["T6", "TITLE", 40, 42, "董事"], ["T7", "ORG", 43, 49, "SNEuro"], ["T8", "TITLE", 49, 51, "董事"], ["T9", "ORG", 52, 57, "CAPAK"], ["T10", "TITLE", 57, 59, "董事"], ["T11", "ORG", 60, 67, "普澜特复合面料"], ["T12", "TITLE", 67, 69, "董事"]]}, {"id": 176, "text": "曾任上海申时广告传播有限公司总经理助理、上海嘉乐股份有限公司销售部部长。", "labels": [["T0", "ORG", 2, 14, "上海申时广告传播有限公司"], ["T1", "TITLE", 14, 19, "总经理助理"], ["T2", "ORG", 20, 30, "上海嘉乐股份有限公司"], ["T3", "TITLE", 30, 35, "销售部部长"]]}, {"id": 177, "text": "肖壮勇,男,汉族,", "labels": [["T0", "NAME", 0, 3, "肖壮勇"], ["T1", "RACE", 6, 8, "汉族"]]}, {"id": 178, "text": "1967年3月出生,", "labels": []}, {"id": 179, "text": "1987年7月毕业于洛阳工学院,本科,高级工程师。", "labels": [["T0", "ORG", 10, 15, "洛阳工学院"], ["T1", "EDU", 16, 18, "本科"], ["T2", "TITLE", 19, 24, "高级工程师"]]}, {"id": 180, "text": "1987年7月参加工作,历任襄阳汽车轴承股份有限公司产品室主任,技术中心副主任,技术中心主任。", "labels": [["T0", "ORG", 14, 26, "襄阳汽车轴承股份有限公司"], ["T1", "TITLE", 26, 31, "产品室主任"], ["T2", "TITLE", 32, 39, "技术中心副主任"], ["T3", "TITLE", 40, 46, "技术中心主任"]]}, {"id": 181, "text": "现任技术中心副主任。", "labels": [["T0", "TITLE", 2, 9, "技术中心副主任"]]}, {"id": 182, "text": "张耀明先生:中国国籍,", "labels": [["T0", "NAME", 0, 3, "张耀明"], ["T1", "CONT", 6, 10, "中国国籍"]]}, {"id": 183, "text": "1943年出生,本科,中国工程院院士,教授级高级工程师,博士生导师,享受国务院政府特殊津贴。", "labels": [["T0", "EDU", 8, 10, "本科"], ["T1", "TITLE", 11, 18, "中国工程院院士"], ["T2", "TITLE", 19, 27, "教授级高级工程师"], ["T3", "TITLE", 28, 33, "博士生导师"]]}, {"id": 184, "text": "曾任南京玻璃纤维研究设计院院长,南京彤天科技实业有限公司董事长,中材科技股份有限公司总裁。", "labels": [["T0", "ORG", 2, 13, "南京玻璃纤维研究设计院"], ["T1", "TITLE", 13, 15, "院长"], ["T2", "ORG", 16, 28, "南京彤天科技实业有限公司"], ["T3", "TITLE", 28, 31, "董事长"], ["T4", "ORG", 32, 42, "中材科技股份有限公司"], ["T5", "TITLE", 42, 44, "总裁"]]}, {"id": 185, "text": "现任中材科技股份有限公司首席技术专家,江苏省政协常委,南京市政协常委。", "labels": [["T0", "ORG", 2, 12, "中材科技股份有限公司"], ["T1", "TITLE", 12, 18, "首席技术专家"], ["T2", "ORG", 19, 24, "江苏省政协"], ["T3", "TITLE", 24, 26, "常委"], ["T4", "ORG", 27, 32, "南京市政协"], ["T5", "TITLE", 32, 34, "常委"]]}, {"id": 186, "text": "兼任南京市科协主席,南京春辉科技实业有限公司董事长,中国硅酸盐学会副理事长,中国玻璃纤维协会会长等职。", "labels": [["T0", "ORG", 2, 7, "南京市科协"], ["T1", "TITLE", 7, 9, "主席"], ["T2", "ORG", 10, 22, "南京春辉科技实业有限公司"], ["T3", "TITLE", 22, 25, "董事长"], ["T4", "ORG", 26, 33, "中国硅酸盐学会"], ["T5", "TITLE", 33, 37, "副理事长"], ["T6", "ORG", 38, 46, "中国玻璃纤维协会"], ["T7", "TITLE", 46, 48, "会长"]]}, {"id": 187, "text": "曾获国家科技发明二等奖1项、国家科技进步二等奖3项、三等奖2项,杜邦科技奖1项。", "labels": []}, {"id": 188, "text": "王荣海先生,中国国籍,未拥有永久境外居留权,", "labels": [["T0", "NAME", 0, 3, "王荣海"], ["T1", "CONT", 6, 10, "中国国籍"]]}, {"id": 189, "text": "1964年5月出生,硕士,研究员。", "labels": [["T0", "EDU", 10, 12, "硕士"], ["T1", "TITLE", 13, 16, "研究员"]]}, {"id": 190, "text": "曾获安徽省青年科技奖、安徽省科学技术进步一等奖2次、安徽省科学技术进步二等奖1次。", "labels": []}, {"id": 191, "text": "现任安徽安科生物工程(集团)股份有限公司董事、技术总监。", "labels": [["T0", "TITLE", 20, 22, "董事"], ["T1", "TITLE", 23, 27, "技术总监"]]}, {"id": 192, "text": "其担任安徽安科生物工程(集团)股份有限公司董事的任期为2013年11月5日至2016年11月4日。", "labels": [["T0", "TITLE", 21, 23, "董事"]]}, {"id": 193, "text": "徐壮城,男,", "labels": [["T0", "NAME", 0, 3, "徐壮城"]]}, {"id": 194, "text": "1972年出生,法律硕士。", "labels": [["T0", "PRO", 8, 10, "法律"], ["T1", "EDU", 10, 12, "硕士"]]}, {"id": 195, "text": "任深圳市卡金亚珠宝有限公司董事长;", "labels": [["T0", "ORG", 1, 13, "深圳市卡金亚珠宝有限公司"], ["T1", "TITLE", 13, 16, "董事长"]]}, {"id": 196, "text": "深圳仲裁委员会仲裁员;", "labels": [["T0", "ORG", 0, 7, "深圳仲裁委员会"], ["T1", "TITLE", 7, 10, "仲裁员"]]}, {"id": 197, "text": "深圳市深宝实业股份有限公司独立董事;", "labels": [["T0", "ORG", 0, 13, "深圳市深宝实业股份有限公司"], ["T1", "TITLE", 13, 17, "独立董事"]]}, {"id": 198, "text": "2013年6月至2014年5月任杭州天目山药业股份有限公司独立董事。", "labels": [["T0", "ORG", 16, 29, "杭州天目山药业股份有限公司"], ["T1", "TITLE", 29, 33, "独立董事"]]}, {"id": 199, "text": "陈昆先生:1947年生,大学学历,教授级高级工程师。", "labels": [["T0", "NAME", 0, 2, "陈昆"], ["T1", "EDU", 12, 16, "大学学历"], ["T2", "TITLE", 17, 25, "教授级高级工程师"]]}, {"id": 200, "text": "现任上海电缆研究所高级顾问,露笑科技股份有限公司独立董事,浙江上风实业股份有限公司独立董事、中利科技集团股份有限公司董事。", "labels": [["T0", "ORG", 2, 9, "上海电缆研究所"], ["T1", "TITLE", 9, 13, "高级顾问"], ["T2", "ORG", 14, 24, "露笑科技股份有限公司"], ["T3", "TITLE", 24, 28, "独立董事"], ["T4", "TITLE", 26, 28, "董事"], ["T5", "ORG", 29, 41, "浙江上风实业股份有限公司"], ["T6", "TITLE", 41, 45, "独立董事"], ["T7", "TITLE", 43, 45, "董事"], ["T8", "ORG", 46, 58, "中利科技集团股份有限公司"], ["T9", "TITLE", 58, 60, "董事"]]}, {"id": 201, "text": "2015年2月10日换届离任。", "labels": []}, {"id": 202, "text": "吴慕涛先生:1945年10月出生,大专学历,会计师。", "labels": [["T0", "NAME", 0, 3, "吴慕涛"], ["T1", "EDU", 17, 21, "大专学历"], ["T2", "TITLE", 22, 25, "会计师"]]}, {"id": 203, "text": "任本公司第一、二、三届、四届董事会董事,", "labels": [["T0", "ORG", 1, 4, "本公司"], ["T1", "TITLE", 4, 19, "第一、二、三届、四届董事会董事"]]}, {"id": 204, "text": "2000年至今任公司总会计师。", "labels": [["T0", "ORG", 8, 10, "公司"], ["T1", "TITLE", 10, 14, "总会计师"]]}, {"id": 205, "text": "曾任公司财务部经理、副总经理、财务总监等职。", "labels": [["T0", "ORG", 2, 4, "公司"], ["T1", "TITLE", 4, 9, "财务部经理"], ["T2", "TITLE", 10, 14, "副总经理"], ["T3", "TITLE", 15, 19, "财务总监"]]}, {"id": 206, "text": "曾获全国优秀会计称号。", "labels": []}, {"id": 207, "text": "王阿明先生,", "labels": [["T0", "NAME", 0, 3, "王阿明"]]}, {"id": 208, "text": "1979年2月出生,中国国籍,未有任何国家和地区的永久海外居留权。", "labels": [["T0", "CONT", 10, 14, "中国国籍"]]}, {"id": 209, "text": "2001年7月毕业于西南农业大学畜牧兽医专业,本科学历。", "labels": [["T0", "ORG", 10, 16, "西南农业大学"], ["T1", "PRO", 16, 22, "畜牧兽医专业"], ["T2", "EDU", 23, 27, "本科学历"]]}, {"id": 210, "text": "2004年8月至2008年6月历任广东大华农动物保健品有限公司营销部副主任、副经理。", "labels": [["T0", "ORG", 17, 31, "广东大华农动物保健品有限公司"], ["T1", "TITLE", 31, 37, "营销部副主任"], ["T2", "TITLE", 38, 41, "副经理"]]}, {"id": 211, "text": "2008年7月至今历任广东大华农动物保健品股份有限公司副总经理、副总裁。", "labels": [["T0", "ORG", 11, 27, "广东大华农动物保健品股份有限公司"], ["T1", "TITLE", 27, 31, "副总经理"], ["T2", "TITLE", 32, 35, "副总裁"]]}, {"id": 212, "text": "秦庆华先生:1965年8月出生,中国国籍,法学硕士。", "labels": [["T0", "NAME", 0, 3, "秦庆华"], ["T1", "CONT", 16, 20, "中国国籍"], ["T2", "PRO", 21, 23, "法学"], ["T3", "EDU", 23, 25, "硕士"]]}, {"id": 213, "text": "1986年参加工作,先后任北京市公安局刑侦处干警、二级警司。", "labels": [["T0", "ORG", 13, 19, "北京市公安局"], ["T1", "TITLE", 19, 24, "刑侦处干警"], ["T2", "TITLE", 25, 29, "二级警司"]]}, {"id": 214, "text": "1994年至1997年任北京市海问律师事务所律师。", "labels": [["T0", "ORG", 12, 22, "北京市海问律师事务所"], ["T1", "TITLE", 17, 19, "律师"], ["T2", "TITLE", 22, 24, "律师"]]}, {"id": 215, "text": "1997-2001为北京市星河律师事务所合伙人。", "labels": [["T0", "ORG", 10, 20, "北京市星河律师事务所"], ["T1", "TITLE", 20, 23, "合伙人"]]}, {"id": 216, "text": "2001-2004年为北京市鑫兴律师事务所合伙人。", "labels": [["T0", "ORG", 11, 21, "北京市鑫兴律师事务所"], ["T1", "TITLE", 21, 24, "合伙人"]]}, {"id": 217, "text": "2004-2012年为北京市凯文律师事务所合伙人。", "labels": [["T0", "ORG", 11, 21, "北京市凯文律师事务所"], ["T1", "TITLE", 21, 24, "合伙人"]]}, {"id": 218, "text": "2012年-2014年北京国枫凯文律师事务所合伙人,", "labels": [["T0", "ORG", 11, 22, "北京国枫凯文律师事务所"], ["T1", "TITLE", 22, 25, "合伙人"]]}, {"id": 219, "text": "2014年-2015年为北京市首信律师事务所律师。", "labels": [["T0", "ORG", 12, 22, "北京市首信律师事务所"], ["T1", "TITLE", 17, 19, "律师"], ["T2", "TITLE", 22, 24, "律师"]]}, {"id": 220, "text": "现任江苏蓝丰生物化工股份有限公司独立董事。", "labels": [["T0", "ORG", 2, 16, "江苏蓝丰生物化工股份有限公司"], ["T1", "TITLE", 16, 20, "独立董事"]]}, {"id": 221, "text": "陆建峰,男,", "labels": [["T0", "NAME", 0, 3, "陆建峰"]]}, {"id": 222, "text": "1967年8月出生,中共党员,医学学士。", "labels": [["T0", "TITLE", 10, 14, "中共党员"], ["T1", "PRO", 15, 17, "医学"], ["T2", "EDU", 17, 19, "学士"]]}, {"id": 223, "text": "1985年9月至1991年7月在第二军医大学医疗系学习。", "labels": [["T0", "ORG", 16, 25, "第二军医大学医疗系"]]}, {"id": 224, "text": "现在国投创业投资有限公司任职。", "labels": [["T0", "ORG", 2, 12, "国投创业投资有限公司"]]}, {"id": 225, "text": "曾先后在北京军区51029部队、北京军区260医院、北京军区总医院、国投药业投资有限公司工作。", "labels": [["T0", "ORG", 4, 15, "北京军区51029部队"], ["T1", "ORG", 16, 25, "北京军区260医院"], ["T2", "ORG", 26, 33, "北京军区总医院"], ["T3", "ORG", 34, 44, "国投药业投资有限公司"]]}, {"id": 226, "text": "刘斌,男,历任山东明允律师事务所、金杜律师事务所、北京市金杜律师事务所律师。", "labels": [["T0", "NAME", 0, 2, "刘斌"], ["T1", "ORG", 7, 16, "山东明允律师事务所"], ["T2", "TITLE", 11, 13, "律师"], ["T3", "ORG", 17, 24, "金杜律师事务所"], ["T4", "TITLE", 19, 21, "律师"], ["T5", "ORG", 25, 35, "北京市金杜律师事务所"], ["T6", "ORG", 28, 35, "金杜律师事务所"], ["T7", "TITLE", 30, 32, "律师"], ["T8", "TITLE", 35, 37, "律师"]]}, {"id": 227, "text": "现任金杜律师事务所四川分所律师、合伙人。", "labels": [["T0", "ORG", 2, 13, "金杜律师事务所四川分所"], ["T1", "TITLE", 4, 6, "律师"], ["T2", "TITLE", 13, 15, "律师"], ["T3", "TITLE", 16, 19, "合伙人"]]}, {"id": 228, "text": "刘军凯:男,", "labels": [["T0", "NAME", 0, 3, "刘军凯"]]}, {"id": 229, "text": "1956年4月生,大专学历,", "labels": [["T0", "EDU", 9, 13, "大专学历"]]}, {"id": 230, "text": "2010年3月至2013年11月任黄山市天目药业有限公司董事长。", "labels": [["T0", "ORG", 17, 28, "黄山市天目药业有限公司"], ["T1", "TITLE", 28, 31, "董事长"]]}, {"id": 231, "text": "2010年1月至2014年4月任杭州天目山药业股份有限公司副总经理。", "labels": [["T0", "ORG", 16, 29, "杭州天目山药业股份有限公司"], ["T1", "TITLE", 29, 33, "副总经理"]]}, {"id": 232, "text": "卢林先生,国民技术股份有限公司财务负责人。", "labels": [["T0", "NAME", 0, 2, "卢林"], ["T1", "ORG", 5, 15, "国民技术股份有限公司"], ["T2", "TITLE", 15, 20, "财务负责人"]]}, {"id": 233, "text": "中国国籍,无境外永久居留权。", "labels": [["T0", "CONT", 0, 4, "中国国籍"]]}, {"id": 234, "text": "1968年出生,本科学历,曾任深圳市中兴维先通设备有限公司任财务主管,中兴通讯财务管理中心成本会计师、二级业务经理,无锡市中兴光电子技术有限公司财务负责人。", "labels": [["T0", "EDU", 8, 12, "本科学历"], ["T1", "ORG", 15, 29, "深圳市中兴维先通设备有限公司"], ["T2", "TITLE", 30, 34, "财务主管"], ["T3", "ORG", 35, 39, "中兴通讯"], ["T4", "TITLE", 39, 50, "财务管理中心成本会计师"], ["T5", "TITLE", 51, 57, "二级业务经理"], ["T6", "ORG", 58, 72, "无锡市中兴光电子技术有限公司"], ["T7", "TITLE", 72, 77, "财务负责人"]]}, {"id": 235, "text": "2005年4月至今在国民技术股份有限公司工作。", "labels": [["T0", "ORG", 10, 20, "国民技术股份有限公司"]]}, {"id": 236, "text": "张原先生:1969年7月出生,中国国籍,无永久境外居留权,工商管理硕士。", "labels": [["T0", "NAME", 0, 2, "张原"], ["T1", "CONT", 15, 19, "中国国籍"], ["T2", "PRO", 29, 33, "工商管理"], ["T3", "EDU", 33, 35, "硕士"]]}, {"id": 237, "text": "2007年6月-2013年12月担任新纶科技副董事长、常务副总裁;", "labels": [["T0", "ORG", 18, 22, "新纶科技"], ["T1", "TITLE", 22, 26, "副董事长"], ["T2", "TITLE", 27, 32, "常务副总裁"]]}, {"id": 238, "text": "2013年12月至2015年4月任新纶科技副董事长、总裁;", "labels": [["T0", "ORG", 17, 21, "新纶科技"], ["T1", "TITLE", 21, 25, "副董事长"], ["T2", "TITLE", 26, 28, "总裁"]]}, {"id": 239, "text": "兼任东莞首道超净技术有限公司董事;", "labels": [["T0", "ORG", 2, 14, "东莞首道超净技术有限公司"], ["T1", "TITLE", 14, 16, "董事"]]}, {"id": 240, "text": "新纶科技(香港)有限公司执行董事;", "labels": [["T0", "ORG", 0, 12, "新纶科技(香港)有限公司"], ["T1", "TITLE", 12, 16, "执行董事"]]}, {"id": 241, "text": "大连洁净易超净技术有限公司执行董事;", "labels": [["T0", "ORG", 0, 13, "大连洁净易超净技术有限公司"], ["T1", "TITLE", 13, 17, "执行董事"]]}, {"id": 242, "text": "北京洁净易超净技术有限公司执行董事;", "labels": [["T0", "ORG", 0, 13, "北京洁净易超净技术有限公司"], ["T1", "TITLE", 13, 17, "执行董事"]]}, {"id": 243, "text": "合肥洁易超净技术有限公司执行董事;", "labels": [["T0", "ORG", 0, 12, "合肥洁易超净技术有限公司"], ["T1", "TITLE", 12, 16, "执行董事"]]}, {"id": 244, "text": "西安洁净易超净技术有限公司执行董事;", "labels": [["T0", "ORG", 0, 13, "西安洁净易超净技术有限公司"], ["T1", "TITLE", 13, 17, "执行董事"]]}, {"id": 245, "text": "成都洁净易超净技术有限公司执行董事;", "labels": [["T0", "ORG", 0, 13, "成都洁净易超净技术有限公司"], ["T1", "TITLE", 13, 17, "执行董事"]]}, {"id": 246, "text": "厦门洁净易超净技术有限公司执行董事;", "labels": [["T0", "ORG", 0, 13, "厦门洁净易超净技术有限公司"], ["T1", "TITLE", 13, 17, "执行董事"]]}, {"id": 247, "text": "深圳市金麒麟环境科技有限公司执行董事;", "labels": [["T0", "ORG", 0, 14, "深圳市金麒麟环境科技有限公司"], ["T1", "TITLE", 14, 18, "执行董事"]]}, {"id": 248, "text": "深圳市新纶先进材料科学研究院有限公司董事;", "labels": [["T0", "ORG", 0, 18, "深圳市新纶先进材料科学研究院有限公司"], ["T1", "TITLE", 18, 20, "董事"]]}, {"id": 249, "text": "长江新纶新材料科技有限公司董事;", "labels": [["T0", "ORG", 0, 13, "长江新纶新材料科技有限公司"], ["T1", "TITLE", 13, 15, "董事"]]}, {"id": 250, "text": "深圳红尊投资控股有限公司监事;", "labels": [["T0", "ORG", 0, 12, "深圳红尊投资控股有限公司"], ["T1", "TITLE", 12, 14, "监事"]]}, {"id": 251, "text": "新纶科技(日本)有限公司董事。", "labels": [["T0", "ORG", 0, 12, "新纶科技(日本)有限公司"], ["T1", "TITLE", 12, 14, "董事"]]}, {"id": 252, "text": "刘平春,男,", "labels": [["T0", "NAME", 0, 3, "刘平春"]]}, {"id": 253, "text": "1955年2月出生,本科学历,高级政工师。", "labels": [["T0", "EDU", 10, 14, "本科学历"], ["T1", "TITLE", 15, 20, "高级政工师"]]}, {"id": 254, "text": "曾任华侨城经济发展总公司总经理助理兼策划部总经理,深圳华侨城股份有限公司董事兼总裁、党委书记、董事长,华侨城集团副总裁,深圳欢乐谷董事长,北京华侨城副董事长、总经理(兼),上海华侨城董事长,锦绣中华董事长,深圳世界之窗副董事长,华侨城酒店集团董事长、党委书记,云南华侨城董事长。", "labels": [["T0", "ORG", 2, 12, "华侨城经济发展总公司"], ["T1", "TITLE", 12, 15, "总经理"], ["T2", "TITLE", 12, 17, "总经理助理"], ["T3", "TITLE", 18, 24, "策划部总经理"], ["T4", "TITLE", 21, 24, "总经理"], ["T5", "ORG", 25, 36, "深圳华侨城股份有限公司"], ["T6", "TITLE", 36, 38, "董事"], ["T7", "TITLE", 39, 41, "总裁"], ["T8", "TITLE", 42, 46, "党委书记"], ["T9", "TITLE", 47, 49, "董事"], ["T10", "TITLE", 47, 50, "董事长"], ["T11", "ORG", 51, 56, "华侨城集团"], ["T12", "TITLE", 56, 59, "副总裁"], ["T13", "TITLE", 57, 59, "总裁"], ["T14", "ORG", 60, 65, "深圳欢乐谷"], ["T15", "TITLE", 65, 67, "董事"], ["T16", "TITLE", 65, 68, "董事长"], ["T17", "ORG", 69, 74, "北京华侨城"], ["T18", "TITLE", 74, 78, "副董事长"], ["T19", "TITLE", 75, 77, "董事"], ["T20", "TITLE", 75, 78, "董事长"], ["T21", "TITLE", 79, 82, "总经理"], ["T22", "ORG", 86, 91, "上海华侨城"], ["T23", "TITLE", 91, 93, "董事"], ["T24", "TITLE", 91, 94, "董事长"], ["T25", "ORG", 95, 99, "锦绣中华"], ["T26", "TITLE", 99, 101, "董事"], ["T27", "TITLE", 99, 102, "董事长"], ["T28", "ORG", 103, 109, "深圳世界之窗"], ["T29", "TITLE", 109, 113, "副董事长"], ["T30", "TITLE", 110, 112, "董事"], ["T31", "TITLE", 110, 113, "董事长"], ["T32", "ORG", 114, 121, "华侨城酒店集团"], ["T33", "TITLE", 121, 123, "董事"], ["T34", "TITLE", 121, 124, "董事长"], ["T35", "TITLE", 125, 129, "党委书记"], ["T36", "ORG", 130, 135, "云南华侨城"], ["T37", "TITLE", 135, 137, "董事"], ["T38", "TITLE", 135, 138, "董事长"]]}, {"id": 255, "text": "现任华侨城集团党委常委,公司董事长。", "labels": [["T0", "ORG", 2, 7, "华侨城集团"], ["T1", "TITLE", 7, 11, "党委常委"], ["T2", "ORG", 12, 14, "公司"], ["T3", "TITLE", 14, 17, "董事长"]]}, {"id": 256, "text": "同时兼任中国旅游协会副会长、中国旅游景区协会会长、中国上市公司协会副会长、深圳上市公司协会副会长、深圳市质量强市促进会副会长、暨南大学深圳旅游学院院长。", "labels": [["T0", "ORG", 4, 10, "中国旅游协会"], ["T1", "TITLE", 10, 13, "副会长"], ["T2", "TITLE", 11, 13, "会长"], ["T3", "ORG", 14, 22, "中国旅游景区协会"], ["T4", "TITLE", 22, 24, "会长"], ["T5", "ORG", 25, 33, "中国上市公司协会"], ["T6", "TITLE", 33, 36, "副会长"], ["T7", "TITLE", 34, 36, "会长"], ["T8", "ORG", 37, 45, "深圳上市公司协会"], ["T9", "TITLE", 45, 48, "副会长"], ["T10", "TITLE", 46, 48, "会长"], ["T11", "ORG", 49, 59, "深圳市质量强市促进会"], ["T12", "TITLE", 59, 62, "副会长"], ["T13", "TITLE", 60, 62, "会长"], ["T14", "ORG", 63, 73, "暨南大学深圳旅游学院"], ["T15", "TITLE", 73, 75, "院长"]]}, {"id": 257, "text": "杨永圣,男,汉族,", "labels": [["T0", "NAME", 0, 3, "杨永圣"], ["T1", "RACE", 6, 8, "汉族"]]}, {"id": 258, "text": "1964年9月出生,湖南汉寿人,大学本科毕业,会计师,", "labels": [["T0", "LOC", 10, 15, "湖南汉寿人"], ["T1", "EDU", 16, 20, "大学本科"], ["T2", "TITLE", 23, 26, "会计师"]]}, {"id": 259, "text": "2008年12月至2010年12月,任湖南省直属粮食企业生产经营指导办公室党委书记、副主任;", "labels": [["T0", "ORG", 19, 37, "湖南省直属粮食企业生产经营指导办公室"], ["T1", "TITLE", 37, 41, "党委书记"], ["T2", "TITLE", 42, 45, "副主任"]]}, {"id": 260, "text": "2010年12月至今,任湖南粮食集团有限责任公司董事、副董事长、总裁。", "labels": [["T0", "ORG", 12, 24, "湖南粮食集团有限责任公司"], ["T1", "TITLE", 24, 26, "董事"], ["T2", "TITLE", 27, 31, "副董事长"], ["T3", "TITLE", 28, 30, "董事"], ["T4", "TITLE", 32, 34, "总裁"]]}, {"id": 261, "text": "2013年3月至今,任金健米业股份有限公司董事。", "labels": [["T0", "ORG", 11, 21, "金健米业股份有限公司"], ["T1", "TITLE", 21, 23, "董事"]]}, {"id": 262, "text": "袁会琼(监事会主席):女,", "labels": [["T0", "NAME", 0, 3, "袁会琼"], ["T1", "TITLE", 4, 9, "监事会主席"]]}, {"id": 263, "text": "1980年5月出生,中国国籍,无永久境外居留权。", "labels": [["T0", "CONT", 10, 14, "中国国籍"]]}, {"id": 264, "text": "学士学位。", "labels": [["T0", "EDU", 0, 4, "学士学位"]]}, {"id": 265, "text": "2004年03月至2006年2月,任职于翔宇鞋业有限公司;", "labels": [["T0", "ORG", 20, 28, "翔宇鞋业有限公司"]]}, {"id": 266, "text": "2006年02月至2006年5月,任职于南通特伟箱包有限公司;", "labels": [["T0", "ORG", 20, 30, "南通特伟箱包有限公司"]]}, {"id": 267, "text": "2006年7月至2009年4月,任欣旺达总经理秘书;", "labels": [["T0", "ORG", 17, 20, "欣旺达"], ["T1", "TITLE", 20, 25, "总经理秘书"]]}, {"id": 268, "text": "2009年4月至2011年3月,任欣旺达采购部经理;", "labels": [["T0", "ORG", 17, 20, "欣旺达"], ["T1", "TITLE", 20, 25, "采购部经理"]]}, {"id": 269, "text": "2011年3月至2011年10月,任欣旺达审计部经理;", "labels": [["T0", "ORG", 18, 21, "欣旺达"], ["T1", "TITLE", 21, 26, "审计部经理"]]}, {"id": 270, "text": "2011年11月至今,任欣旺达秘书处经理。", "labels": [["T0", "ORG", 12, 15, "欣旺达"], ["T1", "TITLE", 15, 20, "秘书处经理"]]}, {"id": 271, "text": "现任欣旺达监事。", "labels": [["T0", "ORG", 2, 5, "欣旺达"], ["T1", "TITLE", 5, 7, "监事"]]}, {"id": 272, "text": "夏茂先生,曾任安凯汽车股份有限公司工程师、安徽省化工设计院工程师、兰德电器科技公司董事、浦发机电制造公司执行董事、合肥科创投资管理公司总经理,合肥市高科技风险投资公司副总经理、总经理,现任湖北广济药业股份有限公司董事。", "labels": [["T0", "NAME", 0, 2, "夏茂"], ["T1", "ORG", 7, 17, "安凯汽车股份有限公司"], ["T2", "TITLE", 17, 20, "工程师"], ["T3", "ORG", 21, 29, "安徽省化工设计院"], ["T4", "TITLE", 29, 32, "工程师"], ["T5", "ORG", 33, 41, "兰德电器科技公司"], ["T6", "TITLE", 41, 43, "董事"], ["T7", "ORG", 44, 52, "浦发机电制造公司"], ["T8", "TITLE", 52, 56, "执行董事"], ["T9", "TITLE", 54, 56, "董事"], ["T10", "ORG", 57, 67, "合肥科创投资管理公司"], ["T11", "TITLE", 67, 70, "总经理"], ["T12", "ORG", 71, 83, "合肥市高科技风险投资公司"], ["T13", "TITLE", 83, 87, "副总经理"], ["T14", "TITLE", 84, 87, "总经理"], ["T15", "TITLE", 88, 91, "总经理"], ["T16", "ORG", 94, 106, "湖北广济药业股份有限公司"], ["T17", "TITLE", 106, 108, "董事"]]}, {"id": 273, "text": "孟建立先生,", "labels": [["T0", "NAME", 0, 3, "孟建立"]]}, {"id": 274, "text": "1985年6月出生,中国国籍。", "labels": [["T0", "CONT", 10, 14, "中国国籍"]]}, {"id": 275, "text": "2011年毕业于海南大学法学院,硕士学历。", "labels": [["T0", "ORG", 8, 15, "海南大学法学院"], ["T1", "EDU", 16, 20, "硕士学历"]]}, {"id": 276, "text": "2011年6月至今任深圳市聚飞光电股份有限公司法务专员,", "labels": [["T0", "ORG", 10, 23, "深圳市聚飞光电股份有限公司"], ["T1", "TITLE", 23, 27, "法务专员"]]}, {"id": 277, "text": "2013年4月至今任深圳市聚飞光电股份有限公司职工监事。", "labels": [["T0", "ORG", 10, 23, "深圳市聚飞光电股份有限公司"], ["T1", "TITLE", 23, 27, "职工监事"]]}, {"id": 278, "text": "林义相先生:男,", "labels": [["T0", "NAME", 0, 3, "林义相"]]}, {"id": 279, "text": "1964年1月出生,经济学博士。", "labels": [["T0", "PRO", 10, 13, "经济学"], ["T1", "EDU", 13, 15, "博士"]]}, {"id": 280, "text": "2000起任中国证券业协会副会长;", "labels": [["T0", "ORG", 6, 13, "中国证券业协会"], ["T1", "TITLE", 13, 16, "副会长"]]}, {"id": 281, "text": "2001.3月-今,天相投资顾问有限公司董事长兼总经理;", "labels": [["T0", "ORG", 10, 20, "天相投资顾问有限公司"], ["T1", "TITLE", 20, 23, "董事长"], ["T2", "TITLE", 24, 27, "总经理"]]}, {"id": 282, "text": "2013.6月-今,注册国际投资分析师协会(ACIIA)主席;", "labels": [["T0", "ORG", 10, 21, "注册国际投资分析师协会"], ["T1", "ORG", 22, 27, "ACIIA"], ["T2", "TITLE", 28, 30, "主席"]]}, {"id": 283, "text": "2013.10-今,太钢不锈独立董事。", "labels": [["T0", "ORG", 10, 14, "太钢不锈"], ["T1", "TITLE", 14, 18, "独立董事"]]}, {"id": 284, "text": "姚长清,男,生于1965年,大专学历,工程师,历任车间主任、副厂长、副总经理,现任公司副总经理。", "labels": [["T0", "NAME", 0, 3, "姚长清"], ["T1", "EDU", 14, 18, "大专学历"], ["T2", "TITLE", 19, 22, "工程师"], ["T3", "TITLE", 25, 29, "车间主任"], ["T4", "TITLE", 30, 33, "副厂长"], ["T5", "TITLE", 34, 38, "副总经理"], ["T6", "ORG", 41, 43, "公司"], ["T7", "TITLE", 43, 47, "副总经理"]]}, {"id": 285, "text": "吉冬梅,女,", "labels": [["T0", "NAME", 0, 3, "吉冬梅"]]}, {"id": 286, "text": "1973年生,硕士学历。", "labels": [["T0", "EDU", 7, 11, "硕士学历"]]}, {"id": 287, "text": "先后任职益世咨询(中国)公司、东方国际创业股份有限公司、海通证券股份有限公司投资银行总部及国际业务部。", "labels": [["T0", "ORG", 4, 14, "益世咨询(中国)公司"], ["T1", "ORG", 15, 27, "东方国际创业股份有限公司"], ["T2", "ORG", 28, 50, "海通证券股份有限公司投资银行总部及国际业务部"]]}, {"id": 288, "text": "2004年10月起加盟海富产业投资基金管理有限公司任投资副总裁,为担任中比基金投资的金风科技、宁波摩士、海利得、浙江双箭、国德电气等项目的负责人。", "labels": [["T0", "ORG", 11, 25, "海富产业投资基金管理有限公司"], ["T1", "TITLE", 26, 31, "投资副总裁"], ["T2", "ORG", 35, 39, "中比基金"], ["T3", "ORG", 42, 46, "金风科技"], ["T4", "ORG", 47, 51, "宁波摩士"], ["T5", "ORG", 52, 55, "海利得"], ["T6", "ORG", 56, 60, "浙江双箭"], ["T7", "ORG", 61, 65, "国德电气"], ["T8", "TITLE", 69, 72, "负责人"]]}, {"id": 289, "text": "王焕然先生:1957年出生,本科。", "labels": [["T0", "NAME", 0, 3, "王焕然"], ["T1", "EDU", 14, 16, "本科"]]}, {"id": 290, "text": "曾任合肥新华书店有限公司董事长、总经理,安徽新华发行集团有限公司副总经理。", "labels": [["T0", "ORG", 2, 12, "合肥新华书店有限公司"], ["T1", "TITLE", 12, 15, "董事长"], ["T2", "TITLE", 16, 19, "总经理"], ["T3", "ORG", 20, 32, "安徽新华发行集团有限公司"], ["T4", "TITLE", 32, 36, "副总经理"], ["T5", "TITLE", 33, 36, "总经理"]]}, {"id": 291, "text": "现任安徽新华传媒股份有限公司副董事长。", "labels": [["T0", "ORG", 2, 14, "安徽新华传媒股份有限公司"], ["T1", "TITLE", 14, 18, "副董事长"]]}, {"id": 292, "text": "获2011年安徽省宣传文化系统“六个一批”文化产业经营管理拔尖人才。", "labels": []}, {"id": 293, "text": "许炎平:男,", "labels": [["T0", "NAME", 0, 3, "许炎平"]]}, {"id": 294, "text": "1959年10月生,大专学历,工程师,中共党员。", "labels": [["T0", "EDU", 10, 14, "大专学历"], ["T1", "TITLE", 15, 18, "工程师"], ["T2", "TITLE", 19, 23, "中共党员"]]}, {"id": 295, "text": "历任福建省燕京惠泉啤酒股份有限公司副总经理。", "labels": [["T0", "ORG", 2, 17, "福建省燕京惠泉啤酒股份有限公司"], ["T1", "TITLE", 17, 21, "副总经理"]]}, {"id": 296, "text": "现任福建省燕京惠泉啤酒股份有限公司副总经理。", "labels": [["T0", "ORG", 2, 17, "福建省燕京惠泉啤酒股份有限公司"], ["T1", "TITLE", 17, 21, "副总经理"]]}, {"id": 297, "text": "1995年被授予“全国劳动模范”。", "labels": [["T0", "TITLE", 9, 15, "全国劳动模范"]]}, {"id": 298, "text": "仇成丰先生,男,", "labels": [["T0", "NAME", 0, 3, "仇成丰"]]}, {"id": 299, "text": "1977年出生,中国国籍,本科学历、经济师。", "labels": [["T0", "CONT", 8, 12, "中国国籍"], ["T1", "EDU", 13, 17, "本科学历"], ["T2", "TITLE", 18, 21, "经济师"]]}, {"id": 300, "text": "曾任海通证券公司职员、广东永怡集团股份有限公司证券部经理,东方日升证券事务代表。", "labels": [["T0", "ORG", 2, 8, "海通证券公司"], ["T1", "TITLE", 8, 10, "职员"], ["T2", "ORG", 11, 23, "广东永怡集团股份有限公司"], ["T3", "TITLE", 23, 28, "证券部经理"], ["T4", "ORG", 29, 35, "东方日升证券"], ["T5", "TITLE", 35, 39, "事务代表"]]}, {"id": 301, "text": "2010年10月起就职于东方日升,现任东方日升董事、东方日升(宁波)电力开发有限公司总经理,东方日升(郧县)光农业科技有限公司董事长,浙江双宇电子科技有限公司执行董事。", "labels": [["T0", "ORG", 12, 16, "东方日升"], ["T1", "ORG", 19, 23, "东方日升"], ["T2", "TITLE", 23, 25, "董事"], ["T3", "ORG", 26, 30, "东方日升"], ["T4", "ORG", 26, 42, "东方日升(宁波)电力开发有限公司"], ["T5", "TITLE", 42, 45, "总经理"], ["T6", "ORG", 46, 50, "东方日升"], ["T7", "ORG", 46, 63, "东方日升(郧县)光农业科技有限公司"], ["T8", "TITLE", 63, 65, "董事"], ["T9", "TITLE", 63, 66, "董事长"], ["T10", "ORG", 67, 79, "浙江双宇电子科技有限公司"], ["T11", "TITLE", 79, 83, "执行董事"], ["T12", "TITLE", 81, 83, "董事"]]}, {"id": 302, "text": "陈天立:现任中国船舶重工集团公司军工专家咨询委主任,中国第一重型机械股份公司独立董事,中国恒天集团公司外部董事,中国兵器装备集团公司外部董事;", "labels": [["T0", "NAME", 0, 3, "陈天立"], ["T1", "ORG", 6, 16, "中国船舶重工集团公司"], ["T2", "TITLE", 16, 25, "军工专家咨询委主任"], ["T3", "ORG", 26, 38, "中国第一重型机械股份公司"], ["T4", "TITLE", 38, 42, "独立董事"], ["T5", "ORG", 43, 51, "中国恒天集团公司"], ["T6", "TITLE", 51, 55, "外部董事"], ["T7", "ORG", 56, 66, "中国兵器装备集团公司"], ["T8", "TITLE", 66, 70, "外部董事"]]}, {"id": 303, "text": "曾任中国船舶重工集团公司党组副书记、纪检组组长、总经济师。", "labels": [["T0", "ORG", 2, 12, "中国船舶重工集团公司"], ["T1", "TITLE", 12, 17, "党组副书记"], ["T2", "TITLE", 18, 23, "纪检组组长"], ["T3", "TITLE", 24, 28, "总经济师"]]}, {"id": 304, "text": "韩公博先生:1969年出生,本科学历,中国国籍。", "labels": [["T0", "NAME", 0, 3, "韩公博"], ["T1", "EDU", 14, 18, "本科学历"], ["T2", "CONT", 19, 23, "中国国籍"]]}, {"id": 305, "text": "2010年8月至今服务于康力电梯,现任康力电梯销售中心总经理。", "labels": [["T0", "ORG", 12, 16, "康力电梯"], ["T1", "ORG", 19, 23, "康力电梯"], ["T2", "ORG", 19, 27, "康力电梯销售中心"], ["T3", "TITLE", 27, 30, "总经理"]]}, {"id": 306, "text": "李文华:2006年8月-2009年12月,湖北人民出版社计划财务部主任;", "labels": [["T0", "NAME", 0, 3, "李文华"], ["T1", "ORG", 21, 28, "湖北人民出版社"], ["T2", "TITLE", 28, 35, "计划财务部主任"]]}, {"id": 307, "text": "2009年12月至今,湖北人民出版社有限公司计划财务部主任。", "labels": [["T0", "ORG", 11, 22, "湖北人民出版社有限公司"], ["T1", "TITLE", 22, 29, "计划财务部主任"]]}, {"id": 308, "text": "蒋吉军:男,硕士,高级工程师。", "labels": [["T0", "NAME", 0, 3, "蒋吉军"], ["T1", "EDU", 6, 8, "硕士"], ["T2", "TITLE", 9, 14, "高级工程师"]]}, {"id": 309, "text": "2004年11月至2007年11月任公司人力资源部经理;", "labels": [["T0", "ORG", 18, 20, "公司"], ["T1", "TITLE", 20, 27, "人力资源部经理"]]}, {"id": 310, "text": "2007年4月至2008年10月任公司总经理助理;", "labels": [["T0", "ORG", 17, 19, "公司"], ["T1", "TITLE", 19, 24, "总经理助理"]]}, {"id": 311, "text": "2007年9月至2012年9月任公司煤化工项目指挥部副指挥长。", "labels": [["T0", "ORG", 16, 18, "公司"], ["T1", "TITLE", 18, 30, "煤化工项目指挥部副指挥长"]]}, {"id": 312, "text": "2008年10月至2012年8月任公司副总经理。", "labels": [["T0", "ORG", 17, 19, "公司"], ["T1", "TITLE", 19, 23, "副总经理"]]}, {"id": 313, "text": "符冬,男,", "labels": [["T0", "NAME", 0, 2, "符冬"]]}, {"id": 314, "text": "1969年1月生,", "labels": []}, {"id": 315, "text": "1991年参加工作,中共党员,大学学历,同济大学MBA,高级工程师、高级经济师,历任黑牡丹(集团)股份有限公司前织车间染色值车工、技术员、车间主任助理、总经理助理、副总经理,常州服装集团公司副总经理、常州大成纺织集团公司董事长等职。", "labels": [["T0", "TITLE", 10, 14, "中共党员"], ["T1", "EDU", 15, 19, "大学学历"], ["T2", "ORG", 20, 24, "同济大学"], ["T3", "EDU", 24, 27, "MBA"], ["T4", "TITLE", 28, 33, "高级工程师"], ["T5", "TITLE", 34, 39, "高级经济师"], ["T6", "ORG", 42, 55, "黑牡丹(集团)股份有限公司"], ["T7", "TITLE", 55, 64, "前织车间染色值车工"], ["T8", "TITLE", 65, 68, "技术员"], ["T9", "TITLE", 69, 75, "车间主任助理"], ["T10", "TITLE", 76, 81, "总经理助理"], ["T11", "TITLE", 82, 86, "副总经理"], ["T12", "ORG", 87, 95, "常州服装集团公司"], ["T13", "TITLE", 95, 99, "副总经理"], ["T14", "ORG", 100, 110, "常州大成纺织集团公司"], ["T15", "TITLE", 110, 113, "董事长"]]}, {"id": 316, "text": "2001年5月起,任常州纺织国有资产经营有限公司副总经理。", "labels": [["T0", "ORG", 10, 24, "常州纺织国有资产经营有限公司"], ["T1", "TITLE", 24, 28, "副总经理"]]}, {"id": 317, "text": "孙茜女士,加拿大国籍,", "labels": [["T0", "NAME", 0, 2, "孙茜"], ["T1", "CONT", 5, 10, "加拿大国籍"]]}, {"id": 318, "text": "1966年出生,本科学历,工程师。", "labels": [["T0", "EDU", 8, 12, "本科学历"], ["T1", "TITLE", 13, 16, "工程师"]]}, {"id": 319, "text": "1989年7月毕业于北京大学生物系。", "labels": [["T0", "ORG", 10, 17, "北京大学生物系"]]}, {"id": 320, "text": "1989年11月至1992年12月任职于爱博生化制品有限公司,担任项目经理;", "labels": [["T0", "ORG", 20, 30, "爱博生化制品有限公司"], ["T1", "TITLE", 33, 37, "项目经理"]]}, {"id": 321, "text": "1993年3月至2009年10月,任职于威海利德尔实业发展有限公司,担任董事长;", "labels": [["T0", "ORG", 20, 33, "威海利德尔实业发展有限公司"], ["T1", "TITLE", 36, 39, "董事长"]]}, {"id": 322, "text": "2006年至2009年7月,担任北京利德曼生化技术有限公司董事;", "labels": [["T0", "ORG", 16, 29, "北京利德曼生化技术有限公司"], ["T1", "TITLE", 29, 31, "董事"]]}, {"id": 323, "text": "2006年至今,担任北京迈迪卡科技有限公司执行董事、总经理,", "labels": [["T0", "ORG", 10, 21, "北京迈迪卡科技有限公司"], ["T1", "TITLE", 21, 25, "执行董事"], ["T2", "TITLE", 26, 29, "总经理"]]}, {"id": 324, "text": "2009年7月至今,担任北京利德曼生化股份有限公司董事。", "labels": [["T0", "ORG", 12, 25, "北京利德曼生化股份有限公司"], ["T1", "TITLE", 25, 27, "董事"]]}, {"id": 325, "text": "冯冠平,男,", "labels": [["T0", "NAME", 0, 3, "冯冠平"]]}, {"id": 326, "text": "1946年生,研究生学历,研究员、博士生导师。", "labels": [["T0", "EDU", 7, 12, "研究生学历"], ["T1", "TITLE", 13, 16, "研究员"], ["T2", "TITLE", 17, 22, "博士生导师"]]}, {"id": 327, "text": "曾任清华大学科技处处长、深圳清华大学研究院常务副院长、深圳清华大学研究院院长、清华大学校长助理、清华大学校务委员会副主任、深圳清华大学研究院院长、上海飞乐音响股份有限公司董事。", "labels": [["T0", "ORG", 2, 6, "清华大学"], ["T1", "ORG", 2, 9, "清华大学科技处"], ["T2", "TITLE", 9, 11, "处长"], ["T3", "ORG", 12, 21, "深圳清华大学研究院"], ["T4", "ORG", 14, 18, "清华大学"], ["T5", "TITLE", 21, 26, "常务副院长"], ["T6", "TITLE", 24, 26, "院长"], ["T7", "ORG", 27, 36, "深圳清华大学研究院"], ["T8", "ORG", 29, 33, "清华大学"], ["T9", "TITLE", 36, 38, "院长"], ["T10", "ORG", 39, 43, "清华大学"], ["T11", "TITLE", 43, 47, "校长助理"], ["T12", "ORG", 48, 52, "清华大学"], ["T13", "ORG", 48, 57, "清华大学校务委员会"], ["T14", "TITLE", 57, 60, "副主任"], ["T15", "ORG", 61, 70, "深圳清华大学研究院"], ["T16", "ORG", 63, 67, "清华大学"], ["T17", "TITLE", 70, 72, "院长"], ["T18", "ORG", 73, 85, "上海飞乐音响股份有限公司"], ["T19", "TITLE", 85, 87, "董事"]]}, {"id": 328, "text": "现任深圳力合天使创业投资管理有限公司董事长。", "labels": [["T0", "ORG", 2, 18, "深圳力合天使创业投资管理有限公司"], ["T1", "TITLE", 18, 21, "董事长"]]}, {"id": 329, "text": "方琳:女,中共党员,大专,会计师、高级经营师。", "labels": [["T0", "NAME", 0, 2, "方琳"], ["T1", "TITLE", 5, 9, "中共党员"], ["T2", "EDU", 10, 12, "大专"], ["T3", "TITLE", 13, 16, "会计师"], ["T4", "TITLE", 17, 22, "高级经营师"]]}, {"id": 330, "text": "历任湖北省纺织品公司财务主管、武汉纺织品批发站财务主管、武汉市工业品(集团)公司财务处科长、武汉四茂纺织站总会计师、武汉武商量贩连锁有限公司副总经理。", "labels": [["T0", "ORG", 2, 10, "湖北省纺织品公司"], ["T1", "TITLE", 10, 14, "财务主管"], ["T2", "ORG", 15, 23, "武汉纺织品批发站"], ["T3", "TITLE", 23, 27, "财务主管"], ["T4", "ORG", 28, 40, "武汉市工业品(集团)公司"], ["T5", "TITLE", 40, 45, "财务处科长"], ["T6", "ORG", 46, 53, "武汉四茂纺织站"], ["T7", "TITLE", 53, 57, "总会计师"], ["T8", "ORG", 58, 70, "武汉武商量贩连锁有限公司"], ["T9", "TITLE", 70, 74, "副总经理"]]}, {"id": 331, "text": "现任武商集团副总经理。", "labels": [["T0", "ORG", 2, 6, "武商集团"], ["T1", "TITLE", 6, 10, "副总经理"]]}, {"id": 332, "text": "冯元发,男,中国籍,无境外永久居留权,", "labels": [["T0", "NAME", 0, 3, "冯元发"], ["T1", "CONT", 6, 9, "中国籍"]]}, {"id": 333, "text": "1964年生,本科学历,经济师、高级人力资源管理师。", "labels": [["T0", "EDU", 7, 11, "本科学历"], ["T1", "TITLE", 12, 15, "经济师"], ["T2", "TITLE", 16, 25, "高级人力资源管理师"]]}, {"id": 334, "text": "1986年7月至1987年9月于郴州市副食品公司任计划员;", "labels": [["T0", "ORG", 16, 24, "郴州市副食品公司"], ["T1", "TITLE", 25, 28, "计划员"]]}, {"id": 335, "text": "1987年10月至1989年11月于郴州市建设银行任会计;", "labels": [["T0", "ORG", 18, 25, "郴州市建设银行"], ["T1", "TITLE", 26, 28, "会计"]]}, {"id": 336, "text": "1989年12月至1996年10月任北湖区建设银行副行长;", "labels": [["T0", "ORG", 18, 25, "北湖区建设银行"], ["T1", "TITLE", 25, 28, "副行长"]]}, {"id": 337, "text": "1996年11月至1999年9月任郴州市高等级公路指挥部财务部部长;", "labels": [["T0", "ORG", 17, 28, "郴州市高等级公路指挥部"], ["T1", "TITLE", 28, 33, "财务部部长"]]}, {"id": 338, "text": "1999年10月至2004年4月任郴州市建设银行贷款中心主任;", "labels": [["T0", "ORG", 17, 24, "郴州市建设银行"], ["T1", "TITLE", 24, 30, "贷款中心主任"]]}, {"id": 339, "text": "2005年至2008年任郴州市金贵银业有限公司人力资源部部长;", "labels": [["T0", "ORG", 12, 23, "郴州市金贵银业有限公司"], ["T1", "TITLE", 23, 30, "人力资源部部长"]]}, {"id": 340, "text": "2008年4月至2012年10月任公司人力资源部部长;", "labels": [["T0", "ORG", 17, 19, "公司"], ["T1", "TITLE", 19, 26, "人力资源部部长"]]}, {"id": 341, "text": "2008年4月至今任郴州市金贵银业股份有限公司监事会主席。", "labels": [["T0", "ORG", 10, 23, "郴州市金贵银业股份有限公司"], ["T1", "TITLE", 23, 28, "监事会主席"]]}, {"id": 342, "text": "赵文权先生,董事长,总经理,中国国籍,", "labels": [["T0", "NAME", 0, 3, "赵文权"], ["T1", "TITLE", 6, 9, "董事长"], ["T2", "TITLE", 10, 13, "总经理"], ["T3", "CONT", 14, 18, "中国国籍"]]}, {"id": 343, "text": "1970年生,大学本科学历,历任路村咨询策划公司总经理,雅宝拍卖网首席运营官,并担任中国国际公共关系协会理事,中国国际公共关系协会公关公司委员会2007年、2008年年度主任,中国传媒大学董事,北京2008年奥运会奥林匹克火炬接力火炬手;", "labels": [["T0", "EDU", 7, 13, "大学本科学历"], ["T1", "ORG", 16, 24, "路村咨询策划公司"], ["T2", "TITLE", 24, 27, "总经理"], ["T3", "ORG", 28, 33, "雅宝拍卖网"], ["T4", "TITLE", 33, 38, "首席运营官"], ["T5", "ORG", 42, 52, "中国国际公共关系协会"], ["T6", "TITLE", 52, 54, "理事"], ["T7", "ORG", 55, 65, "中国国际公共关系协会"], ["T8", "ORG", 55, 72, "中国国际公共关系协会公关公司委员会"], ["T9", "TITLE", 83, 87, "年度主任"], ["T10", "ORG", 88, 94, "中国传媒大学"], ["T11", "TITLE", 94, 96, "董事"], ["T12", "ORG", 97, 107, "北京2008年奥运会"], ["T13", "TITLE", 107, 118, "奥林匹克火炬接力火炬手"]]}, {"id": 344, "text": "1996至1999年,以及2003至2007年任蓝色光标公共关系机构首席执行官,", "labels": [["T0", "ORG", 24, 28, "蓝色光标"], ["T1", "TITLE", 28, 39, "公共关系机构首席执行官"]]}, {"id": 345, "text": "2008年1月至今任蓝色光标总经理。", "labels": [["T0", "ORG", 10, 14, "蓝色光标"], ["T1", "TITLE", 14, 17, "总经理"]]}, {"id": 346, "text": "2004年起担任有限公司董事,", "labels": [["T0", "ORG", 8, 12, "有限公司"], ["T1", "TITLE", 12, 14, "董事"]]}, {"id": 347, "text": "2008年1月起担任蓝色光标董事长至今。", "labels": [["T0", "ORG", 10, 14, "蓝色光标"], ["T1", "TITLE", 14, 17, "董事长"]]}, {"id": 348, "text": "何刚,男,中国国籍,无境外居留权,", "labels": [["T0", "NAME", 0, 2, "何刚"], ["T1", "CONT", 5, 9, "中国国籍"]]}, {"id": 349, "text": "1968年出生,本科学历,高级会计师。", "labels": [["T0", "EDU", 8, 12, "本科学历"], ["T1", "TITLE", 13, 18, "高级会计师"]]}, {"id": 350, "text": "曾任浙江省丝绸进出口公司直属企业财务部主办会计,杭州网通信息港有限公司财务部经理,华夏视联控股有限公司财务经理,华数传媒网络有限公司财务部经理。", "labels": [["T0", "ORG", 2, 12, "浙江省丝绸进出口公司"], ["T1", "TITLE", 12, 23, "直属企业财务部主办会计"], ["T2", "ORG", 24, 35, "杭州网通信息港有限公司"], ["T3", "TITLE", 35, 40, "财务部经理"], ["T4", "ORG", 41, 51, "华夏视联控股有限公司"], ["T5", "TITLE", 51, 55, "财务经理"], ["T6", "ORG", 56, 66, "华数传媒网络有限公司"], ["T7", "TITLE", 66, 71, "财务部经理"]]}, {"id": 351, "text": "现任华数传媒控股股份有限公司财务总监。", "labels": [["T0", "ORG", 2, 14, "华数传媒控股股份有限公司"], ["T1", "TITLE", 14, 18, "财务总监"]]}, {"id": 352, "text": "何梅芬:女,", "labels": [["T0", "NAME", 0, 3, "何梅芬"]]}, {"id": 353, "text": "1964年5月出生。", "labels": []}, {"id": 354, "text": "东北工学院金属压力加工专业本科毕业,香港中文大学专业会计硕士学位,高级工程师,中共党员。", "labels": [["T0", "ORG", 0, 5, "东北工学院"], ["T1", "PRO", 5, 13, "金属压力加工专业"], ["T2", "EDU", 13, 15, "本科"], ["T3", "ORG", 18, 24, "香港中文大学"], ["T4", "PRO", 24, 28, "专业会计"], ["T5", "EDU", 28, 32, "硕士学位"], ["T6", "TITLE", 33, 38, "高级工程师"], ["T7", "TITLE", 39, 43, "中共党员"]]}, {"id": 355, "text": "现任宝山钢铁股份有限公司职工监事、审计部部长,上海宝信软件股份有限公司监事。", "labels": [["T0", "ORG", 2, 12, "宝山钢铁股份有限公司"], ["T1", "TITLE", 12, 16, "职工监事"], ["T2", "TITLE", 14, 16, "监事"], ["T3", "TITLE", 17, 22, "审计部部长"], ["T4", "ORG", 23, 35, "上海宝信软件股份有限公司"], ["T5", "TITLE", 35, 37, "监事"]]}, {"id": 356, "text": "陈斌:男,", "labels": [["T0", "NAME", 0, 2, "陈斌"]]}, {"id": 357, "text": "1974年生,工商管理硕士,高级工程师。", "labels": [["T0", "PRO", 7, 11, "工商管理"], ["T1", "EDU", 11, 13, "硕士"], ["T2", "TITLE", 14, 19, "高级工程师"]]}, {"id": 358, "text": "历任上海振华重工(集团)股份有限公司质管部项目质量主管、质管部轮胎吊室副经理、质管部经理,质检公司副总经理、总经理,质量安全办副主任、质量安全部经理,监事等职。", "labels": [["T0", "TITLE", 18, 27, "质管部项目质量主管"], ["T1", "TITLE", 28, 38, "质管部轮胎吊室副经理"], ["T2", "TITLE", 39, 44, "质管部经理"], ["T3", "ORG", 45, 49, "质检公司"], ["T4", "TITLE", 49, 53, "副总经理"], ["T5", "TITLE", 50, 53, "总经理"], ["T6", "TITLE", 54, 57, "总经理"], ["T7", "TITLE", 58, 66, "质量安全办副主任"], ["T8", "TITLE", 67, 74, "质量安全部经理"], ["T9", "TITLE", 75, 77, "监事"]]}, {"id": 359, "text": "现任上海振华重工(集团)股份有限公司总裁助理、上海振华船运有限公司总经理。", "labels": [["T0", "TITLE", 18, 22, "总裁助理"], ["T1", "ORG", 23, 33, "上海振华船运有限公司"], ["T2", "TITLE", 33, 36, "总经理"]]}, {"id": 360, "text": "李文兴:1958年8月出生,男,中国国籍,博士研究生学历,本公司独立董事。", "labels": [["T0", "NAME", 0, 3, "李文兴"], ["T1", "CONT", 16, 20, "中国国籍"], ["T2", "EDU", 21, 28, "博士研究生学历"], ["T3", "ORG", 29, 32, "本公司"], ["T4", "TITLE", 32, 36, "独立董事"]]}, {"id": 361, "text": "李先生自1999年7月至今,历任北京交通大学经济管理学院教授、博士生导师,会计系主任、院党委书记;", "labels": [["T0", "NAME", 0, 1, "李"], ["T1", "ORG", 16, 28, "北京交通大学经济管理学院"], ["T2", "TITLE", 28, 30, "教授"], ["T3", "TITLE", 31, 36, "博士生导师"], ["T4", "TITLE", 37, 42, "会计系主任"], ["T5", "TITLE", 43, 48, "院党委书记"]]}, {"id": 362, "text": "北京交通大学中国交通运输价格研究中心主任;", "labels": [["T0", "ORG", 0, 18, "北京交通大学中国交通运输价格研究中心"], ["T1", "TITLE", 18, 20, "主任"]]}, {"id": 363, "text": "国家政府价格工作专家咨询委员会委员等。", "labels": [["T0", "ORG", 0, 15, "国家政府价格工作专家咨询委员会"], ["T1", "TITLE", 12, 14, "委员"], ["T2", "TITLE", 15, 17, "委员"]]}, {"id": 364, "text": "张文春先生,独立董事,中国籍,", "labels": [["T0", "NAME", 0, 3, "张文春"], ["T1", "TITLE", 6, 10, "独立董事"], ["T2", "CONT", 11, 14, "中国籍"]]}, {"id": 365, "text": "1968年出生,大学本科,先后在东北财经大学和中国人民大学财政金融系学习,分别获得经济学学士、硕士、博士学位。", "labels": [["T0", "EDU", 8, 12, "大学本科"], ["T1", "ORG", 16, 22, "东北财经大学"], ["T2", "ORG", 23, 34, "中国人民大学财政金融系"], ["T3", "PRO", 41, 44, "经济学"], ["T4", "EDU", 44, 46, "学士"], ["T5", "EDU", 47, 49, "硕士"], ["T6", "EDU", 50, 54, "博士学位"]]}, {"id": 366, "text": "历任中国人民大学财政学院讲师、中国人民大学财政学院副教授。", "labels": [["T0", "ORG", 2, 12, "中国人民大学财政学院"], ["T1", "TITLE", 12, 14, "讲师"], ["T2", "ORG", 15, 25, "中国人民大学财政学院"], ["T3", "TITLE", 25, 28, "副教授"]]}, {"id": 367, "text": "现任中国人民大学财政金融学院财政系副系主任,副教授。", "labels": [["T0", "ORG", 2, 17, "中国人民大学财政金融学院财政系"], ["T1", "TITLE", 17, 21, "副系主任"], ["T2", "TITLE", 22, 25, "副教授"]]}, {"id": 368, "text": "周博先生:中国国籍,无境外永久居留权,", "labels": [["T0", "NAME", 0, 2, "周博"], ["T1", "CONT", 5, 9, "中国国籍"]]}, {"id": 369, "text": "1980年出生,本科学历。", "labels": [["T0", "EDU", 8, 12, "本科学历"]]}, {"id": 370, "text": "2003年参加工作,历任昆山新宁公共保税仓储有限公司业务部、苏州新宁公共保税仓储有限公司业务部副经理、公司业务部副经理,", "labels": [["T0", "ORG", 12, 26, "昆山新宁公共保税仓储有限公司"], ["T1", "ORG", 24, 26, "公司"], ["T2", "ORG", 30, 44, "苏州新宁公共保税仓储有限公司"], ["T3", "ORG", 42, 44, "公司"], ["T4", "TITLE", 44, 50, "业务部副经理"], ["T5", "ORG", 51, 53, "公司"], ["T6", "TITLE", 53, 59, "业务部副经理"]]}, {"id": 371, "text": "2008年3月至2013年5月期间任江苏新宁现代物流股份有限公司监事会监事;", "labels": [["T0", "ORG", 18, 32, "江苏新宁现代物流股份有限公司"], ["T1", "TITLE", 32, 37, "监事会监事"]]}, {"id": 372, "text": "现担任江苏新宁现代物流股份有限公司董事、副总经理。", "labels": [["T0", "ORG", 3, 17, "江苏新宁现代物流股份有限公司"], ["T1", "TITLE", 17, 19, "董事"], ["T2", "TITLE", 20, 24, "副总经理"]]}, {"id": 373, "text": "刘存方:男,曾任福成酿酒公司任执行董事。", "labels": [["T0", "NAME", 0, 3, "刘存方"], ["T1", "ORG", 8, 14, "福成酿酒公司"], ["T2", "TITLE", 15, 19, "执行董事"]]}, {"id": 374, "text": "谢敏,男,汉族,中共党员,", "labels": [["T0", "NAME", 0, 2, "谢敏"], ["T1", "RACE", 5, 7, "汉族"], ["T2", "TITLE", 8, 12, "中共党员"]]}, {"id": 375, "text": "1963年10月出生,大学本科学历,会计师,", "labels": [["T0", "EDU", 11, 17, "大学本科学历"], ["T1", "TITLE", 18, 21, "会计师"]]}, {"id": 376, "text": "1985年7月参加工作。", "labels": []}, {"id": 377, "text": "曾任云南沾益化肥厂财务科会计、计划财务处副处长,沾化公司资产财务部副部长;", "labels": [["T0", "ORG", 2, 9, "云南沾益化肥厂"], ["T1", "TITLE", 9, 14, "财务科会计"], ["T2", "TITLE", 15, 23, "计划财务处副处长"], ["T3", "ORG", 24, 28, "沾化公司"], ["T4", "TITLE", 28, 36, "资产财务部副部长"]]}, {"id": 378, "text": "云南云维集团有限公司资产财务部副部长;", "labels": [["T0", "ORG", 0, 10, "云南云维集团有限公司"], ["T1", "TITLE", 10, 18, "资产财务部副部长"]]}, {"id": 379, "text": "云南大为制焦有限公司副总经理兼财务部部长,云南泸西大为焦化有限公司资产财务部负责人;", "labels": [["T0", "ORG", 0, 10, "云南大为制焦有限公司"], ["T1", "TITLE", 10, 14, "副总经理"], ["T2", "TITLE", 15, 20, "财务部部长"], ["T3", "ORG", 21, 33, "云南泸西大为焦化有限公司"], ["T4", "TITLE", 33, 41, "资产财务部负责人"]]}, {"id": 380, "text": "云南云维集团有限公司总经理助理。", "labels": [["T0", "ORG", 0, 10, "云南云维集团有限公司"], ["T1", "TITLE", 10, 15, "总经理助理"]]}, {"id": 381, "text": "现任云南云维集团有限公司副总经理、总会计师,云南云维股份有限公司董事。", "labels": [["T0", "ORG", 2, 12, "云南云维集团有限公司"], ["T1", "TITLE", 12, 16, "副总经理"], ["T2", "TITLE", 17, 21, "总会计师"], ["T3", "ORG", 22, 32, "云南云维股份有限公司"], ["T4", "TITLE", 32, 34, "董事"]]}, {"id": 382, "text": "范五亭先生,", "labels": [["T0", "NAME", 0, 3, "范五亭"]]}, {"id": 383, "text": "1952年3月出生,毕业于北京工业大学,本科学历。", "labels": [["T0", "ORG", 13, 19, "北京工业大学"], ["T1", "EDU", 20, 24, "本科学历"]]}, {"id": 384, "text": "曾任职于北京自动化仪器仪表总公司、香港兴华科技有限公司、香港艺高工程有限公司,", "labels": [["T0", "ORG", 4, 16, "北京自动化仪器仪表总公司"], ["T1", "ORG", 17, 27, "香港兴华科技有限公司"], ["T2", "ORG", 28, 38, "香港艺高工程有限公司"]]}, {"id": 385, "text": "2002年起进入武汉高德光电有限公司工作,", "labels": [["T0", "ORG", 8, 18, "武汉高德光电有限公司"]]}, {"id": 386, "text": "2006年起任公司(前身红外有限)副总经理。", "labels": [["T0", "ORG", 7, 9, "公司"], ["T1", "ORG", 12, 16, "红外有限"], ["T2", "TITLE", 17, 21, "副总经理"]]}, {"id": 387, "text": "现任武汉高德红外股份有限公司副总经理、前视远景执行董事兼总经理。", "labels": [["T0", "ORG", 2, 14, "武汉高德红外股份有限公司"], ["T1", "TITLE", 14, 18, "副总经理"], ["T2", "TITLE", 15, 18, "总经理"], ["T3", "ORG", 19, 23, "前视远景"], ["T4", "TITLE", 23, 27, "执行董事"], ["T5", "TITLE", 28, 31, "总经理"]]}, {"id": 388, "text": "寻冬生,", "labels": [["T0", "NAME", 0, 3, "寻冬生"]]}, {"id": 389, "text": "1958年5月生,本科学历,中共党员。", "labels": [["T0", "EDU", 9, 13, "本科学历"], ["T1", "TITLE", 14, 18, "中共党员"]]}, {"id": 390, "text": "现任公司董事、湖南粮油副董事长、湖南第一大道置业有限公司董事长兼总经理,湖南百岁置业发展有限公司董事长。", "labels": [["T0", "ORG", 2, 4, "公司"], ["T1", "TITLE", 4, 6, "董事"], ["T2", "ORG", 7, 11, "湖南粮油"], ["T3", "TITLE", 11, 15, "副董事长"], ["T4", "TITLE", 12, 14, "董事"], ["T5", "TITLE", 12, 15, "董事长"], ["T6", "ORG", 16, 28, "湖南第一大道置业有限公司"], ["T7", "ORG", 26, 28, "公司"], ["T8", "TITLE", 28, 30, "董事"], ["T9", "TITLE", 28, 31, "董事长"], ["T10", "TITLE", 32, 35, "总经理"], ["T11", "ORG", 36, 48, "湖南百岁置业发展有限公司"], ["T12", "ORG", 46, 48, "公司"], ["T13", "TITLE", 48, 50, "董事"], ["T14", "TITLE", 48, 51, "董事长"]]}, {"id": 391, "text": "曾任长沙市计划委员会基建计划科副科长、科长、物资计划科科长、办公室主任、湖南粮油基建办主任、投资部经理、副总经理、常务副总经理等职。", "labels": [["T0", "ORG", 2, 15, "长沙市计划委员会基建计划科"], ["T1", "TITLE", 15, 18, "副科长"], ["T2", "TITLE", 16, 18, "科长"], ["T3", "TITLE", 19, 21, "科长"], ["T4", "TITLE", 22, 29, "物资计划科科长"], ["T5", "TITLE", 27, 29, "科长"], ["T6", "TITLE", 30, 35, "办公室主任"], ["T7", "ORG", 36, 40, "湖南粮油"], ["T8", "TITLE", 40, 45, "基建办主任"], ["T9", "TITLE", 46, 51, "投资部经理"], ["T10", "TITLE", 52, 56, "副总经理"], ["T11", "TITLE", 57, 63, "常务副总经理"], ["T12", "TITLE", 59, 63, "副总经理"]]}, {"id": 392, "text": "刘孟林先生,监事。", "labels": [["T0", "NAME", 0, 3, "刘孟林"], ["T1", "TITLE", 6, 8, "监事"]]}, {"id": 393, "text": "中共党员,大专学历。", "labels": [["T0", "TITLE", 0, 4, "中共党员"], ["T1", "EDU", 5, 9, "大专学历"]]}, {"id": 394, "text": "曾任集团公司规划部部长,四川广安泰丰实业有限公司总经理,原渠江电力证券科科长。", "labels": [["T0", "ORG", 2, 6, "集团公司"], ["T1", "TITLE", 6, 11, "规划部部长"], ["T2", "ORG", 12, 24, "四川广安泰丰实业有限公司"], ["T3", "TITLE", 24, 27, "总经理"], ["T4", "ORG", 28, 33, "原渠江电力"], ["T5", "TITLE", 33, 38, "证券科科长"]]}, {"id": 395, "text": "现任股份公司监事,物资分公司经理,为本公司职工代表监事。", "labels": [["T0", "ORG", 2, 6, "股份公司"], ["T1", "TITLE", 6, 8, "监事"], ["T2", "ORG", 9, 14, "物资分公司"], ["T3", "TITLE", 14, 16, "经理"], ["T4", "ORG", 18, 21, "本公司"], ["T5", "TITLE", 21, 27, "职工代表监事"], ["T6", "TITLE", 25, 27, "监事"]]}, {"id": 396, "text": "杨成森先生:大学本科,高级经济师。", "labels": [["T0", "NAME", 0, 3, "杨成森"], ["T1", "EDU", 6, 10, "大学本科"], ["T2", "TITLE", 11, 16, "高级经济师"]]}, {"id": 397, "text": "2000年至2004年任北京城市开发集团有限责任公司计划经营部副主任;", "labels": [["T0", "ORG", 12, 26, "北京城市开发集团有限责任公司"], ["T1", "TITLE", 26, 34, "计划经营部副主任"]]}, {"id": 398, "text": "2005年任北京城市开发集团有限责任公司市场营销部主任;", "labels": [["T0", "ORG", 6, 20, "北京城市开发集团有限责任公司"], ["T1", "TITLE", 20, 27, "市场营销部主任"]]}, {"id": 399, "text": "现任北京首都开发控股(集团)有限公司置业事业部市场总监", "labels": [["T0", "ORG", 2, 18, "北京首都开发控股(集团)有限公司"], ["T1", "TITLE", 18, 27, "置业事业部市场总监"]]}, {"id": 400, "text": "董焱,女,群众,硕士,高级会计师,国家注册会计师。", "labels": [["T0", "NAME", 0, 2, "董焱"], ["T1", "TITLE", 5, 7, "群众"], ["T2", "EDU", 8, 10, "硕士"], ["T3", "TITLE", 11, 16, "高级会计师"], ["T4", "TITLE", 17, 24, "国家注册会计师"]]}, {"id": 401, "text": "历任天津泰达城市开发有限公司财务部职员、主管、副经理。", "labels": [["T0", "ORG", 2, 14, "天津泰达城市开发有限公司"], ["T1", "TITLE", 14, 19, "财务部职员"], ["T2", "TITLE", 20, 22, "主管"], ["T3", "TITLE", 23, 26, "副经理"]]}, {"id": 402, "text": "现任天津泰达集团有限公司风险控制中心合规内审部经理。", "labels": [["T0", "ORG", 2, 12, "天津泰达集团有限公司"], ["T1", "TITLE", 12, 25, "风险控制中心合规内审部经理"]]}, {"id": 403, "text": "郭丽女士:工学学士,高级工程师。", "labels": [["T0", "NAME", 0, 2, "郭丽"], ["T1", "PRO", 5, 7, "工学"], ["T2", "EDU", 7, 9, "学士"], ["T3", "TITLE", 10, 15, "高级工程师"]]}, {"id": 404, "text": "最近五年任大恒科技企管部经理、监事。", "labels": [["T0", "ORG", 5, 9, "大恒科技"], ["T1", "TITLE", 9, 14, "企管部经理"], ["T2", "TITLE", 15, 17, "监事"]]}, {"id": 405, "text": "刘煊:男,", "labels": [["T0", "NAME", 0, 2, "刘煊"]]}, {"id": 406, "text": "1973年6月出生,汉族,中国国籍,无境外居留权。", "labels": [["T0", "RACE", 10, 12, "汉族"], ["T1", "CONT", 13, 17, "中国国籍"]]}, {"id": 407, "text": "硕士学位。", "labels": [["T0", "EDU", 0, 4, "硕士学位"]]}, {"id": 408, "text": "近五年一直在江苏高科技投资集团任高级投资经理,", "labels": [["T0", "ORG", 6, 15, "江苏高科技投资集团"], ["T1", "TITLE", 16, 22, "高级投资经理"]]}, {"id": 409, "text": "2010年5月至今任康达新材董事。", "labels": [["T0", "ORG", 10, 14, "康达新材"], ["T1", "TITLE", 14, 16, "董事"]]}, {"id": 410, "text": "王兆君,男,管理学博士,博士生导师。", "labels": [["T0", "NAME", 0, 3, "王兆君"], ["T1", "PRO", 6, 9, "管理学"], ["T2", "EDU", 9, 11, "博士"], ["T3", "EDU", 12, 14, "博士"], ["T4", "TITLE", 12, 17, "博士生导师"]]}, {"id": 411, "text": "历任东北林业大学经济管理学院院长兼党委书记、校党委委员、博士生导师。", "labels": [["T0", "ORG", 2, 14, "东北林业大学经济管理学院"], ["T1", "TITLE", 14, 16, "院长"], ["T2", "TITLE", 17, 21, "党委书记"], ["T3", "TITLE", 22, 27, "校党委委员"], ["T4", "TITLE", 28, 33, "博士生导师"]]}, {"id": 412, "text": "现任青岛科技大学农林经济研究中心主任、博士生导师。", "labels": [["T0", "ORG", 2, 16, "青岛科技大学农林经济研究中心"], ["T1", "TITLE", 16, 18, "主任"], ["T2", "TITLE", 19, 24, "博士生导师"]]}, {"id": 413, "text": "刘近荣先生,", "labels": [["T0", "NAME", 0, 3, "刘近荣"]]}, {"id": 414, "text": "1957年3月生,中国国籍,无境外居留权,大学本科学历,主管药师,现任泰盛制药总经理、总工程师。", "labels": [["T0", "CONT", 9, 13, "中国国籍"], ["T1", "EDU", 21, 27, "大学本科学历"], ["T2", "TITLE", 28, 32, "主管药师"], ["T3", "ORG", 35, 39, "泰盛制药"], ["T4", "TITLE", 39, 42, "总经理"], ["T5", "TITLE", 43, 47, "总工程师"]]}, {"id": 415, "text": "刘先生于1980年至1995年任职于大同市利群制药厂,历任技术员、车间主任、副厂长;", "labels": [["T0", "NAME", 0, 1, "刘"], ["T1", "ORG", 18, 26, "大同市利群制药厂"], ["T2", "TITLE", 29, 32, "技术员"], ["T3", "TITLE", 33, 37, "车间主任"], ["T4", "TITLE", 38, 41, "副厂长"]]}, {"id": 416, "text": "1995年加入泰盛制药,历任副总经理、总经理、总工程师。", "labels": [["T0", "ORG", 7, 11, "泰盛制药"], ["T1", "TITLE", 14, 18, "副总经理"], ["T2", "TITLE", 15, 18, "总经理"], ["T3", "TITLE", 19, 22, "总经理"], ["T4", "TITLE", 23, 27, "总工程师"]]}, {"id": 417, "text": "由其主持的曲颈易折安瓶拉丝灌封工艺改造曾获大同市科学技术进步二等奖,大剂量50mg亚叶酸钙生产新工艺获大同市科学技术进步一等奖。", "labels": []}, {"id": 418, "text": "刘先生曾于1993年荣获大同市劳动模范称号;", "labels": [["T0", "NAME", 0, 1, "刘"]]}, {"id": 419, "text": "2003年由山西省社会主义劳动竞赛委员会授予二等功嘉奖;", "labels": []}, {"id": 420, "text": "2005年荣获山西省五一劳动奖章称号。", "labels": []}, {"id": 421, "text": "2012年评为大同市“优秀人才”。", "labels": []}, {"id": 422, "text": "彭伟哲,男,", "labels": [["T0", "NAME", 0, 3, "彭伟哲"]]}, {"id": 423, "text": "1973年2月出生,汉族,中共党员,大学学历,副编审。", "labels": [["T0", "RACE", 10, 12, "汉族"], ["T1", "TITLE", 13, 17, "中共党员"], ["T2", "EDU", 18, 22, "大学学历"], ["T3", "TITLE", 23, 26, "副编审"]]}, {"id": 424, "text": "1997年7月起历任辽宁美术出版社编辑、编辑室主任、副总编辑兼《美术大观》杂志执行主编,", "labels": [["T0", "ORG", 10, 17, "辽宁美术出版社"], ["T1", "TITLE", 17, 19, "编辑"], ["T2", "TITLE", 20, 22, "编辑"], ["T3", "TITLE", 20, 25, "编辑室主任"], ["T4", "TITLE", 26, 30, "副总编辑"], ["T5", "TITLE", 28, 30, "编辑"], ["T6", "ORG", 31, 39, "《美术大观》杂志"], ["T7", "TITLE", 39, 43, "执行主编"]]}, {"id": 425, "text": "2006年8月至今兼任出版传媒监事。", "labels": [["T0", "TITLE", 11, 17, "出版传媒监事"]]}, {"id": 426, "text": "孙喆浩,男,", "labels": [["T0", "NAME", 0, 3, "孙喆浩"]]}, {"id": 427, "text": "1977年7月6日出生,", "labels": []}, {"id": 428, "text": "1999年7月参加工作,中共党员,本科学历,经济师。", "labels": [["T0", "TITLE", 12, 16, "中共党员"], ["T1", "EDU", 17, 21, "本科学历"], ["T2", "TITLE", 22, 25, "经济师"]]}, {"id": 429, "text": "上海华谊(集团)公司团委书记;", "labels": [["T0", "ORG", 0, 10, "上海华谊(集团)公司"], ["T1", "TITLE", 10, 14, "团委书记"]]}, {"id": 430, "text": "上海三爱富新材料股份有限公司副总经理;", "labels": [["T0", "ORG", 0, 14, "上海三爱富新材料股份有限公司"], ["T1", "TITLE", 14, 18, "副总经理"]]}, {"id": 431, "text": "上海巴斯夫聚氨酯有限公司副总经理。", "labels": [["T0", "ORG", 0, 12, "上海巴斯夫聚氨酯有限公司"], ["T1", "TITLE", 12, 16, "副总经理"]]}, {"id": 432, "text": "刘曙光,男,", "labels": [["T0", "NAME", 0, 3, "刘曙光"]]}, {"id": 433, "text": "1955年10月出生,中共党员,大学学历,高级工程师。", "labels": [["T0", "TITLE", 11, 15, "中共党员"], ["T1", "EDU", 16, 20, "大学学历"], ["T2", "TITLE", 21, 26, "高级工程师"]]}, {"id": 434, "text": "2003年9月至2013年3月担任公司副总经理。", "labels": [["T0", "ORG", 17, 19, "公司"], ["T1", "TITLE", 19, 23, "副总经理"]]}, {"id": 435, "text": "李宾,男,汉族,生于1970年11月,大专学历。", "labels": [["T0", "NAME", 0, 2, "李宾"], ["T1", "RACE", 5, 7, "汉族"], ["T2", "EDU", 19, 23, "大专学历"]]}, {"id": 436, "text": "1986年-1998年在西安电视台《证券天地》栏目担任主持。", "labels": [["T0", "ORG", 12, 25, "西安电视台《证券天地》栏目"], ["T1", "TITLE", 27, 29, "主持"]]}, {"id": 437, "text": "1999年-2001年在北京均利(国际)实业公司工作;", "labels": [["T0", "ORG", 12, 24, "北京均利(国际)实业公司"]]}, {"id": 438, "text": "2002年-2004年在西安鼎天济农公司工作;", "labels": [["T0", "ORG", 12, 20, "西安鼎天济农公司"]]}, {"id": 439, "text": "2004年3月至今在铜城集团任证券事务代表。", "labels": [["T0", "ORG", 10, 14, "铜城集团"], ["T1", "TITLE", 15, 21, "证券事务代表"]]}, {"id": 440, "text": "童志胜,男,", "labels": [["T0", "NAME", 0, 3, "童志胜"]]}, {"id": 441, "text": "1976年出生,硕士研究生学历。", "labels": [["T0", "EDU", 8, 15, "硕士研究生学历"]]}, {"id": 442, "text": "2002年3月进入海航集团有限公司工作,历任长江租赁有限公司财务部经理、天津渤海租赁有限公司总裁助理、浦航租赁有限公司经理、公司副总裁、财务总监、兼任浦航租赁有限公司董事长及横琴国际融资租赁董事长。", "labels": [["T0", "ORG", 9, 17, "海航集团有限公司"], ["T1", "ORG", 15, 17, "公司"], ["T2", "ORG", 22, 30, "长江租赁有限公司"], ["T3", "ORG", 28, 30, "公司"], ["T4", "TITLE", 30, 35, "财务部经理"], ["T5", "TITLE", 33, 35, "经理"], ["T6", "ORG", 36, 46, "天津渤海租赁有限公司"], ["T7", "ORG", 44, 46, "公司"], ["T8", "TITLE", 46, 50, "总裁助理"], ["T9", "ORG", 51, 59, "浦航租赁有限公司"], ["T10", "ORG", 57, 59, "公司"], ["T11", "TITLE", 59, 61, "经理"], ["T12", "ORG", 62, 64, "公司"], ["T13", "TITLE", 64, 67, "副总裁"], ["T14", "TITLE", 68, 72, "财务总监"], ["T15", "ORG", 75, 83, "浦航租赁有限公司"], ["T16", "ORG", 81, 83, "公司"], ["T17", "TITLE", 83, 86, "董事长"], ["T18", "ORG", 87, 95, "横琴国际融资租赁"], ["T19", "TITLE", 95, 98, "董事长"]]}, {"id": 443, "text": "邱政先生:1972年6月出生,中国国籍,无境外永久居留权,大专学历,双专业。", "labels": [["T0", "NAME", 0, 2, "邱政"], ["T1", "CONT", 15, 19, "中国国籍"], ["T2", "EDU", 29, 33, "大专学历"]]}, {"id": 444, "text": "历任妮维雅(上海)公司成都销售主管,成都明霞事业有限公司销售一部经理,美晨集团股份有限公司大华西7省区域经理。", "labels": [["T0", "ORG", 2, 11, "妮维雅(上海)公司"], ["T1", "TITLE", 11, 17, "成都销售主管"], ["T2", "ORG", 18, 28, "成都明霞事业有限公司"], ["T3", "TITLE", 28, 34, "销售一部经理"], ["T4", "ORG", 35, 45, "美晨集团股份有限公司"], ["T5", "TITLE", 45, 54, "大华西7省区域经理"]]}, {"id": 445, "text": "现任恒康医疗集团股份公司副总经理,兼任日化事业部总经理。", "labels": [["T0", "ORG", 2, 12, "恒康医疗集团股份公司"], ["T1", "TITLE", 12, 16, "副总经理"], ["T2", "ORG", 19, 21, "日化"], ["T3", "TITLE", 21, 27, "事业部总经理"]]}, {"id": 446, "text": "邱政先生在商业快消行业、口腔行业拥有丰富的工作经验。", "labels": [["T0", "NAME", 0, 2, "邱政"]]}, {"id": 447, "text": "杨春枝,女,汉族,出生于1953年12月11日,中共党员,专科学历,会计师。", "labels": [["T0", "NAME", 0, 3, "杨春枝"], ["T1", "RACE", 6, 8, "汉族"], ["T2", "TITLE", 24, 28, "中共党员"], ["T3", "EDU", 29, 33, "专科学历"], ["T4", "TITLE", 34, 37, "会计师"]]}, {"id": 448, "text": "曾任伊春市消防器材厂会计、伊春光明企业集团公司经营部会计、伊春光明家具有限公司会计师、光明集团家具股份有限公司总会计师、伊春青峰实业有限公司总会计师,现任伊春青山木业有限公司副经理。", "labels": [["T0", "ORG", 2, 10, "伊春市消防器材厂"], ["T1", "TITLE", 10, 12, "会计"], ["T2", "ORG", 13, 23, "伊春光明企业集团公司"], ["T3", "TITLE", 23, 28, "经营部会计"], ["T4", "TITLE", 26, 28, "会计"], ["T5", "ORG", 29, 39, "伊春光明家具有限公司"], ["T6", "TITLE", 39, 41, "会计"], ["T7", "TITLE", 39, 42, "会计师"], ["T8", "ORG", 43, 55, "光明集团家具股份有限公司"], ["T9", "TITLE", 55, 59, "总会计师"], ["T10", "TITLE", 56, 58, "会计"], ["T11", "TITLE", 56, 59, "会计师"], ["T12", "ORG", 60, 70, "伊春青峰实业有限公司"], ["T13", "TITLE", 70, 74, "总会计师"], ["T14", "TITLE", 71, 73, "会计"], ["T15", "TITLE", 71, 74, "会计师"], ["T16", "ORG", 77, 87, "伊春青山木业有限公司"], ["T17", "TITLE", 87, 90, "副经理"]]}, {"id": 449, "text": "顾建国先生:研究生学历,正高级工程师,现任本公司董事长、马钢(集团)控股有限公司总经理。", "labels": [["T0", "NAME", 0, 3, "顾建国"], ["T1", "EDU", 6, 11, "研究生学历"], ["T2", "TITLE", 12, 18, "正高级工程师"], ["T3", "ORG", 21, 24, "本公司"], ["T4", "TITLE", 24, 27, "董事长"], ["T5", "TITLE", 40, 43, "总经理"]]}, {"id": 450, "text": "顾先生1993年9月起出任本公司董事、副总经理。", "labels": [["T0", "NAME", 0, 1, "顾"], ["T1", "ORG", 13, 16, "本公司"], ["T2", "TITLE", 16, 18, "董事"], ["T3", "TITLE", 19, 23, "副总经理"]]}, {"id": 451, "text": "1995年7月起出任本公司副董事长,总经理。", "labels": [["T0", "ORG", 10, 13, "本公司"], ["T1", "TITLE", 13, 17, "副董事长"], ["T2", "TITLE", 18, 21, "总经理"]]}, {"id": 452, "text": "1997年6月出任马钢总公司总经理。", "labels": [["T0", "ORG", 9, 14, "马钢总公司"], ["T1", "TITLE", 14, 17, "总经理"]]}, {"id": 453, "text": "1997年7月出任本公司董事长。", "labels": [["T0", "ORG", 9, 12, "本公司"], ["T1", "TITLE", 12, 15, "董事长"]]}, {"id": 454, "text": "1998年9月马钢总公司改制为马钢(集团)控股有限公司,顾先生出任总经理。", "labels": [["T0", "ORG", 7, 12, "马钢总公司"], ["T1", "ORG", 15, 27, "马钢(集团)控股有限公司"], ["T2", "NAME", 28, 29, "顾"], ["T3", "TITLE", 33, 36, "总经理"]]}, {"id": 455, "text": "顾先生1999年9月不再担任本公司总经理。", "labels": [["T0", "NAME", 0, 1, "顾"], ["T1", "ORG", 14, 17, "本公司"], ["T2", "TITLE", 17, 20, "总经理"]]}, {"id": 456, "text": "何次琴女士,大学学历,中国注册会计师。", "labels": [["T0", "NAME", 0, 3, "何次琴"], ["T1", "EDU", 6, 10, "大学学历"], ["T2", "TITLE", 11, 18, "中国注册会计师"]]}, {"id": 457, "text": "历任河北省邯郸地区(市)商业局副局长、江苏省冶金厅财务处处长等职,现为中国会计学会专业委员会常务理事。", "labels": [["T0", "TITLE", 15, 18, "副局长"], ["T1", "ORG", 19, 25, "江苏省冶金厅"], ["T2", "TITLE", 25, 30, "财务处处长"], ["T3", "ORG", 35, 46, "中国会计学会专业委员会"], ["T4", "TITLE", 46, 50, "常务理事"]]}, {"id": 458, "text": "有着丰富的企业财务管理经验。", "labels": []}, {"id": 459, "text": "赵黎明:男,", "labels": [["T0", "NAME", 0, 3, "赵黎明"]]}, {"id": 460, "text": "1951年出生,管理学博士,历任天津大学管理学院副教授、教授等职;", "labels": [["T0", "PRO", 8, 11, "管理学"], ["T1", "EDU", 11, 13, "博士"], ["T2", "ORG", 16, 24, "天津大学管理学院"], ["T3", "PRO", 20, 23, "管理学"], ["T4", "TITLE", 24, 27, "副教授"], ["T5", "TITLE", 25, 27, "教授"], ["T6", "TITLE", 28, 30, "教授"]]}, {"id": 461, "text": "现任天津大学管理学院教授、博士生导师,天津大学技术经济及管理博士点学术带头人,天津市技术经济与管理现代化研究会副理事长,享受国务院颁发的政府特殊津贴;", "labels": [["T0", "ORG", 2, 10, "天津大学管理学院"], ["T1", "TITLE", 10, 12, "教授"], ["T2", "TITLE", 13, 18, "博士生导师"], ["T3", "ORG", 19, 33, "天津大学技术经济及管理博士点"], ["T4", "TITLE", 33, 38, "学术带头人"], ["T5", "ORG", 39, 55, "天津市技术经济与管理现代化研究会"], ["T6", "TITLE", 55, 59, "副理事长"]]}, {"id": 462, "text": "本公司独立董事。", "labels": [["T0", "ORG", 0, 3, "本公司"], ["T1", "TITLE", 3, 7, "独立董事"]]}] -------------------------------------------------------------------------------- /data/cner/mid_data/labels.json: -------------------------------------------------------------------------------- 1 | ["TITLE", "RACE", "CONT", "ORG", "NAME", "EDU", "PRO", "LOC"] -------------------------------------------------------------------------------- /data/cner/raw_data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/data/cner/raw_data/__init__.py -------------------------------------------------------------------------------- /data/cner/raw_data/process.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | import json 4 | 5 | def preprocess(input_path, save_path, mode): 6 | if not os.path.exists(save_path): 7 | os.makedirs(save_path) 8 | data_path = os.path.join(save_path, mode + ".json") 9 | labels = set() 10 | result = [] 11 | tmp = {} 12 | tmp['id'] = 0 13 | tmp['text'] = '' 14 | tmp['labels'] = [] 15 | # =======先找出句子和句子中的所有实体和类型======= 16 | with open(input_path,'r',encoding='utf-8') as fp: 17 | lines = fp.readlines() 18 | texts = [] 19 | entities = [] 20 | words = [] 21 | entity_tmp = [] 22 | entities_tmp = [] 23 | for line in lines: 24 | line = line.strip().split(" ") 25 | if len(line) == 2: 26 | word = line[0] 27 | label = line[1] 28 | words.append(word) 29 | 30 | if "B-" in label: 31 | entity_tmp.append(word) 32 | elif "M-" in label: 33 | entity_tmp.append(word) 34 | elif "E-" in label: 35 | entity_tmp.append(word) 36 | if ("".join(entity_tmp), label.split("-")[-1]) not in entities_tmp: 37 | entities_tmp.append(("".join(entity_tmp), label.split("-")[-1])) 38 | labels.add(label.split("-")[-1]) 39 | entity_tmp = [] 40 | 41 | if "S-" in label: 42 | entity_tmp.append(word) 43 | if ("".join(entity_tmp), label.split("-")[-1]) not in entities_tmp: 44 | entities_tmp.append(("".join(entity_tmp), label.split("-")[-1])) 45 | entity_tmp = [] 46 | labels.add(label.split("-")[-1]) 47 | else: 48 | texts.append("".join(words)) 49 | entities.append(entities_tmp) 50 | words = [] 51 | entities_tmp = [] 52 | 53 | # for text,entity in zip(texts, entities): 54 | # print(text, entity) 55 | # print(labels) 56 | # ========================================== 57 | # =======找出句子中实体的位置======= 58 | i = 0 59 | for text,entity in zip(texts, entities): 60 | 61 | if entity: 62 | ltmp = [] 63 | for ent,type in entity: 64 | for span in re.finditer(ent, text): 65 | start = span.start() 66 | end = span.end() 67 | ltmp.append((type, start, end, ent)) 68 | # print(ltmp) 69 | ltmp = sorted(ltmp, key=lambda x:(x[1],x[2])) 70 | tmp['id'] = i 71 | tmp['text'] = text 72 | for j in range(len(ltmp)): 73 | tmp['labels'].append(["T{}".format(str(j)), ltmp[j][0], ltmp[j][1], ltmp[j][2], ltmp[j][3]]) 74 | else: 75 | tmp['id'] = i 76 | tmp['text'] = text 77 | tmp['labels'] = [] 78 | result.append(tmp) 79 | # print(i, text, entity, tmp) 80 | tmp = {} 81 | tmp['id'] = 0 82 | tmp['text'] = '' 83 | tmp['labels'] = [] 84 | i += 1 85 | 86 | with open(data_path,'w', encoding='utf-8') as fp: 87 | fp.write(json.dumps(result, ensure_ascii=False)) 88 | 89 | if mode == "train": 90 | label_path = os.path.join(save_path, "labels.json") 91 | with open(label_path, 'w', encoding='utf-8') as fp: 92 | fp.write(json.dumps(list(labels), ensure_ascii=False)) 93 | 94 | preprocess("train.char.bmes", '../mid_data', "train") 95 | preprocess("dev.char.bmes", '../mid_data', "dev") 96 | preprocess("test.char.bmes", '../mid_data', "test") 97 | 98 | labels_path = os.path.join('../mid_data/labels.json') 99 | with open(labels_path, 'r') as fp: 100 | labels = json.load(fp) 101 | 102 | # tmp_labels = [] 103 | # tmp_labels.append('O') 104 | # tmp_labels.append('B') 105 | # tmp_labels.append('I') 106 | 107 | 108 | # label2id = {} 109 | # for k,v in enumerate(tmp_labels): 110 | # label2id[v] = k 111 | # path = '../mid_data/' 112 | # if not os.path.exists(path): 113 | # os.makedirs(path) 114 | # with open(os.path.join(path, "nor_ent2id.json"),'w') as fp: 115 | # fp.write(json.dumps(label2id, ensure_ascii=False)) 116 | -------------------------------------------------------------------------------- /data_loader.py: -------------------------------------------------------------------------------- 1 | import json 2 | import torch 3 | import numpy as np 4 | from torch.utils.data import DataLoader, Dataset 5 | from utils.common_utils import sequence_padding 6 | 7 | 8 | class ListDataset(Dataset): 9 | def __init__(self, file_path=None, data=None, tokenizer=None, max_len=None, **kwargs): 10 | self.kwargs = kwargs 11 | if isinstance(file_path, (str, list)): 12 | self.data = self.load_data(file_path, tokenizer, max_len) 13 | elif isinstance(data, list): 14 | self.data = data 15 | else: 16 | raise ValueError('The input args shall be str format file_path / list format dataset') 17 | 18 | def __len__(self): 19 | return len(self.data) 20 | 21 | def __getitem__(self, index): 22 | return self.data[index] 23 | 24 | @staticmethod 25 | def load_data(file_path, tokenizer, max_len): 26 | return file_path 27 | 28 | 29 | 30 | # 加载数据集 31 | class MyDataset(ListDataset): 32 | @staticmethod 33 | def load_data(filename, tokenizer, max_len): 34 | data = [] 35 | all_tokens = [] 36 | with open(filename, encoding='utf-8') as f: 37 | f = f.read() 38 | f = json.loads(f) 39 | for d in f: 40 | text = d['text'] 41 | labels = d['labels'] 42 | tokens = [i for i in text] 43 | if len(tokens) > max_len - 2: 44 | tokens = tokens[:max_len - 2] 45 | tokens = ['[CLS]'] + tokens + ['[SEP]'] 46 | all_tokens.append(tokens) 47 | token_ids = tokenizer.convert_tokens_to_ids(tokens) 48 | label = [] 49 | for lab in labels: # 这里需要加上CLS的位置, lab[3]不用加1,因为是实体结尾的后一位 50 | label.append([lab[2]+1, lab[3], lab[1]]) 51 | data.append((token_ids, label)) # label为[[start, end, entity], ...] 52 | return data, all_tokens 53 | 54 | class Collate: 55 | def __init__(self, max_len, tag2id, device): 56 | self.maxlen = max_len 57 | self.tag2id = tag2id 58 | self.device = device 59 | 60 | def collate_fn(self, batch): 61 | batch_labels = [] 62 | batch_token_ids = [] 63 | batch_attention_mask = [] 64 | batch_token_type_ids = [] 65 | for i, (token_ids, text_labels) in enumerate(batch): 66 | labels = np.zeros((len(self.tag2id), self.maxlen, self.maxlen)) 67 | batch_token_ids.append(token_ids) # 前面已经限制了长度 68 | batch_attention_mask.append([1] * len(token_ids)) 69 | batch_token_type_ids.append([0] * len(token_ids)) 70 | for start, end, label in text_labels: 71 | # 排除SEP及之后的 72 | if end >= self.maxlen - 1: 73 | continue 74 | label_id = self.tag2id[label] 75 | labels[label_id, start, end] = 1 76 | batch_labels.append(labels) 77 | batch_token_ids = torch.tensor(sequence_padding(batch_token_ids, length=self.maxlen), dtype=torch.long, device=self.device) 78 | attention_mask = torch.tensor(sequence_padding(batch_attention_mask, length=self.maxlen), dtype=torch.long, device=self.device) 79 | token_type_ids = torch.tensor(sequence_padding(batch_token_type_ids, length=self.maxlen), dtype=torch.long, device=self.device) 80 | batch_labels = torch.tensor(batch_labels, dtype=torch.long, device=self.device) 81 | return batch_token_ids, attention_mask, token_type_ids, batch_labels 82 | 83 | 84 | if __name__ == "__main__": 85 | from transformers import BertTokenizer 86 | max_len = 150 87 | tokenizer = BertTokenizer.from_pretrained('model_hub/chinese-bert-wwm-ext/vocab.txt') 88 | train_dataset, train_callback = MyDataset(file_path='data/cner/mid_data/train.json', 89 | tokenizer=tokenizer, 90 | max_len=max_len) 91 | print(train_dataset[0]) 92 | 93 | with open('data/cner/mid_data/labels.json') as fp: 94 | labels = json.load(fp) 95 | id2tag = {} 96 | tag2id = {} 97 | for i,label in enumerate(labels): 98 | id2tag[i] = label 99 | tag2id[label] = i 100 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 101 | collate = Collate(max_len=max_len, tag2id=tag2id, device=device) 102 | batch_size = 2 103 | train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=False, collate_fn=collate.collate_fn) 104 | 105 | for i, batch in enumerate(train_dataloader): 106 | print(batch[0].shape) 107 | print(batch[1].shape) 108 | print(batch[2].shape) 109 | print(batch[3].shape) 110 | break 111 | -------------------------------------------------------------------------------- /globalpoint.py: -------------------------------------------------------------------------------- 1 | import math 2 | import torch 3 | import torch.nn as nn 4 | from transformers import BertModel 5 | 6 | class MultilabelCategoricalCrossentropy(nn.Module): 7 | """多标签分类的交叉熵 8 | 说明:y_true和y_pred的shape一致,y_true的元素非0即1, 1表示对应的类为目标类,0表示对应的类为非目标类。 9 | 警告:请保证y_pred的值域是全体实数,换言之一般情况下y_pred不用加激活函数,尤其是不能加sigmoid或者softmax!预测 10 | 阶段则输出y_pred大于0的类。如有疑问,请仔细阅读并理解本文。 11 | 参考:https://kexue.fm/archives/7359 12 | """ 13 | def __init__(self, **kwargs): 14 | super().__init__(**kwargs) 15 | def forward(self, y_pred, y_true): 16 | """ y_true ([Tensor]): [..., num_classes] 17 | y_pred ([Tensor]): [..., num_classes] 18 | """ 19 | y_pred = (1-2*y_true) * y_pred 20 | y_pred_pos = y_pred - (1-y_true) * 1e12 21 | y_pred_neg = y_pred - y_true * 1e12 22 | 23 | y_pred_pos = torch.cat([y_pred_pos, torch.zeros_like(y_pred_pos[..., :1])], dim=-1) 24 | y_pred_neg = torch.cat([y_pred_neg, torch.zeros_like(y_pred_neg[..., :1])], dim=-1) 25 | pos_loss = torch.logsumexp(y_pred_pos, dim=-1) 26 | neg_loss = torch.logsumexp(y_pred_neg, dim=-1) 27 | return (pos_loss + neg_loss).mean() 28 | 29 | 30 | 31 | class MyLoss(MultilabelCategoricalCrossentropy): 32 | def __init__(self, **kwargs): 33 | super().__init__(**kwargs) 34 | def forward(self, y_pred, y_true): 35 | y_true = y_true.view(y_true.shape[0]*y_true.shape[1], -1) # [btz*ner_vocab_size, seq_len*seq_len] 36 | y_pred = y_pred.view(y_pred.shape[0]*y_pred.shape[1], -1) # [btz*ner_vocab_size, seq_len*seq_len] 37 | return super().forward(y_pred, y_true) 38 | 39 | 40 | def get_sinusoid_encoding_table(n_position, d_hid, padding_idx=None): 41 | '''Returns: [seq_len, d_hid] 42 | ''' 43 | position = torch.arange(0, n_position, dtype=torch.float).unsqueeze(1) 44 | div_term = torch.exp(torch.arange(0, d_hid, 2).float() * (-math.log(10000.0) / d_hid)) 45 | embeddings_table = torch.zeros(n_position, d_hid) 46 | embeddings_table[:, 0::2] = torch.sin(position * div_term) 47 | embeddings_table[:, 1::2] = torch.cos(position * div_term) 48 | return embeddings_table 49 | 50 | 51 | class RoPEPositionEncoding(nn.Module): 52 | """旋转式位置编码: https://kexue.fm/archives/8265 53 | """ 54 | def __init__(self, max_position, embedding_size): 55 | super(RoPEPositionEncoding, self).__init__() 56 | position_embeddings = get_sinusoid_encoding_table(max_position, embedding_size) # [seq_len, hdsz] 57 | cos_position = position_embeddings[:, 1::2].repeat_interleave(2, dim=-1) 58 | sin_position = position_embeddings[:, ::2].repeat_interleave(2, dim=-1) 59 | # register_buffer是为了最外层model.to(device),不用内部指定device 60 | self.register_buffer('cos_position', cos_position) 61 | self.register_buffer('sin_position', sin_position) 62 | 63 | def forward(self, qw, seq_dim=-2): 64 | # 默认最后两个维度为[seq_len, hdsz] 65 | seq_len = qw.shape[seq_dim] 66 | qw2 = torch.stack([-qw[..., 1::2], qw[..., ::2]], dim=-1).reshape_as(qw) 67 | return qw * self.cos_position[:seq_len] + qw2 * self.sin_position[:seq_len] 68 | 69 | 70 | class EfficientGlobalPointer(nn.Module): 71 | """更加参数高效的GlobalPointer 72 | 参考:https://kexue.fm/archives/8877 73 | """ 74 | def __init__(self, hidden_size, heads, head_size, RoPE=True, max_len=512, use_bias=True, tril_mask=True): 75 | super().__init__() 76 | self.heads = heads 77 | self.head_size = head_size 78 | self.RoPE = RoPE 79 | self.tril_mask = tril_mask 80 | self.RoPE = RoPE 81 | 82 | self.p_dense = nn.Linear(hidden_size, head_size * 2, bias=use_bias) 83 | self.q_dense = nn.Linear(head_size * 2, heads * 2, bias=use_bias) 84 | if self.RoPE: 85 | self.position_embedding = RoPEPositionEncoding(max_len, head_size) 86 | 87 | def forward(self, inputs, mask=None): 88 | ''' inputs: [..., hdsz] 89 | mask: [bez, seq_len], padding部分为0 90 | ''' 91 | sequence_output = self.p_dense(inputs) # [..., head_size*2] 92 | qw, kw = sequence_output[..., :self.head_size], sequence_output[..., self.head_size:] # [..., heads, head_size] 93 | 94 | # ROPE编码 95 | if self.RoPE: 96 | qw = self.position_embedding(qw) 97 | kw = self.position_embedding(kw) 98 | 99 | # 计算内积 100 | logits = torch.einsum('bmd,bnd->bmn', qw, kw) / self.head_size**0.5 # [btz, seq_len, seq_len] 101 | bias_input = self.q_dense(sequence_output) # [..., heads*2] 102 | bias = torch.stack(torch.chunk(bias_input, self.heads, dim=-1), dim=-2).transpose(1,2) # [btz, head_size, seq_len,2] 103 | logits = logits.unsqueeze(1) + bias[..., :1] + bias[..., 1:].transpose(2, 3) # [btz, head_size, seq_len, seq_len] 104 | 105 | # 排除padding 106 | if mask is not None: 107 | attention_mask1 = 1 - mask.unsqueeze(1).unsqueeze(3) # [btz, 1, seq_len, 1] 108 | attention_mask2 = 1 - mask.unsqueeze(1).unsqueeze(2) # [btz, 1, 1, seq_len] 109 | logits = logits.masked_fill(attention_mask1.bool(), value=-float('inf')) 110 | logits = logits.masked_fill(attention_mask2.bool(), value=-float('inf')) 111 | 112 | # 排除下三角 113 | if self.tril_mask: 114 | logits = logits - torch.tril(torch.ones_like(logits), -1) * 1e12 115 | 116 | return logits 117 | 118 | 119 | class GlobalPointer(nn.Module): 120 | """全局指针模块 121 | 将序列的每个(start, end)作为整体来进行判断 122 | 参考:https://kexue.fm/archives/8373 123 | """ 124 | def __init__(self, hidden_size, heads, head_size, RoPE=True, max_len=512, use_bias=True, tril_mask=True): 125 | super().__init__() 126 | self.heads = heads 127 | self.head_size = head_size 128 | self.RoPE = RoPE 129 | self.tril_mask = tril_mask 130 | self.RoPE = RoPE 131 | 132 | self.dense = nn.Linear(hidden_size, heads * head_size * 2, bias=use_bias) 133 | if self.RoPE: 134 | self.position_embedding = RoPEPositionEncoding(max_len, head_size) 135 | 136 | 137 | 138 | def forward(self, inputs, mask=None): 139 | ''' inputs: [..., hdsz] 140 | mask: [bez, seq_len], padding部分为0 141 | ''' 142 | # [batchsize, 150, 8*64*2] 143 | sequence_output = self.dense(inputs) # [..., heads*head_size*2] 144 | # torch.chunk(sequence_output, self.heads, dim=-1) 8个(batchsize, 150, 64*2) 145 | # [batchsize, 150, 8, 64*2] 146 | sequence_output = torch.stack(torch.chunk(sequence_output, self.heads, dim=-1), dim=-2) # [..., heads, head_size*2] 147 | # qw:[batchsize, 150, 8, 64], kw:[batchsize, 150, 8, 64] 148 | qw, kw = sequence_output[..., :self.head_size], sequence_output[..., self.head_size:] # [..., heads, head_size] 149 | 150 | # ROPE编码 151 | if self.RoPE: 152 | qw = self.position_embedding(qw) 153 | kw = self.position_embedding(kw) 154 | 155 | # 计算内积 156 | logits = torch.einsum('bmhd,bnhd->bhmn', qw, kw) # [btz, heads, seq_len, seq_len] 157 | 158 | # 排除padding 159 | if mask is not None: 160 | attention_mask1 = 1 - mask.unsqueeze(1).unsqueeze(3) # [btz, 1, seq_len, 1] 161 | attention_mask2 = 1 - mask.unsqueeze(1).unsqueeze(2) # [btz, 1, 1, seq_len] 162 | logits = logits.masked_fill(attention_mask1.bool(), value=-float('inf')) 163 | logits = logits.masked_fill(attention_mask2.bool(), value=-float('inf')) 164 | 165 | # 排除下三角 166 | if self.tril_mask: 167 | logits = logits - torch.tril(torch.ones_like(logits), -1) * 1e12 168 | 169 | return logits / self.head_size**0.5 170 | 171 | 172 | class GlobalPointerNer(nn.Module): 173 | def __init__(self, args): 174 | super().__init__() 175 | self.bert = BertModel.from_pretrained(args.bert_dir, output_hidden_states=True, 176 | hidden_dropout_prob=args.dropout_prob) 177 | if args.use_efficient_globalpointer == "True": 178 | self.global_pointer = EfficientGlobalPointer(hidden_size=768, heads=args.num_tags, head_size=args.head_size) 179 | else: 180 | self.global_pointer = GlobalPointer(hidden_size=768, heads=args.num_tags, head_size=args.head_size) 181 | self.criterion = MyLoss() 182 | 183 | def forward(self, token_ids, attention_masks, token_type_ids, labels=None): 184 | output = self.bert(token_ids, attention_masks, token_type_ids) # [btz, seq_len, hdsz] 185 | sequence_output = output[0] 186 | logits = self.global_pointer(sequence_output, attention_masks.gt(0).long()) 187 | if labels is None: 188 | # scale返回 189 | return logits 190 | 191 | loss = self.criterion(logits, labels) 192 | return loss, logits -------------------------------------------------------------------------------- /globalpoint2.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | from transformers import BertModel 4 | 5 | def multilabel_categorical_crossentropy(y_pred, y_true): 6 | """ 7 | https://kexue.fm/archives/7359 8 | """ 9 | y_true = y_true.view(y_true.shape[0]*y_true.shape[1], -1) # [btz*ner_vocab_size, seq_len*seq_len] 10 | y_pred = y_pred.view(y_pred.shape[0]*y_pred.shape[1], -1) # [btz*ner_vocab_size, seq_len*seq_len] 11 | y_pred = (1 - 2 * y_true) * y_pred # -1 -> pos classes, 1 -> neg classes 12 | y_pred_neg = y_pred - y_true * 1e12 # mask the pred outputs of pos classes 13 | y_pred_pos = (y_pred - (1 - y_true) * 1e12) # mask the pred outputs of neg classes 14 | zeros = torch.zeros_like(y_pred[..., :1]) 15 | y_pred_neg = torch.cat([y_pred_neg, zeros], dim=-1) 16 | y_pred_pos = torch.cat([y_pred_pos, zeros], dim=-1) 17 | neg_loss = torch.logsumexp(y_pred_neg, dim=-1) 18 | pos_loss = torch.logsumexp(y_pred_pos, dim=-1) 19 | return (neg_loss + pos_loss).mean() 20 | 21 | class GlobalPointer(nn.Module): 22 | def __init__(self, hidden_size, heads, head_size, RoPE=True): 23 | super().__init__() 24 | self.heads = heads 25 | self.head_size = head_size 26 | self.dense = nn.Linear(hidden_size, self.heads * self.head_size * 2) 27 | self.RoPE = RoPE 28 | 29 | 30 | def sinusoidal_position_embedding(self, batch_size, seq_len, output_dim): 31 | position_ids = torch.arange(0, seq_len, dtype=torch.float).unsqueeze(-1) 32 | indices = torch.arange(0, output_dim // 2, dtype=torch.float) 33 | indices = torch.pow(10000, -2 * indices / output_dim) 34 | embeddings = position_ids * indices 35 | embeddings = torch.stack([torch.sin(embeddings), torch.cos(embeddings)], dim=-1) 36 | embeddings = embeddings.repeat((batch_size, *([1]*len(embeddings.shape)))) 37 | embeddings = torch.reshape(embeddings, (batch_size, seq_len, output_dim)) 38 | return embeddings 39 | 40 | def forward(self, inputs, attention_mask): 41 | 42 | batch_size = inputs.size()[0] 43 | seq_len = inputs.size()[1] 44 | 45 | # outputs:(batch_size, seq_len, ent_type_size*inner_dim*2) 46 | outputs = self.dense(inputs) 47 | outputs = torch.split(outputs, self.head_size * 2, dim=-1) 48 | # outputs:(batch_size, seq_len, ent_type_size, inner_dim*2) 49 | outputs = torch.stack(outputs, dim=-2) 50 | # qw,kw:(batch_size, seq_len, ent_type_size, inner_dim) 51 | qw, kw = outputs[...,:self.head_size], outputs[...,self.head_size:] # TODO:修改为Linear获取? 52 | 53 | if self.RoPE: 54 | # pos_emb:(batch_size, seq_len, inner_dim) 55 | pos_emb = self.sinusoidal_position_embedding(batch_size, seq_len, self.head_size).to(outputs.device) 56 | # cos_pos,sin_pos: (batch_size, seq_len, 1, inner_dim) 57 | cos_pos = pos_emb[..., None, 1::2].repeat_interleave(2, dim=-1) 58 | sin_pos = pos_emb[..., None,::2].repeat_interleave(2, dim=-1) 59 | qw2 = torch.stack([-qw[..., 1::2], qw[...,::2]], -1) 60 | qw2 = qw2.reshape(qw.shape) 61 | qw = qw * cos_pos + qw2 * sin_pos 62 | kw2 = torch.stack([-kw[..., 1::2], kw[...,::2]], -1) 63 | kw2 = kw2.reshape(kw.shape) 64 | kw = kw * cos_pos + kw2 * sin_pos 65 | 66 | # logits:(batch_size, ent_type_size, seq_len, seq_len) 67 | logits = torch.einsum('bmhd,bnhd->bhmn', qw, kw) 68 | 69 | # padding mask 70 | pad_mask = attention_mask.unsqueeze(1).unsqueeze(1).expand(batch_size, self.heads, seq_len, seq_len) 71 | # pad_mask_h = attention_mask.unsqueeze(1).unsqueeze(-1).expand(batch_size, self.ent_type_size, seq_len, seq_len) 72 | # pad_mask = pad_mask_v&pad_mask_h 73 | logits = logits*pad_mask - (1-pad_mask)*1e12 74 | 75 | # 排除下三角 76 | mask = torch.tril(torch.ones_like(logits), -1) 77 | logits = logits - mask * 1e12 78 | 79 | return logits/self.head_size**0.5 80 | 81 | 82 | class GlobalPointerNer(nn.Module): 83 | def __init__(self, args): 84 | super().__init__() 85 | self.bert = BertModel.from_pretrained(args.bert_dir, output_hidden_states=True, 86 | hidden_dropout_prob=args.dropout_prob) 87 | self.global_pointer = GlobalPointer(hidden_size=768, heads=args.num_tags, head_size=args.head_size) 88 | 89 | def forward(self, token_ids, attention_masks, token_type_ids, labels=None): 90 | output = self.bert(token_ids, attention_masks, token_type_ids) # [btz, seq_len, hdsz] 91 | sequence_output = output[0] 92 | logits = self.global_pointer(sequence_output, attention_masks.gt(0).long()) 93 | if labels is None: 94 | # scale返回 95 | return logits 96 | 97 | loss = multilabel_categorical_crossentropy(logits, labels) 98 | return loss, logits -------------------------------------------------------------------------------- /logs/bert.log: -------------------------------------------------------------------------------- 1 | 2022-06-23 08:05:20,314 - INFO - main.py - - 219 - Namespace(adam_epsilon=1e-08, bert_dir='model_hub/chinese-bert-wwm-ext/', data_dir='./data/cner', dropout_prob=0.1, eval_batch_size=8, eval_steps=50, gpu_ids='0', head_size=64, log_dir='./logs/', lr=5e-05, max_grad_norm=1.0, max_seq_len=150, num_tags=8, other_lr=5e-05, output_dir='./checkpoints/', seed=123, train_batch_size=32, train_epochs=7, use_tensorboard='True', warmup_proportion=0.1, weight_decay=0.01) 2 | 2022-06-23 08:05:26,932 - INFO - train_utils.py - load_model_and_parallel - 113 - Use single gpu in: ['0'] 3 | 2022-06-23 08:05:28,429 - INFO - main.py - train - 58 - 【train】 epoch:1 0/840 loss:6.5537 4 | 2022-06-23 08:05:29,614 - INFO - main.py - train - 58 - 【train】 epoch:1 1/840 loss:6.3655 5 | 2022-06-23 08:05:30,792 - INFO - main.py - train - 58 - 【train】 epoch:1 2/840 loss:6.3629 6 | 2022-06-23 08:05:31,977 - INFO - main.py - train - 58 - 【train】 epoch:1 3/840 loss:6.2017 7 | 2022-06-23 08:05:33,169 - INFO - main.py - train - 58 - 【train】 epoch:1 4/840 loss:6.2716 8 | 2022-06-23 08:05:34,360 - INFO - main.py - train - 58 - 【train】 epoch:1 5/840 loss:5.6383 9 | 2022-06-23 08:05:35,541 - INFO - main.py - train - 58 - 【train】 epoch:1 6/840 loss:5.8822 10 | 2022-06-23 08:05:36,718 - INFO - main.py - train - 58 - 【train】 epoch:1 7/840 loss:5.8615 11 | 2022-06-23 08:05:37,890 - INFO - main.py - train - 58 - 【train】 epoch:1 8/840 loss:6.1739 12 | 2022-06-23 08:05:39,089 - INFO - main.py - train - 58 - 【train】 epoch:1 9/840 loss:6.0868 13 | 2022-06-23 08:05:40,280 - INFO - main.py - train - 58 - 【train】 epoch:1 10/840 loss:6.3841 14 | 2022-06-23 08:05:41,472 - INFO - main.py - train - 58 - 【train】 epoch:1 11/840 loss:5.7132 15 | 2022-06-23 08:05:42,666 - INFO - main.py - train - 58 - 【train】 epoch:1 12/840 loss:6.1425 16 | 2022-06-23 08:05:43,853 - INFO - main.py - train - 58 - 【train】 epoch:1 13/840 loss:5.9449 17 | 2022-06-23 08:05:45,047 - INFO - main.py - train - 58 - 【train】 epoch:1 14/840 loss:6.0713 18 | 2022-06-23 08:05:46,257 - INFO - main.py - train - 58 - 【train】 epoch:1 15/840 loss:6.0539 19 | 2022-06-23 08:05:47,473 - INFO - main.py - train - 58 - 【train】 epoch:1 16/840 loss:6.5734 20 | 2022-06-23 08:05:48,660 - INFO - main.py - train - 58 - 【train】 epoch:1 17/840 loss:5.5885 21 | 2022-06-23 08:05:49,855 - INFO - main.py - train - 58 - 【train】 epoch:1 18/840 loss:6.0319 22 | 2022-06-23 08:05:51,049 - INFO - main.py - train - 58 - 【train】 epoch:1 19/840 loss:5.7341 23 | 2022-06-23 08:05:52,248 - INFO - main.py - train - 58 - 【train】 epoch:1 20/840 loss:6.0054 24 | 2022-06-23 08:05:53,458 - INFO - main.py - train - 58 - 【train】 epoch:1 21/840 loss:5.4084 25 | 2022-06-23 08:05:54,634 - INFO - main.py - train - 58 - 【train】 epoch:1 22/840 loss:5.7237 26 | 2022-06-23 08:05:55,845 - INFO - main.py - train - 58 - 【train】 epoch:1 23/840 loss:5.6888 27 | 2022-06-23 08:05:57,051 - INFO - main.py - train - 58 - 【train】 epoch:1 24/840 loss:6.1065 28 | 2022-06-23 08:05:58,256 - INFO - main.py - train - 58 - 【train】 epoch:1 25/840 loss:5.3510 29 | 2022-06-23 08:05:59,461 - INFO - main.py - train - 58 - 【train】 epoch:1 26/840 loss:5.4284 30 | 2022-06-23 08:06:00,698 - INFO - main.py - train - 58 - 【train】 epoch:1 27/840 loss:5.1626 31 | 2022-06-23 08:06:01,904 - INFO - main.py - train - 58 - 【train】 epoch:1 28/840 loss:5.0619 32 | 2022-06-23 08:06:03,108 - INFO - main.py - train - 58 - 【train】 epoch:1 29/840 loss:5.4693 33 | 2022-06-23 08:06:04,316 - INFO - main.py - train - 58 - 【train】 epoch:1 30/840 loss:4.9296 34 | 2022-06-23 08:06:05,542 - INFO - main.py - train - 58 - 【train】 epoch:1 31/840 loss:4.9964 35 | 2022-06-23 08:06:06,760 - INFO - main.py - train - 58 - 【train】 epoch:1 32/840 loss:5.0993 36 | 2022-06-23 08:06:07,972 - INFO - main.py - train - 58 - 【train】 epoch:1 33/840 loss:5.3872 37 | 2022-06-23 08:06:09,181 - INFO - main.py - train - 58 - 【train】 epoch:1 34/840 loss:5.1140 38 | 2022-06-23 08:06:10,401 - INFO - main.py - train - 58 - 【train】 epoch:1 35/840 loss:5.1166 39 | 2022-06-23 08:06:11,609 - INFO - main.py - train - 58 - 【train】 epoch:1 36/840 loss:4.9120 40 | 2022-06-23 08:06:12,843 - INFO - main.py - train - 58 - 【train】 epoch:1 37/840 loss:5.0527 41 | 2022-06-23 08:06:14,063 - INFO - main.py - train - 58 - 【train】 epoch:1 38/840 loss:5.0360 42 | 2022-06-23 08:06:15,269 - INFO - main.py - train - 58 - 【train】 epoch:1 39/840 loss:4.8506 43 | 2022-06-23 08:06:16,483 - INFO - main.py - train - 58 - 【train】 epoch:1 40/840 loss:4.5289 44 | 2022-06-23 08:06:17,693 - INFO - main.py - train - 58 - 【train】 epoch:1 41/840 loss:4.4457 45 | 2022-06-23 08:06:18,912 - INFO - main.py - train - 58 - 【train】 epoch:1 42/840 loss:4.6417 46 | 2022-06-23 08:06:20,130 - INFO - main.py - train - 58 - 【train】 epoch:1 43/840 loss:3.9810 47 | 2022-06-23 08:06:21,355 - INFO - main.py - train - 58 - 【train】 epoch:1 44/840 loss:4.0307 48 | 2022-06-23 08:06:22,567 - INFO - main.py - train - 58 - 【train】 epoch:1 45/840 loss:3.9563 49 | 2022-06-23 08:06:23,773 - INFO - main.py - train - 58 - 【train】 epoch:1 46/840 loss:3.8400 50 | 2022-06-23 08:06:25,003 - INFO - main.py - train - 58 - 【train】 epoch:1 47/840 loss:3.8885 51 | 2022-06-23 08:06:26,230 - INFO - main.py - train - 58 - 【train】 epoch:1 48/840 loss:4.1570 52 | 2022-06-23 08:06:27,446 - INFO - main.py - train - 58 - 【train】 epoch:1 49/840 loss:3.7406 53 | 2022-06-23 08:06:37,792 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.0000 recall=0.0000 f1_score=0.0000 54 | 2022-06-23 08:06:38,993 - INFO - main.py - train - 58 - 【train】 epoch:1 50/840 loss:3.8153 55 | 2022-06-23 08:06:40,219 - INFO - main.py - train - 58 - 【train】 epoch:1 51/840 loss:4.1280 56 | 2022-06-23 08:06:41,431 - INFO - main.py - train - 58 - 【train】 epoch:1 52/840 loss:3.8055 57 | 2022-06-23 08:06:42,655 - INFO - main.py - train - 58 - 【train】 epoch:1 53/840 loss:3.5490 58 | 2022-06-23 08:06:43,880 - INFO - main.py - train - 58 - 【train】 epoch:1 54/840 loss:3.5057 59 | 2022-06-23 08:06:45,082 - INFO - main.py - train - 58 - 【train】 epoch:1 55/840 loss:2.9185 60 | 2022-06-23 08:06:46,293 - INFO - main.py - train - 58 - 【train】 epoch:1 56/840 loss:3.2183 61 | 2022-06-23 08:06:47,502 - INFO - main.py - train - 58 - 【train】 epoch:1 57/840 loss:3.0781 62 | 2022-06-23 08:06:48,716 - INFO - main.py - train - 58 - 【train】 epoch:1 58/840 loss:3.0861 63 | 2022-06-23 08:06:49,915 - INFO - main.py - train - 58 - 【train】 epoch:1 59/840 loss:2.8684 64 | 2022-06-23 08:06:51,121 - INFO - main.py - train - 58 - 【train】 epoch:1 60/840 loss:2.9070 65 | 2022-06-23 08:06:52,324 - INFO - main.py - train - 58 - 【train】 epoch:1 61/840 loss:2.8034 66 | 2022-06-23 08:06:53,553 - INFO - main.py - train - 58 - 【train】 epoch:1 62/840 loss:2.6428 67 | 2022-06-23 08:06:54,762 - INFO - main.py - train - 58 - 【train】 epoch:1 63/840 loss:2.9468 68 | 2022-06-23 08:06:55,963 - INFO - main.py - train - 58 - 【train】 epoch:1 64/840 loss:2.3383 69 | 2022-06-23 08:06:57,173 - INFO - main.py - train - 58 - 【train】 epoch:1 65/840 loss:2.1243 70 | 2022-06-23 08:06:58,376 - INFO - main.py - train - 58 - 【train】 epoch:1 66/840 loss:1.8173 71 | 2022-06-23 08:06:59,585 - INFO - main.py - train - 58 - 【train】 epoch:1 67/840 loss:2.1727 72 | 2022-06-23 08:07:00,798 - INFO - main.py - train - 58 - 【train】 epoch:1 68/840 loss:2.1184 73 | 2022-06-23 08:07:02,022 - INFO - main.py - train - 58 - 【train】 epoch:1 69/840 loss:1.8999 74 | 2022-06-23 08:07:03,229 - INFO - main.py - train - 58 - 【train】 epoch:1 70/840 loss:2.0349 75 | 2022-06-23 08:07:04,435 - INFO - main.py - train - 58 - 【train】 epoch:1 71/840 loss:1.6610 76 | 2022-06-23 08:07:05,635 - INFO - main.py - train - 58 - 【train】 epoch:1 72/840 loss:1.7273 77 | 2022-06-23 08:07:06,847 - INFO - main.py - train - 58 - 【train】 epoch:1 73/840 loss:1.7493 78 | 2022-06-23 08:07:08,054 - INFO - main.py - train - 58 - 【train】 epoch:1 74/840 loss:0.9700 79 | 2022-06-23 08:07:09,266 - INFO - main.py - train - 58 - 【train】 epoch:1 75/840 loss:1.7063 80 | 2022-06-23 08:07:10,470 - INFO - main.py - train - 58 - 【train】 epoch:1 76/840 loss:1.3179 81 | 2022-06-23 08:07:11,674 - INFO - main.py - train - 58 - 【train】 epoch:1 77/840 loss:1.2228 82 | 2022-06-23 08:07:12,889 - INFO - main.py - train - 58 - 【train】 epoch:1 78/840 loss:0.8940 83 | 2022-06-23 08:07:14,101 - INFO - main.py - train - 58 - 【train】 epoch:1 79/840 loss:0.9013 84 | 2022-06-23 08:07:15,307 - INFO - main.py - train - 58 - 【train】 epoch:1 80/840 loss:0.8444 85 | 2022-06-23 08:07:16,513 - INFO - main.py - train - 58 - 【train】 epoch:1 81/840 loss:0.7647 86 | 2022-06-23 08:07:17,735 - INFO - main.py - train - 58 - 【train】 epoch:1 82/840 loss:0.8940 87 | 2022-06-23 08:07:18,955 - INFO - main.py - train - 58 - 【train】 epoch:1 83/840 loss:0.6881 88 | 2022-06-23 08:07:20,168 - INFO - main.py - train - 58 - 【train】 epoch:1 84/840 loss:0.7724 89 | 2022-06-23 08:07:21,379 - INFO - main.py - train - 58 - 【train】 epoch:1 85/840 loss:0.5654 90 | 2022-06-23 08:07:22,577 - INFO - main.py - train - 58 - 【train】 epoch:1 86/840 loss:0.5247 91 | 2022-06-23 08:07:23,792 - INFO - main.py - train - 58 - 【train】 epoch:1 87/840 loss:0.5810 92 | 2022-06-23 08:07:24,993 - INFO - main.py - train - 58 - 【train】 epoch:1 88/840 loss:0.5921 93 | 2022-06-23 08:07:26,212 - INFO - main.py - train - 58 - 【train】 epoch:1 89/840 loss:0.4610 94 | 2022-06-23 08:07:27,431 - INFO - main.py - train - 58 - 【train】 epoch:1 90/840 loss:0.4841 95 | 2022-06-23 08:07:28,625 - INFO - main.py - train - 58 - 【train】 epoch:1 91/840 loss:0.4713 96 | 2022-06-23 08:07:29,830 - INFO - main.py - train - 58 - 【train】 epoch:1 92/840 loss:0.4005 97 | 2022-06-23 08:07:31,032 - INFO - main.py - train - 58 - 【train】 epoch:1 93/840 loss:0.4290 98 | 2022-06-23 08:07:32,241 - INFO - main.py - train - 58 - 【train】 epoch:1 94/840 loss:0.5027 99 | 2022-06-23 08:07:33,454 - INFO - main.py - train - 58 - 【train】 epoch:1 95/840 loss:0.4587 100 | 2022-06-23 08:07:34,666 - INFO - main.py - train - 58 - 【train】 epoch:1 96/840 loss:0.4825 101 | 2022-06-23 08:07:35,865 - INFO - main.py - train - 58 - 【train】 epoch:1 97/840 loss:0.3879 102 | 2022-06-23 08:07:37,071 - INFO - main.py - train - 58 - 【train】 epoch:1 98/840 loss:0.4742 103 | 2022-06-23 08:07:38,275 - INFO - main.py - train - 58 - 【train】 epoch:1 99/840 loss:0.4863 104 | 2022-06-23 08:07:48,644 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.8521 recall=0.8634 f1_score=0.8577 105 | 2022-06-23 08:07:48,645 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 106 | 2022-06-23 08:07:51,162 - INFO - main.py - train - 58 - 【train】 epoch:1 100/840 loss:0.4120 107 | 2022-06-23 08:07:52,354 - INFO - main.py - train - 58 - 【train】 epoch:1 101/840 loss:0.3195 108 | 2022-06-23 08:07:53,557 - INFO - main.py - train - 58 - 【train】 epoch:1 102/840 loss:0.3336 109 | 2022-06-23 08:07:54,763 - INFO - main.py - train - 58 - 【train】 epoch:1 103/840 loss:0.3172 110 | 2022-06-23 08:07:55,988 - INFO - main.py - train - 58 - 【train】 epoch:1 104/840 loss:0.3161 111 | 2022-06-23 08:07:57,421 - INFO - main.py - train - 58 - 【train】 epoch:1 105/840 loss:0.2866 112 | 2022-06-23 08:07:58,840 - INFO - main.py - train - 58 - 【train】 epoch:1 106/840 loss:0.2995 113 | 2022-06-23 08:08:00,123 - INFO - main.py - train - 58 - 【train】 epoch:1 107/840 loss:0.4212 114 | 2022-06-23 08:08:01,341 - INFO - main.py - train - 58 - 【train】 epoch:1 108/840 loss:0.2312 115 | 2022-06-23 08:08:02,544 - INFO - main.py - train - 58 - 【train】 epoch:1 109/840 loss:0.2818 116 | 2022-06-23 08:08:03,750 - INFO - main.py - train - 58 - 【train】 epoch:1 110/840 loss:0.3591 117 | 2022-06-23 08:08:04,970 - INFO - main.py - train - 58 - 【train】 epoch:1 111/840 loss:0.4244 118 | 2022-06-23 08:08:06,201 - INFO - main.py - train - 58 - 【train】 epoch:1 112/840 loss:0.4087 119 | 2022-06-23 08:08:07,417 - INFO - main.py - train - 58 - 【train】 epoch:1 113/840 loss:0.3210 120 | 2022-06-23 08:08:08,620 - INFO - main.py - train - 58 - 【train】 epoch:1 114/840 loss:0.2163 121 | 2022-06-23 08:08:09,839 - INFO - main.py - train - 58 - 【train】 epoch:1 115/840 loss:0.5050 122 | 2022-06-23 08:08:11,067 - INFO - main.py - train - 58 - 【train】 epoch:1 116/840 loss:0.2431 123 | 2022-06-23 08:08:12,282 - INFO - main.py - train - 58 - 【train】 epoch:1 117/840 loss:0.2286 124 | 2022-06-23 08:08:13,486 - INFO - main.py - train - 58 - 【train】 epoch:1 118/840 loss:0.3176 125 | 2022-06-23 08:08:14,014 - INFO - main.py - train - 58 - 【train】 epoch:1 119/840 loss:0.2444 126 | 2022-06-23 08:08:15,236 - INFO - main.py - train - 58 - 【train】 epoch:2 120/840 loss:0.3562 127 | 2022-06-23 08:08:16,454 - INFO - main.py - train - 58 - 【train】 epoch:2 121/840 loss:0.2913 128 | 2022-06-23 08:08:17,655 - INFO - main.py - train - 58 - 【train】 epoch:2 122/840 loss:0.3250 129 | 2022-06-23 08:08:18,865 - INFO - main.py - train - 58 - 【train】 epoch:2 123/840 loss:0.2434 130 | 2022-06-23 08:08:20,070 - INFO - main.py - train - 58 - 【train】 epoch:2 124/840 loss:0.4249 131 | 2022-06-23 08:08:21,297 - INFO - main.py - train - 58 - 【train】 epoch:2 125/840 loss:0.2972 132 | 2022-06-23 08:08:22,513 - INFO - main.py - train - 58 - 【train】 epoch:2 126/840 loss:0.3785 133 | 2022-06-23 08:08:23,716 - INFO - main.py - train - 58 - 【train】 epoch:2 127/840 loss:0.3140 134 | 2022-06-23 08:08:24,938 - INFO - main.py - train - 58 - 【train】 epoch:2 128/840 loss:0.2886 135 | 2022-06-23 08:08:26,151 - INFO - main.py - train - 58 - 【train】 epoch:2 129/840 loss:0.1919 136 | 2022-06-23 08:08:27,369 - INFO - main.py - train - 58 - 【train】 epoch:2 130/840 loss:0.2817 137 | 2022-06-23 08:08:28,585 - INFO - main.py - train - 58 - 【train】 epoch:2 131/840 loss:0.2479 138 | 2022-06-23 08:08:29,783 - INFO - main.py - train - 58 - 【train】 epoch:2 132/840 loss:0.3775 139 | 2022-06-23 08:08:30,991 - INFO - main.py - train - 58 - 【train】 epoch:2 133/840 loss:0.2788 140 | 2022-06-23 08:08:32,194 - INFO - main.py - train - 58 - 【train】 epoch:2 134/840 loss:0.2976 141 | 2022-06-23 08:08:33,408 - INFO - main.py - train - 58 - 【train】 epoch:2 135/840 loss:0.2614 142 | 2022-06-23 08:08:34,628 - INFO - main.py - train - 58 - 【train】 epoch:2 136/840 loss:0.2588 143 | 2022-06-23 08:08:35,834 - INFO - main.py - train - 58 - 【train】 epoch:2 137/840 loss:0.1716 144 | 2022-06-23 08:08:37,038 - INFO - main.py - train - 58 - 【train】 epoch:2 138/840 loss:0.1861 145 | 2022-06-23 08:08:38,247 - INFO - main.py - train - 58 - 【train】 epoch:2 139/840 loss:0.3547 146 | 2022-06-23 08:08:39,464 - INFO - main.py - train - 58 - 【train】 epoch:2 140/840 loss:0.1902 147 | 2022-06-23 08:08:40,690 - INFO - main.py - train - 58 - 【train】 epoch:2 141/840 loss:0.1275 148 | 2022-06-23 08:08:41,902 - INFO - main.py - train - 58 - 【train】 epoch:2 142/840 loss:0.2185 149 | 2022-06-23 08:08:43,111 - INFO - main.py - train - 58 - 【train】 epoch:2 143/840 loss:0.2212 150 | 2022-06-23 08:08:44,314 - INFO - main.py - train - 58 - 【train】 epoch:2 144/840 loss:0.1740 151 | 2022-06-23 08:08:45,536 - INFO - main.py - train - 58 - 【train】 epoch:2 145/840 loss:0.2502 152 | 2022-06-23 08:08:46,746 - INFO - main.py - train - 58 - 【train】 epoch:2 146/840 loss:0.2183 153 | 2022-06-23 08:08:47,961 - INFO - main.py - train - 58 - 【train】 epoch:2 147/840 loss:0.3057 154 | 2022-06-23 08:08:49,169 - INFO - main.py - train - 58 - 【train】 epoch:2 148/840 loss:0.1309 155 | 2022-06-23 08:08:50,367 - INFO - main.py - train - 58 - 【train】 epoch:2 149/840 loss:0.2443 156 | 2022-06-23 08:09:00,613 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9401 recall=0.8602 f1_score=0.8984 157 | 2022-06-23 08:09:00,613 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 158 | 2022-06-23 08:09:03,224 - INFO - main.py - train - 58 - 【train】 epoch:2 150/840 loss:0.3883 159 | 2022-06-23 08:09:04,432 - INFO - main.py - train - 58 - 【train】 epoch:2 151/840 loss:0.1625 160 | 2022-06-23 08:09:05,634 - INFO - main.py - train - 58 - 【train】 epoch:2 152/840 loss:0.2017 161 | 2022-06-23 08:09:06,826 - INFO - main.py - train - 58 - 【train】 epoch:2 153/840 loss:0.2689 162 | 2022-06-23 08:09:08,040 - INFO - main.py - train - 58 - 【train】 epoch:2 154/840 loss:0.1338 163 | 2022-06-23 08:09:09,249 - INFO - main.py - train - 58 - 【train】 epoch:2 155/840 loss:0.1177 164 | 2022-06-23 08:09:10,453 - INFO - main.py - train - 58 - 【train】 epoch:2 156/840 loss:0.1568 165 | 2022-06-23 08:09:11,760 - INFO - main.py - train - 58 - 【train】 epoch:2 157/840 loss:0.2601 166 | 2022-06-23 08:09:12,968 - INFO - main.py - train - 58 - 【train】 epoch:2 158/840 loss:0.3726 167 | 2022-06-23 08:09:14,388 - INFO - main.py - train - 58 - 【train】 epoch:2 159/840 loss:0.1890 168 | 2022-06-23 08:09:15,777 - INFO - main.py - train - 58 - 【train】 epoch:2 160/840 loss:0.2225 169 | 2022-06-23 08:09:16,984 - INFO - main.py - train - 58 - 【train】 epoch:2 161/840 loss:0.2239 170 | 2022-06-23 08:09:18,193 - INFO - main.py - train - 58 - 【train】 epoch:2 162/840 loss:0.3158 171 | 2022-06-23 08:09:19,424 - INFO - main.py - train - 58 - 【train】 epoch:2 163/840 loss:0.2475 172 | 2022-06-23 08:09:20,643 - INFO - main.py - train - 58 - 【train】 epoch:2 164/840 loss:0.2176 173 | 2022-06-23 08:09:21,851 - INFO - main.py - train - 58 - 【train】 epoch:2 165/840 loss:0.1994 174 | 2022-06-23 08:09:23,074 - INFO - main.py - train - 58 - 【train】 epoch:2 166/840 loss:0.2310 175 | 2022-06-23 08:09:24,290 - INFO - main.py - train - 58 - 【train】 epoch:2 167/840 loss:0.2833 176 | 2022-06-23 08:09:25,533 - INFO - main.py - train - 58 - 【train】 epoch:2 168/840 loss:0.3344 177 | 2022-06-23 08:09:27,167 - INFO - main.py - train - 58 - 【train】 epoch:2 169/840 loss:0.2340 178 | 2022-06-23 08:09:28,799 - INFO - main.py - train - 58 - 【train】 epoch:2 170/840 loss:0.2905 179 | 2022-06-23 08:09:30,019 - INFO - main.py - train - 58 - 【train】 epoch:2 171/840 loss:0.2065 180 | 2022-06-23 08:09:31,233 - INFO - main.py - train - 58 - 【train】 epoch:2 172/840 loss:0.2005 181 | 2022-06-23 08:09:32,442 - INFO - main.py - train - 58 - 【train】 epoch:2 173/840 loss:0.1941 182 | 2022-06-23 08:09:33,662 - INFO - main.py - train - 58 - 【train】 epoch:2 174/840 loss:0.2771 183 | 2022-06-23 08:09:34,885 - INFO - main.py - train - 58 - 【train】 epoch:2 175/840 loss:0.2642 184 | 2022-06-23 08:09:36,097 - INFO - main.py - train - 58 - 【train】 epoch:2 176/840 loss:0.1259 185 | 2022-06-23 08:09:37,301 - INFO - main.py - train - 58 - 【train】 epoch:2 177/840 loss:0.3698 186 | 2022-06-23 08:09:38,504 - INFO - main.py - train - 58 - 【train】 epoch:2 178/840 loss:0.1174 187 | 2022-06-23 08:09:39,730 - INFO - main.py - train - 58 - 【train】 epoch:2 179/840 loss:0.0670 188 | 2022-06-23 08:09:40,963 - INFO - main.py - train - 58 - 【train】 epoch:2 180/840 loss:0.1775 189 | 2022-06-23 08:09:42,180 - INFO - main.py - train - 58 - 【train】 epoch:2 181/840 loss:0.2815 190 | 2022-06-23 08:09:43,395 - INFO - main.py - train - 58 - 【train】 epoch:2 182/840 loss:0.1952 191 | 2022-06-23 08:09:44,603 - INFO - main.py - train - 58 - 【train】 epoch:2 183/840 loss:0.2092 192 | 2022-06-23 08:09:45,841 - INFO - main.py - train - 58 - 【train】 epoch:2 184/840 loss:0.2165 193 | 2022-06-23 08:09:47,060 - INFO - main.py - train - 58 - 【train】 epoch:2 185/840 loss:0.1516 194 | 2022-06-23 08:09:48,273 - INFO - main.py - train - 58 - 【train】 epoch:2 186/840 loss:0.1977 195 | 2022-06-23 08:09:49,487 - INFO - main.py - train - 58 - 【train】 epoch:2 187/840 loss:0.2218 196 | 2022-06-23 08:09:50,686 - INFO - main.py - train - 58 - 【train】 epoch:2 188/840 loss:0.1882 197 | 2022-06-23 08:09:51,900 - INFO - main.py - train - 58 - 【train】 epoch:2 189/840 loss:0.2847 198 | 2022-06-23 08:09:53,114 - INFO - main.py - train - 58 - 【train】 epoch:2 190/840 loss:0.2908 199 | 2022-06-23 08:09:54,332 - INFO - main.py - train - 58 - 【train】 epoch:2 191/840 loss:0.2652 200 | 2022-06-23 08:09:55,537 - INFO - main.py - train - 58 - 【train】 epoch:2 192/840 loss:0.0609 201 | 2022-06-23 08:09:56,739 - INFO - main.py - train - 58 - 【train】 epoch:2 193/840 loss:0.1454 202 | 2022-06-23 08:09:57,947 - INFO - main.py - train - 58 - 【train】 epoch:2 194/840 loss:0.3138 203 | 2022-06-23 08:09:59,171 - INFO - main.py - train - 58 - 【train】 epoch:2 195/840 loss:0.1361 204 | 2022-06-23 08:10:00,385 - INFO - main.py - train - 58 - 【train】 epoch:2 196/840 loss:0.1296 205 | 2022-06-23 08:10:01,590 - INFO - main.py - train - 58 - 【train】 epoch:2 197/840 loss:0.1866 206 | 2022-06-23 08:10:02,801 - INFO - main.py - train - 58 - 【train】 epoch:2 198/840 loss:0.1016 207 | 2022-06-23 08:10:03,997 - INFO - main.py - train - 58 - 【train】 epoch:2 199/840 loss:0.0668 208 | 2022-06-23 08:10:14,344 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9343 recall=0.9137 f1_score=0.9239 209 | 2022-06-23 08:10:14,345 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 210 | 2022-06-23 08:10:16,967 - INFO - main.py - train - 58 - 【train】 epoch:2 200/840 loss:0.2945 211 | 2022-06-23 08:10:18,175 - INFO - main.py - train - 58 - 【train】 epoch:2 201/840 loss:0.0964 212 | 2022-06-23 08:10:19,385 - INFO - main.py - train - 58 - 【train】 epoch:2 202/840 loss:0.1472 213 | 2022-06-23 08:10:20,586 - INFO - main.py - train - 58 - 【train】 epoch:2 203/840 loss:0.1141 214 | 2022-06-23 08:10:21,795 - INFO - main.py - train - 58 - 【train】 epoch:2 204/840 loss:0.1179 215 | 2022-06-23 08:10:22,998 - INFO - main.py - train - 58 - 【train】 epoch:2 205/840 loss:0.2112 216 | 2022-06-23 08:10:24,211 - INFO - main.py - train - 58 - 【train】 epoch:2 206/840 loss:0.2840 217 | 2022-06-23 08:10:25,425 - INFO - main.py - train - 58 - 【train】 epoch:2 207/840 loss:0.2198 218 | 2022-06-23 08:10:26,770 - INFO - main.py - train - 58 - 【train】 epoch:2 208/840 loss:0.1338 219 | 2022-06-23 08:10:28,213 - INFO - main.py - train - 58 - 【train】 epoch:2 209/840 loss:0.0816 220 | 2022-06-23 08:10:29,582 - INFO - main.py - train - 58 - 【train】 epoch:2 210/840 loss:0.2251 221 | 2022-06-23 08:10:30,824 - INFO - main.py - train - 58 - 【train】 epoch:2 211/840 loss:0.1660 222 | 2022-06-23 08:10:32,050 - INFO - main.py - train - 58 - 【train】 epoch:2 212/840 loss:0.2242 223 | 2022-06-23 08:10:33,259 - INFO - main.py - train - 58 - 【train】 epoch:2 213/840 loss:0.1656 224 | 2022-06-23 08:10:34,471 - INFO - main.py - train - 58 - 【train】 epoch:2 214/840 loss:0.2769 225 | 2022-06-23 08:10:35,686 - INFO - main.py - train - 58 - 【train】 epoch:2 215/840 loss:0.3005 226 | 2022-06-23 08:10:36,914 - INFO - main.py - train - 58 - 【train】 epoch:2 216/840 loss:0.1304 227 | 2022-06-23 08:10:38,146 - INFO - main.py - train - 58 - 【train】 epoch:2 217/840 loss:0.2402 228 | 2022-06-23 08:10:39,363 - INFO - main.py - train - 58 - 【train】 epoch:2 218/840 loss:0.1315 229 | 2022-06-23 08:10:40,578 - INFO - main.py - train - 58 - 【train】 epoch:2 219/840 loss:0.1771 230 | 2022-06-23 08:10:41,792 - INFO - main.py - train - 58 - 【train】 epoch:2 220/840 loss:0.2999 231 | 2022-06-23 08:10:43,019 - INFO - main.py - train - 58 - 【train】 epoch:2 221/840 loss:0.2125 232 | 2022-06-23 08:10:44,238 - INFO - main.py - train - 58 - 【train】 epoch:2 222/840 loss:0.1069 233 | 2022-06-23 08:10:45,451 - INFO - main.py - train - 58 - 【train】 epoch:2 223/840 loss:0.1976 234 | 2022-06-23 08:10:46,667 - INFO - main.py - train - 58 - 【train】 epoch:2 224/840 loss:0.2720 235 | 2022-06-23 08:10:47,897 - INFO - main.py - train - 58 - 【train】 epoch:2 225/840 loss:0.2610 236 | 2022-06-23 08:10:49,120 - INFO - main.py - train - 58 - 【train】 epoch:2 226/840 loss:0.1492 237 | 2022-06-23 08:10:50,335 - INFO - main.py - train - 58 - 【train】 epoch:2 227/840 loss:0.2075 238 | 2022-06-23 08:10:51,554 - INFO - main.py - train - 58 - 【train】 epoch:2 228/840 loss:0.2401 239 | 2022-06-23 08:10:52,760 - INFO - main.py - train - 58 - 【train】 epoch:2 229/840 loss:0.1741 240 | 2022-06-23 08:10:53,982 - INFO - main.py - train - 58 - 【train】 epoch:2 230/840 loss:0.1130 241 | 2022-06-23 08:10:55,207 - INFO - main.py - train - 58 - 【train】 epoch:2 231/840 loss:0.1047 242 | 2022-06-23 08:10:56,429 - INFO - main.py - train - 58 - 【train】 epoch:2 232/840 loss:0.1594 243 | 2022-06-23 08:10:57,646 - INFO - main.py - train - 58 - 【train】 epoch:2 233/840 loss:0.1922 244 | 2022-06-23 08:10:58,860 - INFO - main.py - train - 58 - 【train】 epoch:2 234/840 loss:0.1526 245 | 2022-06-23 08:11:00,078 - INFO - main.py - train - 58 - 【train】 epoch:2 235/840 loss:0.1963 246 | 2022-06-23 08:11:01,308 - INFO - main.py - train - 58 - 【train】 epoch:2 236/840 loss:0.1932 247 | 2022-06-23 08:11:02,520 - INFO - main.py - train - 58 - 【train】 epoch:2 237/840 loss:0.1583 248 | 2022-06-23 08:11:03,741 - INFO - main.py - train - 58 - 【train】 epoch:2 238/840 loss:0.2915 249 | 2022-06-23 08:11:04,255 - INFO - main.py - train - 58 - 【train】 epoch:2 239/840 loss:0.2417 250 | 2022-06-23 08:11:05,469 - INFO - main.py - train - 58 - 【train】 epoch:3 240/840 loss:0.1146 251 | 2022-06-23 08:11:06,673 - INFO - main.py - train - 58 - 【train】 epoch:3 241/840 loss:0.2518 252 | 2022-06-23 08:11:07,884 - INFO - main.py - train - 58 - 【train】 epoch:3 242/840 loss:0.0828 253 | 2022-06-23 08:11:09,089 - INFO - main.py - train - 58 - 【train】 epoch:3 243/840 loss:0.1782 254 | 2022-06-23 08:11:10,290 - INFO - main.py - train - 58 - 【train】 epoch:3 244/840 loss:0.1547 255 | 2022-06-23 08:11:11,502 - INFO - main.py - train - 58 - 【train】 epoch:3 245/840 loss:0.0966 256 | 2022-06-23 08:11:12,715 - INFO - main.py - train - 58 - 【train】 epoch:3 246/840 loss:0.1761 257 | 2022-06-23 08:11:13,914 - INFO - main.py - train - 58 - 【train】 epoch:3 247/840 loss:0.1873 258 | 2022-06-23 08:11:15,112 - INFO - main.py - train - 58 - 【train】 epoch:3 248/840 loss:0.1311 259 | 2022-06-23 08:11:16,321 - INFO - main.py - train - 58 - 【train】 epoch:3 249/840 loss:0.1975 260 | 2022-06-23 08:11:26,613 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9301 recall=0.9301 f1_score=0.9301 261 | 2022-06-23 08:11:26,614 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 262 | 2022-06-23 08:11:29,219 - INFO - main.py - train - 58 - 【train】 epoch:3 250/840 loss:0.0837 263 | 2022-06-23 08:11:30,416 - INFO - main.py - train - 58 - 【train】 epoch:3 251/840 loss:0.0683 264 | 2022-06-23 08:11:31,621 - INFO - main.py - train - 58 - 【train】 epoch:3 252/840 loss:0.1255 265 | 2022-06-23 08:11:32,827 - INFO - main.py - train - 58 - 【train】 epoch:3 253/840 loss:0.0531 266 | 2022-06-23 08:11:34,034 - INFO - main.py - train - 58 - 【train】 epoch:3 254/840 loss:0.1471 267 | 2022-06-23 08:11:35,242 - INFO - main.py - train - 58 - 【train】 epoch:3 255/840 loss:0.1426 268 | 2022-06-23 08:11:36,441 - INFO - main.py - train - 58 - 【train】 epoch:3 256/840 loss:0.1939 269 | 2022-06-23 08:11:37,691 - INFO - main.py - train - 58 - 【train】 epoch:3 257/840 loss:0.2333 270 | 2022-06-23 08:11:38,951 - INFO - main.py - train - 58 - 【train】 epoch:3 258/840 loss:0.2211 271 | 2022-06-23 08:11:40,215 - INFO - main.py - train - 58 - 【train】 epoch:3 259/840 loss:0.3125 272 | 2022-06-23 08:11:41,516 - INFO - main.py - train - 58 - 【train】 epoch:3 260/840 loss:0.1828 273 | 2022-06-23 08:11:42,841 - INFO - main.py - train - 58 - 【train】 epoch:3 261/840 loss:0.1716 274 | 2022-06-23 08:11:44,080 - INFO - main.py - train - 58 - 【train】 epoch:3 262/840 loss:0.2075 275 | 2022-06-23 08:11:45,346 - INFO - main.py - train - 58 - 【train】 epoch:3 263/840 loss:0.1419 276 | 2022-06-23 08:11:46,561 - INFO - main.py - train - 58 - 【train】 epoch:3 264/840 loss:0.1031 277 | 2022-06-23 08:11:47,776 - INFO - main.py - train - 58 - 【train】 epoch:3 265/840 loss:0.0508 278 | 2022-06-23 08:11:48,995 - INFO - main.py - train - 58 - 【train】 epoch:3 266/840 loss:0.0647 279 | 2022-06-23 08:11:50,221 - INFO - main.py - train - 58 - 【train】 epoch:3 267/840 loss:0.1849 280 | 2022-06-23 08:11:51,446 - INFO - main.py - train - 58 - 【train】 epoch:3 268/840 loss:0.0780 281 | 2022-06-23 08:11:52,657 - INFO - main.py - train - 58 - 【train】 epoch:3 269/840 loss:0.0906 282 | 2022-06-23 08:11:53,873 - INFO - main.py - train - 58 - 【train】 epoch:3 270/840 loss:0.1204 283 | 2022-06-23 08:11:55,103 - INFO - main.py - train - 58 - 【train】 epoch:3 271/840 loss:0.0608 284 | 2022-06-23 08:11:56,326 - INFO - main.py - train - 58 - 【train】 epoch:3 272/840 loss:0.1554 285 | 2022-06-23 08:11:57,556 - INFO - main.py - train - 58 - 【train】 epoch:3 273/840 loss:0.0728 286 | 2022-06-23 08:11:58,760 - INFO - main.py - train - 58 - 【train】 epoch:3 274/840 loss:0.1074 287 | 2022-06-23 08:11:59,981 - INFO - main.py - train - 58 - 【train】 epoch:3 275/840 loss:0.1484 288 | 2022-06-23 08:12:01,209 - INFO - main.py - train - 58 - 【train】 epoch:3 276/840 loss:0.1591 289 | 2022-06-23 08:12:02,427 - INFO - main.py - train - 58 - 【train】 epoch:3 277/840 loss:0.1207 290 | 2022-06-23 08:12:03,668 - INFO - main.py - train - 58 - 【train】 epoch:3 278/840 loss:0.0859 291 | 2022-06-23 08:12:04,892 - INFO - main.py - train - 58 - 【train】 epoch:3 279/840 loss:0.3148 292 | 2022-06-23 08:12:06,105 - INFO - main.py - train - 58 - 【train】 epoch:3 280/840 loss:0.0545 293 | 2022-06-23 08:12:07,324 - INFO - main.py - train - 58 - 【train】 epoch:3 281/840 loss:0.1757 294 | 2022-06-23 08:12:08,548 - INFO - main.py - train - 58 - 【train】 epoch:3 282/840 loss:0.1507 295 | 2022-06-23 08:12:09,782 - INFO - main.py - train - 58 - 【train】 epoch:3 283/840 loss:0.1300 296 | 2022-06-23 08:12:10,986 - INFO - main.py - train - 58 - 【train】 epoch:3 284/840 loss:0.0695 297 | 2022-06-23 08:12:12,198 - INFO - main.py - train - 58 - 【train】 epoch:3 285/840 loss:0.1079 298 | 2022-06-23 08:12:13,396 - INFO - main.py - train - 58 - 【train】 epoch:3 286/840 loss:0.1409 299 | 2022-06-23 08:12:14,603 - INFO - main.py - train - 58 - 【train】 epoch:3 287/840 loss:0.1355 300 | 2022-06-23 08:12:15,833 - INFO - main.py - train - 58 - 【train】 epoch:3 288/840 loss:0.1006 301 | 2022-06-23 08:12:17,040 - INFO - main.py - train - 58 - 【train】 epoch:3 289/840 loss:0.1570 302 | 2022-06-23 08:12:18,248 - INFO - main.py - train - 58 - 【train】 epoch:3 290/840 loss:0.0961 303 | 2022-06-23 08:12:19,452 - INFO - main.py - train - 58 - 【train】 epoch:3 291/840 loss:0.1690 304 | 2022-06-23 08:12:20,650 - INFO - main.py - train - 58 - 【train】 epoch:3 292/840 loss:0.1440 305 | 2022-06-23 08:12:21,860 - INFO - main.py - train - 58 - 【train】 epoch:3 293/840 loss:0.0885 306 | 2022-06-23 08:12:23,071 - INFO - main.py - train - 58 - 【train】 epoch:3 294/840 loss:0.1370 307 | 2022-06-23 08:12:24,279 - INFO - main.py - train - 58 - 【train】 epoch:3 295/840 loss:0.1180 308 | 2022-06-23 08:12:25,472 - INFO - main.py - train - 58 - 【train】 epoch:3 296/840 loss:0.0738 309 | 2022-06-23 08:12:26,667 - INFO - main.py - train - 58 - 【train】 epoch:3 297/840 loss:0.1478 310 | 2022-06-23 08:12:27,895 - INFO - main.py - train - 58 - 【train】 epoch:3 298/840 loss:0.1090 311 | 2022-06-23 08:12:29,100 - INFO - main.py - train - 58 - 【train】 epoch:3 299/840 loss:0.1646 312 | 2022-06-23 08:12:39,418 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9351 recall=0.9440 f1_score=0.9395 313 | 2022-06-23 08:12:39,419 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 314 | 2022-06-23 08:12:42,039 - INFO - main.py - train - 58 - 【train】 epoch:3 300/840 loss:0.0709 315 | 2022-06-23 08:12:43,261 - INFO - main.py - train - 58 - 【train】 epoch:3 301/840 loss:0.1925 316 | 2022-06-23 08:12:44,453 - INFO - main.py - train - 58 - 【train】 epoch:3 302/840 loss:0.1140 317 | 2022-06-23 08:12:45,661 - INFO - main.py - train - 58 - 【train】 epoch:3 303/840 loss:0.1213 318 | 2022-06-23 08:12:46,886 - INFO - main.py - train - 58 - 【train】 epoch:3 304/840 loss:0.1688 319 | 2022-06-23 08:12:48,302 - INFO - main.py - train - 58 - 【train】 epoch:3 305/840 loss:0.1030 320 | 2022-06-23 08:12:49,740 - INFO - main.py - train - 58 - 【train】 epoch:3 306/840 loss:0.2567 321 | 2022-06-23 08:12:51,115 - INFO - main.py - train - 58 - 【train】 epoch:3 307/840 loss:0.0633 322 | 2022-06-23 08:12:52,354 - INFO - main.py - train - 58 - 【train】 epoch:3 308/840 loss:0.0948 323 | 2022-06-23 08:12:53,572 - INFO - main.py - train - 58 - 【train】 epoch:3 309/840 loss:0.1044 324 | 2022-06-23 08:12:54,770 - INFO - main.py - train - 58 - 【train】 epoch:3 310/840 loss:0.1550 325 | 2022-06-23 08:12:56,003 - INFO - main.py - train - 58 - 【train】 epoch:3 311/840 loss:0.0975 326 | 2022-06-23 08:12:57,202 - INFO - main.py - train - 58 - 【train】 epoch:3 312/840 loss:0.0357 327 | 2022-06-23 08:12:58,406 - INFO - main.py - train - 58 - 【train】 epoch:3 313/840 loss:0.0747 328 | 2022-06-23 08:12:59,616 - INFO - main.py - train - 58 - 【train】 epoch:3 314/840 loss:0.1752 329 | 2022-06-23 08:13:00,824 - INFO - main.py - train - 58 - 【train】 epoch:3 315/840 loss:0.0515 330 | 2022-06-23 08:13:02,029 - INFO - main.py - train - 58 - 【train】 epoch:3 316/840 loss:0.0798 331 | 2022-06-23 08:13:03,238 - INFO - main.py - train - 58 - 【train】 epoch:3 317/840 loss:0.1340 332 | 2022-06-23 08:13:04,442 - INFO - main.py - train - 58 - 【train】 epoch:3 318/840 loss:0.0782 333 | 2022-06-23 08:13:05,667 - INFO - main.py - train - 58 - 【train】 epoch:3 319/840 loss:0.0678 334 | 2022-06-23 08:13:06,895 - INFO - main.py - train - 58 - 【train】 epoch:3 320/840 loss:0.1678 335 | 2022-06-23 08:13:08,109 - INFO - main.py - train - 58 - 【train】 epoch:3 321/840 loss:0.1580 336 | 2022-06-23 08:13:09,323 - INFO - main.py - train - 58 - 【train】 epoch:3 322/840 loss:0.1759 337 | 2022-06-23 08:13:10,539 - INFO - main.py - train - 58 - 【train】 epoch:3 323/840 loss:0.1718 338 | 2022-06-23 08:13:11,767 - INFO - main.py - train - 58 - 【train】 epoch:3 324/840 loss:0.1055 339 | 2022-06-23 08:13:13,001 - INFO - main.py - train - 58 - 【train】 epoch:3 325/840 loss:0.0794 340 | 2022-06-23 08:13:14,226 - INFO - main.py - train - 58 - 【train】 epoch:3 326/840 loss:0.1161 341 | 2022-06-23 08:13:15,442 - INFO - main.py - train - 58 - 【train】 epoch:3 327/840 loss:0.0971 342 | 2022-06-23 08:13:16,646 - INFO - main.py - train - 58 - 【train】 epoch:3 328/840 loss:0.1321 343 | 2022-06-23 08:13:17,859 - INFO - main.py - train - 58 - 【train】 epoch:3 329/840 loss:0.1616 344 | 2022-06-23 08:13:19,081 - INFO - main.py - train - 58 - 【train】 epoch:3 330/840 loss:0.2052 345 | 2022-06-23 08:13:20,303 - INFO - main.py - train - 58 - 【train】 epoch:3 331/840 loss:0.1494 346 | 2022-06-23 08:13:21,517 - INFO - main.py - train - 58 - 【train】 epoch:3 332/840 loss:0.1681 347 | 2022-06-23 08:13:22,717 - INFO - main.py - train - 58 - 【train】 epoch:3 333/840 loss:0.1474 348 | 2022-06-23 08:13:23,935 - INFO - main.py - train - 58 - 【train】 epoch:3 334/840 loss:0.1394 349 | 2022-06-23 08:13:25,171 - INFO - main.py - train - 58 - 【train】 epoch:3 335/840 loss:0.1893 350 | 2022-06-23 08:13:26,391 - INFO - main.py - train - 58 - 【train】 epoch:3 336/840 loss:0.1587 351 | 2022-06-23 08:13:27,601 - INFO - main.py - train - 58 - 【train】 epoch:3 337/840 loss:0.1588 352 | 2022-06-23 08:13:28,803 - INFO - main.py - train - 58 - 【train】 epoch:3 338/840 loss:0.0763 353 | 2022-06-23 08:13:30,023 - INFO - main.py - train - 58 - 【train】 epoch:3 339/840 loss:0.0434 354 | 2022-06-23 08:13:31,247 - INFO - main.py - train - 58 - 【train】 epoch:3 340/840 loss:0.1904 355 | 2022-06-23 08:13:32,454 - INFO - main.py - train - 58 - 【train】 epoch:3 341/840 loss:0.1253 356 | 2022-06-23 08:13:33,651 - INFO - main.py - train - 58 - 【train】 epoch:3 342/840 loss:0.0830 357 | 2022-06-23 08:13:34,852 - INFO - main.py - train - 58 - 【train】 epoch:3 343/840 loss:0.1177 358 | 2022-06-23 08:13:36,062 - INFO - main.py - train - 58 - 【train】 epoch:3 344/840 loss:0.1242 359 | 2022-06-23 08:13:37,271 - INFO - main.py - train - 58 - 【train】 epoch:3 345/840 loss:0.1104 360 | 2022-06-23 08:13:38,481 - INFO - main.py - train - 58 - 【train】 epoch:3 346/840 loss:0.0907 361 | 2022-06-23 08:13:39,681 - INFO - main.py - train - 58 - 【train】 epoch:3 347/840 loss:0.1425 362 | 2022-06-23 08:13:40,895 - INFO - main.py - train - 58 - 【train】 epoch:3 348/840 loss:0.0863 363 | 2022-06-23 08:13:42,104 - INFO - main.py - train - 58 - 【train】 epoch:3 349/840 loss:0.0715 364 | 2022-06-23 08:13:52,373 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9607 recall=0.9074 f1_score=0.9333 365 | 2022-06-23 08:13:53,579 - INFO - main.py - train - 58 - 【train】 epoch:3 350/840 loss:0.1240 366 | 2022-06-23 08:13:54,783 - INFO - main.py - train - 58 - 【train】 epoch:3 351/840 loss:0.0765 367 | 2022-06-23 08:13:55,985 - INFO - main.py - train - 58 - 【train】 epoch:3 352/840 loss:0.1162 368 | 2022-06-23 08:13:57,179 - INFO - main.py - train - 58 - 【train】 epoch:3 353/840 loss:0.0995 369 | 2022-06-23 08:13:58,380 - INFO - main.py - train - 58 - 【train】 epoch:3 354/840 loss:0.1012 370 | 2022-06-23 08:13:59,582 - INFO - main.py - train - 58 - 【train】 epoch:3 355/840 loss:0.0609 371 | 2022-06-23 08:14:00,824 - INFO - main.py - train - 58 - 【train】 epoch:3 356/840 loss:0.0982 372 | 2022-06-23 08:14:02,034 - INFO - main.py - train - 58 - 【train】 epoch:3 357/840 loss:0.1593 373 | 2022-06-23 08:14:03,237 - INFO - main.py - train - 58 - 【train】 epoch:3 358/840 loss:0.1960 374 | 2022-06-23 08:14:03,754 - INFO - main.py - train - 58 - 【train】 epoch:3 359/840 loss:0.1273 375 | 2022-06-23 08:14:04,977 - INFO - main.py - train - 58 - 【train】 epoch:4 360/840 loss:0.1094 376 | 2022-06-23 08:14:06,182 - INFO - main.py - train - 58 - 【train】 epoch:4 361/840 loss:0.1004 377 | 2022-06-23 08:14:07,389 - INFO - main.py - train - 58 - 【train】 epoch:4 362/840 loss:0.0846 378 | 2022-06-23 08:14:08,595 - INFO - main.py - train - 58 - 【train】 epoch:4 363/840 loss:0.0720 379 | 2022-06-23 08:14:09,814 - INFO - main.py - train - 58 - 【train】 epoch:4 364/840 loss:0.0603 380 | 2022-06-23 08:14:11,035 - INFO - main.py - train - 58 - 【train】 epoch:4 365/840 loss:0.0462 381 | 2022-06-23 08:14:12,252 - INFO - main.py - train - 58 - 【train】 epoch:4 366/840 loss:0.0814 382 | 2022-06-23 08:14:13,467 - INFO - main.py - train - 58 - 【train】 epoch:4 367/840 loss:0.1684 383 | 2022-06-23 08:14:14,679 - INFO - main.py - train - 58 - 【train】 epoch:4 368/840 loss:0.0315 384 | 2022-06-23 08:14:15,894 - INFO - main.py - train - 58 - 【train】 epoch:4 369/840 loss:0.0671 385 | 2022-06-23 08:14:17,122 - INFO - main.py - train - 58 - 【train】 epoch:4 370/840 loss:0.0775 386 | 2022-06-23 08:14:18,334 - INFO - main.py - train - 58 - 【train】 epoch:4 371/840 loss:0.0804 387 | 2022-06-23 08:14:19,535 - INFO - main.py - train - 58 - 【train】 epoch:4 372/840 loss:0.0367 388 | 2022-06-23 08:14:20,749 - INFO - main.py - train - 58 - 【train】 epoch:4 373/840 loss:0.1038 389 | 2022-06-23 08:14:21,973 - INFO - main.py - train - 58 - 【train】 epoch:4 374/840 loss:0.0218 390 | 2022-06-23 08:14:23,212 - INFO - main.py - train - 58 - 【train】 epoch:4 375/840 loss:0.0730 391 | 2022-06-23 08:14:24,434 - INFO - main.py - train - 58 - 【train】 epoch:4 376/840 loss:0.0790 392 | 2022-06-23 08:14:25,643 - INFO - main.py - train - 58 - 【train】 epoch:4 377/840 loss:0.0753 393 | 2022-06-23 08:14:26,842 - INFO - main.py - train - 58 - 【train】 epoch:4 378/840 loss:0.1549 394 | 2022-06-23 08:14:28,050 - INFO - main.py - train - 58 - 【train】 epoch:4 379/840 loss:0.0611 395 | 2022-06-23 08:14:29,277 - INFO - main.py - train - 58 - 【train】 epoch:4 380/840 loss:0.0440 396 | 2022-06-23 08:14:30,490 - INFO - main.py - train - 58 - 【train】 epoch:4 381/840 loss:0.0577 397 | 2022-06-23 08:14:31,693 - INFO - main.py - train - 58 - 【train】 epoch:4 382/840 loss:0.0965 398 | 2022-06-23 08:14:32,899 - INFO - main.py - train - 58 - 【train】 epoch:4 383/840 loss:0.1332 399 | 2022-06-23 08:14:34,235 - INFO - main.py - train - 58 - 【train】 epoch:4 384/840 loss:0.0593 400 | 2022-06-23 08:14:35,847 - INFO - main.py - train - 58 - 【train】 epoch:4 385/840 loss:0.0355 401 | 2022-06-23 08:14:37,383 - INFO - main.py - train - 58 - 【train】 epoch:4 386/840 loss:0.1283 402 | 2022-06-23 08:14:38,589 - INFO - main.py - train - 58 - 【train】 epoch:4 387/840 loss:0.1385 403 | 2022-06-23 08:14:39,827 - INFO - main.py - train - 58 - 【train】 epoch:4 388/840 loss:0.0376 404 | 2022-06-23 08:14:41,033 - INFO - main.py - train - 58 - 【train】 epoch:4 389/840 loss:0.1273 405 | 2022-06-23 08:14:42,237 - INFO - main.py - train - 58 - 【train】 epoch:4 390/840 loss:0.0439 406 | 2022-06-23 08:14:43,442 - INFO - main.py - train - 58 - 【train】 epoch:4 391/840 loss:0.0238 407 | 2022-06-23 08:14:44,648 - INFO - main.py - train - 58 - 【train】 epoch:4 392/840 loss:0.0902 408 | 2022-06-23 08:14:45,860 - INFO - main.py - train - 58 - 【train】 epoch:4 393/840 loss:0.1378 409 | 2022-06-23 08:14:47,071 - INFO - main.py - train - 58 - 【train】 epoch:4 394/840 loss:0.0631 410 | 2022-06-23 08:14:48,282 - INFO - main.py - train - 58 - 【train】 epoch:4 395/840 loss:0.1012 411 | 2022-06-23 08:14:49,486 - INFO - main.py - train - 58 - 【train】 epoch:4 396/840 loss:0.0721 412 | 2022-06-23 08:14:50,690 - INFO - main.py - train - 58 - 【train】 epoch:4 397/840 loss:0.0293 413 | 2022-06-23 08:14:51,912 - INFO - main.py - train - 58 - 【train】 epoch:4 398/840 loss:0.1439 414 | 2022-06-23 08:14:53,122 - INFO - main.py - train - 58 - 【train】 epoch:4 399/840 loss:0.0783 415 | 2022-06-23 08:15:03,507 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9407 recall=0.9490 f1_score=0.9448 416 | 2022-06-23 08:15:03,508 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 417 | 2022-06-23 08:15:06,101 - INFO - main.py - train - 58 - 【train】 epoch:4 400/840 loss:0.1001 418 | 2022-06-23 08:15:07,312 - INFO - main.py - train - 58 - 【train】 epoch:4 401/840 loss:0.0828 419 | 2022-06-23 08:15:08,520 - INFO - main.py - train - 58 - 【train】 epoch:4 402/840 loss:0.0681 420 | 2022-06-23 08:15:09,713 - INFO - main.py - train - 58 - 【train】 epoch:4 403/840 loss:0.1281 421 | 2022-06-23 08:15:10,920 - INFO - main.py - train - 58 - 【train】 epoch:4 404/840 loss:0.0677 422 | 2022-06-23 08:15:12,261 - INFO - main.py - train - 58 - 【train】 epoch:4 405/840 loss:0.0511 423 | 2022-06-23 08:15:13,543 - INFO - main.py - train - 58 - 【train】 epoch:4 406/840 loss:0.1560 424 | 2022-06-23 08:15:14,820 - INFO - main.py - train - 58 - 【train】 epoch:4 407/840 loss:0.0701 425 | 2022-06-23 08:15:16,127 - INFO - main.py - train - 58 - 【train】 epoch:4 408/840 loss:0.0609 426 | 2022-06-23 08:15:17,371 - INFO - main.py - train - 58 - 【train】 epoch:4 409/840 loss:0.0811 427 | 2022-06-23 08:15:18,678 - INFO - main.py - train - 58 - 【train】 epoch:4 410/840 loss:0.0596 428 | 2022-06-23 08:15:19,946 - INFO - main.py - train - 58 - 【train】 epoch:4 411/840 loss:0.0158 429 | 2022-06-23 08:15:21,192 - INFO - main.py - train - 58 - 【train】 epoch:4 412/840 loss:0.0436 430 | 2022-06-23 08:15:22,439 - INFO - main.py - train - 58 - 【train】 epoch:4 413/840 loss:0.0639 431 | 2022-06-23 08:15:23,665 - INFO - main.py - train - 58 - 【train】 epoch:4 414/840 loss:0.0714 432 | 2022-06-23 08:15:24,894 - INFO - main.py - train - 58 - 【train】 epoch:4 415/840 loss:0.0485 433 | 2022-06-23 08:15:26,114 - INFO - main.py - train - 58 - 【train】 epoch:4 416/840 loss:0.1234 434 | 2022-06-23 08:15:27,356 - INFO - main.py - train - 58 - 【train】 epoch:4 417/840 loss:0.1106 435 | 2022-06-23 08:15:28,581 - INFO - main.py - train - 58 - 【train】 epoch:4 418/840 loss:0.0331 436 | 2022-06-23 08:15:29,824 - INFO - main.py - train - 58 - 【train】 epoch:4 419/840 loss:0.0532 437 | 2022-06-23 08:15:31,028 - INFO - main.py - train - 58 - 【train】 epoch:4 420/840 loss:0.0373 438 | 2022-06-23 08:15:32,261 - INFO - main.py - train - 58 - 【train】 epoch:4 421/840 loss:0.0589 439 | 2022-06-23 08:15:33,480 - INFO - main.py - train - 58 - 【train】 epoch:4 422/840 loss:0.1965 440 | 2022-06-23 08:15:34,690 - INFO - main.py - train - 58 - 【train】 epoch:4 423/840 loss:0.1734 441 | 2022-06-23 08:15:35,938 - INFO - main.py - train - 58 - 【train】 epoch:4 424/840 loss:0.0932 442 | 2022-06-23 08:15:37,162 - INFO - main.py - train - 58 - 【train】 epoch:4 425/840 loss:0.0602 443 | 2022-06-23 08:15:38,386 - INFO - main.py - train - 58 - 【train】 epoch:4 426/840 loss:0.0956 444 | 2022-06-23 08:15:39,623 - INFO - main.py - train - 58 - 【train】 epoch:4 427/840 loss:0.0380 445 | 2022-06-23 08:15:40,861 - INFO - main.py - train - 58 - 【train】 epoch:4 428/840 loss:0.0821 446 | 2022-06-23 08:15:42,066 - INFO - main.py - train - 58 - 【train】 epoch:4 429/840 loss:0.0718 447 | 2022-06-23 08:15:43,274 - INFO - main.py - train - 58 - 【train】 epoch:4 430/840 loss:0.0931 448 | 2022-06-23 08:15:44,476 - INFO - main.py - train - 58 - 【train】 epoch:4 431/840 loss:0.0593 449 | 2022-06-23 08:15:45,696 - INFO - main.py - train - 58 - 【train】 epoch:4 432/840 loss:0.0624 450 | 2022-06-23 08:15:46,905 - INFO - main.py - train - 58 - 【train】 epoch:4 433/840 loss:0.1002 451 | 2022-06-23 08:15:48,109 - INFO - main.py - train - 58 - 【train】 epoch:4 434/840 loss:0.0294 452 | 2022-06-23 08:15:49,307 - INFO - main.py - train - 58 - 【train】 epoch:4 435/840 loss:0.0525 453 | 2022-06-23 08:15:50,507 - INFO - main.py - train - 58 - 【train】 epoch:4 436/840 loss:0.0945 454 | 2022-06-23 08:15:51,720 - INFO - main.py - train - 58 - 【train】 epoch:4 437/840 loss:0.0709 455 | 2022-06-23 08:15:52,932 - INFO - main.py - train - 58 - 【train】 epoch:4 438/840 loss:0.0258 456 | 2022-06-23 08:15:54,142 - INFO - main.py - train - 58 - 【train】 epoch:4 439/840 loss:0.0584 457 | 2022-06-23 08:15:55,342 - INFO - main.py - train - 58 - 【train】 epoch:4 440/840 loss:0.0425 458 | 2022-06-23 08:15:56,550 - INFO - main.py - train - 58 - 【train】 epoch:4 441/840 loss:0.0840 459 | 2022-06-23 08:15:57,745 - INFO - main.py - train - 58 - 【train】 epoch:4 442/840 loss:0.1187 460 | 2022-06-23 08:15:58,953 - INFO - main.py - train - 58 - 【train】 epoch:4 443/840 loss:0.0960 461 | 2022-06-23 08:16:00,161 - INFO - main.py - train - 58 - 【train】 epoch:4 444/840 loss:0.1255 462 | 2022-06-23 08:16:01,364 - INFO - main.py - train - 58 - 【train】 epoch:4 445/840 loss:0.1012 463 | 2022-06-23 08:16:02,564 - INFO - main.py - train - 58 - 【train】 epoch:4 446/840 loss:0.1471 464 | 2022-06-23 08:16:03,756 - INFO - main.py - train - 58 - 【train】 epoch:4 447/840 loss:0.0634 465 | 2022-06-23 08:16:04,972 - INFO - main.py - train - 58 - 【train】 epoch:4 448/840 loss:0.0277 466 | 2022-06-23 08:16:06,181 - INFO - main.py - train - 58 - 【train】 epoch:4 449/840 loss:0.0683 467 | 2022-06-23 08:16:16,413 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9559 recall=0.9427 f1_score=0.9493 468 | 2022-06-23 08:16:16,414 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 469 | 2022-06-23 08:16:18,976 - INFO - main.py - train - 58 - 【train】 epoch:4 450/840 loss:0.0206 470 | 2022-06-23 08:16:20,181 - INFO - main.py - train - 58 - 【train】 epoch:4 451/840 loss:0.0560 471 | 2022-06-23 08:16:21,413 - INFO - main.py - train - 58 - 【train】 epoch:4 452/840 loss:0.1477 472 | 2022-06-23 08:16:22,623 - INFO - main.py - train - 58 - 【train】 epoch:4 453/840 loss:0.0816 473 | 2022-06-23 08:16:23,836 - INFO - main.py - train - 58 - 【train】 epoch:4 454/840 loss:0.0600 474 | 2022-06-23 08:16:25,039 - INFO - main.py - train - 58 - 【train】 epoch:4 455/840 loss:0.0851 475 | 2022-06-23 08:16:26,241 - INFO - main.py - train - 58 - 【train】 epoch:4 456/840 loss:0.0241 476 | 2022-06-23 08:16:27,659 - INFO - main.py - train - 58 - 【train】 epoch:4 457/840 loss:0.1033 477 | 2022-06-23 08:16:29,070 - INFO - main.py - train - 58 - 【train】 epoch:4 458/840 loss:0.0690 478 | 2022-06-23 08:16:30,480 - INFO - main.py - train - 58 - 【train】 epoch:4 459/840 loss:0.0491 479 | 2022-06-23 08:16:31,724 - INFO - main.py - train - 58 - 【train】 epoch:4 460/840 loss:0.1018 480 | 2022-06-23 08:16:32,937 - INFO - main.py - train - 58 - 【train】 epoch:4 461/840 loss:0.0534 481 | 2022-06-23 08:16:34,145 - INFO - main.py - train - 58 - 【train】 epoch:4 462/840 loss:0.0970 482 | 2022-06-23 08:16:35,354 - INFO - main.py - train - 58 - 【train】 epoch:4 463/840 loss:0.0301 483 | 2022-06-23 08:16:36,568 - INFO - main.py - train - 58 - 【train】 epoch:4 464/840 loss:0.0593 484 | 2022-06-23 08:16:37,790 - INFO - main.py - train - 58 - 【train】 epoch:4 465/840 loss:0.1614 485 | 2022-06-23 08:16:39,014 - INFO - main.py - train - 58 - 【train】 epoch:4 466/840 loss:0.0424 486 | 2022-06-23 08:16:40,223 - INFO - main.py - train - 58 - 【train】 epoch:4 467/840 loss:0.0351 487 | 2022-06-23 08:16:41,445 - INFO - main.py - train - 58 - 【train】 epoch:4 468/840 loss:0.1312 488 | 2022-06-23 08:16:42,655 - INFO - main.py - train - 58 - 【train】 epoch:4 469/840 loss:0.1115 489 | 2022-06-23 08:16:43,900 - INFO - main.py - train - 58 - 【train】 epoch:4 470/840 loss:0.0795 490 | 2022-06-23 08:16:45,132 - INFO - main.py - train - 58 - 【train】 epoch:4 471/840 loss:0.1403 491 | 2022-06-23 08:16:46,362 - INFO - main.py - train - 58 - 【train】 epoch:4 472/840 loss:0.0708 492 | 2022-06-23 08:16:47,589 - INFO - main.py - train - 58 - 【train】 epoch:4 473/840 loss:0.1508 493 | 2022-06-23 08:16:48,801 - INFO - main.py - train - 58 - 【train】 epoch:4 474/840 loss:0.0384 494 | 2022-06-23 08:16:50,023 - INFO - main.py - train - 58 - 【train】 epoch:4 475/840 loss:0.0129 495 | 2022-06-23 08:16:51,241 - INFO - main.py - train - 58 - 【train】 epoch:4 476/840 loss:0.0961 496 | 2022-06-23 08:16:52,444 - INFO - main.py - train - 58 - 【train】 epoch:4 477/840 loss:0.1103 497 | 2022-06-23 08:16:53,667 - INFO - main.py - train - 58 - 【train】 epoch:4 478/840 loss:0.0978 498 | 2022-06-23 08:16:54,181 - INFO - main.py - train - 58 - 【train】 epoch:4 479/840 loss:0.1084 499 | 2022-06-23 08:16:55,406 - INFO - main.py - train - 58 - 【train】 epoch:5 480/840 loss:0.0905 500 | 2022-06-23 08:16:56,611 - INFO - main.py - train - 58 - 【train】 epoch:5 481/840 loss:0.0274 501 | 2022-06-23 08:16:57,830 - INFO - main.py - train - 58 - 【train】 epoch:5 482/840 loss:0.0351 502 | 2022-06-23 08:16:59,027 - INFO - main.py - train - 58 - 【train】 epoch:5 483/840 loss:0.0627 503 | 2022-06-23 08:17:00,248 - INFO - main.py - train - 58 - 【train】 epoch:5 484/840 loss:0.1222 504 | 2022-06-23 08:17:01,459 - INFO - main.py - train - 58 - 【train】 epoch:5 485/840 loss:0.0646 505 | 2022-06-23 08:17:02,667 - INFO - main.py - train - 58 - 【train】 epoch:5 486/840 loss:0.0385 506 | 2022-06-23 08:17:03,867 - INFO - main.py - train - 58 - 【train】 epoch:5 487/840 loss:0.0549 507 | 2022-06-23 08:17:05,103 - INFO - main.py - train - 58 - 【train】 epoch:5 488/840 loss:0.0767 508 | 2022-06-23 08:17:06,326 - INFO - main.py - train - 58 - 【train】 epoch:5 489/840 loss:0.0465 509 | 2022-06-23 08:17:07,556 - INFO - main.py - train - 58 - 【train】 epoch:5 490/840 loss:0.0452 510 | 2022-06-23 08:17:08,768 - INFO - main.py - train - 58 - 【train】 epoch:5 491/840 loss:0.0522 511 | 2022-06-23 08:17:09,971 - INFO - main.py - train - 58 - 【train】 epoch:5 492/840 loss:0.1184 512 | 2022-06-23 08:17:11,188 - INFO - main.py - train - 58 - 【train】 epoch:5 493/840 loss:0.0395 513 | 2022-06-23 08:17:12,409 - INFO - main.py - train - 58 - 【train】 epoch:5 494/840 loss:0.0753 514 | 2022-06-23 08:17:13,623 - INFO - main.py - train - 58 - 【train】 epoch:5 495/840 loss:0.0596 515 | 2022-06-23 08:17:14,858 - INFO - main.py - train - 58 - 【train】 epoch:5 496/840 loss:0.0536 516 | 2022-06-23 08:17:16,056 - INFO - main.py - train - 58 - 【train】 epoch:5 497/840 loss:0.0103 517 | 2022-06-23 08:17:17,274 - INFO - main.py - train - 58 - 【train】 epoch:5 498/840 loss:0.0146 518 | 2022-06-23 08:17:18,483 - INFO - main.py - train - 58 - 【train】 epoch:5 499/840 loss:0.0369 519 | 2022-06-23 08:17:28,890 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9395 recall=0.9584 f1_score=0.9489 520 | 2022-06-23 08:17:30,105 - INFO - main.py - train - 58 - 【train】 epoch:5 500/840 loss:0.0742 521 | 2022-06-23 08:17:31,320 - INFO - main.py - train - 58 - 【train】 epoch:5 501/840 loss:0.0404 522 | 2022-06-23 08:17:32,524 - INFO - main.py - train - 58 - 【train】 epoch:5 502/840 loss:0.0221 523 | 2022-06-23 08:17:33,743 - INFO - main.py - train - 58 - 【train】 epoch:5 503/840 loss:0.1687 524 | 2022-06-23 08:17:34,957 - INFO - main.py - train - 58 - 【train】 epoch:5 504/840 loss:0.0366 525 | 2022-06-23 08:17:36,166 - INFO - main.py - train - 58 - 【train】 epoch:5 505/840 loss:0.0233 526 | 2022-06-23 08:17:37,372 - INFO - main.py - train - 58 - 【train】 epoch:5 506/840 loss:0.0985 527 | 2022-06-23 08:17:38,576 - INFO - main.py - train - 58 - 【train】 epoch:5 507/840 loss:0.0798 528 | 2022-06-23 08:17:39,790 - INFO - main.py - train - 58 - 【train】 epoch:5 508/840 loss:0.0867 529 | 2022-06-23 08:17:41,013 - INFO - main.py - train - 58 - 【train】 epoch:5 509/840 loss:0.0230 530 | 2022-06-23 08:17:42,228 - INFO - main.py - train - 58 - 【train】 epoch:5 510/840 loss:0.1203 531 | 2022-06-23 08:17:43,424 - INFO - main.py - train - 58 - 【train】 epoch:5 511/840 loss:0.0229 532 | 2022-06-23 08:17:44,628 - INFO - main.py - train - 58 - 【train】 epoch:5 512/840 loss:0.0327 533 | 2022-06-23 08:17:45,827 - INFO - main.py - train - 58 - 【train】 epoch:5 513/840 loss:0.0364 534 | 2022-06-23 08:17:47,046 - INFO - main.py - train - 58 - 【train】 epoch:5 514/840 loss:0.0413 535 | 2022-06-23 08:17:48,281 - INFO - main.py - train - 58 - 【train】 epoch:5 515/840 loss:0.0156 536 | 2022-06-23 08:17:49,482 - INFO - main.py - train - 58 - 【train】 epoch:5 516/840 loss:0.0680 537 | 2022-06-23 08:17:50,688 - INFO - main.py - train - 58 - 【train】 epoch:5 517/840 loss:0.0185 538 | 2022-06-23 08:17:51,909 - INFO - main.py - train - 58 - 【train】 epoch:5 518/840 loss:0.0279 539 | 2022-06-23 08:17:53,131 - INFO - main.py - train - 58 - 【train】 epoch:5 519/840 loss:0.0647 540 | 2022-06-23 08:17:54,351 - INFO - main.py - train - 58 - 【train】 epoch:5 520/840 loss:0.0273 541 | 2022-06-23 08:17:55,572 - INFO - main.py - train - 58 - 【train】 epoch:5 521/840 loss:0.0905 542 | 2022-06-23 08:17:56,780 - INFO - main.py - train - 58 - 【train】 epoch:5 522/840 loss:0.0394 543 | 2022-06-23 08:17:57,988 - INFO - main.py - train - 58 - 【train】 epoch:5 523/840 loss:0.0188 544 | 2022-06-23 08:17:59,198 - INFO - main.py - train - 58 - 【train】 epoch:5 524/840 loss:0.0860 545 | 2022-06-23 08:18:00,418 - INFO - main.py - train - 58 - 【train】 epoch:5 525/840 loss:0.0646 546 | 2022-06-23 08:18:01,644 - INFO - main.py - train - 58 - 【train】 epoch:5 526/840 loss:0.1057 547 | 2022-06-23 08:18:02,853 - INFO - main.py - train - 58 - 【train】 epoch:5 527/840 loss:0.1642 548 | 2022-06-23 08:18:04,063 - INFO - main.py - train - 58 - 【train】 epoch:5 528/840 loss:0.0837 549 | 2022-06-23 08:18:05,281 - INFO - main.py - train - 58 - 【train】 epoch:5 529/840 loss:0.0478 550 | 2022-06-23 08:18:06,498 - INFO - main.py - train - 58 - 【train】 epoch:5 530/840 loss:0.0267 551 | 2022-06-23 08:18:07,723 - INFO - main.py - train - 58 - 【train】 epoch:5 531/840 loss:0.0191 552 | 2022-06-23 08:18:08,935 - INFO - main.py - train - 58 - 【train】 epoch:5 532/840 loss:0.0155 553 | 2022-06-23 08:18:10,137 - INFO - main.py - train - 58 - 【train】 epoch:5 533/840 loss:0.0326 554 | 2022-06-23 08:18:11,342 - INFO - main.py - train - 58 - 【train】 epoch:5 534/840 loss:0.0176 555 | 2022-06-23 08:18:12,554 - INFO - main.py - train - 58 - 【train】 epoch:5 535/840 loss:0.0414 556 | 2022-06-23 08:18:13,775 - INFO - main.py - train - 58 - 【train】 epoch:5 536/840 loss:0.0975 557 | 2022-06-23 08:18:14,991 - INFO - main.py - train - 58 - 【train】 epoch:5 537/840 loss:0.0199 558 | 2022-06-23 08:18:16,208 - INFO - main.py - train - 58 - 【train】 epoch:5 538/840 loss:0.1488 559 | 2022-06-23 08:18:17,436 - INFO - main.py - train - 58 - 【train】 epoch:5 539/840 loss:0.0505 560 | 2022-06-23 08:18:18,656 - INFO - main.py - train - 58 - 【train】 epoch:5 540/840 loss:0.0168 561 | 2022-06-23 08:18:19,871 - INFO - main.py - train - 58 - 【train】 epoch:5 541/840 loss:0.0355 562 | 2022-06-23 08:18:21,071 - INFO - main.py - train - 58 - 【train】 epoch:5 542/840 loss:0.0445 563 | 2022-06-23 08:18:22,269 - INFO - main.py - train - 58 - 【train】 epoch:5 543/840 loss:0.0344 564 | 2022-06-23 08:18:23,476 - INFO - main.py - train - 58 - 【train】 epoch:5 544/840 loss:0.0888 565 | 2022-06-23 08:18:24,667 - INFO - main.py - train - 58 - 【train】 epoch:5 545/840 loss:0.0569 566 | 2022-06-23 08:18:25,877 - INFO - main.py - train - 58 - 【train】 epoch:5 546/840 loss:0.1153 567 | 2022-06-23 08:18:27,094 - INFO - main.py - train - 58 - 【train】 epoch:5 547/840 loss:0.0154 568 | 2022-06-23 08:18:28,290 - INFO - main.py - train - 58 - 【train】 epoch:5 548/840 loss:0.0575 569 | 2022-06-23 08:18:29,508 - INFO - main.py - train - 58 - 【train】 epoch:5 549/840 loss:0.1158 570 | 2022-06-23 08:18:39,820 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9429 recall=0.9565 f1_score=0.9497 571 | 2022-06-23 08:18:39,821 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 572 | 2022-06-23 08:18:42,375 - INFO - main.py - train - 58 - 【train】 epoch:5 550/840 loss:0.0236 573 | 2022-06-23 08:18:43,571 - INFO - main.py - train - 58 - 【train】 epoch:5 551/840 loss:0.0345 574 | 2022-06-23 08:18:44,770 - INFO - main.py - train - 58 - 【train】 epoch:5 552/840 loss:0.0606 575 | 2022-06-23 08:18:45,986 - INFO - main.py - train - 58 - 【train】 epoch:5 553/840 loss:0.0587 576 | 2022-06-23 08:18:47,231 - INFO - main.py - train - 58 - 【train】 epoch:5 554/840 loss:0.0873 577 | 2022-06-23 08:18:48,439 - INFO - main.py - train - 58 - 【train】 epoch:5 555/840 loss:0.0133 578 | 2022-06-23 08:18:49,632 - INFO - main.py - train - 58 - 【train】 epoch:5 556/840 loss:0.0604 579 | 2022-06-23 08:18:50,829 - INFO - main.py - train - 58 - 【train】 epoch:5 557/840 loss:0.0791 580 | 2022-06-23 08:18:52,226 - INFO - main.py - train - 58 - 【train】 epoch:5 558/840 loss:0.0964 581 | 2022-06-23 08:18:53,506 - INFO - main.py - train - 58 - 【train】 epoch:5 559/840 loss:0.0810 582 | 2022-06-23 08:18:54,727 - INFO - main.py - train - 58 - 【train】 epoch:5 560/840 loss:0.1408 583 | 2022-06-23 08:18:55,950 - INFO - main.py - train - 58 - 【train】 epoch:5 561/840 loss:0.0363 584 | 2022-06-23 08:18:57,160 - INFO - main.py - train - 58 - 【train】 epoch:5 562/840 loss:0.0725 585 | 2022-06-23 08:18:58,467 - INFO - main.py - train - 58 - 【train】 epoch:5 563/840 loss:0.0346 586 | 2022-06-23 08:18:59,758 - INFO - main.py - train - 58 - 【train】 epoch:5 564/840 loss:0.0522 587 | 2022-06-23 08:19:00,965 - INFO - main.py - train - 58 - 【train】 epoch:5 565/840 loss:0.0101 588 | 2022-06-23 08:19:02,230 - INFO - main.py - train - 58 - 【train】 epoch:5 566/840 loss:0.0405 589 | 2022-06-23 08:19:03,464 - INFO - main.py - train - 58 - 【train】 epoch:5 567/840 loss:0.0218 590 | 2022-06-23 08:19:04,712 - INFO - main.py - train - 58 - 【train】 epoch:5 568/840 loss:0.0498 591 | 2022-06-23 08:19:05,984 - INFO - main.py - train - 58 - 【train】 epoch:5 569/840 loss:0.0479 592 | 2022-06-23 08:19:07,216 - INFO - main.py - train - 58 - 【train】 epoch:5 570/840 loss:0.0592 593 | 2022-06-23 08:19:08,424 - INFO - main.py - train - 58 - 【train】 epoch:5 571/840 loss:0.0335 594 | 2022-06-23 08:19:09,661 - INFO - main.py - train - 58 - 【train】 epoch:5 572/840 loss:0.0502 595 | 2022-06-23 08:19:10,902 - INFO - main.py - train - 58 - 【train】 epoch:5 573/840 loss:0.0204 596 | 2022-06-23 08:19:12,128 - INFO - main.py - train - 58 - 【train】 epoch:5 574/840 loss:0.1012 597 | 2022-06-23 08:19:13,347 - INFO - main.py - train - 58 - 【train】 epoch:5 575/840 loss:0.0789 598 | 2022-06-23 08:19:14,574 - INFO - main.py - train - 58 - 【train】 epoch:5 576/840 loss:0.1033 599 | 2022-06-23 08:19:15,792 - INFO - main.py - train - 58 - 【train】 epoch:5 577/840 loss:0.0355 600 | 2022-06-23 08:19:17,027 - INFO - main.py - train - 58 - 【train】 epoch:5 578/840 loss:0.0213 601 | 2022-06-23 08:19:18,240 - INFO - main.py - train - 58 - 【train】 epoch:5 579/840 loss:0.0281 602 | 2022-06-23 08:19:19,456 - INFO - main.py - train - 58 - 【train】 epoch:5 580/840 loss:0.1118 603 | 2022-06-23 08:19:20,661 - INFO - main.py - train - 58 - 【train】 epoch:5 581/840 loss:0.0274 604 | 2022-06-23 08:19:21,876 - INFO - main.py - train - 58 - 【train】 epoch:5 582/840 loss:0.0510 605 | 2022-06-23 08:19:23,099 - INFO - main.py - train - 58 - 【train】 epoch:5 583/840 loss:0.0246 606 | 2022-06-23 08:19:24,299 - INFO - main.py - train - 58 - 【train】 epoch:5 584/840 loss:0.0161 607 | 2022-06-23 08:19:25,505 - INFO - main.py - train - 58 - 【train】 epoch:5 585/840 loss:0.0453 608 | 2022-06-23 08:19:26,705 - INFO - main.py - train - 58 - 【train】 epoch:5 586/840 loss:0.0312 609 | 2022-06-23 08:19:27,931 - INFO - main.py - train - 58 - 【train】 epoch:5 587/840 loss:0.0210 610 | 2022-06-23 08:19:29,134 - INFO - main.py - train - 58 - 【train】 epoch:5 588/840 loss:0.0716 611 | 2022-06-23 08:19:30,349 - INFO - main.py - train - 58 - 【train】 epoch:5 589/840 loss:0.0304 612 | 2022-06-23 08:19:31,554 - INFO - main.py - train - 58 - 【train】 epoch:5 590/840 loss:0.0058 613 | 2022-06-23 08:19:32,784 - INFO - main.py - train - 58 - 【train】 epoch:5 591/840 loss:0.0085 614 | 2022-06-23 08:19:34,392 - INFO - main.py - train - 58 - 【train】 epoch:5 592/840 loss:0.0079 615 | 2022-06-23 08:19:36,024 - INFO - main.py - train - 58 - 【train】 epoch:5 593/840 loss:0.0366 616 | 2022-06-23 08:19:37,225 - INFO - main.py - train - 58 - 【train】 epoch:5 594/840 loss:0.0396 617 | 2022-06-23 08:19:38,437 - INFO - main.py - train - 58 - 【train】 epoch:5 595/840 loss:0.0187 618 | 2022-06-23 08:19:39,639 - INFO - main.py - train - 58 - 【train】 epoch:5 596/840 loss:0.0071 619 | 2022-06-23 08:19:40,852 - INFO - main.py - train - 58 - 【train】 epoch:5 597/840 loss:0.1142 620 | 2022-06-23 08:19:42,050 - INFO - main.py - train - 58 - 【train】 epoch:5 598/840 loss:0.0578 621 | 2022-06-23 08:19:42,564 - INFO - main.py - train - 58 - 【train】 epoch:5 599/840 loss:0.1979 622 | 2022-06-23 08:19:52,851 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9437 recall=0.9503 f1_score=0.9470 623 | 2022-06-23 08:19:54,055 - INFO - main.py - train - 58 - 【train】 epoch:6 600/840 loss:0.0127 624 | 2022-06-23 08:19:55,261 - INFO - main.py - train - 58 - 【train】 epoch:6 601/840 loss:0.0128 625 | 2022-06-23 08:19:56,460 - INFO - main.py - train - 58 - 【train】 epoch:6 602/840 loss:0.0495 626 | 2022-06-23 08:19:57,678 - INFO - main.py - train - 58 - 【train】 epoch:6 603/840 loss:0.0266 627 | 2022-06-23 08:19:58,891 - INFO - main.py - train - 58 - 【train】 epoch:6 604/840 loss:0.0175 628 | 2022-06-23 08:20:00,097 - INFO - main.py - train - 58 - 【train】 epoch:6 605/840 loss:0.0402 629 | 2022-06-23 08:20:01,305 - INFO - main.py - train - 58 - 【train】 epoch:6 606/840 loss:0.0772 630 | 2022-06-23 08:20:02,498 - INFO - main.py - train - 58 - 【train】 epoch:6 607/840 loss:0.0116 631 | 2022-06-23 08:20:03,713 - INFO - main.py - train - 58 - 【train】 epoch:6 608/840 loss:0.0155 632 | 2022-06-23 08:20:04,930 - INFO - main.py - train - 58 - 【train】 epoch:6 609/840 loss:0.0653 633 | 2022-06-23 08:20:06,146 - INFO - main.py - train - 58 - 【train】 epoch:6 610/840 loss:0.0264 634 | 2022-06-23 08:20:07,348 - INFO - main.py - train - 58 - 【train】 epoch:6 611/840 loss:0.0181 635 | 2022-06-23 08:20:08,558 - INFO - main.py - train - 58 - 【train】 epoch:6 612/840 loss:0.0062 636 | 2022-06-23 08:20:09,756 - INFO - main.py - train - 58 - 【train】 epoch:6 613/840 loss:0.0166 637 | 2022-06-23 08:20:11,007 - INFO - main.py - train - 58 - 【train】 epoch:6 614/840 loss:0.0161 638 | 2022-06-23 08:20:12,228 - INFO - main.py - train - 58 - 【train】 epoch:6 615/840 loss:0.0105 639 | 2022-06-23 08:20:13,428 - INFO - main.py - train - 58 - 【train】 epoch:6 616/840 loss:0.0444 640 | 2022-06-23 08:20:14,631 - INFO - main.py - train - 58 - 【train】 epoch:6 617/840 loss:0.0277 641 | 2022-06-23 08:20:15,836 - INFO - main.py - train - 58 - 【train】 epoch:6 618/840 loss:0.0283 642 | 2022-06-23 08:20:17,059 - INFO - main.py - train - 58 - 【train】 epoch:6 619/840 loss:0.0807 643 | 2022-06-23 08:20:18,276 - INFO - main.py - train - 58 - 【train】 epoch:6 620/840 loss:0.0235 644 | 2022-06-23 08:20:19,484 - INFO - main.py - train - 58 - 【train】 epoch:6 621/840 loss:0.0549 645 | 2022-06-23 08:20:20,693 - INFO - main.py - train - 58 - 【train】 epoch:6 622/840 loss:0.0107 646 | 2022-06-23 08:20:21,898 - INFO - main.py - train - 58 - 【train】 epoch:6 623/840 loss:0.0642 647 | 2022-06-23 08:20:23,117 - INFO - main.py - train - 58 - 【train】 epoch:6 624/840 loss:0.0159 648 | 2022-06-23 08:20:24,341 - INFO - main.py - train - 58 - 【train】 epoch:6 625/840 loss:0.0544 649 | 2022-06-23 08:20:25,546 - INFO - main.py - train - 58 - 【train】 epoch:6 626/840 loss:0.0593 650 | 2022-06-23 08:20:26,754 - INFO - main.py - train - 58 - 【train】 epoch:6 627/840 loss:0.0609 651 | 2022-06-23 08:20:27,967 - INFO - main.py - train - 58 - 【train】 epoch:6 628/840 loss:0.0259 652 | 2022-06-23 08:20:29,184 - INFO - main.py - train - 58 - 【train】 epoch:6 629/840 loss:0.0343 653 | 2022-06-23 08:20:30,398 - INFO - main.py - train - 58 - 【train】 epoch:6 630/840 loss:0.0474 654 | 2022-06-23 08:20:31,612 - INFO - main.py - train - 58 - 【train】 epoch:6 631/840 loss:0.0849 655 | 2022-06-23 08:20:32,818 - INFO - main.py - train - 58 - 【train】 epoch:6 632/840 loss:0.0444 656 | 2022-06-23 08:20:34,024 - INFO - main.py - train - 58 - 【train】 epoch:6 633/840 loss:0.0478 657 | 2022-06-23 08:20:35,233 - INFO - main.py - train - 58 - 【train】 epoch:6 634/840 loss:0.0554 658 | 2022-06-23 08:20:36,453 - INFO - main.py - train - 58 - 【train】 epoch:6 635/840 loss:0.0269 659 | 2022-06-23 08:20:37,667 - INFO - main.py - train - 58 - 【train】 epoch:6 636/840 loss:0.0179 660 | 2022-06-23 08:20:38,872 - INFO - main.py - train - 58 - 【train】 epoch:6 637/840 loss:0.0487 661 | 2022-06-23 08:20:40,073 - INFO - main.py - train - 58 - 【train】 epoch:6 638/840 loss:0.0598 662 | 2022-06-23 08:20:41,275 - INFO - main.py - train - 58 - 【train】 epoch:6 639/840 loss:0.0267 663 | 2022-06-23 08:20:42,489 - INFO - main.py - train - 58 - 【train】 epoch:6 640/840 loss:0.0704 664 | 2022-06-23 08:20:43,704 - INFO - main.py - train - 58 - 【train】 epoch:6 641/840 loss:0.0287 665 | 2022-06-23 08:20:44,911 - INFO - main.py - train - 58 - 【train】 epoch:6 642/840 loss:0.0503 666 | 2022-06-23 08:20:46,139 - INFO - main.py - train - 58 - 【train】 epoch:6 643/840 loss:0.0612 667 | 2022-06-23 08:20:47,336 - INFO - main.py - train - 58 - 【train】 epoch:6 644/840 loss:0.0271 668 | 2022-06-23 08:20:48,541 - INFO - main.py - train - 58 - 【train】 epoch:6 645/840 loss:0.0573 669 | 2022-06-23 08:20:49,771 - INFO - main.py - train - 58 - 【train】 epoch:6 646/840 loss:0.0230 670 | 2022-06-23 08:20:50,980 - INFO - main.py - train - 58 - 【train】 epoch:6 647/840 loss:0.0510 671 | 2022-06-23 08:20:52,182 - INFO - main.py - train - 58 - 【train】 epoch:6 648/840 loss:0.0343 672 | 2022-06-23 08:20:53,376 - INFO - main.py - train - 58 - 【train】 epoch:6 649/840 loss:0.0094 673 | 2022-06-23 08:21:03,775 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9505 recall=0.9547 f1_score=0.9526 674 | 2022-06-23 08:21:03,776 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 675 | 2022-06-23 08:21:06,342 - INFO - main.py - train - 58 - 【train】 epoch:6 650/840 loss:0.0234 676 | 2022-06-23 08:21:07,541 - INFO - main.py - train - 58 - 【train】 epoch:6 651/840 loss:0.0235 677 | 2022-06-23 08:21:08,734 - INFO - main.py - train - 58 - 【train】 epoch:6 652/840 loss:0.0136 678 | 2022-06-23 08:21:09,991 - INFO - main.py - train - 58 - 【train】 epoch:6 653/840 loss:0.0215 679 | 2022-06-23 08:21:11,205 - INFO - main.py - train - 58 - 【train】 epoch:6 654/840 loss:0.0438 680 | 2022-06-23 08:21:12,687 - INFO - main.py - train - 58 - 【train】 epoch:6 655/840 loss:0.0517 681 | 2022-06-23 08:21:14,102 - INFO - main.py - train - 58 - 【train】 epoch:6 656/840 loss:0.0331 682 | 2022-06-23 08:21:15,451 - INFO - main.py - train - 58 - 【train】 epoch:6 657/840 loss:0.0322 683 | 2022-06-23 08:21:16,653 - INFO - main.py - train - 58 - 【train】 epoch:6 658/840 loss:0.0557 684 | 2022-06-23 08:21:17,867 - INFO - main.py - train - 58 - 【train】 epoch:6 659/840 loss:0.0149 685 | 2022-06-23 08:21:19,078 - INFO - main.py - train - 58 - 【train】 epoch:6 660/840 loss:0.0600 686 | 2022-06-23 08:21:20,290 - INFO - main.py - train - 58 - 【train】 epoch:6 661/840 loss:0.0095 687 | 2022-06-23 08:21:21,523 - INFO - main.py - train - 58 - 【train】 epoch:6 662/840 loss:0.0307 688 | 2022-06-23 08:21:22,724 - INFO - main.py - train - 58 - 【train】 epoch:6 663/840 loss:0.0063 689 | 2022-06-23 08:21:23,940 - INFO - main.py - train - 58 - 【train】 epoch:6 664/840 loss:0.0221 690 | 2022-06-23 08:21:25,174 - INFO - main.py - train - 58 - 【train】 epoch:6 665/840 loss:0.0342 691 | 2022-06-23 08:21:26,389 - INFO - main.py - train - 58 - 【train】 epoch:6 666/840 loss:0.0083 692 | 2022-06-23 08:21:27,614 - INFO - main.py - train - 58 - 【train】 epoch:6 667/840 loss:0.0431 693 | 2022-06-23 08:21:28,822 - INFO - main.py - train - 58 - 【train】 epoch:6 668/840 loss:0.0122 694 | 2022-06-23 08:21:30,050 - INFO - main.py - train - 58 - 【train】 epoch:6 669/840 loss:0.0228 695 | 2022-06-23 08:21:31,254 - INFO - main.py - train - 58 - 【train】 epoch:6 670/840 loss:0.0077 696 | 2022-06-23 08:21:32,500 - INFO - main.py - train - 58 - 【train】 epoch:6 671/840 loss:0.0307 697 | 2022-06-23 08:21:33,720 - INFO - main.py - train - 58 - 【train】 epoch:6 672/840 loss:0.0142 698 | 2022-06-23 08:21:34,935 - INFO - main.py - train - 58 - 【train】 epoch:6 673/840 loss:0.0923 699 | 2022-06-23 08:21:36,151 - INFO - main.py - train - 58 - 【train】 epoch:6 674/840 loss:0.0264 700 | 2022-06-23 08:21:37,378 - INFO - main.py - train - 58 - 【train】 epoch:6 675/840 loss:0.1198 701 | 2022-06-23 08:21:38,589 - INFO - main.py - train - 58 - 【train】 epoch:6 676/840 loss:0.0246 702 | 2022-06-23 08:21:39,804 - INFO - main.py - train - 58 - 【train】 epoch:6 677/840 loss:0.0088 703 | 2022-06-23 08:21:41,014 - INFO - main.py - train - 58 - 【train】 epoch:6 678/840 loss:0.0650 704 | 2022-06-23 08:21:42,228 - INFO - main.py - train - 58 - 【train】 epoch:6 679/840 loss:0.0340 705 | 2022-06-23 08:21:43,427 - INFO - main.py - train - 58 - 【train】 epoch:6 680/840 loss:0.0228 706 | 2022-06-23 08:21:44,644 - INFO - main.py - train - 58 - 【train】 epoch:6 681/840 loss:0.0215 707 | 2022-06-23 08:21:45,857 - INFO - main.py - train - 58 - 【train】 epoch:6 682/840 loss:0.0368 708 | 2022-06-23 08:21:47,073 - INFO - main.py - train - 58 - 【train】 epoch:6 683/840 loss:0.0428 709 | 2022-06-23 08:21:48,279 - INFO - main.py - train - 58 - 【train】 epoch:6 684/840 loss:0.0781 710 | 2022-06-23 08:21:49,492 - INFO - main.py - train - 58 - 【train】 epoch:6 685/840 loss:0.0215 711 | 2022-06-23 08:21:50,694 - INFO - main.py - train - 58 - 【train】 epoch:6 686/840 loss:0.0166 712 | 2022-06-23 08:21:51,922 - INFO - main.py - train - 58 - 【train】 epoch:6 687/840 loss:0.0135 713 | 2022-06-23 08:21:53,145 - INFO - main.py - train - 58 - 【train】 epoch:6 688/840 loss:0.1667 714 | 2022-06-23 08:21:54,362 - INFO - main.py - train - 58 - 【train】 epoch:6 689/840 loss:0.0335 715 | 2022-06-23 08:21:55,568 - INFO - main.py - train - 58 - 【train】 epoch:6 690/840 loss:0.0440 716 | 2022-06-23 08:21:56,780 - INFO - main.py - train - 58 - 【train】 epoch:6 691/840 loss:0.0498 717 | 2022-06-23 08:21:57,999 - INFO - main.py - train - 58 - 【train】 epoch:6 692/840 loss:0.0257 718 | 2022-06-23 08:21:59,209 - INFO - main.py - train - 58 - 【train】 epoch:6 693/840 loss:0.1083 719 | 2022-06-23 08:22:00,418 - INFO - main.py - train - 58 - 【train】 epoch:6 694/840 loss:0.0037 720 | 2022-06-23 08:22:01,622 - INFO - main.py - train - 58 - 【train】 epoch:6 695/840 loss:0.0603 721 | 2022-06-23 08:22:02,849 - INFO - main.py - train - 58 - 【train】 epoch:6 696/840 loss:0.0474 722 | 2022-06-23 08:22:04,064 - INFO - main.py - train - 58 - 【train】 epoch:6 697/840 loss:0.0239 723 | 2022-06-23 08:22:05,277 - INFO - main.py - train - 58 - 【train】 epoch:6 698/840 loss:0.0690 724 | 2022-06-23 08:22:06,482 - INFO - main.py - train - 58 - 【train】 epoch:6 699/840 loss:0.0279 725 | 2022-06-23 08:22:16,916 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9559 recall=0.9565 f1_score=0.9562 726 | 2022-06-23 08:22:16,917 - INFO - train_utils.py - save_model - 77 - Saving model checkpoint to ./checkpoints/bert 727 | 2022-06-23 08:22:19,416 - INFO - main.py - train - 58 - 【train】 epoch:6 700/840 loss:0.0349 728 | 2022-06-23 08:22:20,616 - INFO - main.py - train - 58 - 【train】 epoch:6 701/840 loss:0.0188 729 | 2022-06-23 08:22:21,816 - INFO - main.py - train - 58 - 【train】 epoch:6 702/840 loss:0.0678 730 | 2022-06-23 08:22:23,023 - INFO - main.py - train - 58 - 【train】 epoch:6 703/840 loss:0.0431 731 | 2022-06-23 08:22:24,224 - INFO - main.py - train - 58 - 【train】 epoch:6 704/840 loss:0.0094 732 | 2022-06-23 08:22:25,423 - INFO - main.py - train - 58 - 【train】 epoch:6 705/840 loss:0.0186 733 | 2022-06-23 08:22:26,633 - INFO - main.py - train - 58 - 【train】 epoch:6 706/840 loss:0.0432 734 | 2022-06-23 08:22:27,882 - INFO - main.py - train - 58 - 【train】 epoch:6 707/840 loss:0.0341 735 | 2022-06-23 08:22:29,174 - INFO - main.py - train - 58 - 【train】 epoch:6 708/840 loss:0.0768 736 | 2022-06-23 08:22:30,463 - INFO - main.py - train - 58 - 【train】 epoch:6 709/840 loss:0.0212 737 | 2022-06-23 08:22:31,689 - INFO - main.py - train - 58 - 【train】 epoch:6 710/840 loss:0.0205 738 | 2022-06-23 08:22:33,072 - INFO - main.py - train - 58 - 【train】 epoch:6 711/840 loss:0.0168 739 | 2022-06-23 08:22:34,322 - INFO - main.py - train - 58 - 【train】 epoch:6 712/840 loss:0.0378 740 | 2022-06-23 08:22:35,709 - INFO - main.py - train - 58 - 【train】 epoch:6 713/840 loss:0.0166 741 | 2022-06-23 08:22:36,939 - INFO - main.py - train - 58 - 【train】 epoch:6 714/840 loss:0.0301 742 | 2022-06-23 08:22:38,154 - INFO - main.py - train - 58 - 【train】 epoch:6 715/840 loss:0.0291 743 | 2022-06-23 08:22:39,370 - INFO - main.py - train - 58 - 【train】 epoch:6 716/840 loss:0.0502 744 | 2022-06-23 08:22:40,583 - INFO - main.py - train - 58 - 【train】 epoch:6 717/840 loss:0.0199 745 | 2022-06-23 08:22:41,808 - INFO - main.py - train - 58 - 【train】 epoch:6 718/840 loss:0.1192 746 | 2022-06-23 08:22:42,344 - INFO - main.py - train - 58 - 【train】 epoch:6 719/840 loss:0.0116 747 | 2022-06-23 08:22:43,566 - INFO - main.py - train - 58 - 【train】 epoch:7 720/840 loss:0.0369 748 | 2022-06-23 08:22:44,793 - INFO - main.py - train - 58 - 【train】 epoch:7 721/840 loss:0.0226 749 | 2022-06-23 08:22:46,039 - INFO - main.py - train - 58 - 【train】 epoch:7 722/840 loss:0.0105 750 | 2022-06-23 08:22:47,256 - INFO - main.py - train - 58 - 【train】 epoch:7 723/840 loss:0.0184 751 | 2022-06-23 08:22:48,465 - INFO - main.py - train - 58 - 【train】 epoch:7 724/840 loss:0.0139 752 | 2022-06-23 08:22:49,673 - INFO - main.py - train - 58 - 【train】 epoch:7 725/840 loss:0.0036 753 | 2022-06-23 08:22:50,889 - INFO - main.py - train - 58 - 【train】 epoch:7 726/840 loss:0.0133 754 | 2022-06-23 08:22:52,115 - INFO - main.py - train - 58 - 【train】 epoch:7 727/840 loss:0.0095 755 | 2022-06-23 08:22:53,333 - INFO - main.py - train - 58 - 【train】 epoch:7 728/840 loss:0.0988 756 | 2022-06-23 08:22:54,553 - INFO - main.py - train - 58 - 【train】 epoch:7 729/840 loss:0.0120 757 | 2022-06-23 08:22:55,769 - INFO - main.py - train - 58 - 【train】 epoch:7 730/840 loss:0.0518 758 | 2022-06-23 08:22:56,976 - INFO - main.py - train - 58 - 【train】 epoch:7 731/840 loss:0.0042 759 | 2022-06-23 08:22:58,196 - INFO - main.py - train - 58 - 【train】 epoch:7 732/840 loss:0.0180 760 | 2022-06-23 08:22:59,418 - INFO - main.py - train - 58 - 【train】 epoch:7 733/840 loss:0.0422 761 | 2022-06-23 08:23:00,622 - INFO - main.py - train - 58 - 【train】 epoch:7 734/840 loss:0.0224 762 | 2022-06-23 08:23:01,824 - INFO - main.py - train - 58 - 【train】 epoch:7 735/840 loss:0.0084 763 | 2022-06-23 08:23:03,053 - INFO - main.py - train - 58 - 【train】 epoch:7 736/840 loss:0.0318 764 | 2022-06-23 08:23:04,272 - INFO - main.py - train - 58 - 【train】 epoch:7 737/840 loss:0.0264 765 | 2022-06-23 08:23:05,482 - INFO - main.py - train - 58 - 【train】 epoch:7 738/840 loss:0.0121 766 | 2022-06-23 08:23:06,697 - INFO - main.py - train - 58 - 【train】 epoch:7 739/840 loss:0.0223 767 | 2022-06-23 08:23:07,899 - INFO - main.py - train - 58 - 【train】 epoch:7 740/840 loss:0.0340 768 | 2022-06-23 08:23:09,109 - INFO - main.py - train - 58 - 【train】 epoch:7 741/840 loss:0.0059 769 | 2022-06-23 08:23:10,323 - INFO - main.py - train - 58 - 【train】 epoch:7 742/840 loss:0.0610 770 | 2022-06-23 08:23:11,543 - INFO - main.py - train - 58 - 【train】 epoch:7 743/840 loss:0.0142 771 | 2022-06-23 08:23:12,752 - INFO - main.py - train - 58 - 【train】 epoch:7 744/840 loss:0.0096 772 | 2022-06-23 08:23:13,960 - INFO - main.py - train - 58 - 【train】 epoch:7 745/840 loss:0.0249 773 | 2022-06-23 08:23:15,167 - INFO - main.py - train - 58 - 【train】 epoch:7 746/840 loss:0.0135 774 | 2022-06-23 08:23:16,378 - INFO - main.py - train - 58 - 【train】 epoch:7 747/840 loss:0.0291 775 | 2022-06-23 08:23:17,594 - INFO - main.py - train - 58 - 【train】 epoch:7 748/840 loss:0.0245 776 | 2022-06-23 08:23:18,818 - INFO - main.py - train - 58 - 【train】 epoch:7 749/840 loss:0.0085 777 | 2022-06-23 08:23:29,232 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9576 recall=0.9521 f1_score=0.9548 778 | 2022-06-23 08:23:30,436 - INFO - main.py - train - 58 - 【train】 epoch:7 750/840 loss:0.0574 779 | 2022-06-23 08:23:31,659 - INFO - main.py - train - 58 - 【train】 epoch:7 751/840 loss:0.0660 780 | 2022-06-23 08:23:32,864 - INFO - main.py - train - 58 - 【train】 epoch:7 752/840 loss:0.0261 781 | 2022-06-23 08:23:34,105 - INFO - main.py - train - 58 - 【train】 epoch:7 753/840 loss:0.0106 782 | 2022-06-23 08:23:35,305 - INFO - main.py - train - 58 - 【train】 epoch:7 754/840 loss:0.1020 783 | 2022-06-23 08:23:36,499 - INFO - main.py - train - 58 - 【train】 epoch:7 755/840 loss:0.0119 784 | 2022-06-23 08:23:37,695 - INFO - main.py - train - 58 - 【train】 epoch:7 756/840 loss:0.0420 785 | 2022-06-23 08:23:38,904 - INFO - main.py - train - 58 - 【train】 epoch:7 757/840 loss:0.0321 786 | 2022-06-23 08:23:40,133 - INFO - main.py - train - 58 - 【train】 epoch:7 758/840 loss:0.0163 787 | 2022-06-23 08:23:41,333 - INFO - main.py - train - 58 - 【train】 epoch:7 759/840 loss:0.0124 788 | 2022-06-23 08:23:42,535 - INFO - main.py - train - 58 - 【train】 epoch:7 760/840 loss:0.0257 789 | 2022-06-23 08:23:43,737 - INFO - main.py - train - 58 - 【train】 epoch:7 761/840 loss:0.0096 790 | 2022-06-23 08:23:44,952 - INFO - main.py - train - 58 - 【train】 epoch:7 762/840 loss:0.0301 791 | 2022-06-23 08:23:46,199 - INFO - main.py - train - 58 - 【train】 epoch:7 763/840 loss:0.0043 792 | 2022-06-23 08:23:47,404 - INFO - main.py - train - 58 - 【train】 epoch:7 764/840 loss:0.0076 793 | 2022-06-23 08:23:48,612 - INFO - main.py - train - 58 - 【train】 epoch:7 765/840 loss:0.0202 794 | 2022-06-23 08:23:49,816 - INFO - main.py - train - 58 - 【train】 epoch:7 766/840 loss:0.0146 795 | 2022-06-23 08:23:51,040 - INFO - main.py - train - 58 - 【train】 epoch:7 767/840 loss:0.0075 796 | 2022-06-23 08:23:52,280 - INFO - main.py - train - 58 - 【train】 epoch:7 768/840 loss:0.0108 797 | 2022-06-23 08:23:53,502 - INFO - main.py - train - 58 - 【train】 epoch:7 769/840 loss:0.0330 798 | 2022-06-23 08:23:54,721 - INFO - main.py - train - 58 - 【train】 epoch:7 770/840 loss:0.0162 799 | 2022-06-23 08:23:55,949 - INFO - main.py - train - 58 - 【train】 epoch:7 771/840 loss:0.0044 800 | 2022-06-23 08:23:57,171 - INFO - main.py - train - 58 - 【train】 epoch:7 772/840 loss:0.0284 801 | 2022-06-23 08:23:58,394 - INFO - main.py - train - 58 - 【train】 epoch:7 773/840 loss:0.0036 802 | 2022-06-23 08:23:59,622 - INFO - main.py - train - 58 - 【train】 epoch:7 774/840 loss:0.0233 803 | 2022-06-23 08:24:00,834 - INFO - main.py - train - 58 - 【train】 epoch:7 775/840 loss:0.0428 804 | 2022-06-23 08:24:02,072 - INFO - main.py - train - 58 - 【train】 epoch:7 776/840 loss:0.0407 805 | 2022-06-23 08:24:03,302 - INFO - main.py - train - 58 - 【train】 epoch:7 777/840 loss:0.0137 806 | 2022-06-23 08:24:04,522 - INFO - main.py - train - 58 - 【train】 epoch:7 778/840 loss:0.0065 807 | 2022-06-23 08:24:05,733 - INFO - main.py - train - 58 - 【train】 epoch:7 779/840 loss:0.0256 808 | 2022-06-23 08:24:06,953 - INFO - main.py - train - 58 - 【train】 epoch:7 780/840 loss:0.0476 809 | 2022-06-23 08:24:08,175 - INFO - main.py - train - 58 - 【train】 epoch:7 781/840 loss:0.0118 810 | 2022-06-23 08:24:09,383 - INFO - main.py - train - 58 - 【train】 epoch:7 782/840 loss:0.0063 811 | 2022-06-23 08:24:10,602 - INFO - main.py - train - 58 - 【train】 epoch:7 783/840 loss:0.0228 812 | 2022-06-23 08:24:11,840 - INFO - main.py - train - 58 - 【train】 epoch:7 784/840 loss:0.0065 813 | 2022-06-23 08:24:13,038 - INFO - main.py - train - 58 - 【train】 epoch:7 785/840 loss:0.0043 814 | 2022-06-23 08:24:14,248 - INFO - main.py - train - 58 - 【train】 epoch:7 786/840 loss:0.0119 815 | 2022-06-23 08:24:15,451 - INFO - main.py - train - 58 - 【train】 epoch:7 787/840 loss:0.0728 816 | 2022-06-23 08:24:16,673 - INFO - main.py - train - 58 - 【train】 epoch:7 788/840 loss:0.0393 817 | 2022-06-23 08:24:17,886 - INFO - main.py - train - 58 - 【train】 epoch:7 789/840 loss:0.0133 818 | 2022-06-23 08:24:19,094 - INFO - main.py - train - 58 - 【train】 epoch:7 790/840 loss:0.0494 819 | 2022-06-23 08:24:20,293 - INFO - main.py - train - 58 - 【train】 epoch:7 791/840 loss:0.0214 820 | 2022-06-23 08:24:21,490 - INFO - main.py - train - 58 - 【train】 epoch:7 792/840 loss:0.0054 821 | 2022-06-23 08:24:22,705 - INFO - main.py - train - 58 - 【train】 epoch:7 793/840 loss:0.0434 822 | 2022-06-23 08:24:23,915 - INFO - main.py - train - 58 - 【train】 epoch:7 794/840 loss:0.0062 823 | 2022-06-23 08:24:25,137 - INFO - main.py - train - 58 - 【train】 epoch:7 795/840 loss:0.0125 824 | 2022-06-23 08:24:26,344 - INFO - main.py - train - 58 - 【train】 epoch:7 796/840 loss:0.0759 825 | 2022-06-23 08:24:27,564 - INFO - main.py - train - 58 - 【train】 epoch:7 797/840 loss:0.0252 826 | 2022-06-23 08:24:28,778 - INFO - main.py - train - 58 - 【train】 epoch:7 798/840 loss:0.0680 827 | 2022-06-23 08:24:30,016 - INFO - main.py - train - 58 - 【train】 epoch:7 799/840 loss:0.0515 828 | 2022-06-23 08:24:42,130 - INFO - main.py - train - 65 - [eval] loss:0.0000 precision=0.9536 recall=0.9584 f1_score=0.9560 829 | 2022-06-23 08:24:43,330 - INFO - main.py - train - 58 - 【train】 epoch:7 800/840 loss:0.0112 830 | 2022-06-23 08:24:44,539 - INFO - main.py - train - 58 - 【train】 epoch:7 801/840 loss:0.0048 831 | 2022-06-23 08:24:45,738 - INFO - main.py - train - 58 - 【train】 epoch:7 802/840 loss:0.0626 832 | 2022-06-23 08:24:46,940 - INFO - main.py - train - 58 - 【train】 epoch:7 803/840 loss:0.0678 833 | 2022-06-23 08:24:48,138 - INFO - main.py - train - 58 - 【train】 epoch:7 804/840 loss:0.0370 834 | 2022-06-23 08:24:49,351 - INFO - main.py - train - 58 - 【train】 epoch:7 805/840 loss:0.0139 835 | 2022-06-23 08:24:50,566 - INFO - main.py - train - 58 - 【train】 epoch:7 806/840 loss:0.0067 836 | 2022-06-23 08:24:51,783 - INFO - main.py - train - 58 - 【train】 epoch:7 807/840 loss:0.0067 837 | 2022-06-23 08:24:53,015 - INFO - main.py - train - 58 - 【train】 epoch:7 808/840 loss:0.0563 838 | 2022-06-23 08:24:54,224 - INFO - main.py - train - 58 - 【train】 epoch:7 809/840 loss:0.0631 839 | 2022-06-23 08:24:55,446 - INFO - main.py - train - 58 - 【train】 epoch:7 810/840 loss:0.0082 840 | 2022-06-23 08:24:56,664 - INFO - main.py - train - 58 - 【train】 epoch:7 811/840 loss:0.0519 841 | 2022-06-23 08:24:57,877 - INFO - main.py - train - 58 - 【train】 epoch:7 812/840 loss:0.0322 842 | 2022-06-23 08:24:59,089 - INFO - main.py - train - 58 - 【train】 epoch:7 813/840 loss:0.0545 843 | 2022-06-23 08:25:00,294 - INFO - main.py - train - 58 - 【train】 epoch:7 814/840 loss:0.0638 844 | 2022-06-23 08:25:01,520 - INFO - main.py - train - 58 - 【train】 epoch:7 815/840 loss:0.0183 845 | 2022-06-23 08:25:02,742 - INFO - main.py - train - 58 - 【train】 epoch:7 816/840 loss:0.0177 846 | 2022-06-23 08:25:03,973 - INFO - main.py - train - 58 - 【train】 epoch:7 817/840 loss:0.0360 847 | 2022-06-23 08:25:05,187 - INFO - main.py - train - 58 - 【train】 epoch:7 818/840 loss:0.0043 848 | 2022-06-23 08:25:06,416 - INFO - main.py - train - 58 - 【train】 epoch:7 819/840 loss:0.0066 849 | 2022-06-23 08:25:07,633 - INFO - main.py - train - 58 - 【train】 epoch:7 820/840 loss:0.0062 850 | 2022-06-23 08:25:08,875 - INFO - main.py - train - 58 - 【train】 epoch:7 821/840 loss:0.0268 851 | 2022-06-23 08:25:10,094 - INFO - main.py - train - 58 - 【train】 epoch:7 822/840 loss:0.0337 852 | 2022-06-23 08:25:11,321 - INFO - main.py - train - 58 - 【train】 epoch:7 823/840 loss:0.0983 853 | 2022-06-23 08:25:12,537 - INFO - main.py - train - 58 - 【train】 epoch:7 824/840 loss:0.0088 854 | 2022-06-23 08:25:13,772 - INFO - main.py - train - 58 - 【train】 epoch:7 825/840 loss:0.0194 855 | 2022-06-23 08:25:15,005 - INFO - main.py - train - 58 - 【train】 epoch:7 826/840 loss:0.0155 856 | 2022-06-23 08:25:16,241 - INFO - main.py - train - 58 - 【train】 epoch:7 827/840 loss:0.0596 857 | 2022-06-23 08:25:17,453 - INFO - main.py - train - 58 - 【train】 epoch:7 828/840 loss:0.0251 858 | 2022-06-23 08:25:18,654 - INFO - main.py - train - 58 - 【train】 epoch:7 829/840 loss:0.0175 859 | 2022-06-23 08:25:19,895 - INFO - main.py - train - 58 - 【train】 epoch:7 830/840 loss:0.0080 860 | 2022-06-23 08:25:21,120 - INFO - main.py - train - 58 - 【train】 epoch:7 831/840 loss:0.0263 861 | 2022-06-23 08:25:22,335 - INFO - main.py - train - 58 - 【train】 epoch:7 832/840 loss:0.0197 862 | 2022-06-23 08:25:23,558 - INFO - main.py - train - 58 - 【train】 epoch:7 833/840 loss:0.0079 863 | 2022-06-23 08:25:24,763 - INFO - main.py - train - 58 - 【train】 epoch:7 834/840 loss:0.0234 864 | 2022-06-23 08:25:25,985 - INFO - main.py - train - 58 - 【train】 epoch:7 835/840 loss:0.0550 865 | 2022-06-23 08:25:27,209 - INFO - main.py - train - 58 - 【train】 epoch:7 836/840 loss:0.0295 866 | 2022-06-23 08:25:28,421 - INFO - main.py - train - 58 - 【train】 epoch:7 837/840 loss:0.0416 867 | 2022-06-23 08:25:29,620 - INFO - main.py - train - 58 - 【train】 epoch:7 838/840 loss:0.0677 868 | 2022-06-23 08:25:30,139 - INFO - main.py - train - 58 - 【train】 epoch:7 839/840 loss:0.0085 869 | 2022-06-23 08:25:30,141 - INFO - main.py - train - 69 - best f1:0.9562480327352849 870 | 2022-06-23 08:25:32,356 - INFO - train_utils.py - load_model_and_parallel - 103 - Load ckpt from ./checkpoints/bert/model.pt 871 | 2022-06-23 08:25:33,212 - INFO - train_utils.py - load_model_and_parallel - 113 - Use single gpu in: ['0'] 872 | 2022-06-23 08:25:44,075 - INFO - main.py - test - 170 - precision recall f1-score support 873 | 874 | TITLE 0.96 0.96 0.96 762 875 | RACE 1.00 0.93 0.97 15 876 | CONT 1.00 1.00 1.00 33 877 | ORG 0.94 0.94 0.94 539 878 | NAME 0.99 1.00 1.00 110 879 | EDU 0.97 0.99 0.98 109 880 | PRO 0.82 1.00 0.90 18 881 | LOC 1.00 1.00 1.00 2 882 | 883 | micro-f1 0.96 0.96 0.96 1588 884 | 885 | 2022-06-23 08:25:44,076 - INFO - main.py - - 249 - 虞兔良先生:1963年12月出生,汉族,中国国籍,无境外永久居留权,浙江绍兴人,中共党员,MBA,经济师。 886 | 2022-06-23 08:25:46,273 - INFO - train_utils.py - load_model_and_parallel - 103 - Load ckpt from ./checkpoints/bert/model.pt 887 | 2022-06-23 08:25:47,060 - INFO - train_utils.py - load_model_and_parallel - 113 - Use single gpu in: ['0'] 888 | 2022-06-23 08:25:47,120 - INFO - main.py - predict - 201 - {'TITLE': [['中共党员', 41], ['经济师', 50]], 'RACE': [['汉族', 18]], 'CONT': [['中国国籍', 21]], 'NAME': [['虞兔良', 1]], 'EDU': [['MBA', 46]], 'LOC': [['浙江绍兴人', 35]]} -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import os 2 | import logging 3 | import numpy as np 4 | from collections import defaultdict 5 | import torch 6 | from torch.utils.data import DataLoader, RandomSampler 7 | from transformers import BertTokenizer 8 | 9 | import config 10 | import data_loader 11 | import globalpoint 12 | from utils.common_utils import set_seed, set_logger, read_json, trans_ij2k, fine_grade_tokenize 13 | from utils.train_utils import load_model_and_parallel, build_optimizer_and_scheduler, save_model 14 | from utils.metric_utils import calculate_metric, classification_report, get_p_r_f 15 | from tensorboardX import SummaryWriter 16 | 17 | args = config.Args().get_parser() 18 | set_seed(args.seed) 19 | logger = logging.getLogger(__name__) 20 | 21 | if args.use_tensorboard == "True": 22 | writer = SummaryWriter(log_dir='./tensorboard') 23 | 24 | 25 | class BertForNer: 26 | def __init__(self, args, train_loader, dev_loader, test_loader, idx2tag, model, device): 27 | self.train_loader = train_loader 28 | self.dev_loader = dev_loader 29 | self.test_loader = test_loader 30 | self.args = args 31 | self.idx2tag = idx2tag 32 | self.model = model 33 | self.device = device 34 | if train_loader is not None: 35 | self.t_total = len(self.train_loader) * args.train_epochs 36 | self.optimizer, self.scheduler = build_optimizer_and_scheduler(args, model, self.t_total) 37 | 38 | def train(self): 39 | # Train 40 | global_step = 0 41 | self.model.zero_grad() 42 | eval_steps = self.args.eval_steps # 每多少个step打印损失及进行验证 43 | best_f1 = 0.0 44 | for epoch in range(1, self.args.train_epochs+1): 45 | for step, batch_data in enumerate(self.train_loader): 46 | self.model.train() 47 | for batch in batch_data: 48 | batch = batch.to(self.device) 49 | loss, logits = self.model(batch_data[0], batch_data[1], batch_data[2], batch_data[3]) 50 | 51 | # loss.backward(loss.clone().detach()) 52 | loss.backward() 53 | torch.nn.utils.clip_grad_norm_(self.model.parameters(), self.args.max_grad_norm) 54 | self.optimizer.step() 55 | if self.scheduler is not None: 56 | self.scheduler.step() 57 | self.model.zero_grad() 58 | logger.info('【train】 epoch:{} {}/{} loss:{:.4f}'.format(epoch, global_step, self.t_total, loss.item())) 59 | 60 | global_step += 1 61 | if self.args.use_tensorboard == "True": 62 | writer.add_scalar('data/loss', loss.item(), global_step) 63 | if global_step % eval_steps == 0: 64 | dev_loss, precision, recall, f1_score = self.dev() 65 | logger.info('[eval] loss:{:.4f} precision={:.4f} recall={:.4f} f1_score={:.4f}'.format(dev_loss, precision, recall, f1_score)) 66 | if f1_score > best_f1: 67 | save_model(self.args, self.model, model_name, global_step) 68 | best_f1 = f1_score 69 | logger.info("best f1:{}".format(best_f1)) 70 | 71 | def dev(self): 72 | self.model.eval() 73 | with torch.no_grad(): 74 | pred_entities = [] 75 | true_entities = [] 76 | tot_dev_loss = 0.0 77 | for eval_step, dev_batch_data in enumerate(self.dev_loader): 78 | labels = dev_batch_data[3] 79 | for dev_batch in dev_batch_data: 80 | dev_batch = dev_batch.to(device) 81 | # logits:[8, 8, 150, 150] 82 | _, logits = model(dev_batch_data[0], dev_batch_data[1], dev_batch_data[2], dev_batch_data[3]) 83 | batch_size = logits.size(0) 84 | dev_callbak = dev_callback[eval_step * batch_size:(eval_step + 1) * batch_size] 85 | 86 | for i in range(batch_size): 87 | pred_tmp = defaultdict(list) 88 | logit = logits[i, ...] 89 | tokens = dev_callbak[i] 90 | for j in range(self.args.num_tags): 91 | logit_ = logit[j, :len(tokens), :len(tokens)] 92 | for start, end in zip(*np.where(logit_.cpu().numpy() > 0.5)): 93 | pred_tmp[id2tag[j]].append(["".join(tokens[start:end + 1]), start]) 94 | pred_entities.append(dict(pred_tmp)) 95 | 96 | for i in range(batch_size): 97 | true_tmp = defaultdict(list) 98 | logit = labels[i, ...] 99 | tokens = dev_callbak[i] 100 | for j in range(self.args.num_tags): 101 | logit_ = logit[j, :len(tokens), :len(tokens)] 102 | for start, end in zip(*np.where(logit_.cpu().numpy() == 1)): 103 | true_tmp[id2tag[j]].append(["".join(tokens[start:end + 1]), start]) 104 | true_entities.append(true_tmp) 105 | 106 | total_count = [0 for _ in range(len(id2tag))] 107 | role_metric = np.zeros([len(id2tag), 3]) 108 | for pred, true in zip(pred_entities, true_entities): 109 | tmp_metric = np.zeros([len(id2tag), 3]) 110 | for idx, _type in enumerate(label_list): 111 | if _type not in pred: 112 | pred[_type] = [] 113 | total_count[idx] += len(true[_type]) 114 | tmp_metric[idx] += calculate_metric(true[_type], pred[_type]) 115 | 116 | role_metric += tmp_metric 117 | 118 | mirco_metrics = np.sum(role_metric, axis=0) 119 | mirco_metrics = get_p_r_f(mirco_metrics[0], mirco_metrics[1], mirco_metrics[2]) 120 | # print('[eval] loss:{:.4f} precision={:.4f} recall={:.4f} f1_score={:.4f}'.format(tot_dev_loss, mirco_metrics[0], mirco_metrics[1], mirco_metrics[2])) 121 | return tot_dev_loss, mirco_metrics[0], mirco_metrics[1], mirco_metrics[2] 122 | 123 | def test(self, model_path): 124 | model = globalpoint.GlobalPointerNer(self.args) 125 | model, device = load_model_and_parallel(model, self.args.gpu_ids, model_path) 126 | model.eval() 127 | pred_entities = [] 128 | true_entities = [] 129 | with torch.no_grad(): 130 | for eval_step, dev_batch_data in enumerate(dev_loader): 131 | labels = dev_batch_data[3] 132 | for dev_batch in dev_batch_data: 133 | dev_batch = dev_batch.to(device) 134 | # logits:[8, 8, 150, 150] 135 | _, logits = model(dev_batch_data[0], dev_batch_data[1], dev_batch_data[2], dev_batch_data[3]) 136 | batch_size = logits.size(0) 137 | dev_callbak = dev_callback[eval_step * batch_size:(eval_step + 1) * batch_size] 138 | 139 | for i in range(batch_size): 140 | pred_tmp = defaultdict(list) 141 | logit = logits[i, ...] 142 | tokens = dev_callbak[i] 143 | for j in range(self.args.num_tags): 144 | logit_ = logit[j, :len(tokens), :len(tokens)] 145 | for start, end in zip(*np.where(logit_.cpu().numpy() > 0.5)): 146 | pred_tmp[id2tag[j]].append(["".join(tokens[start:end + 1]), start]) 147 | pred_entities.append(dict(pred_tmp)) 148 | 149 | for i in range(batch_size): 150 | true_tmp = defaultdict(list) 151 | logit = labels[i, ...] 152 | tokens = dev_callbak[i] 153 | for j in range(self.args.num_tags): 154 | logit_ = logit[j, :len(tokens), :len(tokens)] 155 | for start, end in zip(*np.where(logit_.cpu().numpy() == 1)): 156 | true_tmp[id2tag[j]].append(["".join(tokens[start:end + 1]), start]) 157 | true_entities.append(true_tmp) 158 | 159 | total_count = [0 for _ in range(len(id2tag))] 160 | role_metric = np.zeros([len(id2tag), 3]) 161 | for pred, true in zip(pred_entities, true_entities): 162 | tmp_metric = np.zeros([len(id2tag), 3]) 163 | for idx, _type in enumerate(label_list): 164 | if _type not in pred: 165 | pred[_type] = [] 166 | total_count[idx] += len(true[_type]) 167 | tmp_metric[idx] += calculate_metric(true[_type], pred[_type]) 168 | 169 | role_metric += tmp_metric 170 | logger.info(classification_report(role_metric, label_list, id2tag, total_count)) 171 | 172 | def predict(self, raw_text, model_path): 173 | model = globalpoint.GlobalPointerNer(self.args) 174 | model, device = load_model_and_parallel(model, self.args.gpu_ids, model_path) 175 | model.eval() 176 | with torch.no_grad(): 177 | tokenizer = BertTokenizer.from_pretrained( 178 | os.path.join(self.args.bert_dir, 'vocab.txt')) 179 | # tokens = fine_grade_tokenize(raw_text, tokenizer) 180 | tokens = [i for i in raw_text] 181 | encode_dict = tokenizer.encode_plus(text=tokens, 182 | max_length=self.args.max_seq_len, 183 | padding='max_length', 184 | truncation='longest_first', 185 | is_pretokenized=True, 186 | return_token_type_ids=True, 187 | return_attention_mask=True) 188 | tokens = ['[CLS]'] + tokens + ['[SEP]'] 189 | token_ids = torch.from_numpy(np.array(encode_dict['input_ids'])).unsqueeze(0).to(device) 190 | attention_masks = torch.from_numpy(np.array(encode_dict['attention_mask'], dtype=np.uint8)).unsqueeze(0).to(device) 191 | token_type_ids = torch.from_numpy(np.array(encode_dict['token_type_ids'])).unsqueeze(0).to(device) 192 | logits = model(token_ids, attention_masks, token_type_ids, None) 193 | batch_size = logits.size(0) 194 | pred_tmp = defaultdict(list) 195 | for i in range(batch_size): 196 | logit = logits[i, ...] 197 | for j in range(self.args.num_tags): 198 | logit_ = logit[j, :len(tokens), :len(tokens)] 199 | for start, end in zip(*np.where(logit_.cpu().numpy() > 0.5)): 200 | pred_tmp[id2tag[j]].append(["".join(tokens[start:end + 1]), start-1]) 201 | 202 | logger.info(dict(pred_tmp)) 203 | 204 | 205 | if __name__ == '__main__': 206 | data_name = 'c' 207 | if args.use_efficient_globalpointer == "True": 208 | model_name = 'bert-1-eff' 209 | else: 210 | model_name = 'bert-1' 211 | set_logger(os.path.join(args.log_dir, '{}.log'.format(model_name))) 212 | if data_name == "c": 213 | args.data_dir = './data/cner' 214 | data_path = os.path.join(args.data_dir, 'mid_data') 215 | label_list = read_json(data_path, 'labels') 216 | tag2id = {} 217 | id2tag = {} 218 | for k, v in enumerate(label_list): 219 | tag2id[v] = k 220 | id2tag[k] = v 221 | 222 | logger.info(args) 223 | max_seq_len = args.max_seq_len 224 | tokenizer = BertTokenizer.from_pretrained('model_hub/chinese-bert-wwm-ext/vocab.txt') 225 | 226 | model = globalpoint.GlobalPointerNer(args) 227 | model, device = load_model_and_parallel(model, args.gpu_ids) 228 | 229 | 230 | collate = data_loader.Collate(max_len=max_seq_len, tag2id=tag2id, device=device) 231 | 232 | train_dataset, _ = data_loader.MyDataset(file_path=os.path.join(data_path, 'train.json'), 233 | tokenizer=tokenizer, 234 | max_len=max_seq_len) 235 | print(train_dataset[0]) 236 | train_loader = DataLoader(train_dataset, batch_size=args.train_batch_size, shuffle=True, 237 | collate_fn=collate.collate_fn) 238 | dev_dataset, dev_callback = data_loader.MyDataset(file_path=os.path.join(data_path, 'dev.json'), 239 | tokenizer=tokenizer, 240 | max_len=max_seq_len) 241 | print(dev_dataset[0]) 242 | dev_loader = DataLoader(dev_dataset, batch_size=args.eval_batch_size, shuffle=False, 243 | collate_fn=collate.collate_fn) 244 | 245 | bertForNer = BertForNer(args, train_loader, dev_loader, dev_loader, id2tag, model, device) 246 | bertForNer.train() 247 | 248 | model_path = './checkpoints/{}/model.pt'.format(model_name) 249 | bertForNer.test(model_path) 250 | 251 | raw_text = "虞兔良先生:1963年12月出生,汉族,中国国籍,无境外永久居留权,浙江绍兴人,中共党员,MBA,经济师。" 252 | logger.info(raw_text) 253 | bertForNer.predict(raw_text, model_path) 254 | -------------------------------------------------------------------------------- /model_hub/占位.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/model_hub/占位.txt -------------------------------------------------------------------------------- /preprocess.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import logging 4 | from transformers import BertTokenizer 5 | from utils import cut_sentence, common_utils 6 | 7 | logger = logging.getLogger(__name__) 8 | 9 | 10 | class InputExample: 11 | def __init__(self, set_type, text, labels=None): 12 | self.set_type = set_type 13 | self.text = text 14 | self.labels = labels 15 | 16 | def __repr__(self): 17 | string = "" 18 | for key, value in self.__dict__.items(): 19 | string += f"{key}: {value}\n" 20 | return f"<{string}>" 21 | 22 | 23 | class NerProcessor: 24 | def __init__(self, cut_sent=True, cut_sent_len=256): 25 | self.cut_sent = cut_sent 26 | self.cut_sent_len = cut_sent_len 27 | 28 | @staticmethod 29 | def read_json(file_path): 30 | with open(file_path, encoding='utf-8') as f: 31 | raw_examples = json.load(f) 32 | return raw_examples 33 | 34 | def get_examples(self, raw_examples, set_type): 35 | examples = [] 36 | # 这里是从json数据中的字典中获取 37 | for i, item in enumerate(raw_examples): 38 | # print(i,item) 39 | text = item['text'] 40 | if self.cut_sent: 41 | sentences = cut_sentence.cut_sent_for_bert(text, self.cut_sent_len) 42 | start_index = 0 43 | 44 | for sent in sentences: 45 | labels = cut_sentence.refactor_labels(sent, item['labels'], start_index) 46 | start_index += len(sent) 47 | 48 | examples.append(InputExample(set_type=set_type, 49 | text=sent, 50 | labels=labels)) 51 | else: 52 | labels = item['labels'] 53 | if len(labels) != 0: 54 | labels = [(label[1],label[4],label[2]) for label in labels] 55 | examples.append(InputExample(set_type=set_type, 56 | text=text, 57 | labels=labels)) 58 | 59 | return examples 60 | 61 | 62 | 63 | if __name__ == "__main__": 64 | nerProcessor = NerProcessor(cut_sent=True, cut_sent_len=150) 65 | raw_examples = nerProcessor.read_json('data/people-daily/mid_data/train.json') 66 | examples = nerProcessor.get_examples(raw_examples, set_type="train") 67 | print(examples[0]) 68 | -------------------------------------------------------------------------------- /tensorboard/占位.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/tensorboard/占位.txt -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/utils/__init__.py -------------------------------------------------------------------------------- /utils/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/utils/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /utils/__pycache__/common_utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/utils/__pycache__/common_utils.cpython-37.pyc -------------------------------------------------------------------------------- /utils/__pycache__/cut_sentence.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/utils/__pycache__/cut_sentence.cpython-37.pyc -------------------------------------------------------------------------------- /utils/__pycache__/metric_utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/utils/__pycache__/metric_utils.cpython-37.pyc -------------------------------------------------------------------------------- /utils/__pycache__/train_utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/taishan1994/pytorch_GlobalPointer_Ner/24c0fa4a271ea779267c16f7d07ff18822b604b6/utils/__pycache__/train_utils.cpython-37.pyc -------------------------------------------------------------------------------- /utils/common_utils.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | import random 3 | import os 4 | import json 5 | import logging 6 | import time 7 | import pickle 8 | import numpy as np 9 | import torch 10 | from torch.nn.utils.rnn import pad_sequence 11 | 12 | 13 | def trans_ij2k(seq_len, i, j): 14 | '''把第i行,第j列转化成上三角flat后的序号 15 | ''' 16 | if (i > seq_len - 1) or (j > seq_len - 1) or (i > j): 17 | return 0 18 | return int(0.5*(2*seq_len-i+1)*i+(j-i)) 19 | 20 | def sequence_padding(inputs, length=None, value=0, seq_dims=1, mode='post'): 21 | """将序列padding到同一长度 22 | """ 23 | if isinstance(inputs[0], (np.ndarray, list)): 24 | if length is None: 25 | length = np.max([np.shape(x)[:seq_dims] for x in inputs], axis=0) 26 | elif not hasattr(length, '__getitem__'): 27 | length = [length] 28 | 29 | slices = [np.s_[:length[i]] for i in range(seq_dims)] 30 | slices = tuple(slices) if len(slices) > 1 else slices[0] 31 | pad_width = [(0, 0) for _ in np.shape(inputs[0])] 32 | 33 | outputs = [] 34 | for x in inputs: 35 | x = x[slices] 36 | for i in range(seq_dims): 37 | if mode == 'post': 38 | pad_width[i] = (0, length[i] - np.shape(x)[i]) 39 | elif mode == 'pre': 40 | pad_width[i] = (length[i] - np.shape(x)[i], 0) 41 | else: 42 | raise ValueError('"mode" argument must be "post" or "pre".') 43 | x = np.pad(x, pad_width, 'constant', constant_values=value) 44 | outputs.append(x) 45 | 46 | return np.array(outputs) 47 | 48 | elif isinstance(inputs[0], torch.Tensor): 49 | assert mode == 'post', '"mode" argument must be "post" when element is torch.Tensor' 50 | if length is not None: 51 | inputs = [i[:length] for i in inputs] 52 | return pad_sequence(inputs, padding_value=value, batch_first=True) 53 | else: 54 | raise ValueError('"input" argument must be tensor/list/ndarray.') 55 | 56 | 57 | def timer(func): 58 | """ 59 | 函数计时器 60 | :param func: 61 | :return: 62 | """ 63 | 64 | @functools.wraps(func) 65 | def wrapper(*args, **kwargs): 66 | start = time.time() 67 | res = func(*args, **kwargs) 68 | end = time.time() 69 | print("{}共耗时约{:.4f}秒".format(func.__name__, end - start)) 70 | return res 71 | 72 | return wrapper 73 | 74 | 75 | def set_seed(seed=123): 76 | """ 77 | 设置随机数种子,保证实验可重现 78 | :param seed: 79 | :return: 80 | """ 81 | random.seed(seed) 82 | torch.manual_seed(seed) 83 | np.random.seed(seed) 84 | torch.cuda.manual_seed_all(seed) 85 | 86 | 87 | def set_logger(log_path): 88 | """ 89 | 配置log 90 | :param log_path:s 91 | :return: 92 | """ 93 | logger = logging.getLogger() 94 | logger.setLevel(logging.INFO) 95 | 96 | # 由于每调用一次set_logger函数,就会创建一个handler,会造成重复打印的问题,因此需要判断root logger中是否已有该handler 97 | if not any(handler.__class__ == logging.FileHandler for handler in logger.handlers): 98 | file_handler = logging.FileHandler(log_path) 99 | formatter = logging.Formatter( 100 | '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)d - %(message)s') 101 | file_handler.setFormatter(formatter) 102 | logger.addHandler(file_handler) 103 | 104 | if not any(handler.__class__ == logging.StreamHandler for handler in logger.handlers): 105 | stream_handler = logging.StreamHandler() 106 | stream_handler.setFormatter(logging.Formatter('%(message)s')) 107 | logger.addHandler(stream_handler) 108 | 109 | 110 | def save_json(data_dir, data, desc): 111 | """保存数据为json""" 112 | with open(os.path.join(data_dir, '{}.json'.format(desc)), 'w', encoding='utf-8') as f: 113 | json.dump(data, f, ensure_ascii=False, indent=2) 114 | 115 | 116 | def read_json(data_dir, desc): 117 | """读取数据为json""" 118 | with open(os.path.join(data_dir, '{}.json'.format(desc)), 'r', encoding='utf-8') as f: 119 | data = json.load(f) 120 | return data 121 | 122 | 123 | def save_pkl(data_dir, data, desc): 124 | """保存.pkl文件""" 125 | with open(os.path.join(data_dir, '{}.pkl'.format(desc)), 'wb') as f: 126 | pickle.dump(data, f) 127 | 128 | 129 | def read_pkl(data_dir, desc): 130 | """读取.pkl文件""" 131 | with open(os.path.join(data_dir, '{}.pkl'.format(desc)), 'rb') as f: 132 | data = pickle.load(f) 133 | return data 134 | 135 | 136 | def fine_grade_tokenize(raw_text, tokenizer): 137 | """ 138 | 序列标注任务 BERT 分词器可能会导致标注偏移, 139 | 用 char-level 来 tokenize 140 | """ 141 | tokens = [] 142 | 143 | for _ch in raw_text: 144 | if _ch in [' ', '\t', '\n']: 145 | tokens.append('[BLANK]') 146 | else: 147 | if not len(tokenizer.tokenize(_ch)): 148 | tokens.append('[INV]') 149 | else: 150 | tokens.append(_ch) 151 | 152 | return tokens -------------------------------------------------------------------------------- /utils/cut_sentence.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | def cut_sentences_v1(sent): 5 | """ 6 | the first rank of sentence cut 7 | """ 8 | sent = re.sub('([。!?\?])([^”’])', r"\1\n\2", sent) # 单字符断句符 9 | sent = re.sub('(\.{6})([^”’])', r"\1\n\2", sent) # 英文省略号 10 | sent = re.sub('(\…{2})([^”’])', r"\1\n\2", sent) # 中文省略号 11 | sent = re.sub('([。!?\?][”’])([^,。!?\?])', r"\1\n\2", sent) 12 | # 如果双引号前有终止符,那么双引号才是句子的终点,把分句符\n放到双引号后 13 | return sent.split("\n") 14 | 15 | 16 | def cut_sentences_v2(sent): 17 | """ 18 | the second rank of spilt sentence, split ';' | ';' 19 | """ 20 | sent = re.sub('([;;])([^”’])', r"\1\n\2", sent) 21 | return sent.split("\n") 22 | 23 | 24 | def cut_sent_for_bert(text, max_seq_len): 25 | # 将句子分句,细粒度分句后再重新合并 26 | sentences = [] 27 | 28 | # 细粒度划分 29 | sentences_v1 = cut_sentences_v1(text) 30 | # print("sentences_v1=", sentences_v1) 31 | for sent_v1 in sentences_v1: 32 | if len(sent_v1) > max_seq_len - 2: 33 | sentences_v2 = cut_sentences_v2(sent_v1) 34 | sentences.extend(sentences_v2) 35 | else: 36 | sentences.append(sent_v1) 37 | 38 | assert ''.join(sentences) == text 39 | 40 | # 合并 41 | merged_sentences = [] 42 | start_index_ = 0 43 | 44 | while start_index_ < len(sentences): 45 | tmp_text = sentences[start_index_] 46 | 47 | end_index_ = start_index_ + 1 48 | # 针对于bert模型,注意这里最大长度要减去2 49 | while end_index_ < len(sentences) and \ 50 | len(tmp_text) + len(sentences[end_index_]) <= max_seq_len - 2: 51 | tmp_text += sentences[end_index_] 52 | end_index_ += 1 53 | 54 | start_index_ = end_index_ 55 | 56 | merged_sentences.append(tmp_text) 57 | 58 | return merged_sentences 59 | 60 | 61 | def refactor_labels(sent, labels, start_index): 62 | """ 63 | 分句后需要重构 labels 的 offset 64 | :param sent: 切分并重新合并后的句子 65 | :param labels: 原始文档级的 labels 66 | :param start_index: 该句子在文档中的起始 offset 67 | :return (type, entity, offset) 68 | """ 69 | new_labels = [] 70 | end_index = start_index + len(sent) 71 | # _label: TI, 实体类别, 实体起始位置, 实体结束位置, 实体名) 72 | for _label in labels: 73 | if start_index <= _label[2] <= _label[3] <= end_index: 74 | new_offset = _label[2] - start_index 75 | 76 | assert sent[new_offset: new_offset + len(_label[-1])] == _label[-1] 77 | 78 | new_labels.append((_label[1], _label[-1], new_offset)) 79 | # label 被截断的情况 80 | elif _label[2] < end_index < _label[3]: 81 | raise RuntimeError(f'{sent}, {_label}') 82 | 83 | return new_labels 84 | 85 | 86 | if __name__ == '__main__': 87 | raw_examples = [{ 88 | "text": "深圳市沙头角保税区今后五年将充分发挥保税区的区位优势和政策优势,以高新技术产业为先导,积极调整产品结构,实施以转口贸易和仓储业为辅助的经营战略。把沙头角保税区建成按国际惯例运作、国内领先的特殊综合经济区域,使其成为该市外向型经济的快速增长点。", 89 | "labels": [ 90 | [ 91 | "T0", 92 | "GPE", 93 | 0, 94 | 3, 95 | "深圳市" 96 | ], 97 | [ 98 | "T1", 99 | "GPE", 100 | 3, 101 | 6, 102 | "沙头角" 103 | ], 104 | [ 105 | "T2", 106 | "LOC", 107 | 6, 108 | 9, 109 | "保税区" 110 | ], 111 | [ 112 | "T3", 113 | "LOC", 114 | 18, 115 | 21, 116 | "保税区" 117 | ], 118 | [ 119 | "T4", 120 | "GPE", 121 | 73, 122 | 76, 123 | "沙头角" 124 | ], 125 | [ 126 | "T5", 127 | "LOC", 128 | 76, 129 | 79, 130 | "保税区" 131 | ] 132 | ] 133 | }] 134 | for i, item in enumerate(raw_examples): 135 | text = item['text'] 136 | print(text[:90]) 137 | sentences = cut_sent_for_bert(text, 90) 138 | start_index = 0 139 | 140 | for sent in sentences: 141 | labels = refactor_labels(sent, item['labels'], start_index) 142 | start_index += len(sent) 143 | 144 | print(sent) 145 | print(labels) -------------------------------------------------------------------------------- /utils/metric_utils.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | 5 | from collections import defaultdict 6 | 7 | import numpy as np 8 | 9 | 10 | 11 | def calculate_metric(gt, predict): 12 | """ 13 | 计算 tp fp fn 14 | """ 15 | tp, fp, fn = 0, 0, 0 16 | for entity_predict in predict: 17 | flag = 0 18 | for entity_gt in gt: 19 | if entity_predict[0] == entity_gt[0] and entity_predict[1] == entity_gt[1]: 20 | flag = 1 21 | tp += 1 22 | break 23 | if flag == 0: 24 | fp += 1 25 | 26 | fn = len(gt) - tp 27 | 28 | return np.array([tp, fp, fn]) 29 | 30 | 31 | def get_p_r_f(tp, fp, fn): 32 | p = tp / (tp + fp) if tp + fp != 0 else 0 33 | r = tp / (tp + fn) if tp + fn != 0 else 0 34 | f1 = 2 * p * r / (p + r) if p + r != 0 else 0 35 | return np.array([p, r, f1]) 36 | 37 | def classification_report(metrics_matrix, label_list, id2label, total_count, digits=2, suffix=False): 38 | name_width = max([len(label) for label in label_list]) 39 | last_line_heading = 'micro-f1' 40 | width = max(name_width, len(last_line_heading), digits) 41 | 42 | headers = ["precision", "recall", "f1-score", "support"] 43 | head_fmt = u'{:>{width}s} ' + u' {:>9}' * len(headers) 44 | report = head_fmt.format(u'', *headers, width=width) 45 | report += u'\n\n' 46 | 47 | row_fmt = u'{:>{width}s} ' + u' {:>9.{digits}f}' * 3 + u' {:>9}\n' 48 | 49 | ps, rs, f1s, s = [], [], [], [] 50 | for label_id, label_matrix in enumerate(metrics_matrix): 51 | type_name = id2label[label_id] 52 | p,r,f1 = get_p_r_f(label_matrix[0],label_matrix[1],label_matrix[2]) 53 | nb_true = total_count[label_id] 54 | report += row_fmt.format(*[type_name, p, r, f1, nb_true], width=width, digits=digits) 55 | ps.append(p) 56 | rs.append(r) 57 | f1s.append(f1) 58 | s.append(nb_true) 59 | 60 | report += u'\n' 61 | mirco_metrics = np.sum(metrics_matrix, axis=0) 62 | mirco_metrics = get_p_r_f(mirco_metrics[0], mirco_metrics[1], mirco_metrics[2]) 63 | # compute averages 64 | print('precision:{:.4f} recall:{:.4f} micro_f1:{:.4f}'.format(mirco_metrics[0],mirco_metrics[1],mirco_metrics[2])) 65 | report += row_fmt.format(last_line_heading, 66 | mirco_metrics[0], 67 | mirco_metrics[1], 68 | mirco_metrics[2], 69 | np.sum(s), 70 | width=width, digits=digits) 71 | 72 | return report -------------------------------------------------------------------------------- /utils/train_utils.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | import os 3 | import logging 4 | from transformers import AdamW, get_linear_schedule_with_warmup 5 | import torch 6 | 7 | logger = logging.getLogger(__name__) 8 | 9 | 10 | def build_optimizer_and_scheduler(args, model, t_total, optim="adamw", schd="lstep"): 11 | module = ( 12 | model.module if hasattr(model, "module") else model 13 | ) 14 | 15 | # 差分学习率 16 | no_decay = ["bias", "LayerNorm.weight"] 17 | model_param = list(module.named_parameters()) 18 | 19 | bert_param_optimizer = [] 20 | crf_param_optimizer = [] 21 | other_param_optimizer = [] 22 | 23 | for name, para in model_param: 24 | space = name.split('.') 25 | # print(name) 26 | if space[0] == 'bert_module': 27 | bert_param_optimizer.append((name, para)) 28 | elif space[0] == 'crf': 29 | crf_param_optimizer.append((name, para)) 30 | else: 31 | other_param_optimizer.append((name, para)) 32 | 33 | optimizer_grouped_parameters = [ 34 | # bert other module 35 | {"params": [p for n, p in bert_param_optimizer if not any(nd in n for nd in no_decay)], 36 | "weight_decay": args.weight_decay, 'lr': args.lr}, 37 | {"params": [p for n, p in bert_param_optimizer if any(nd in n for nd in no_decay)], 38 | "weight_decay": 0.0, 'lr': args.lr}, 39 | 40 | # 其他模块,差分学习率 41 | {"params": [p for n, p in other_param_optimizer if not any(nd in n for nd in no_decay)], 42 | "weight_decay": args.weight_decay, 'lr': args.other_lr}, 43 | {"params": [p for n, p in other_param_optimizer if any(nd in n for nd in no_decay)], 44 | "weight_decay": 0.0, 'lr': args.other_lr}, 45 | ] 46 | 47 | if optim.lower() == "adamw": 48 | optimizer = AdamW(optimizer_grouped_parameters, lr=args.lr, eps=args.adam_epsilon) 49 | elif optim.lower() == "adam": 50 | optimizer = torch.optim.Adam(optimizer_grouped_parameters, 51 | lr=args.lr, 52 | betas=(0.9, 0.999), 53 | eps=args.adam_epsilon, 54 | ) 55 | 56 | if schd == "step": 57 | scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=100, gamma=0.999) 58 | elif schd == "lstep": 59 | scheduler = get_linear_schedule_with_warmup( 60 | optimizer, num_warmup_steps=int(args.warmup_proportion * t_total), num_training_steps=t_total 61 | ) 62 | else: 63 | scheduler = None 64 | 65 | return optimizer, scheduler 66 | 67 | def save_model(args, model, model_name, global_step): 68 | """保存最好的验证集效果最好那个模型""" 69 | output_dir = os.path.join(args.output_dir, '{}'.format(model_name, global_step)) 70 | if not os.path.exists(output_dir): 71 | os.makedirs(output_dir, exist_ok=True) 72 | 73 | # take care of model distributed / parallel training 74 | model_to_save = ( 75 | model.module if hasattr(model, "module") else model 76 | ) 77 | logger.info('Saving model checkpoint to {}'.format(output_dir)) 78 | torch.save(model_to_save.state_dict(), os.path.join(output_dir, 'model.pt')) 79 | 80 | def save_model_step(args, model, global_step): 81 | """根据global_step来保存模型""" 82 | output_dir = os.path.join(args.output_dir, 'checkpoint-{}'.format(global_step)) 83 | if not os.path.exists(output_dir): 84 | os.makedirs(output_dir, exist_ok=True) 85 | 86 | # take care of model distributed / parallel training 87 | model_to_save = ( 88 | model.module if hasattr(model, "module") else model 89 | ) 90 | logger.info('Saving model & optimizer & scheduler checkpoint to {}.format(output_dir)') 91 | torch.save(model_to_save.state_dict(), os.path.join(output_dir, 'model.pt')) 92 | 93 | def load_model_and_parallel(model, gpu_ids, ckpt_path=None, strict=True): 94 | """ 95 | 加载模型 & 放置到 GPU 中(单卡 / 多卡) 96 | """ 97 | gpu_ids = gpu_ids.split(',') 98 | 99 | # set to device to the first cuda 100 | device = torch.device("cpu" if gpu_ids[0] == '-1' else "cuda:" + gpu_ids[0]) 101 | 102 | if ckpt_path is not None: 103 | logger.info('Load ckpt from {}'.format(ckpt_path)) 104 | model.load_state_dict(torch.load(ckpt_path, map_location=torch.device('cpu')), strict=strict) 105 | 106 | model.to(device) 107 | 108 | if len(gpu_ids) > 1: 109 | logger.info('Use multi gpus in: {}'.format(gpu_ids)) 110 | gpu_ids = [int(x) for x in gpu_ids] 111 | model = torch.nn.DataParallel(model, device_ids=gpu_ids) 112 | else: 113 | logger.info('Use single gpu in: {}'.format(gpu_ids)) 114 | 115 | return model, device --------------------------------------------------------------------------------