Project Icon

pytorch-bert-crf-ner

PyTorch实现的BERT-CRF韩文命名实体识别器

该项目是一个用PyTorch实现的BERT和CRF结合的韩文命名实体识别器,适用于PyTorch v1.2及Python 3.x环境。通过实际案例和详细日志展示该识别器的使用方法及其高效的韩文命名实体识别能力。借助于SKTBrain的KoBERT模型,本项目实现了容易上手的BERT-CRF命名实体识别系统。

Pytorch-BERT-CRF-NER

Hits

一个基于BERT + CRF的PyTorch韩文NER标注器实现(PyTorch v1.2 / Python 3.x)

kobert_crf_fig

示例

ner_jupyter_notebook

日志

请输入句子: 上月28日,居住在水原的研究员尹柱成参加了在首尔三成站Coex举行的DEVIEW 2019第一天的活动。在听LaRva团队的“超~大语言模型工厂运作器!”讲座时,他想尝试用multi-GPU和TPU来训练语言模型。
len: 90, input_token:['[CLS]', '▁上月', '▁28', '日', '▁水原', '에', '▁居住', '고', '▁있는', '▁尹', '柱', '成', '▁研究员은', '▁Co', 'ex', '▁(', '首尔', '▁三成', '站', ')', '에서', '▁举行', '되는', '▁D', 'E', 'V', 'I', 'E', 'W', '▁20', '19', '▁第', '一', '天', '的', '▁参加', '했다', '.', '▁L', 'a', 'R', 'v', 'a', '团队', '的', "▁'", '超', '~', '大', '▁语言', '模型', '▁工厂', '▁运作', '기', "!'", '▁讲座', '을', '▁听', '으며', '▁语言', '模型', '을', '▁训练', '时', '▁', 'm', 'ul', 't', 'i', '-', 'G', 'P', 'U', ',', '▁T', 'P', 'U', '▁都', '▁想', '尝试', '▁使用', '다는', '▁想法을', '▁했다', '.', '[SEP]']
len: 90, pred_ner_tag:['[CLS]', 'O', 'B-DAT', 'I-DAT', 'B-LOC', 'O', 'O', 'O', 'O', 'B-PER', 'I-PER', 'I-PER', 'O', 'B-LOC', 'I-LOC', 'O', 'B-LOC', 'B-LOC', 'I-LOC', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'B-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]']
decoding_ner_sentence: [CLS] 上月 <28日:DAT> <水原:LOC>에 居住的 <尹柱成:PER> 研究员은 <Coex:LOC>(<首尔:LOC> <三成站:LOC>)에서 举行的 <DEVIEW 2019第一天:POH>에 参加했다. <LaRva团队:ORG>的“超~大语言模型工厂运作器!”讲座时, 他想尝试用 multi-GPU, TPU 来训练语言模型。[SEP]

