[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-eagle705--pytorch-bert-crf-ner":3,"tool-eagle705--pytorch-bert-crf-ner":61},[4,18,28,37,45,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":24,"last_commit_at":25,"category_tags":26,"status":17},9989,"n8n","n8n-io\u002Fn8n","n8n 是一款面向技术团队的公平代码（fair-code）工作流自动化平台，旨在让用户在享受低代码快速构建便利的同时，保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点，帮助用户轻松连接 400 多种应用与服务，实现复杂业务流程的自动化。\n\nn8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”：既可以通过直观的可视化界面拖拽节点搭建流程，也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外，n8n 原生集成了基于 LangChain 的 AI 能力，支持用户利用自有数据和模型构建智能体工作流。在部署方面，n8n 提供极高的自由度，支持完全自托管以保障数据隐私和控制权，也提供云端服务选项。凭借活跃的社区生态和数百个现成模板，n8n 让构建强大且可控的自动化系统变得简单高效。",184740,2,"2026-04-19T23:22:26",[16,14,13,15,27],"插件",{"id":29,"name":30,"github_repo":31,"description_zh":32,"stars":33,"difficulty_score":10,"last_commit_at":34,"category_tags":35,"status":17},10095,"AutoGPT","Significant-Gravitas\u002FAutoGPT","AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台，核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点，让用户只需设定目标，AI 即可自主规划步骤、调用工具并持续运行直至完成任务。\n\n无论是开发者、研究人员，还是希望提升工作效率的普通用户，都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体；研究人员能基于开源架构探索多智能体协作机制；而非技术背景用户也可直接选用预置的智能体模板，立即投入实际工作场景。\n\nAutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑，每个块负责单一动作，灵活且易于调试。同时，平台支持本地自托管与云端部署两种模式，兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本，即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛，让人人都能成为 AI 的创造者与受益者。",183572,"2026-04-20T04:47:55",[13,36,27,14,15],"语言模型",{"id":38,"name":39,"github_repo":40,"description_zh":41,"stars":42,"difficulty_score":10,"last_commit_at":43,"category_tags":44,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":46,"name":47,"github_repo":48,"description_zh":49,"stars":50,"difficulty_score":24,"last_commit_at":51,"category_tags":52,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",161147,"2026-04-19T23:31:47",[14,13,36],{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":24,"last_commit_at":59,"category_tags":60,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":78,"owner_website":79,"owner_url":80,"languages":81,"stars":101,"forks":102,"last_commit_at":103,"license":104,"difficulty_score":10,"env_os":105,"env_gpu":106,"env_ram":105,"env_deps":107,"category_tags":115,"github_topics":118,"view_count":24,"oss_zip_url":78,"oss_zip_packed_at":78,"status":17,"created_at":136,"updated_at":137,"faqs":138,"releases":173},9971,"eagle705\u002Fpytorch-bert-crf-ner","pytorch-bert-crf-ner","KoBERT와 CRF로 만든 한국어 개체명인식기 (BERT+CRF based Named Entity Recognition model for Korean)","pytorch-bert-crf-ner 是一个专为韩语设计的开源命名实体识别（NER）模型。它的核心任务是从韩语文本中自动提取并分类关键信息，如人名、地名、组织机构、日期以及特定的专有名词。\n\n针对韩语复杂的语法结构和分词难点，该工具有效解决了传统方法在语境理解上的不足，能够精准识别句子中的实体边界及其类别。例如，它能轻松从新闻或技术文档中区分出“文在寅”是人物、“首尔 COEX\"是地点，或是\"DEVIEW 2019\"是特定活动名称。\n\n这款工具特别适合自然语言处理领域的开发者、研究人员以及需要构建韩语信息抽取应用的技术团队使用。无论是进行学术研究，还是开发智能客服、舆情分析系统，它都能提供强有力的底层支持。\n\n其独特的技术亮点在于结合了 KoBERT（韩语版 BERT）与条件随机场（CRF）。KoBERT 负责深度理解韩语的上下文语义，而 CRF 层则进一步优化了标签序列的全局一致性，确保输出的实体标注更加准确流畅。基于 PyTorch 框架实现，它不仅性能出色，还便于用户根据具体需求进行微调和二次开发，是处理韩语 NER 任务的高效选择。","# Pytorch-BERT-CRF-NER\n\n[![Hits](https:\u002F\u002Fhits.seeyoufarm.com\u002Fapi\u002Fcount\u002Fincr\u002Fbadge.svg?url=https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner)](https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner)\n\nA PyTorch implementation of Korean NER Tagger based on BERT + CRF (PyTorch v1.2 \u002F Python 3.x)  \n\n![kobert_crf_fig](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_eb3d86bb9cd7.png)\n\n### Examples\n\n![ner_jupyter_notebook](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_0c2ece8d205d.png)\n\n### Logs\n```\n문장을 입력하세요: 지난달 28일 수원에 살고 있는 윤주성 연구원은 코엑스(서울 삼성역)에서 개최되는 DEVIEW 2019 Day1에 참석했다. LaRva팀의 '엄~청 큰 언어 모델 공장 가동기!' 세션을 들으며 언어모델을 학습시킬때 multi-GPU, TPU 모두 써보고 싶다는 생각을 했다.\nlen: 90, input_token:['[CLS]', '▁지난달', '▁28', '일', '▁수원', '에', '▁살', '고', '▁있는', '▁윤', '주', '성', '▁연구원은', '▁코', '엑스', '(', '서울', '▁삼성', '역', ')', '에서', '▁개최', '되는', '▁D', 'E', 'V', 'I', 'E', 'W', '▁20', '19', '▁D', 'ay', '1', '에', '▁참석했다', '.', '▁L', 'a', 'R', 'v', 'a', '팀', '의', \"▁'\", '엄', '~', '청', '▁큰', '▁언', '어', '▁모델', '▁공장', '▁가동', '기', \"!'\", '▁세', '션', '을', '▁들', '으며', '▁언', '어', '모델', '을', '▁학습', '시킬', '때', '▁', 'm', 'ul', 't', 'i', '-', 'G', 'P', 'U', ',', '▁T', 'P', 'U', '▁모두', '▁써', '보고', '▁싶다', '는', '▁생각을', '▁했다', '.', '[SEP]']\nlen: 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', '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', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]']\ndecoding_ner_sentence: [CLS] 지난달 \u003C28일:DAT> \u003C수원:LOC>에 살고 있는 \u003C윤주성:PER> 연구원은 \u003C코엑스:LOC>(\u003C서울:LOC> \u003C삼성역:LOC>)에서 개최되는 \u003CDEVIEW 2019 Day1:POH>에 참석했다. \u003CLaRva팀:ORG>의 '엄~청 큰 언어 모델 공장 가동기!' 세션을 들으며 언어모델을 학습시킬때 multi-GPU, TPU 모두 써보고 싶다는 생각을 했다.[SEP]\n   \n문장을 입력하세요: 문재인 대통령은 28일 서울 코엑스에서 열린 ‘데뷰 (Deview) 2019’ 행사에 참석해 젊은 개발자들을 격려하면서 우리 정부의 인공지능 기본구상을 내놓았다.  출처 : 미디어오늘 (http:\u002F\u002Fwww.mediatoday.co.kr)\nlen: 66, input_token:['[CLS]', '▁문재인', '▁대통령은', '▁28', '일', '▁서울', '▁코', '엑스', '에서', '▁열린', '▁‘', '데', '뷰', '▁(', 'D', 'e', 'v', 'i', 'e', 'w', ')', '▁20', '19', '’', '▁행사에', '▁참석해', '▁젊은', '▁개발', '자들', '을', '▁격려', '하면서', '▁우리', '▁정부의', '▁인', '공', '지', '능', '▁기본', '구', '상을', '▁내놓', '았다', '.', '▁출처', '▁:', '▁미디어', '오늘', '▁(', 'http', ':\u002F\u002F', 'www', '.', 'm', 'ed', 'i', 'at', 'o', 'd', 'ay', '.', 'co', '.', 'kr', ')', '[SEP]']\nlen: 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', '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', 'I-POH', 'O', '[SEP]']\ndecoding_ner_sentence: [CLS] \u003C문재인:PER> 대통령은 \u003C28일:DAT> \u003C서울 코엑스:LOC>에서 열린 ‘\u003C데뷰 (Deview) 2019:POH>’ 행사에 참석해 젊은 개발자들을 격려하면서 우리 정부의 인공지능 기본구상을 내놓았다. 출처 : \u003C미디어오늘:POH> (\u003Chttp:\u002F\u002Fwww.mediatoday.co.kr:POH>)[SEP]\n   \n문장을 입력하세요: SKTBrain에서 KoBERT 모델을 공개해준 덕분에 BERT-CRF 기반 개체명인식기를 쉽게 개발할 수 있었다.\nlen: 39, input_token:['[CLS]', '▁SK', 'T', 'B', 'ra', 'in', '에서', '▁K', 'o', 'B', 'ER', 'T', '▁모델', '을', '▁공개', '해', '준', '▁덕분에', '▁B', 'ER', 'T', '-', 'C', 'R', 'F', '▁기반', '▁개', '체', '명', '인', '식', '기를', '▁쉽게', '▁개발', '할', '▁수', '▁있었다', '.', '[SEP]']\nlen: 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', 'I-POH', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]']\ndecoding_ner_sentence: [CLS] \u003CSKTBrain:ORG>에서 \u003CKoBERT:POH> 모델을 공개해준 덕분에 \u003CBERT-CRF:POH> 기반 개체명인식기를 쉽게 개발할 수 있었다.[SEP]\n   \n문장을 입력하세요: 터미네이터: 다크 페이트 (Terminator: Dark Fate)는 2019년 개봉한 미국의 SF, 액션영화이다. 1991년 영화 터미네이터 2: 심판의 날 이후 28년 만에 제임스 카메론이 제작자로서 시리즈에 복귀한 작품이다. 린다 해밀턴이 사라 코너 역으로 돌아오면서 아널드 슈워제네거와 함께 주연을 맡았다.\nlen: 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]']\nlen: 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]']\ndecoding_ner_sentence: [CLS] \u003C터미네이터::POH> \u003C다크 페이트:POH> (\u003CTerminator: Dark Fate:POH>)는 \u003C2019년:DAT> 개봉한 미국의 SF, 액션영화이다. \u003C1991년:DAT> 영화 \u003C터미네이터 2: 심판의 날:POH> 이후 \u003C28년:NOH> 만에 \u003C제임스 카메론:PER>이 제작자로서 시리즈에 복귀한 작품이다. \u003C린다 해밀턴:PER>이 \u003C사라 코너:PER> 역으로 돌아오면서 \u003C아널드 슈워제네거:PER>와 함께 주연을 맡았다.[SEP]\n   \n문장을 입력하세요: 전 세계 최고의 기대작 \u003C어벤져스> 시리즈의 압도적 대미를 장식할 \u003C어벤져스: 엔드게임>이 지난 4월 14일(일)과 15일(월) 양일간 진행된 대한민국 내한 행사를 성공적으로 마무리 지었다. \u003C어벤져스: 엔드게임>의 주역 로버트 다우니 주니어, 제레미 레너, 브리 라슨, 안소니 루소&조 루소 감독, 트린 트랜 프로듀서, 케빈 파이기 마블 스튜디오 대표까지 방문하여 특별한 대한민국 사랑을 뽐냈다.\nlen: 134, input_token:['[CLS]', '▁전', '▁세계', '▁최고의', '▁기대', '작', '▁\u003C', '어', '벤', '져', '스', '>', '▁시리즈', '의', '▁압도적', '▁대', '미', '를', '▁장', '식', '할', '▁\u003C', '어', '벤', '져', '스', ':', '▁엔', '드', '게임', '>', '이', '▁지난', '▁4', '월', '▁14', '일', '(', '일', ')', '과', '▁15', '일', '(', '월', ')', '▁양', '일간', '▁진행된', '▁대한민국', '▁내', '한', '▁행사를', '▁성공', '적으로', '▁마무리', '▁지', '었다', '.', '▁\u003C', '어', '벤', '져', '스', ':', '▁엔', '드', '게임', '>', '의', '▁주', '역', '▁', '로', '버', '트', '▁다', '우', '니', '▁주', '니', '어', ',', '▁제', '레', '미', '▁레', '너', ',', '▁', '브리', '▁라', '슨', ',', '▁안', '소', '니', '▁루', '소', '&', '조', '▁루', '소', '▁감독', ',', '▁트', '린', '▁트', '랜', '▁프로', '듀', '서', ',', '▁케', '빈', '▁파', '이', '기', '▁마', '블', '▁스', '튜', '디', '오', '▁대표', '까지', '▁방문', '하여', '▁특별한', '▁대한민국', '▁사랑을', '▁뽐냈다', '.', '[SEP]']\nlen: 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', '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]']\ndecoding_ner_sentence: [CLS] 전 세계 최고의 기대작 \u003C\u003C어벤져스:POH>> 시리즈의 압도적 대미를 장식할 \u003C\u003C어벤져스: 엔드게임:POH>>이 지난 \u003C4월 14일:DAT>(\u003C일:DAT>)과 \u003C15일:DAT>(\u003C월:DAT>) \u003C양일간:NOH> 진행된 \u003C대한민국:LOC> 내한 행사를 성공적으로 마무리 지었다. \u003C\u003C어벤져스: 엔드게임:POH>>의 주역 \u003C로버트 다우니 주니어:PER>, \u003C제레미 레너:PER>, \u003C브리 라슨:PER>, \u003C안소니 루소:PER>&\u003C조 루소:PER> 감독, \u003C트린 트랜:PER> 프로듀서, \u003C케빈 파이기:PER> \u003C마블 스튜디오:ORG> 대표까지 방문하여 특별한 \u003C대한민국:ORG> 사랑을 뽐냈다.[SEP]\n   \n문장을 입력하세요: ‘모든 단점은 장점이 될수 있다'  (Lionel Andres Messi)\nlen: 29, input_token:['[CLS]', '▁‘', '모', '든', '▁단', '점', '은', '▁장점', '이', '▁될', '수', '▁있다', \"'\", '▁(', 'L', 'i', 'on', 'el', '▁A', 'n', 'd', 're', 's', '▁M', 'es', 's', 'i', ')', '[SEP]']\nlen: 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]']\ndecoding_ner_sentence: [CLS] ‘모든 단점은 장점이 될수 있다' (\u003CLionel Andres Messi:POH>)[SEP]\n```\n\n### Note\n- 엔티티를 토큰화할때 토큰의 길이가 엔티티 자체보다 길어지는 경우, 정확한 엔티티 추출이 안될 수 있음 (토크나이저의 한계)\n  - 이러한 경우에 대해서는 제외하고 학습할 수도 있지만, 더 넓은 범위를 커버하기 위해 포함하는 것으로 결정\n  - e.g.)  첫 회를 시작으로 \u003C13일:DAT>까지 -> ('▁13', 'B-DAT') ('일까지', 'I-DAT') (조사등이 같이 추출됨)\n- 반대로 토큰화한 길이가 엔티티 자체보다 작은 경우 'I-tag' 토큰으로 해결가능\n- pretrained sentencepiece를 사용하기 때문에 사전 변경은 안됨 (이것과 별개로 sp 사전을 변경 하는 방법은 따로 찾아봐야함) \n- pytorch-crf 라이브러리가 multi-gpu에서 안됨\n  - 추후 변경\n- BERT가 LM기반이라 그런지 오타에도 어느정도 강건한 편인듯함\n- 문장 길이에 따라 NER 결과가 달라짐\n- 영어 데이터에 대해서는 학습이 안되서 잘 안됨\n- 사전에 나오는 '▁' 토큰과 우리가 흔히 사용하는 underscore '_'는 다르므로 주의할 것\n- B 태그의 NER과 I 태그의 NER이 다를 경우를 방지하기 위해 BERT+Bi(LSTM or GRU)+CRF 구조로도 테스트 해봄\n  - 장점 \n    - 엔티티 토큰의 길이가 긴 경우는 잘 잡아냄\n    - B 태그의 NER과 I 태그의 NER이 다른 경우가 확실히 줄어듬\n  - 단점\n    - 모델 사이즈가 커진다는 것\n    - B 태그의 위치를 잘 못잡는 경우가 발생함  \u003C12일:DAT>로 잡아야되는걸 앞문장의 구두점을 포함해서 \u003C. 12일:DAT>로 잡거나, \u003C1.83%:PNT>으로 잡아야 되는걸 1.8\u003C3%:PNT> 잡기도함\n  - 느낀점\n    - B 태그 위치를 잘못잡는것 때문에 쓰기가 약간 애매하다는 생각이 듬 (보완이 필요함)\n    - 학습은 GRU가 LSTM 보다 1 epoch정도 더 빠르게 성능이 올라감\n- If you want to apply it to other languages, you don't have to change the model architecture. Instead, you just change vocab, pretrained BERT(from huggingface), and training dataset.\n\n### Dataset\n- [NER Dataset from 한국해양대학교 자연언어처리 연구실](https:\u002F\u002Fgithub.com\u002Fkmounlp\u002FNER)\n\n### NER tagset\n- 총 8개의 태그가 있음\n    - PER: 사람이름\n    - LOC: 지명\n    - ORG: 기관명\n    - POH: 기타\n    - DAT: 날짜\n    - TIM: 시간\n    - DUR: 기간\n    - MNY: 통화\n    - PNT: 비율\n    - NOH: 기타 수량표현\n- 개체의 범주 \n    - 개체이름: 사람이름(PER), 지명(LOC), 기관명(ORG), 기타(POH)\n    - 시간표현: 날짜(DAT), 시간(TIM), 기간 (DUR)\n    - 수량표현: 통화(MNY), 비율(PNT), 기타 수량표현(NOH)\n\n### Results\n- Epoch: 12 (without early stopping)\n- num of train: 23032, num of val: 931\n- Training set: ```00002_NER.txt```, ..., ```EXOBRAIN_NE_CORPUS_007.txt``` (1,425 files)\n- Validation set: ```EXOBRAIN_NE_CORPUS_009.txt```, ```EXOBRAIN_NE_CORPUS_010.txt``` (2 files)\n\n- Classification Report\n  - 대체적으로 DAT, PER, NOH, ORG, PNT 순으로 높음\n  - POH, LOC등은 좀 낮은 편\n  - validation set 기준, macro avg F1: 87.56\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_dbab4d1cbb93.png\" width=\"50%\">\n\n- Confusion Matrix\n  - POH를 ORG로 예측하는 경우가 있음 (기타를 기관으로 분류하는 거니 어느정도 그럴 수 있다고 생각)\n  - ORG를 PER로 예측하는 경우도 좀 있음 (수정해야되는 케이스)\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_1104b801371f.png\" width=\"80%\">\n\n- Training & Evaluation Accurcay & Loss Graph\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_9561768a119d.gif\" width=\"80%\">\n\n- Benchmark (Devset F1 scroe )\n\n|Model|MacroAvg F1 score|Epoch|Date|\n|:------:|:------:|:---:|:---:|\n|KoBERT|0.8554|12|191129|\n|**KoBERT+CRF**|**0.8756**|12|191129|\n|KoBERT+BiLSTM+CRF|0.8659|12|191129|\n\n\n\n### Requirements\n```bash\npip install -r requirements.txt\n```\n\n### Model File Link\n- [BERT CRF model file with validation](https:\u002F\u002Fworks.do\u002FFhKyyNr)\n- [BERT CRF model file with training all dataset](https:\u002F\u002Fworks.do\u002FxuweeF8)\n- [BERT CRF, BERT_alone sharing folder (including BiLSTM, BiGRU)](https:\u002F\u002Fworks.do\u002FxkVee9n)\n\n### train\n```bash\npython train_bert_crf.py \n```\n\n### inference\n```bash\npython inference.py \n```\n\n### Visualization\n![BERT_NER_viz](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_f5d5a98fa65c.gif)\n\n### Future work\n- ~~Validation pipeline~~\n- NER tag probability\n- RestfulAPI\n- Knowledge Distillation\n- Apex fp16 half-precision\n- Refactoring, Refactoring, Refactoring\n\n### Reference Repo\n- [NLP implementation by aisolab](https:\u002F\u002Fgithub.com\u002Faisolab\u002Fnlp_implementation)\n- [pytorch-crf](https:\u002F\u002Fgithub.com\u002Fkmkurn\u002Fpytorch-crf\u002Fblob\u002F8f3203a1f1d7984c87718bfe31853242670258db\u002Fdocs\u002Findex.rst)\n- [SKTBrain KoBERT](https:\u002F\u002Fgithub.com\u002FSKTBrain\u002FKoBERT)\n- [Finetuning configuration from huggingface](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fpytorch-transformers\u002Fblob\u002Fmaster\u002Fexamples\u002Frun_multiple_choice.py)\n- [BERT Attention Visualization](https:\u002F\u002Fgithub.com\u002Fjessevig\u002Fbertviz)\n","# PyTorch-BERT-CRF-NER\n\n[![访问量](https:\u002F\u002Fhits.seeyoufarm.com\u002Fapi\u002Fcount\u002Fincr\u002Fbadge.svg?url=https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner)](https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner)\n\n基于 BERT + CRF 的韩语 NER 标注工具的 PyTorch 实现（PyTorch 1.2 \u002F Python 3.x）  \n\n![kobert_crf_fig](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_eb3d86bb9cd7.png)\n\n### 示例\n\n![ner_jupyter_notebook](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_0c2ece8d205d.png)\n\n### 日志\n```\n请输入句子：上个月28日，居住在水原的尹周成研究员参加了在COEX（首尔三星站）举行的DEVIEW 2019 Day1。在聆听LaRva团队的“超级大型语言模型工厂启动！”环节时，他想到在训练语言模型时，既想尝试多GPU，也想尝试TPU。\nlen: 90, input_token:['[CLS]', '▁上个月', '▁28', '日', '▁水原', '에', '▁살', '고', '▁있는', '▁尹', '周', '成', '▁研究员은', '▁COEX', '(', '首尔', '▁三星', '站', ')', '에서', '▁开', '幕', '되는', '▁D', 'E', 'V', 'I', 'E', 'W', '▁20', '19', '▁D', 'ay', '1', '에', '▁参加했다', '.', '▁L', 'a', 'R', 'v', 'a', '팀', '의', \"▁'\", '超', '~', '级', '▁大', '▁语言', '▁模型', '▁工厂', '▁启动', '기', \"!'\", '▁セ', '션', '을', '▁听', '으며', '▁语言', '▁模型', '을', '▁训练', '할', '때', '▁', 'm', 'ul', 't', 'i', '-', 'G', 'P', 'U', ',', '▁T', 'P', 'U', '▁都', '想', '试', '一下', '的想法を', '持った', '.', '[SEP]']\nlen: 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', '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', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]']\ndecoding_ner_sentence: [CLS] 上个月\u003C28日:DAT>居住在\u003C水原:LOC>的\u003C尹周成:PER>研究员参加了在\u003CCOEX:LOC>(\u003C首尔:LOC>\u003C三星站:LOC>)举办的\u003CDEVIEW 2019 Day1:POH>活动。在聆听\u003CLaRva团队:ORG>的“超级大型语言模型工厂启动！”环节时，他想到在训练语言模型时，既想尝试多GPU，也想尝试TPU。[SEP]\n   \n请输入句子：文在寅总统于28日在首尔COEX举行的‘Deview 2019’活动中出席，鼓励年轻开发者，并提出了我国政府的人工智能基本构想。来源：媒体今日（http:\u002F\u002Fwww.mediatoday.co.kr）\nlen: 66, input_token:['[CLS]', '▁文在寅', '▁总统은', '▁28', '日', '▁首尔', '▁COEX', '에서', '▁开', '幕', 'した', '▁‘', '德', '维', '夫', '▁(', 'D', 'e', 'v', 'i', 'e', 'w', ')', '▁20', '19', '’', '▁活动に', '▁参加し', '▁若', 'い', '开发', '者たち', 'を', '▁激励', 'しながら', '▁我が', '政府の', '人工', '知能', '基本', '構想', 'を', '発表', 'した', '.', '出处', '：', 'メディア', 'トゥデイ', '▁(', 'http', ':\u002F\u002F', 'www', '.', 'm', 'ed', 'i', 'at', 'o', 'd', 'ay', '.', 'co', '.', 'kr', ')', '[SEP]']\nlen: 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', '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', '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', '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', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH......### 日志\n```\n请输入句子：上个月28日，居住在水原的尹周成研究员参加了在COEX（首尔三星站）举办的DEVIEW 2019 Day1。在聆听LaRva团队的“超大型语言模型工厂启动！”环节时，他想到在训练语言模型时，既想尝试多GPU，也想尝试TPU。\nlen: 90, input_token:['[CLS]', '▁上个月', '▁28', '日', '▁水原', '에', '▁살', '고', '▁있는', '▁尹', '周', '成', '▁研究员은', '▁COEX', '(', '首尔', '▁三星', '站', ')', '에서', '▁开', '幕', '되는', '▁D', 'E', 'V', 'I', 'E', 'W', '▁20', '19', '▁D', 'ay', '1', '에', '▁参加했다', '.', '▁L', 'a', 'R', 'v', 'a', '팀', '의', \"▁'\", '超', '~', '大型', '▁语言', '▁模型', '▁工厂', '▁启动', '기', \"!'\", '▁セ', '션', '을', '▁听', '으며', '▁语言', '▁模型', '을', '▁训练', '할', '때', '▁', 'm', 'ul', 't', 'i', '-', 'G', 'P', 'U', ',', '▁T', 'P', 'U', '▁都', '试', 'して', 'みたい', 'と', '思', 'った', '.', '[SEP]']\nlen: 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', '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', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', '[SEP]']\ndecoding_ner_sentence: [CLS] 上个月\u003C28日:DAT>居住在\u003C水原:LOC>的\u003C尹周成:PER>研究员参加了在\u003CCOEX:LOC>(\u003C首尔:LOC>\u003C三星站:LOC>)举办的\u003CDEVIEW 2019 Day1:POH>。在聆听\u003CLaRva团队:ORG>的“超大型语言模型工厂启动！”环节时，他想到在训练语言模型时，既想尝试多GPU，也想尝试TPU。[SEP]\n   \n请输入句子：文在寅总统于28日在首尔COEX举行的‘Deview 2019’活动上出席，鼓励年轻开发者，并提出了我国政府的人工智能基本构想。来源：媒体今日（http:\u002F\u002Fwww.mediatoday.co.kr）\nlen: 66, input_token:['[CLS]', '▁文在寅', '▁总统은', '▁28', '日', '▁首尔', '▁COEX', '에서', '▁开', '幕', 'した', '▁‘', 'デ', '뷰', '▁(', 'D', 'e', 'v', 'i', 'e', 'w', ')', '▁20', '19', '’', '▁活动に', '▁参加し', '▁若', 'い', '▁开发', '者たち', 'を', '▁激励', 'しながら', '▁我が', '政府の', '人工知能', '基本構想', 'を', '発表', 'した', '.', '出典', 'は', '▁メディア', '今日', '▁(', 'http', ':\u002F\u002F', 'www', '.', 'm', 'ed', 'i', 'at', 'o', 'd', 'ay', '.', 'co', '.', 'kr', ')', '[SEP]']\nlen: 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', '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', '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', 'I-POH', 'I-POH', 'I-POH', 'I-POH', 'I-POH', '......\n\n### 注意事项\n- 在对实体进行分词时，如果分词后的标记长度超过实体本身的长度，可能会导致实体提取不准确（这是分词器的局限性）。\n  - 对于这种情况，可以选择将其排除在外进行训练，但为了覆盖更广泛的范围，我们决定将其包含在内。\n  - 例如：从第一集开始至\u003C13日:DAT> -> ('▁13', 'B-DAT') ('日까지', 'I-DAT')（连同助词等一起被提取）。\n- 相反，如果分词后的长度小于实体本身的长度，则可以通过使用'I-tag'标记来解决。\n- 由于使用了预训练的sentencepiece模型，因此无法更改词汇表（不过，单独更改sp词汇表的方法还需要进一步查找）。\n- pytorch-crf库在多GPU环境下无法正常工作。\n  - 后续会进行改进。\n- 由于BERT是基于语言模型的，因此对错别字也有一定的鲁棒性。\n- 句子长度的不同会导致NER结果有所差异。\n- 对于英文数据，模型表现不佳，因为没有针对英文数据进行训练。\n- 需要注意的是，词典中出现的'▁'标记与我们常用的下划线'_'是不同的。\n- 为了避免B标签和I标签的NER结果出现差异，我们也尝试了BERT+Bi(LSTM或GRU)+CRF的结构。\n  - 优点：\n    - 对于较长的实体标记能够较好地识别。\n    - 显著减少了B标签和I标签NER结果不一致的情况。\n  - 缺点：\n    - 模型规模会增大。\n    - 有时会出现B标签位置识别错误的情况，比如本应识别为\u003C12日:DAT>，却因包含了前一句的标点符号而被误识别为\u003C. 12日:DAT>；或者本应识别为\u003C1.83%:PNT>，却被误识别为1.8\u003C3%:PNT>。\n  - 体会：\n    - 由于B标签位置的错误识别，使用起来有些不便（需要进一步改进）。\n    - 在训练过程中，GRU相比LSTM大约每轮都能更快地提升性能。\n- 如果想将该模型应用于其他语言，无需改变模型架构，只需更换词汇表、预训练的BERT模型（来自Hugging Face）以及训练数据集即可。\n\n### 数据集\n- [韩国海洋大学自然语言处理实验室提供的NER数据集](https:\u002F\u002Fgithub.com\u002Fkmounlp\u002FNER)\n\n### NER标签集\n- 总共有8个标签：\n  - PER：人名\n  - LOC：地名\n  - ORG：机构名\n  - POH：其他\n  - DAT：日期\n  - TIM：时间\n  - DUR：时间段\n  - MNY：货币\n  - PNT：比例\n  - NOH：其他数量表达\n- 实体类别：\n  - 实体名称：人名(PER)、地名(LOC)、机构名(ORG)、其他(POH)\n  - 时间表达：日期(DAT)、时间(TIM)、时间段(DUR)\n  - 数量表达：货币(MNY)、比例(PNT)、其他数量表达(NOH)\n\n### 结果\n- 训练轮数：12轮（未使用早停机制）\n- 训练集样本数：23032，验证集样本数：931\n- 训练集文件：```00002_NER.txt```, ..., ```EXOBRAIN_NE_CORPUS_007.txt```（共1,425个文件）\n- 验证集文件：```EXOBRAIN_NE_CORPUS_009.txt```, ```EXOBRAIN_NE_CORPUS_010.txt```（共2个文件）\n\n- 分类报告\n  - 总体来看，DAT、PER、NOH、ORG、PNT的得分较高，而POH、LOC等则相对较低。\n  - 以验证集为准，宏平均F1值为87.56。\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_dbab4d1cbb93.png\" width=\"50%\">\n\n- 混淆矩阵\n  - 存在将POH预测为ORG的情况（将“其他”归类为“机构”，这种误判在一定程度上是可以理解的）。\n  - 也有将ORG预测为PER的情况（需要修正）。\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_1104b801371f.png\" width=\"80%\">\n\n- 训练与评估的准确率及损失曲线图\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_9561768a119d.gif\" width=\"80%\">\n\n- 基准测试（开发集F1分数）\n\n|模型|宏平均F1分数|轮数|日期|\n|:------:|:------:|:---:|:---:|\n|KoBERT|0.8554|12|191129|\n|**KoBERT+CRF**|**0.8756**|12|191129|\n|KoBERT+BiLSTM+CRF|0.8659|12|191129|\n\n\n\n### 环境要求\n```bash\npip install -r requirements.txt\n```\n\n### 模型文件链接\n- [带有验证集的BERT CRF模型文件](https:\u002F\u002Fworks.do\u002FFhKyyNr)\n- [使用全部训练数据的BERT CRF模型文件](https:\u002F\u002Fworks.do\u002FxuweeF8)\n- [BERT CRF、BERT_alone共享文件夹（包含BiLSTM、BiGRU）](https:\u002F\u002Fworks.do\u002FxkVee9n)\n\n### 训练\n```bash\npython train_bert_crf.py \n```\n\n### 推理\n```bash\npython inference.py \n```\n\n### 可视化\n![BERT_NER_viz](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_readme_f5d5a98fa65c.gif)\n\n### 未来工作\n- ~~验证流水线~~\n- NER标签概率\n- RestfulAPI\n- 知识蒸馏\n- Apex fp16半精度\n- 重构、重构、重构\n\n### 参考仓库\n- [aisolab的NLP实现](https:\u002F\u002Fgithub.com\u002Faisolab\u002Fnlp_implementation)\n- [pytorch-crf](https:\u002F\u002Fgithub.com\u002Fkmkurn\u002Fpytorch-crf\u002Fblob\u002F8f3203a1f1d7984c87718bfe31853242670258db\u002Fdocs\u002Findex.rst)\n- [SKTBrain KoBERT](https:\u002F\u002Fgithub.com\u002FSKTBrain\u002FKoBERT)\n- [来自Hugging Face的微调配置](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fpytorch-transformers\u002Fblob\u002Fmaster\u002Fexamples\u002Frun_multiple_choice.py)\n- [BERT注意力可视化](https:\u002F\u002Fgithub.com\u002Fjessevig\u002Fbertviz)","# pytorch-bert-crf-ner 快速上手指南\n\n本项目是一个基于 PyTorch 实现的韩语命名实体识别（NER）工具，采用 **BERT + CRF** 架构。它利用预训练的 KoBERT 模型对韩语文本进行实体抽取（如人名、地名、机构名、日期等）。\n\n> **注意**：该模型主要针对**韩语**数据训练，直接用于中文或其他语言效果不佳。若需应用于其他语言，需替换对应的预训练 BERT 模型、词表及训练数据集。\n\n## 1. 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**: Linux \u002F macOS \u002F Windows\n*   **Python 版本**: Python 3.x\n*   **PyTorch 版本**: 推荐 v1.2 及以上（需兼容 `pytorch-crf`）\n*   **硬件建议**: 支持 CUDA 的 GPU 可加速训练和推理（注：旧版 `pytorch-crf` 可能对多卡支持有限，单卡运行最稳定）\n\n### 前置依赖安装\n\n建议使用虚拟环境（如 `venv` 或 `conda`），然后安装项目依赖。如果国内网络下载较慢，可配置 pip 使用清华或阿里镜像源。\n\n```bash\n# 可选：使用国内镜像源加速安装\npip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n若项目中未提供 `requirements.txt` 或需手动安装核心库，通常需要：\n\n```bash\npip install torch torchvision torchaudio\npip install pytorch-crf\npip install transformers sentencepiece\n```\n\n## 2. 安装步骤\n\n克隆项目代码并准备好预训练模型文件。\n\n### 2.1 获取代码\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner.git\ncd pytorch-bert-crf-ner\n```\n\n### 2.2 下载预训练模型\n\n项目提供了经过验证的模型文件，您需要下载并将其放置在项目指定目录（通常为 `models\u002F` 或根目录，具体视代码加载路径而定）。\n\n*   **包含验证集的模型**: [下载链接](https:\u002F\u002Fworks.do\u002FFhKyyNr)\n*   **全数据集训练的模型**: [下载链接](https:\u002F\u002Fworks.do\u002FxuweeF8)\n*   **包含 BiLSTM\u002FBiGRU 变种的共享文件夹**: [下载链接](https:\u002F\u002Fworks.do\u002FxkVee9n)\n\n> **提示**：由于链接为外部网盘，请下载后确认文件名与代码中加载的路径一致。\n\n## 3. 基本使用\n\n本项目主要包含训练和推理两个核心脚本。\n\n### 3.1 模型训练\n\n如果您有自己的标注数据（格式需参考项目中的 NER Dataset），可以运行以下命令开始训练。默认配置下将使用 KoBERT 进行微调。\n\n```bash\npython train_bert_crf.py\n```\n\n*   **数据集说明**：默认数据集来自韩国海洋大学自然语言处理实验室。\n*   **标签体系**：支持 PER(人名), LOC(地名), ORG(机构), DAT(日期), TIM(时间), DUR(时长), MNY(金额), PNT(比例), NOH(数量), POH(其他) 共 10 类标签。\n\n### 3.2 模型推理 (Inference)\n\n使用训练好或下载的模型对新的韩语句子进行实体识别。\n\n```bash\npython inference.py\n```\n\n运行后，程序会提示输入句子。输入韩语句子后，系统将输出分词结果、预测的 NER 标签序列以及解码后的带标签句子。\n\n**交互示例：**\n\n```text\n문장을 입력하세요: 지난달 28 일 수원에 살고 있는 윤주성 연구원은 코엑스 (서울 삼성역) 에서 개최되는 DEVIEW 2019 Day1 에 참석했다.\n```\n\n**输出示例：**\n\n```text\ndecoding_ner_sentence: [CLS] 지난달 \u003C28 일:DAT> \u003C수원:LOC>에 살고 있는 \u003C윤주성:PER> 연구원은 \u003C코엑스:LOC>(\u003C서울:LOC> \u003C삼성역:LOC>) 에서 개최되는 \u003CDEVIEW 2019 Day1:POH> 에 참석했다.[SEP]\n```\n\n### 3.3 关键注意事项\n\n1.  **分词限制**：由于使用 SentencePiece 分词，当实体的分词长度大于实体本身字符数时（例如包含标点或特殊符号），提取可能不精确。\n2.  **特殊符号**：预处理中的 `▁` 代表空格，不同于下划线 `_`。\n3.  **多语言适配**：若要用于中文或其他语言，**无需修改模型架构**，但必须更换为对应语言的 Pretrained BERT 模型（如 `bert-base-chinese`）、对应的 vocab 文件以及重新训练数据集。\n4.  **多 GPU 支持**：`pytorch-crf` 库在某些版本中不支持多 GPU 并行训练，如遇问题请尝试单卡运行。","某韩国新闻聚合平台的技术团队需要每日从数千篇新闻报道中自动提取人物、地点、组织及特定活动名称，以构建结构化知识图谱。\n\n### 没有 pytorch-bert-crf-ner 时\n- **韩语特性处理困难**：传统分词工具难以准确处理韩语复杂的黏着语特征，导致“首尔三星站”等地名常被错误切分，实体边界模糊。\n- **上下文语义缺失**：基于规则或简单统计的模型无法理解上下文，常将\"DEVIEW 2019\"这类特定活动名称误判为普通名词或拆分识别。\n- **标注一致性差**：缺乏序列约束机制，模型对同一实体的标注标签前后不一致（如开始标为组织，结尾标为地点），后期清洗成本极高。\n- **开发周期漫长**：团队需从头预训练韩语语言模型并设计后处理逻辑，耗时数周仍难以达到生产级准确率。\n\n### 使用 pytorch-bert-crf-ner 后\n- **精准捕捉韩语实体**：依托 KoBERT 的深度语义理解与 CRF 的全局约束，能精准识别如\"\u003C윤주성:PER>\"和\"\u003C서울 삼성역:LOC>\"等复杂实体，边界清晰。\n- **完整识别专有活动**：模型成功将\"DEVIEW 2019 Day1\"和\"미디어오늘\"识别为完整的\"\u003CPOH>\"（特定对象）标签，不再出现断裂或漏识。\n- **标签序列自动化优**：CRF 层自动确保标签逻辑连贯（如 B-ORG 后必接 I-ORG 或 O），输出结果直接可用，无需人工二次校验。\n- **快速落地生产环境**：基于现成的 PyTorch 实现，团队仅需少量微调数据即可在几天内完成部署，大幅缩短研发路径。\n\npytorch-bert-crf-ner 通过结合预训练语言模型与序列标注优化，解决了韩语命名实体识别中边界模糊与语义歧义的核心难题，实现了非结构化新闻到高质量知识图谱的高效转化。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Feagle705_pytorch-bert-crf-ner_1104b801.png","eagle705","Joosung Yoon","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Feagle705_62108237.jpg","Machine Learning Engineer (NLP, LLMs and Search)","NVIDIA","Seoul",null,"eagle705.github.io","https:\u002F\u002Fgithub.com\u002Feagle705",[82,86,90,94,98],{"name":83,"color":84,"percentage":85},"Jupyter Notebook","#DA5B0B",91.3,{"name":87,"color":88,"percentage":89},"Python","#3572A5",8,{"name":91,"color":92,"percentage":93},"JavaScript","#f1e05a",0.7,{"name":95,"color":96,"percentage":97},"HTML","#e34c26",0,{"name":99,"color":100,"percentage":97},"Shell","#89e051",505,109,"2026-03-31T23:01:15","Apache-2.0","未说明","训练时多 GPU 支持受限（pytorch-crf 库不支持多 GPU），具体显卡型号和显存需求未说明",{"notes":108,"python":109,"dependencies":110},"该项目基于韩语 KoBERT 模型，使用 SentencePiece 分词器且预训练词典不可更改。注意：pytorch-crf 库目前不支持多 GPU 并行训练。模型对英语数据的支持效果不佳。运行推理或训练前需通过 pip install -r requirements.txt 安装依赖，并可能需要手动下载约几百 MB 到几 GB 的预训练模型文件（README 中提供了外部链接）。","3.x",[111,112,113,114],"PyTorch v1.2+","pytorch-crf","sentencepiece","transformers (隐含，用于 BERT\u002FKoBERT)",[14,36,15,116,117],"视频","音频",[119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135],"bert","kobert","crf","bert-crf","ner","named-entity-recognition","pytorch","pytorch-implementation","korean","nlp","korean-nlp","natural-language-processing","kobert-crf","huggingface","bert-bilstm-crf","bert-bigru-crf","attention-visualization","2026-03-27T02:49:30.150509","2026-04-20T12:54:35.921334",[139,144,149,154,159,163,168],{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},44778,"如何添加自定义的 NER 标签（如 B-CHA）？","需要修改标签映射配置文件。请编辑 `experiments\u002Fbase_model_with_crf_val\u002Fner_to_index.json` 文件，将新的标签添加到列表中，然后重新训练模型。","https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner\u002Fissues\u002F8",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},44779,"为什么对相同的句子进行推理时，结果会不一致或出现随机性？","这通常是因为在推理阶段遗漏了 `model.eval()` 调用。CRF 层本身不会产生随机性，必须确保在推理前调用 `eval()` 方法以关闭 Dropout 层，这样相同输入才会得到稳定一致的结果。","https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner\u002Fissues\u002F21",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},44780,"运行时报错 \"ModuleNotFoundError: No module named 'data_utils.chatbot_dataset'\" 如何解决？","这是一个模块名称错误。请将 `train_bert_crf.py` 文件中的导入语句从 `data_utils.chatbot_dataset` 修改为 `data_utils.ner_dataset` 即可解决。","https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner\u002Fissues\u002F2",{"id":155,"question_zh":156,"answer_zh":157,"source_url":158},44781,"加载预训练模型时报错 \"Missing key(s) in state_dict: bert.embeddings.position_ids\" 怎么办？","这是由于 BertModel 版本不兼容导致的。请检查 `model\u002Fnet.py`，如果使用的是较新的 `transformers` 库但模型是用旧版 `pytorch_pretrained_bert` 训练的，尝试切换导入源：将 `from transformers import BertModel` 改回 `from pytorch_pretrained_bert import BertModel`，或者根据当前库版本调整模型加载代码以匹配输出格式。","https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner\u002Fissues\u002F9",{"id":160,"question_zh":161,"answer_zh":162,"source_url":158},44782,"加载模型时出现 \"TypeError: dropout(): argument 'input' must be Tensor, not list\" 错误？","这是因为不同版本的 BERT 库输出格式不同（新版返回字典或包含多个值的对象，旧版直接返回 Tensor）。请在 `model\u002Fnet.py` 的 `KobertCRF` 类中修改 BERT 的输出处理逻辑，确保传递给后续层的是 Tensor 类型。例如，明确指定 `output_all_encoded_layers=False` 并提取正确的输出字段。",{"id":164,"question_zh":165,"answer_zh":166,"source_url":167},44783,"项目的评估指标是基于 Token 级别还是实体级别？","该项目目前的评估是在 Token 级别（token level）进行的，而非实体级别（entity level）。","https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner\u002Fissues\u002F20",{"id":169,"question_zh":170,"answer_zh":171,"source_url":172},44784,"找不到最佳模型文件 \"best-epoch-16-step-1500-acc-0.993.bin\" 怎么办？","该模型文件未直接包含在代码仓库中，需要单独下载。请查看项目文档或 Release 页面寻找预训练模型文件的下载链接。","https:\u002F\u002Fgithub.com\u002Feagle705\u002Fpytorch-bert-crf-ner\u002Fissues\u002F69",[]]