[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-macanv--BERT-BiLSTM-CRF-NER":3,"tool-macanv--BERT-BiLSTM-CRF-NER":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},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,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},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 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":80,"owner_email":81,"owner_twitter":79,"owner_website":82,"owner_url":83,"languages":84,"stars":96,"forks":97,"last_commit_at":98,"license":79,"difficulty_score":10,"env_os":99,"env_gpu":100,"env_ram":101,"env_deps":102,"category_tags":109,"github_topics":110,"view_count":117,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":118,"updated_at":119,"faqs":120,"releases":151},2905,"macanv\u002FBERT-BiLSTM-CRF-NER","BERT-BiLSTM-CRF-NER","Tensorflow solution of NER task Using BiLSTM-CRF model with Google BERT Fine-tuning And private Server services","BERT-BiLSTM-CRF-NER 是一个基于 TensorFlow 开发的开源项目，专注于解决命名实体识别（NER）任务。它巧妙地将谷歌强大的 BERT 预训练模型与 BiLSTM-CRF 神经网络架构相结合，旨在从非结构化文本中精准提取人名、地名、机构名等关键实体信息。\n\n该工具主要解决了传统方法在中文语境下实体识别准确率不足的问题。通过利用 BERT 深层双向语言表示能力捕捉上下文语义，再配合 BiLSTM 处理序列依赖和 CRF 优化标签路径，显著提升了识别效果，尤其对中文数据的处理进行了专门优化，同时也支持其他语言的快速适配。\n\n这款工具非常适合自然语言处理领域的研究人员、算法工程师以及需要构建实体抽取服务的开发者使用。项目不仅提供了完整的模型训练脚本，支持自定义标签体系和数据集格式，还集成了基于 Flask 的服务端代码，方便用户将训练好的模型直接部署为 API 服务，快速应用于生产环境。其独特的亮点在于“预训练 + 序列标注”的混合架构设计，以及开箱即用的服务端部署方案，让复杂的 NER 任务变得更加高效和易用。","# BERT-BiLSTM-CRF-NER\nTensorflow solution of NER task Using BiLSTM-CRF model with Google BERT Fine-tuning\n\n使用谷歌的BERT模型在BLSTM-CRF模型上进行预训练用于中文命名实体识别的Tensorflow代码'\n\n中文文档请查看https:\u002F\u002Fblog.csdn.net\u002Fmacanv\u002Farticle\u002Fdetails\u002F85684284  如果对您有帮助，麻烦点个star,谢谢~~  \n\nWelcome to star this repository!\n\nThe Chinese training data($PATH\u002FNERdata\u002F) come from:https:\u002F\u002Fgithub.com\u002Fzjy-ucas\u002FChineseNER \n  \nThe CoNLL-2003 data($PATH\u002FNERdata\u002Fori\u002F) come from:https:\u002F\u002Fgithub.com\u002Fkyzhouhzau\u002FBERT-NER \n  \nThe evaluation codes come from:https:\u002F\u002Fgithub.com\u002Fguillaumegenthial\u002Ftf_metrics\u002Fblob\u002Fmaster\u002Ftf_metrics\u002F__init__.py  \n\n\nTry to implement NER work based on google's BERT code and BiLSTM-CRF network!\nThis project may be more close to process Chinese data. but other language only need Modify a small amount of code.\n\nTHIS PROJECT ONLY SUPPORT Python3.  \n###################################################################\n## Download project and install  \nYou can install this project by:  \n```\npip install bert-base==0.0.9 -i https:\u002F\u002Fpypi.python.org\u002Fsimple\n```\n\nOR\n```angular2html\ngit clone https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\ncd BERT-BiLSTM-CRF-NER\u002F\npython3 setup.py install\n```\n\nif you do not want to install, you just need clone this project and reference the file of \u003Crun.py> to train the model or start the service. \n\n## UPDATE:\n- 2020.2.6 add simple flask ner service code\n- 2019.2.25 Fix some bug for ner service\n- 2019.2.19: add text classification service\n-  fix Missing loss error\n- add label_list params in train process, so you can using -label_list xxx to special labels in training process.  \n  \n    \n## Train model:\nYou can use -help to view the relevant parameters of the training named entity recognition model, where data_dir, bert_config_file, output_dir, init_checkpoint, vocab_file must be specified.\n```angular2html\nbert-base-ner-train -help\n```\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_83ece7238b23.png)  \n  \n\ntrain\u002Fdev\u002Ftest dataset is like this:\n```\n海 O\n钓 O\n比 O\n赛 O\n地 O\n点 O\n在 O\n厦 B-LOC\n门 I-LOC\n与 O\n金 B-LOC\n门 I-LOC\n之 O\n间 O\n的 O\n海 O\n域 O\n。 O\n```\nThe first one of each line is a token, the second is token's label, and the line is divided by a blank line. The maximum length of each sentence is [max_seq_length] params.  \nYou can get training data from above two git repos  \nYou can training ner model by running below command:  \n```angular2html\nbert-base-ner-train \\\n    -data_dir {your dataset dir}\\\n    -output_dir {training output dir}\\\n    -init_checkpoint {Google BERT model dir}\\\n    -bert_config_file {bert_config.json under the Google BERT model dir} \\\n    -vocab_file {vocab.txt under the Google BERT model dir}\n```\nlike my init_checkpoint: \n```\ninit_checkpoint = F:\\chinese_L-12_H-768_A-12\\bert_model.ckpt\n```\nyou can special labels using -label_list params, the project get labels from training data.  \n```angular2html\n# using , split\n-labels 'B-LOC, I-LOC ...'\nOR save label in a file like labels.txt, one line one label\n-labels labels.txt\n```    \n\nAfter training model, the NER model will be saved in {output_dir} which you special above cmd line.  \n##### My Training environment：Tesla P40 24G mem  \n\n## As Service\nMany server and client code comes from excellent open source projects: [bert as service of hanxiao](https:\u002F\u002Fgithub.com\u002Fhanxiao\u002Fbert-as-service) If my code violates any license agreement, please let me know and I will correct it the first time.\n~~and NER server\u002Fclient service code can be applied to other tasks with simple modifications, such as text categorization, which I will provide later.~~\nthis project private Named Entity Recognition and Text Classification server service.\nWelcome to submit your request or share your model, if you want to share it on Github or my work.  \n\nYou can use -help to view the relevant parameters of the NER as Service:\nwhich model_dir, bert_model_dir is need\n```\nbert-base-serving-start -help\n```\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_6399d7699850.png)\n\nand than you can using below cmd start ner service:\n```angular2html\nbert-base-serving-start \\\n    -model_dir C:\\workspace\\python\\BERT_Base\\output\\ner2 \\\n    -bert_model_dir F:\\chinese_L-12_H-768_A-12\n    -model_pb_dir C:\\workspace\\python\\BERT_Base\\model_pb_dir\n    -mode NER\n```\nor text classification service:\n```angular2html\nbert-base-serving-start \\\n    -model_dir C:\\workspace\\python\\BERT_Base\\output\\ner2 \\\n    -bert_model_dir F:\\chinese_L-12_H-768_A-12\n    -model_pb_dir C:\\workspace\\python\\BERT_Base\\model_pb_dir\n    -mode CLASS\n    -max_seq_len 202\n```\n\nas you see:   \nmode: If mode is NER\u002FCLASS, then the service identified by the Named Entity Recognition\u002FText Classification will be started. If it is BERT, it will be the same as the [bert as service] project.  \nbert_model_dir: bert_model_dir is a BERT model, you can download from https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fbert\nner_model_dir: your ner model checkpoint dir\nmodel_pb_dir: model freeze save dir, after run optimize func, there will contains like ner_model.pb binary file  \n>You can download my ner model from：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1m9VcueQ5gF-TJc00sFD88w, ex_code: guqq\n> Or text classification model from: https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1oFPsOUh1n5AM2HjDIo2XCw, ex_code: bbu8   \nSet ner_mode.pb\u002Fclassification_model.pb to model_pb_dir, and set other file to model_dir(Different models need to be stored separately, you can set ner models label_list.pkl and label2id.pkl to model_dir\u002Fner\u002F and set text classification file to model_dir\u002Ftext_classification) , Text classification model can classify 12 categories of Chinese data： '游戏', '娱乐', '财经', '时政', '股票', '教育', '社会', '体育', '家居', '时尚', '房产', '彩票'  \n\nYou can see below service starting info:\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_0f102e7ff559.png)\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_39ce60347d7e.png)\n\n\nyou can using below code test client:  \n#### 1. NER Client\n```angular2html\nimport time\nfrom bert_base.client import BertClient\n\nwith BertClient(show_server_config=False, check_version=False, check_length=False, mode='NER') as bc:\n    start_t = time.perf_counter()\n    str = '1月24日，新华社对外发布了中央对雄安新区的指导意见，洋洋洒洒1.2万多字，17次提到北京，4次提到天津，信息量很大，其实也回答了人们关心的很多问题。'\n    rst = bc.encode([str, str])\n    print('rst:', rst)\n    print(time.perf_counter() - start_t)\n```\nyou can see this after run the above code:\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_fc858ddc68bd.png)\nIf you want to customize the word segmentation method, you only need to make the following simple changes on the client side code.\n\n```angular2html\nrst = bc.encode([list(str), list(str)], is_tokenized=True)\n```  \n\n#### 2. Text Classification Client\n```angular2html\nwith BertClient(show_server_config=False, check_version=False, check_length=False, mode='CLASS') as bc:\n    start_t = time.perf_counter()\n    str1 = '北京时间2月17日凌晨，第69届柏林国际电影节公布主竞赛单元获奖名单，王景春、咏梅凭借王小帅执导的中国影片《地久天长》连夺最佳男女演员双银熊大奖，这是中国演员首次包揽柏林电影节最佳男女演员奖，为华语影片刷新纪录。与此同时，由青年导演王丽娜执导的影片《第一次的别离》也荣获了本届柏林电影节新生代单元国际评审团最佳影片，可以说，在经历数个获奖小年之后，中国电影在柏林影展再次迎来了高光时刻。'\n    str2 = '受粤港澳大湾区规划纲要提振，港股周二高开，恒指开盘上涨近百点，涨幅0.33%，报28440.49点，相关概念股亦集体上涨，电子元件、新能源车、保险、基建概念多数上涨。粤泰股份、珠江实业、深天地A等10余股涨停；中兴通讯、丘钛科技、舜宇光学分别高开1.4%、4.3%、1.6%。比亚迪电子、比亚迪股份、光宇国际分别高开1.7%、1.2%、1%。越秀交通基建涨近2%，粤海投资、碧桂园等多股涨超1%。其他方面，日本软银集团股价上涨超0.4%，推动日经225和东证指数齐齐高开，但随后均回吐涨幅转跌东证指数跌0.2%，日经225指数跌0.11%，报21258.4点。受芯片制造商SK海力士股价下跌1.34％拖累，韩国综指下跌0.34％至2203.9点。澳大利亚ASX 200指数早盘上涨0.39％至6089.8点，大多数行业板块均现涨势。在保健品品牌澳佳宝下调下半财年的销售预期后，其股价暴跌超过23％。澳佳宝CEO亨弗里（Richard Henfrey）认为，公司下半年的利润可能会低于上半年，主要是受到销售额疲弱的影响。同时，亚市早盘澳洲联储公布了2月会议纪要，政策委员将继续谨慎评估经济增长前景，因前景充满不确定性的影响，稳定当前的利率水平比贸然调整利率更为合适，而且当前利率水平将有利于趋向通胀目标及改善就业，当前劳动力市场数据表现强势于其他经济数据。另一方面，经济增长前景亦令消费者消费意愿下滑，如果房价出现下滑，消费可能会进一步疲弱。在澳洲联储公布会议纪要后，澳元兑美元下跌近30点，报0.7120 。美元指数在昨日触及96.65附近的低点之后反弹至96.904。日元兑美元报110.56，接近上一交易日的低点。'\n    str3 = '新京报快讯 据国家市场监管总局消息，针对媒体报道水饺等猪肉制品检出非洲猪瘟病毒核酸阳性问题，市场监管总局、农业农村部已要求企业立即追溯猪肉原料来源并对猪肉制品进行了处置。两部门已派出联合督查组调查核实相关情况，要求猪肉制品生产企业进一步加强对猪肉原料的管控，落实检验检疫票证查验规定，完善非洲猪瘟检测和复核制度，防止染疫猪肉原料进入食品加工环节。市场监管总局、农业农村部等部门要求各地全面落实防控责任，强化防控措施，规范信息报告和发布，对不按要求履行防控责任的企业，一旦发现将严厉查处。专家认为，非洲猪瘟不是人畜共患病，虽然对猪有致命危险，但对人没有任何危害，属于只传猪不传人型病毒，不会影响食品安全。开展猪肉制品病毒核酸检测，可为防控溯源工作提供线索。'\n    rst = bc.encode([str1, str2, str3])\n    print('rst:', rst)\n    print('time used:{}'.format(time.perf_counter() - start_t))\n```\nyou can see this after run the above code:\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_f442e5f46d73.png)\n\nNote that it can not start NER service and Text Classification service together. but you can using twice command line start ner service and text classification with different port.  \n\n### Flask server service\nsometimes, multi thread deep learning model service may not use C\u002FS service, you can useing simple http service replace that, like using flask.\nnow you can reference code:bert_base\u002Fserver\u002Fsimple_flask_http_service.py，building your simple http server service\n\n## License\nMIT.  \n\n# The following tutorial is an old version and will be removed in the future.\n\n## How to train\n#### 1. Download BERT chinese model :  \n ```\n wget https:\u002F\u002Fstorage.googleapis.com\u002Fbert_models\u002F2018_11_03\u002Fchinese_L-12_H-768_A-12.zip  \n ```\n#### 2. create output dir\ncreate output path in project path:\n```angular2html\nmkdir output\n```\n#### 3. Train model\n\n##### first method \n```\n  python3 bert_lstm_ner.py   \\\n                  --task_name=\"NER\"  \\ \n                  --do_train=True   \\\n                  --do_eval=True   \\\n                  --do_predict=True\n                  --data_dir=NERdata   \\\n                  --vocab_file=checkpoint\u002Fvocab.txt  \\ \n                  --bert_config_file=checkpoint\u002Fbert_config.json \\  \n                  --init_checkpoint=checkpoint\u002Fbert_model.ckpt   \\\n                  --max_seq_length=128   \\\n                  --train_batch_size=32   \\\n                  --learning_rate=2e-5   \\\n                  --num_train_epochs=3.0   \\\n                  --output_dir=.\u002Foutput\u002Fresult_dir\u002F \n ```       \n ##### OR replace the BERT path and project path in bert_lstm_ner.py\n ```\n if os.name == 'nt': #windows path config\n    bert_path = '{your BERT model path}'\n    root_path = '{project path}'\nelse: # linux path config\n    bert_path = '{your BERT model path}'\n    root_path = '{project path}'\n ```\n Than Run:\n ```angular2html\npython3 bert_lstm_ner.py\n```\n\n### USING BLSTM-CRF OR ONLY CRF FOR DECODE!\nJust alter bert_lstm_ner.py line of 450, the params of the function of add_blstm_crf_layer: crf_only=True or False  \n\nONLY CRF output layer:\n```\n    blstm_crf = BLSTM_CRF(embedded_chars=embedding, hidden_unit=FLAGS.lstm_size, cell_type=FLAGS.cell, num_layers=FLAGS.num_layers,\n                          dropout_rate=FLAGS.droupout_rate, initializers=initializers, num_labels=num_labels,\n                          seq_length=max_seq_length, labels=labels, lengths=lengths, is_training=is_training)\n    rst = blstm_crf.add_blstm_crf_layer(crf_only=True)\n```\n  \n  \nBiLSTM with CRF output layer\n```\n    blstm_crf = BLSTM_CRF(embedded_chars=embedding, hidden_unit=FLAGS.lstm_size, cell_type=FLAGS.cell, num_layers=FLAGS.num_layers,\n                          dropout_rate=FLAGS.droupout_rate, initializers=initializers, num_labels=num_labels,\n                          seq_length=max_seq_length, labels=labels, lengths=lengths, is_training=is_training)\n    rst = blstm_crf.add_blstm_crf_layer(crf_only=False)\n```\n\n## Result:\nall params using default\n#### In dev data set:\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_1c4702687519.png)\n\n#### In test data set\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_83293f7417b6.png)\n\n#### entity leval result:\nlast two result are label level result, the entitly level result in code of line 796-798,this result will be output in predict process.\nshow my entity level result :\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_03e18a6a9c16.png)\n> my model can download from baidu cloud:  \n>链接：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1GfDFleCcTv5393ufBYdgqQ 提取码：4cus  \nNOTE: My model is trained by crf_only params\n\n## ONLINE PREDICT\nIf model is train finished, just run\n```angular2html\npython3 terminal_predict.py\n```\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_e6cca19eadf6.png)\n \n ## Using NER as Service\n\n#### Service \nUsing NER as Service is simple, you just need to run the python script below in the project root path:\n```angular2html\npython3 runs.py \\ \n    -mode NER\n    -bert_model_dir \u002Fhome\u002Fmacan\u002Fml\u002Fdata\u002Fchinese_L-12_H-768_A-12 \\\n    -ner_model_dir \u002Fhome\u002Fmacan\u002Fml\u002Fdata\u002Fbert_ner \\\n    -model_pd_dir \u002Fhome\u002Fmacan\u002Fml\u002Fworkspace\u002FBERT_Base\u002Foutput\u002Fpredict_optimizer \\\n    -num_worker 8\n```\n\n  \nYou can download my ner model from：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1m9VcueQ5gF-TJc00sFD88w, ex_code: guqq  \nSet ner_mode.pb to model_pd_dir, and set other file to ner_model_dir and than run last cmd  \n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_0f102e7ff559.png)\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_39ce60347d7e.png)\n\n\n#### Client\nThe client using methods can reference client_test.py script\n```angular2html\nimport time\nfrom client.client import BertClient\n\nner_model_dir = 'C:\\workspace\\python\\BERT_Base\\output\\predict_ner'\nwith BertClient( ner_model_dir=ner_model_dir, show_server_config=False, check_version=False, check_length=False, mode='NER') as bc:\n    start_t = time.perf_counter()\n    str = '1月24日，新华社对外发布了中央对雄安新区的指导意见，洋洋洒洒1.2万多字，17次提到北京，4次提到天津，信息量很大，其实也回答了人们关心的很多问题。'\n    rst = bc.encode([str])\n    print('rst:', rst)\n    print(time.perf_counter() - start_t)\n```\nNOTE: input format you can sometime reference bert as service project.    \nWelcome to provide more client language code like java or others.  \n ## Using yourself data to train\n if you want to use yourself data to train ner model,you just modify  the get_labes func.\n ```angular2html\ndef get_labels(self):\n        return [\"O\", \"B-PER\", \"I-PER\", \"B-ORG\", \"I-ORG\", \"B-LOC\", \"I-LOC\", \"X\", \"[CLS]\", \"[SEP]\"]\n```\nNOTE: \"X\", “[CLS]”, “[SEP]” These three are necessary, you just replace your data label to this return list.  \nOr you can use last code lets the program automatically get the label from training data\n```angular2html\ndef get_labels(self):\n        # 通过读取train文件获取标签的方法会出现一定的风险。\n        if os.path.exists(os.path.join(FLAGS.output_dir, 'label_list.pkl')):\n            with codecs.open(os.path.join(FLAGS.output_dir, 'label_list.pkl'), 'rb') as rf:\n                self.labels = pickle.load(rf)\n        else:\n            if len(self.labels) > 0:\n                self.labels = self.labels.union(set([\"X\", \"[CLS]\", \"[SEP]\"]))\n                with codecs.open(os.path.join(FLAGS.output_dir, 'label_list.pkl'), 'wb') as rf:\n                    pickle.dump(self.labels, rf)\n            else:\n                self.labels = [\"O\", 'B-TIM', 'I-TIM', \"B-PER\", \"I-PER\", \"B-ORG\", \"I-ORG\", \"B-LOC\", \"I-LOC\", \"X\", \"[CLS]\", \"[SEP]\"]\n        return self.labels\n\n```\n\n\n## NEW UPDATE\n2019.1.30 Support pip install and command line control  \n\n2019.1.30 Add Service\u002FClient for NER process  \n\n2019.1.9: Add code to remove the adam related parameters in the model, and reduce the size of the model file from 1.3GB to 400MB.  \n  \n2019.1.3: Add online predict code  \n\n\n\n## reference: \n+ The evaluation codes come from:https:\u002F\u002Fgithub.com\u002Fguillaumegenthial\u002Ftf_metrics\u002Fblob\u002Fmaster\u002Ftf_metrics\u002F__init__.py\n\n+ [https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fbert](https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fbert)\n      \n+ [https:\u002F\u002Fgithub.com\u002Fkyzhouhzau\u002FBERT-NER](https:\u002F\u002Fgithub.com\u002Fkyzhouhzau\u002FBERT-NER)\n\n+ [https:\u002F\u002Fgithub.com\u002Fzjy-ucas\u002FChineseNER](https:\u002F\u002Fgithub.com\u002Fzjy-ucas\u002FChineseNER)\n\n+ [https:\u002F\u002Fgithub.com\u002Fhanxiao\u002Fbert-as-service](https:\u002F\u002Fgithub.com\u002Fhanxiao\u002Fbert-as-service)\n> Any problem please open issue OR email me(ma_cancan@163.com)\n","# BERT-BiLSTM-CRF-NER\n使用BiLSTM-CRF模型结合谷歌BERT进行微调的TensorFlow命名实体识别解决方案\n\n使用谷歌BERT模型在BLSTM-CRF模型上进行预训练，用于中文命名实体识别的TensorFlow代码。\n\n中文文档请查看：https:\u002F\u002Fblog.csdn.net\u002Fmacanv\u002Farticle\u002Fdetails\u002F85684284。如果对您有帮助，麻烦点个star，谢谢~~\n\n欢迎给本仓库点个星！\n\n中文训练数据（$PATH\u002FNERdata\u002F）来自：https:\u002F\u002Fgithub.com\u002Fzjy-ucas\u002FChineseNER\n\nCoNLL-2003数据（$PATH\u002FNERdata\u002Fori\u002F）来自：https:\u002F\u002Fgithub.com\u002Fkyzhouhzau\u002FBERT-NER\n\n评估代码来自：https:\u002F\u002Fgithub.com\u002Fguillaumegenthial\u002Ftf_metrics\u002Fblob\u002Fmaster\u002Ftf_metrics\u002F__init__.py\n\n\n尝试基于谷歌的BERT代码和BiLSTM-CRF网络实现命名实体识别任务！该项目可能更适合处理中文数据，而对于其他语言，只需修改少量代码即可。\n\n本项目仅支持Python 3。\n###################################################################\n## 下载项目并安装\n您可以使用以下命令安装该项目：\n```\npip install bert-base==0.0.9 -i https:\u002F\u002Fpypi.python.org\u002Fsimple\n```\n\n或者\n```angular2html\ngit clone https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\ncd BERT-BiLSTM-CRF-NER\u002F\npython3 setup.py install\n```\n\n如果您不想安装，只需克隆该项目，并引用\u003Crun.py>文件来训练模型或启动服务。\n\n## 更新：\n- 2020年2月6日：添加简单的Flask NER服务代码\n- 2019年2月25日：修复了NER服务中的一些错误\n- 2019年2月19日：添加文本分类服务\n- 修复缺失损失函数的错误\n- 在训练过程中增加了label_list参数，因此您可以在训练过程中使用-label_list xxx来指定特定标签。\n\n\n## 训练模型：\n您可以使用-help查看命名实体识别模型训练的相关参数，其中data_dir、bert_config_file、output_dir、init_checkpoint和vocab_file必须指定。\n```angular2html\nbert-base-ner-train -help\n```\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_83ece7238b23.png)\n\n训练\u002F验证\u002F测试数据集如下所示：\n```\n海 O\n钓 O\n比 O\n赛 O\n地 O\n点 O\n在 O\n厦 B-LOC\n门 I-LOC\n与 O\n金 B-LOC\n门 I-LOC\n之 O\n间 O\n的 O\n海 O\n域 O\n。 O\n```\n每行的第一个是词元，第二个是该词元的标签，行与行之间用空行分隔。每句话的最大长度由[max_seq_length]参数决定。您可以从上述两个Git仓库获取训练数据。\n\n您可以通过运行以下命令来训练NER模型：\n```angular2html\nbert-base-ner-train \\\n    -data_dir {您的数据集目录}\\\n    -output_dir {训练输出目录}\\\n    -init_checkpoint {谷歌BERT模型目录}\\\n    -bert_config_file {谷歌BERT模型目录下的bert_config.json} \\\n    -vocab_file {谷歌BERT模型目录下的vocab.txt}\n```\n\n例如我的init_checkpoint路径为：\n```\ninit_checkpoint = F:\\chinese_L-12_H-768_A-12\\bert_model.ckpt\n```\n\n您还可以使用-label_list参数指定特定标签，项目会从训练数据中自动提取标签。\n```angular2html\n# 使用逗号分隔\n-labels 'B-LOC, I-LOC ...'\n或者将标签保存在一个文件中，如labels.txt，每行一个标签\n-labels labels.txt\n```    \n\n训练完成后，NER模型将被保存到您在命令行中指定的{output_dir}目录中。\n##### 我的训练环境：Tesla P40 24G显存\n\n## 作为服务\n许多服务器和客户端代码都来自优秀的开源项目：[hanxiao 的 BERT 作为服务](https:\u002F\u002Fgithub.com\u002Fhanxiao\u002Fbert-as-service)。如果我的代码违反了任何许可协议，请告知我，我会第一时间进行修正。\n~~并且 NER 服务器\u002F客户端服务的代码只需稍作修改即可应用于其他任务，例如文本分类，我将在后续提供。~~\n本项目是一个私有的命名实体识别与文本分类服务器服务。\n欢迎提交您的请求或分享您的模型，如果您希望将其发布在 GitHub 或我的作品中。\n\n您可以使用 `-help` 查看 NER 作为服务的相关参数：\n其中需要指定 `model_dir` 和 `bert_model_dir`：\n```\nbert-base-serving-start -help\n```\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_6399d7699850.png)\n\n然后您可以使用以下命令启动 NER 服务：\n```angular2html\nbert-base-serving-start \\\n    -model_dir C:\\workspace\\python\\BERT_Base\\output\\ner2 \\\n    -bert_model_dir F:\\chinese_L-12_H-768_A-12\n    -model_pb_dir C:\\workspace\\python\\BERT_Base\\model_pb_dir\n    -mode NER\n```\n或者文本分类服务：\n```angular2html\nbert-base-serving-start \\\n    -model_dir C:\\workspace\\python\\BERT_Base\\output\\ner2 \\\n    -bert_model_dir F:\\chinese_L-12_H-768_A-12\n    -model_pb_dir C:\\workspace\\python\\BERT_Base\\model_pb_dir\n    -mode CLASS\n    -max_seq_len 202\n```\n\n如您所见：\n模式：如果模式为 NER\u002FCLASS，则将启动命名实体识别\u002F文本分类服务。如果是 BERT 模式，则与 [bert as service] 项目相同。\nbert_model_dir：`bert_model_dir` 是一个 BERT 模型，您可以从 https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fbert 下载。\nner_model_dir：您的 NER 模型检查点目录。\nmodel_pb_dir：模型冻结保存目录，运行优化函数后，其中会包含类似 `ner_model.pb` 的二进制文件。\n> 您可以从以下链接下载我的 NER 模型：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1m9VcueQ5gF-TJc00sFD88w，提取码：guqq\n> 或者从这里下载文本分类模型：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1oFPsOUh1n5AM2HjDIo2XCw，提取码：bbu8\n将 `ner_mode.pb`\u002F`classification_model.pb` 放入 `model_pb_dir`，并将其他文件放入 `model_dir`（不同模型需分开存储，您可以将 NER 模型的 `label_list.pkl` 和 `label2id.pkl` 放入 `model_dir\u002Fner\u002F`，而将文本分类文件放入 `model_dir\u002Ftext_classification`）。文本分类模型可以对中文数据进行 12 类别分类：'游戏', '娱乐', '财经', '时政', '股票', '教育', '社会', '体育', '家居', '时尚', '房产', '彩票'。\n\n您可以看到如下服务启动信息：\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_0f102e7ff559.png)\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_39ce60347d7e.png)\n\n\n您可以使用以下代码测试客户端：\n#### 1. NER 客户端\n```angular2html\nimport time\nfrom bert_base.client import BertClient\n\nwith BertClient(show_server_config=False, check_version=False, check_length=False, mode='NER') as bc:\n    start_t = time.perf_counter()\n    str = '1月24日，新华社对外发布了中央对雄安新区的指导意见，洋洋洒洒1.2万多字，17次提到北京，4次提到天津，信息量很大，其实也回答了人们关心的很多问题。'\n    rst = bc.encode([str, str])\n    print('rst:', rst)\n    print(time.perf_counter() - start_t)\n```\n运行上述代码后，您可以看到：\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_fc858ddc68bd.png)\n如果您想自定义分词方法，只需在客户端代码上进行以下简单修改：\n\n```angular2html\nrst = bc.encode([list(str), list(str)], is_tokenized=True)\n```  \n\n#### 2. Text Classification 客户端\n```angular2html\nwith BertClient(show_server_config=False, check_version=False, check_length=False, mode='CLASS') as bc:\n    start_t = time.perf_counter()\n    str1 = '北京时间2月17日凌晨，第69届柏林国际电影节公布主竞赛单元获奖名单，王景春、咏梅凭借王小帅执导的中国影片《地久天长》连夺最佳男女演员双银熊大奖，这是中国演员首次包揽柏林电影节最佳男女演员奖，为华语影片刷新纪录。与此同时，由青年导演王丽娜执导的影片《第一次的别离》也荣获了本届柏林电影节新生代单元国际评审团最佳影片，可以说，在经历数个获奖小年之后，中国电影在柏林影展再次迎来了高光时刻。'\n    str2 = '受粤港澳大湾区规划纲要提振，港股周二高开，恒指开盘上涨近百点，涨幅0.33%，报28440.49点，相关概念股亦集体上涨，电子元件、新能源车、保险、基建概念多数上涨。粤泰股份、珠江实业、深天地A等10余股涨停；中兴通讯、丘钛科技、舜宇光学分别高开1.4%、4.3%、1.6%。比亚迪电子、比亚迪股份、光宇国际分别高开1.7%、1.2%、1%。越秀交通基建涨近2%，粤海投资、碧桂园等多股涨超1%。其他方面，日本软银集团股价上涨超0.4%，推动日经225和东证指数齐齐高开，但随后均回吐涨幅转跌东证指数跌0.2%，日经225指数跌0.11%，报21258.4点。受芯片制造商SK海力士股价下跌1.34％拖累，韩国综指下跌0.34％至2203.9点。澳大利亚ASX 200指数早盘上涨0.39％至6089.8点，大多数行业板块均现涨势。在保健品品牌澳佳宝下调下半财年的销售预期后，其股价暴跌超过23％。澳佳宝CEO亨弗里（Richard Henfrey）认为，公司下半年的利润可能会低于上半年，主要是受到销售额疲弱的影响。同时，亚市早盘澳洲联储公布了2月会议纪要，政策委员将继续谨慎评估经济增长前景，因前景充满不确定性的影响，稳定当前的利率水平比贸然调整利率更为合适，而且当前利率水平将有利于趋向通胀目标及改善就业，当前劳动力市场数据表现强势于其他经济数据。另一方面，经济增长前景亦令消费者消费意愿下滑，如果房价出现下滑，消费可能会进一步疲弱。在澳洲联储公布会议纪要后，澳元兑美元下跌近30点，报0.7120 。美元指数在昨日触及96.65附近的低点之后反弹至96.904。日元兑美元报110.56，接近上一交易日的低点。'\n    str3 = '新京报快讯 据国家市场监管总局消息，针对媒体报道水饺等猪肉制品检出非洲猪瘟病毒核酸阳性问题，市场监管总局、农业农村部已要求企业立即追溯猪肉原料来源并对猪肉制品进行了处置。两部门已派出联合督查组调查核实相关情况，要求猪肉制品生产企业进一步加强对猪肉原料的管控，落实检验检疫票证查验规定，完善非洲猪瘟检测和复核制度，防止染疫猪肉原料进入食品加工环节。市场监管总局、农业农村部等部门要求各地全面落实防控责任，强化防控措施，规范信息报告和发布，对不按要求履行防控责任的企业，一旦发现将严厉查处。专家认为，非洲猪瘟不是人畜共患病，虽然对猪有致命危险，但对人没有任何危害，属于只传猪不传人型病毒，不会影响食品安全。开展猪肉制品病毒核酸检测，可为防控溯源工作提供线索。'\n    rst = bc.encode([str1, str2, str3])\n    print('rst:', rst)\n    print('time used:{}'.format(time.perf_counter() - start_t))\n```\n运行上述代码后，您可以看到：\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_f442e5f46d73.png)\n\n请注意，无法同时启动 NER 服务和文本分类服务。不过，您可以使用两次不同的命令行，通过不同的端口分别启动 NER 服务和文本分类服务。\n\n### Flask 服务器服务\n有时，多线程深度学习模型服务可能不适合使用 C\u002FS 架构，此时可以使用简单的 HTTP 服务来替代，比如使用 Flask。\n现在您可以参考代码：bert_base\u002Fserver\u002Fsimple_flask_http_service.py，构建您自己的简单 HTTP 服务器服务。\n\n## 许可证\nMIT。\n\n# 以下教程为旧版本，未来将被移除。\n\n## 如何训练\n#### 1. 下载 BERT 中文模型：\n```\nwget https:\u002F\u002Fstorage.googleapis.com\u002Fbert_models\u002F2018_11_03\u002Fchinese_L-12_H-768_A-12.zip  \n```\n#### 2. 创建输出目录\n在项目路径下创建输出路径：\n```angular2html\nmkdir output\n```\n#### 3. 训练模型\n\n##### 第一种方法\n```\n  python3 bert_lstm_ner.py   \\\n                  --task_name=\"NER\"  \\ \n                  --do_train=True   \\\n                  --do_eval=True   \\\n                  --do_predict=True\n                  --data_dir=NERdata   \\\n                  --vocab_file=checkpoint\u002Fvocab.txt  \\ \n                  --bert_config_file=checkpoint\u002Fbert_config.json \\  \n                  --init_checkpoint=checkpoint\u002Fbert_model.ckpt   \\\n                  --max_seq_length=128   \\\n                  --train_batch_size=32   \\\n                  --learning_rate=2e-5   \\\n                  --num_train_epochs=3.0   \\\n                  --output_dir=.\u002Foutput\u002Fresult_dir\u002F \n ```       \n ##### 或者替换 `bert_lstm_ner.py` 中的 BERT 路径和项目路径\n ```\n if os.name == 'nt': #windows path config\n    bert_path = '{your BERT model path}'\n    root_path = '{project path}'\nelse: # linux path config\n    bert_path = '{your BERT model path}'\n    root_path = '{project path}'\n ```\n 然后运行：\n ```angular2html\npython3 bert_lstm_ner.py\n```\n\n### 使用 BLSTM-CRF 或仅使用 CRF 进行解码！\n只需修改 bert_lstm_ner.py 文件第 450 行，将 add_blstm_crf_layer 函数的参数 crf_only 设置为 True 或 False。\n\n仅使用 CRF 输出层：\n```\n    blstm_crf = BLSTM_CRF(embedded_chars=embedding, hidden_unit=FLAGS.lstm_size, cell_type=FLAGS.cell, num_layers=FLAGS.num_layers,\n                          dropout_rate=FLAGS.droupout_rate, initializers=initializers, num_labels=num_labels,\n                          seq_length=max_seq_length, labels=labels, lengths=lengths, is_training=is_training)\n    rst = blstm_crf.add_blstm_crf_layer(crf_only=True)\n```\n\n带有 CRF 输出层的 BiLSTM：\n```\n    blstm_crf = BLSTM_CRF(embedded_chars=embedding, hidden_unit=FLAGS.lstm_size, cell_type=FLAGS.cell, num_layers=FLAGS.num_layers,\n                          dropout_rate=FLAGS.droupout_rate, initializers=initializers, num_labels=num_labels,\n                          seq_length=max_seq_length, labels=labels, lengths=lengths, is_training=is_training)\n    rst = blstm_crf.add_blstm_crf_layer(crf_only=False)\n```\n\n## 结果：\n所有参数均使用默认值\n#### 在开发数据集上：\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_1c4702687519.png)\n\n#### 在测试数据集上：\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_83293f7417b6.png)\n\n#### 实体级别结果：\n最后两个结果是标签级别的结果，实体级别的结果在代码的第 796-798 行，这些结果将在预测过程中输出。\n展示我的实体级别结果：\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_03e18a6a9c16.png)\n> 我的模型可以从百度网盘下载：  \n> 链接：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1GfDFleCcTv5393ufBYdgqQ 提取码：4cus  \n> 注意：我的模型是使用 crf_only 参数训练的。\n\n## 在线预测\n如果模型训练完成，只需运行以下命令：\n```angular2html\npython3 terminal_predict.py\n```\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_e6cca19eadf6.png)\n\n## 将 NER 作为服务使用\n\n#### 服务\n将 NER 作为服务使用非常简单，你只需在项目根目录下运行以下 Python 脚本：\n```angular2html\npython3 runs.py \\ \n    -mode NER\n    -bert_model_dir \u002Fhome\u002Fmacan\u002Fml\u002Fdata\u002Fchinese_L-12_H-768_A-12 \\\n    -ner_model_dir \u002Fhome\u002Fmacan\u002Fml\u002Fdata\u002Fbert_ner \\\n    -model_pd_dir \u002Fhome\u002Fmacan\u002Fml\u002Fworkspace\u002FBERT_Base\u002Foutput\u002Fpredict_optimizer \\\n    -num_worker 8\n```\n\n你可以从以下链接下载我的 NER 模型：https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1m9VcueQ5gF-TJc00sFD88w，提取码：guqq。将 ner_mode.pb 文件放入 model_pd_dir 目录，其他文件放入 ner_model_dir 目录，然后运行上述命令。\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_0f102e7ff559.png)\n![](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_readme_39ce60347d7e.png)\n\n#### 客户端\n客户端可以参考 client_test.py 脚本中的使用方法。\n```angular2html\nimport time\nfrom client.client import BertClient\n\nner_model_dir = 'C:\\workspace\\python\\BERT_Base\\output\\predict_ner'\nwith BertClient( ner_model_dir=ner_model_dir, show_server_config=False, check_version=False, check_length=False, mode='NER') as bc:\n    start_t = time.perf_counter()\n    str = '1月24日，新华社对外发布了中央对雄安新区的指导意见，洋洋洒洒1.2万多字，17次提到北京，4次提到天津，信息量很大，其实也回答了人们关心的很多问题。'\n    rst = bc.encode([str])\n    print('rst:', rst)\n    print(time.perf_counter() - start_t)\n```\n\n注意：输入格式可以参考 BERT 作为服务的项目。欢迎提供更多的客户端语言代码，如 Java 等。\n\n## 使用自己的数据进行训练\n如果你想使用自己的数据训练 NER 模型，只需修改 get_labels 函数即可。\n```angular2html\ndef get_labels(self):\n        return [\"O\", \"B-PER\", \"I-PER\", \"B-ORG\", \"I-ORG\", \"B-LOC\", \"I-LOC\", \"X\", \"[CLS]\", \"[SEP]\"]\n```\n\n注意：“X”、“[CLS]”、“[SEP]”这三种标记是必须的，你只需将自己的数据标签替换到这个返回列表中即可。或者你可以使用下面的代码让程序自动从训练数据中获取标签：\n```angular2html\ndef get_labels(self):\n        # 通过读取train文件获取标签的方法会出现一定的风险。\n        if os.path.exists(os.path.join(FLAGS.output_dir, 'label_list.pkl')):\n            with codecs.open(os.path.join(FLAGS.output_dir, 'label_list.pkl'), 'rb') as rf:\n                self.labels = pickle.load(rf)\n        else:\n            if len(self.labels) > 0:\n                self.labels = self.labels.union(set([\"X\", \"[CLS]\", \"[SEP]\"]))\n                with codecs.open(os.path.join(FLAGS.output_dir, 'label_list.pkl'), 'wb') as rf:\n                    pickle.dump(self.labels, rf)\n            else:\n                self.labels = [\"O\", 'B-TIM', 'I-TIM', \"B-PER\", \"I-PER\", \"B-ORG\", \"I-ORG\", \"B-LOC\", \"I-LOC\", \"X\", \"[CLS]\", \"[SEP]\"]\n        return self.labels\n\n```\n\n## 新更新\n2019年1月30日：支持 pip 安装和命令行控制。\n\n2019年1月30日：新增 NER 流程的服务\u002F客户端功能。\n\n2019年1月9日：添加代码以移除模型中的 Adam 相关参数，从而将模型文件大小从 1.3GB 减少至 400MB。\n\n2019年1月3日：添加在线预测代码。\n\n## 参考资料：\n+ 评估代码来自：https:\u002F\u002Fgithub.com\u002Fguillaumegenthial\u002Ftf_metrics\u002Fblob\u002Fmaster\u002Ftf_metrics\u002F__init__.py\n\n+ [https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fbert](https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fbert)\n\n+ [https:\u002F\u002Fgithub.com\u002Fkyzhouhzau\u002FBERT-NER](https:\u002F\u002Fgithub.com\u002Fkyzhouhzau\u002FBERT-NER)\n\n+ [https:\u002F\u002Fgithub.com\u002Fzjy-ucas\u002FChineseNER](https:\u002F\u002Fgithub.com\u002Fzjy-ucas\u002FChineseNER)\n\n+ [https:\u002F\u002Fgithub.com\u002Fhanxiao\u002Fbert-as-service](https:\u002F\u002Fgithub.com\u002Fhanxiao\u002Fbert-as-service)\n> 如有任何问题，请提交 Issue 或发送邮件至 ma_cancan@163.com。","# BERT-BiLSTM-CRF-NER 快速上手指南\n\n本项目基于 Google BERT 模型与 BiLSTM-CRF 网络，使用 TensorFlow 实现中文命名实体识别（NER）及文本分类任务。\n\n## 1. 环境准备\n\n*   **操作系统**：Linux \u002F Windows \u002F macOS\n*   **Python 版本**：仅支持 **Python 3**\n*   **核心依赖**：TensorFlow, BERT-base\n*   **硬件建议**：训练过程建议使用 GPU（原文作者使用 Tesla P40 24G），推理服务可在 CPU 运行但速度较慢。\n\n## 2. 安装步骤\n\n你可以选择通过 pip 直接安装，或克隆源码进行安装。\n\n### 方式一：使用 pip 安装（推荐）\n```bash\npip install bert-base==0.0.9 -i https:\u002F\u002Fpypi.python.org\u002Fsimple\n```\n\n### 方式二：源码安装\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\ncd BERT-BiLSTM-CRF-NER\u002F\npython3 setup.py install\n```\n\n> **注意**：如果不希望安装到系统环境，只需克隆项目，直接参考 `run.py` 文件即可进行模型训练或服务启动。\n\n### 前置数据准备\n在运行前，请确保已下载以下资源：\n1.  **Google BERT 中文预训练模型**：包含 `bert_model.ckpt`, `bert_config.json`, `vocab.txt`。\n    *   下载地址：[Google BERT GitHub](https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fbert) 或国内镜像。\n2.  **训练数据集**：格式为每行一个字符和一个标签，句子间用空行分隔。\n    *   示例格式：\n        ```text\n        海 O\n        钓 O\n        厦 B-LOC\n        门 I-LOC\n        ```\n\n## 3. 基本使用\n\n### 3.1 训练 NER 模型\n\n使用命令行工具 `bert-base-ner-train` 开始训练。必须指定数据目录、输出目录及 BERT 模型相关文件路径。\n\n```bash\nbert-base-ner-train \\\n    -data_dir {your dataset dir}\\\n    -output_dir {training output dir}\\\n    -init_checkpoint {Google BERT model dir}\u002Fbert_model.ckpt\\\n    -bert_config_file {Google BERT model dir}\u002Fbert_config.json \\\n    -vocab_file {Google BERT model dir}\u002Fvocab.txt\n```\n\n**可选参数**：\n*   `-label_list`：指定标签列表。可以用逗号分隔（如 `'B-LOC,I-LOC'`）或指向一个每行一个标签的文件（如 `labels.txt`）。若不指定，程序将自动从训练数据中提取。\n\n训练完成后，模型检查点将保存在 `-output_dir` 指定的目录中。\n\n### 3.2 启动 NER 服务 (Server-Client 模式)\n\n项目支持将模型部署为高性能服务，类似 `bert-as-service`。\n\n**启动服务端：**\n```bash\nbert-base-serving-start \\\n    -model_dir {your trained ner model dir} \\\n    -bert_model_dir {Google BERT model dir}\\\n    -model_pb_dir {path to save frozen pb model}\\\n    -mode NER\n```\n*   `mode`: 设为 `NER` 启动命名实体识别服务；设为 `CLASS` 启动文本分类服务。\n\n**客户端调用示例 (Python)：**\n\n```python\nimport time\nfrom bert_base.client import BertClient\n\n# 连接服务端，模式设为 NER\nwith BertClient(show_server_config=False, check_version=False, check_length=False, mode='NER') as bc:\n    start_t = time.perf_counter()\n    \n    # 待识别文本\n    text = '1 月 24 日，新华社对外发布了中央对雄安新区的指导意见，洋洋洒洒 1.2 万多字，17 次提到北京，4 次提到天津。'\n    \n    # 获取结果\n    rst = bc.encode([text])\n    \n    print('result:', rst)\n    print('time used:', time.perf_counter() - start_t)\n```\n\n**自定义分词调用：**\n如果希望客户端自行分词后发送，可使用 `is_tokenized=True`：\n```python\nrst = bc.encode([list(text)], is_tokenized=True)\n```\n\n### 3.3 轻量级 Flask 服务\n\n如果不适合使用 C\u002FS 架构，项目也提供了简单的 HTTP 服务实现。\n参考代码位置：`bert_base\u002Fserver\u002Fsimple_flask_http_service.py`，可根据需求修改并启动 HTTP 服务。","某金融科技公司风控团队需要从每日海量的中文新闻舆情中，自动提取涉事企业、地点及金额，以构建实时风险预警系统。\n\n### 没有 BERT-BiLSTM-CRF-NER 时\n- **识别精度低**：传统规则或浅层模型难以理解“招商银行”在“位于招商局大厦”中的歧义，导致实体误判率高。\n- **上下文缺失**：无法有效捕捉长距离依赖，当实体描述跨越多个分句时（如“该公司...随后在厦门...\"），模型往往丢失关键地点信息。\n- **开发周期长**：针对特定金融领域需人工编写大量特征工程，且缺乏统一的微调框架，模型迭代耗时数周。\n- **部署困难**：训练好的模型难以封装为标准服务，业务系统调用时需重复加载资源，响应延迟高达秒级。\n\n### 使用 BERT-BiLSTM-CRF-NER 后\n- **语义理解精准**：利用谷歌 BERT 预训练权重进行微调，模型能准确区分多义词，金融实体识别 F1 值提升至 90% 以上。\n- **长程依赖捕获**：BiLSTM 结构结合 CRF 标签约束，完美解决长句中实体边界模糊问题，确保“厦门”与“金门”等地名被完整且正确标注。\n- **训练高效便捷**：通过简单的命令行参数即可指定数据目录和标签列表，直接加载中文 BERT 模型进行微调，新场景模型一天内即可完成上线。\n- **服务化部署**：内置 Flask 服务端代码，一键启动私有 NER 服务，业务系统可通过 API 毫秒级获取结构化实体数据，无缝集成至风控流水线。\n\nBERT-BiLSTM-CRF-NER 将复杂的中文命名实体识别任务转化为可快速落地的高精度服务，显著降低了金融舆情分析的门槛与成本。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmacanv_BERT-BiLSTM-CRF-NER_37c9535a.png","macanv","MaCan","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fmacanv_dd48c3c8.jpg","fighting for what!",null,"深圳","ma_cancan@163.com","https:\u002F\u002Fblog.csdn.net\u002Fmacanv","https:\u002F\u002Fgithub.com\u002Fmacanv",[85,89,92],{"name":86,"color":87,"percentage":88},"Python","#3572A5",97,{"name":90,"color":91,"percentage":10},"Perl","#0298c3",{"name":93,"color":94,"percentage":95},"Shell","#89e051",0,4905,1248,"2026-04-02T08:38:07","Linux, Windows","需要 NVIDIA GPU，作者训练环境为 Tesla P40 (24GB 显存)","未说明",{"notes":103,"python":104,"dependencies":105},"该项目基于 TensorFlow 实现，不支持 PyTorch。主要面向中文命名实体识别任务，但也支持通过少量修改适配其他语言。提供 NER 和文本分类两种服务模式，可通过命令行或 Flask 启动。需自行下载 Google BERT 预训练模型文件（如 chinese_L-12_H-768_A-12）。","3.x (仅支持 Python3)",[106,107,108],"tensorflow","bert-base==0.0.9","flask",[14,52,55,26],[111,112,113,114,115,116],"bert","ner","named-entity-recognition","blstm","crf","bert-bilstm-crf",7,"2026-03-27T02:49:30.150509","2026-04-06T10:25:15.603587",[121,126,131,136,141,146],{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},13438,"添加 CRF 层对模型效果有提升吗？主要作用是什么？","添加 CRF 的主要目的是为了避免错误的预测（例如标签序列不合法的情况），这对模型效果肯定是有提升的。","https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\u002Fissues\u002F5",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},13439,"启动服务生成 PB 文件时报错\"Assign requires shapes of both tensors to match\"怎么办？","这通常是因为当前图与检查点中的图不匹配。可以不使用作者默认的命令行工具，而是直接修改代码来生成 PB 文件。具体方法是查看 `\u002Fyoupath\u002Fsite-packages\u002Fbert_base\u002Fserver\u002Fgraph.py` 第 309 行的 `optimize_class_model` 函数，将其提取出来并根据实际情况做少量修改后运行。","https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\u002Fissues\u002F61",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},13440,"训练阶段 F1、Precision 等指标均为 0 是什么原因？","主要原因通常有两点：1. 训练数据量太少，建议增加数据量（有用户反馈至少需要几 MB 到十几 MB 的数据）；2. 数据格式或标注标签与代码中的定义不匹配。请检查数据格式是否正确，以及自定义的标签列表（labels）是否与代码逻辑一致。","https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\u002Fissues\u002F153",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},13441,"使用自定义实体标签训练后，预测结果出现 B-和 I-不配套且准确率极低怎么办？","请检查 `labels.txt` 文件。除了自定义标签外，必须包含特殊标记如 \"X\", \"[CLS]\", \"[SEP]\" 等，否则会导致标签索引错位，从而产生 B\u002FI 不匹配的问题。此外，确保训练数据量充足（4000 条可能偏少），并检查输出文件夹中生成的 `label_test.txt` 以排查具体错误。","https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\u002Fissues\u002F214",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},13442,"训练时显存溢出（OOM）或长时间无进度输出怎么办？","显存溢出通常与 `batch_size` 和 `max_seq_length` 设置过大有关，请尝试调小这两个参数。关于无进度显示的问题，注意如果使用了多卡训练，设置 `CUDA_VISIBLE_DEVICES` 环境变量可能无效，需要通过代码参数 `device_map` 来指定显卡。","https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\u002Fissues\u002F91",{"id":147,"question_zh":148,"answer_zh":149,"source_url":150},13443,"在使用 BERT+CRF（不带 Bi-LSTM）时模型效果不佳，可能是什么原因？","这是一个已知的代码问题。在 `bert_base\u002Ftrain\u002Flstm_crf_layer.py` 文件的 `project_crf_layer` 函数中（约第 147 行），不必要的 `tanh` 激活函数会导致性能下降和不稳定。解决方案是移除该处的 `tanh` 激活函数，这样可以提高模型的稳定性和表现。","https:\u002F\u002Fgithub.com\u002Fmacanv\u002FBERT-BiLSTM-CRF-NER\u002Fissues\u002F254",[]]