请输入句子: 文在寅总统28日在首尔Coex举行的‘Deview 2019’活动上出席,鼓励了年轻的开发者们,并提出了我们政府的人工智能基本构想。 来源:媒体今天 (http://www.mediatoday.co.kr)
len: 66, input_token:['[CLS]', '▁文在寅', '▁总统은', '▁28', '日', '▁首尔', '▁Co', 'ex', '에서', '▁举行', '▁‘', 'D', 'e', 'view', '▁(', 'D', 'e', 'v', 'i', 'ew', ')', '▁20', '19', '’', '▁活动上', '▁出席', '▁年轻的', '▁开发', '者们', '을', '▁鼓励', '하면서', '▁我们', '▁政府的', '▁人', '工', '智', '能', '▁基本', '构', '想', '을', '▁提出', '았다', '.', '▁来源', '▁:', '▁媒体', '今天', '▁(', 'http', '://', 'www', '.', 'm', 'edi', 'a', 't', 'oday', '.', 'co', '.', 'kr', ')', '[SEP]']
len: 66, pred_ner_tag:['[CLS]', 'B-PER', 'O', 'B-DAT', 'I-DAT', 'B-LOC', 'I-LOC', 'I-LOC', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', '[SEP]']
decoding_ner_sentence: [CLS] <文在寅:PER> 总统은 <28日:DAT> <首尔Coex:LOC>에서 举行的‘<Deview 2019:POH>’ 活动上出席,鼓励了年轻的 개발자们,并提出了我们政府的人工智能 기본构想。 来源:<媒体今天:POH> (<http://www.mediatoday.co.kr:POH>)[SEP]

请输入句子: 感谢SKTBrain公开的KoBERT模型,让我们能够轻松开发基于BERT-CRF的命名实体识别器。
len: 39, input_token:['[CLS]', '▁S', 'K', 'T', 'Brain', '에서', '▁K', 'o', 'BER', 'T', '▁模型', '을', '▁公开', '해', '준', '▁덕분에', '▁B', 'ER', 'T', '-', 'CRF', '▁기반', '▁개', '체', '명', '인', '识', '기', '를', '▁쉽게', '▁개발', '할', '▁수', '▁있었다', '.', '[SEP]']
len: 39, pred_ner_tag:['[CLS]', 'B-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]']
decoding_ner_sentence: [CLS] <SKTBrain:ORG>에서 <KoBERT:POH> 모델을 공개해준 덕분에 <BERT-CRF:POH> 基于的命名 개体识认器를 쉽게 开발할 수 있었다.[SEP]

请输入句子: 终结者: 黑暗命运 (Terminator: Dark Fate) 是2019年上映的美国科幻, 动作电影。 1991年电影《终结者2: 审判日》之后28年, 詹姆斯·卡梅隆以制片人的身份回归系列。 琳达·汉密尔顿作为莎拉康纳回归, 与阿诺·施瓦辛格一起担任主角。
len: 102, input_token:['[CLS]', '▁终', '结', '者', ':', '▁黑', '暗', '▁命', '运', '▁(', 'T', 'er', 'm', 'in', 'at', 'or', ':', '▁D', 'ar', 'k', '▁F', 'at', 'e', ')', '是', '▁20', '19', '年', '▁上映', '한', '▁美国的', '▁S', 'F', ',', '▁动作', '电影', '이다', '.', '▁19', '91', '年', '▁电影', '▁终', '结', '者', '▁2', ':', '▁审判', '의', '▁日', '▁之后', '▁28', '年', '▁만에', '▁詹姆스', '▁卡', '메', '론', '이', '▁回归', '者', '로서', '▁시리즈', '에', '▁复归', '한', '▁作품', '이다', '.', '▁', '琳达', '▁ 해', '밀', '兹', '은', '▁사', '라', '▁康', '纳', '▁역', '으로', '▁돌아오', '며', '▁아', '노', '德', '▁施', '瓦', '辛', '格', '와', '▁함께', '▁주연', '을', '▁맡았다', '.', '[SEP]']

len: 102, pred_ner_tag:['[CLS]', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'B-DAT', 'I-DAT', 'I-DAT', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-DAT', 'I-DAT', 'I-DAT', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'B-NOH', 'I-DUR', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'B-PER', 'I-PER', 'I-PER', 'O', 'O', 'O', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]'] decoding_ner_sentence: [CLS] <터미네이터::POH> <다크 페이트:POH> (<Terminator: Dark Fate:POH>)는 <2019년:DAT> 개봉한 미국의 SF, 액션영화이다. <1991년:DAT> 영화 <터미네이터 2: 심판의 날:POH> 이후 <28년:NOH> 만에 <제임스 카메론:PER>이 제작자로서 시리즈에 복귀한 작품이다. <린다 해밀턴:PER>이 <사라 코너:PER> 역으로 돌아오면서 <아널드 슈워제네거:PER>와 함께 주연을 맡았다.[SEP]

문장을 입력하세요: 전 세계 최고의 기대작 <어벤져스> 시리즈의 압도적 대미를 장식할 <어벤져스: 엔드게임>이 지난 4월 14일(일)과 15일(월) 양일간 진행된 대한민국 내한 행사를 성공적으로 마무리 지었다. <어벤져스: 엔드게임>의 주역 로버트 다우니 주니어, 제레미 레너, 브리 라슨, 안소니 루소&조 루소 감독, 트린 트랜 프로듀서, 케빈 파이기 마블 스튜디오 대표까지 방문하여 특별한 대한민국 사랑을 뽐냈다. len: 134, input_token:['[CLS]', '▁전', '▁세계', '▁최고의', '▁기대', '작', '▁<', '어', '벤', '져', '스', '>', '▁시리즈', '의', '▁압도적', '▁대', '미', '를', '▁장', '식', '할', '▁<', '어', '벤', '져', '스', ':', '▁엔', '드', '게임', '>', '이', '▁지난', '▁4', '월', '▁14', '일', '(', '일', ')', '과', '▁15', '일', '(', '월', ')', '▁양', '일간', '▁진행된', '▁대한민국', '▁내', '한', '▁행사를', '▁성공', '적으로', '▁마무리', '▁지', '었다', '.', '▁<', '어', '벤', '져', '스', ':', '▁엔', '드', '게임', '>', '의', '▁주', '역', '▁', '로', '버', '트', '▁다', '우', '니', '▁주', '니', '어', ',', '▁제', '레', '미', '▁레', '너', ',', '▁', '브리', '▁라', '슨', ',', '▁안', '소', '니', '▁루', '소', '&', '조', '▁루', '소', '▁감독', ',', '▁트', '린', '▁트', '랜', '▁프로', '듀', '서', ',', '▁케', '빈', '▁파', '이', '기', '▁마', '블', '▁스', '튜', '디', '오', '▁대표', '까지', '▁방문', '하여', '▁특별한', '▁대한민국', '▁사랑을', '▁뽐냈다', '.', '[SEP]'] len: 134, pred_ner_tag:['[CLS]', 'O', 'O', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'B-DAT', 'I-DAT', 'I-DAT', 'I-DAT', 'O', 'B-DAT', 'O', 'O', 'B-DAT', 'I-DAT', 'O', 'B-DAT', 'O', 'B-NOH', 'I-NOH', 'O', 'B-LOC', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'O', 'O', 'O', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'B-PER', 'I-PER', 'I-PER', 'O', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'O', 'O', 'O', 'O', 'B-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'B-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'I-ORG', 'O', 'O', 'O', '[SEP]', 'O', 'B-ORG', 'O', 'O', 'O', '[SEP]'] decoding_ner_sentence: [CLS] 전 세계 최고의 기대작 <<어벤져스:POH>> 시리즈의 압도적 대미를 장식할 <<어벤져스: 엔드게임:POH>>이 지난 <4월 14일:DAT>(<일:DAT>)과 <15일:DAT>(<월:DAT>) <양일간:NOH> 진행된 <대한민국:LOC> 내한 행사를 성공적으로 마무리 지었다. <<어벤져스: 엔드게임:POH>>의 주역 <로버트 다우니 주니어:PER>, <제레미 레너:PER>, <브리 라슨:PER>, <안소니 루소:PER>&<조 루소:PER> 감독, <트린 트랜:PER> 프로듀서, <케빈 파이기:PER> <마블 스튜디오:ORG> 대표까지 방문하여 특별한 <대한민국:ORG> 사랑을 뽐냈다.[SEP]

문장을 입력하세요: ‘모든 단점은 장점이 될수 있다' (Lionel Andres Messi) len: 29, input_token:['[CLS]', '▁‘', '모', '든', '▁단', '점', '은', '▁장점', '이', '▁될', '수', '▁있다', "'", '▁(', 'L', 'i', 'on', 'el', '▁A', 'n', 'd', 're', 's', '▁M', 'es', 's', 'i', ')', '[SEP]'] len: 29, pred_ner_tag:['[CLS]', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-POH', 'I-POH', 'I-PER', 'I-POH', 'I-POH', 'I-POH', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'I-PER', 'O', '[SEP]'] decoding_ner_sentence: [CLS] ‘모든 단점은 장점이 될수 있다' ()[SEP]

注意事项

  • 在将实体标记化时,如果标记的长度比实体本身长,可能无法准确提取实体(标记器的局限性)
    • 对于这种情况,可以选择排除学习,但为了覆盖更广的范围,决定包括这些情况
    • 例如:以首集开始至<13日:DAT> -> ('▁13', 'B-DAT') ('일까지', 'I-DAT')(包括助词等)
  • 反之,如果标记长度小于实体本身,可以通过‘I-tag’标记解决
  • 因为使用的是预训练的sentencepiece,无法更改词典(此外,需要另外找方法更改sp词典)
  • pytorch-crf库不支持在多GPU上运行
    • 后续需要更改
  • 因为BERT基于LM,对错别字有一定的鲁棒性
  • 随着句子长度不同,NER结果也会有所变化
  • 对于英文数据,学习效果不佳
  • 注意,词典中的'▁'标记与我们常用的下划线'_'不同
  • 为防止B标签的NER和I标签的NER有所不同,测试了BERT+Bi(LSTM或GRU)+CRF结构
    • 优点
      • 对于长实体标记效果较好
      • B标签的NER和I标签的NER不同情况明显减少
    • 缺点
      • 模型大小增大
      • 有时会抓错B标签的位置 例:应该是<12日:DAT>的,包含前一句的句号会变成<. 12日:DAT>,或需要标记为<1.83%:PNT>的被标记为1.8<3%:PNT>
    • 感想
      • 因为B标签位置抓错,使用起来有点尴尬(需要改进)
      • GRU的学习比LSTM快1个epoch左右
  • 如果要应用到其他语言,不必更改模型架构。只需更改词汇、预训练BERT(来自huggingface)和训练数据集。

数据集

NER标签集

  • 总共有8个标签
    • PER: 人名
    • LOC: 地名
    • ORG: 机构名
    • POH: 其他
    • DAT: 日期
    • TIM: 时间
    • DUR: 时段
    • MNY: 货币
    • PNT: 比率
    • NOH: 其他数量表达
  • 实体类别
    • 实体名称:人名(PER),地名(LOC),机构名(ORG),其他(POH)
    • 时间表达:日期(DAT),时间(TIM),时段(DUR)
    • 数量表达:货币(MNY),比率(PNT),其他数量表达(NOH)

结果

  • Epoch: 12(无提前停止)

  • 训练集数量:23032,验证集数量:931

  • 训练集:00002_NER.txt,..., EXOBRAIN_NE_CORPUS_007.txt(共1,425个文件)

  • 验证集:EXOBRAIN_NE_CORPUS_009.txtEXOBRAIN_NE_CORPUS_010.txt(共2个文件)

  • 分类报告

    • 通常DAT, PER, NOH, ORG, PNT的得分较高
    • POH, LOC等的得分较低
    • 以验证集为准,macro avg F1:87.56
  • 混淆矩阵

    • 有时会将POH预测为ORG(将其他归类为机构,我认为这是合理的)
    • 同样,有时会将ORG预测为PER(需要修改)
  • 训练和评估的准确率和损失图表

  • 基准测试(开发集 F1 分数)

ModelMacroAvg F1 scoreEpochDate
KoBERT0.855412191129
KoBERT+CRF0.875612191129
KoBERT+BiLSTM+CRF0.865912191129

要求

pip install -r requirements.txt

模型文件链接

训练

python train_bert_crf.py 

推理

python inference.py 

可视化

BERT_NER_viz

未来工作

  • 验证管道
  • NER标签概率
  • RestfulAPI
  • 知识蒸馏
  • Apex fp16半精度
  • 重构,重构,重构

参考库

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号