2026/2/14 5:08:48
网站建设
项目流程
怎么做跳转网站首页,外汇跟单网站开发,二手房装修,网站的设计思路怎么写一、命名实体识别(NER)训练实战 完整的数据集模型代码示例, 公众号内回复 ner示例 即可免费获取 1. 什么是NER
命名实体识别#xff08;Named Entity Recognition#xff0c;简称NER#xff09;是自然语言处理中的一项基础任务#xff0c;它的目标是从文本中识别出具有特定…一、命名实体识别(NER)训练实战完整的数据集模型代码示例, 公众号内回复ner示例即可免费获取1. 什么是NER命名实体识别Named Entity Recognition简称NER是自然语言处理中的一项基础任务它的目标是从文本中识别出具有特定意义的实体并将其分类到预定义的类别中。这里解释下什么是实体?通常实体类别通常包括组织名ORG、人名PER、地名LOC、时间TIME、数字NUM等。当然了,你也可以根据具体任务定义自己的实体类别。举例说明对于如下文本“苹果公司的蒂姆·库克昨天在北京会见了中国政府官员讨论了在上海建立新工厂的计划。”NER的任务就是识别出苹果公司→ 组织名ORG蒂姆·库克→ 人名PER北京、上海→ 地名LOC中国→ 地名LOC2. NER数据标注格式在NER任务中我们需要教会模型识别实体的边界和类别。这就涉及到了标注格式的问题。这里标注对于文本中的每个字符都需要进行标注标注的结果是实体的开始、内部或非实体。BIO标注格式BIO是最基础的标注格式包含三种标签B-XXXBegin实体的开始I-XXXInside实体的内部OOutside非实体示例1 2 3 4 5 6 7 我 O 在 O 北 B-LOC 京 I-LOC 市 I-LOC 工 O 作 OBIOES标注格式推荐BIOES是更精细的标注格式在BIO基础上增加了S-XXXSingle单字实体 (有些实体只有单个字,就用一个单独的标签来表示)E-XXXEnd实体的结束示例1 2 3 4 5 6 7 我 O 在 O 北 B-LOC 京 I-LOC 市 E-LOC 工 O 作 O为什么选择BIOES很明显,BIOES格式提供了更丰富的边界信息让模型更容易学习实体的完整结构。对于实体北京市BIO格式B-LOC I-LOC I-LOC模型需要学会I-LOC后面可能跟I-LOC或OBIOES格式B-LOC E-LOC S-LOC明确的开始-结束关系3. 数据预处理问题-Token标签对齐问题描述在说明这个问题之前,我们先要明白NER任务是怎么实现的,他本质上就是个分类问题!!!对于传统的分类任务而言,是针对整个句子进行分类(如情感分类), 但是在NER任务中,我们的目的是针对每个字符进行分类的。但是这是我们希望的, 但是模型输入的是token, 对模型而言这是一个token分类的问题但是,由于BERT等预训练模型的Tokenizer会可能会将字符进一步拆分成子词(subword), 这就导致了一个潜在问题: 一个字符对应一个标签, 但是一个字符可能被分成多个token(每个子词也是一个token), 这就导致了标签对齐的问题。简单讲讲子词是什么?简而言之,要分词,我们就得有词表 (这里知识简单介绍下,因为涉及到子词模型)但是要是遇到不认识的词呢? 那也只能拆成词表中认识的词了对于英文场景,举例比如 “apple” 可能会被分成 “app” “##le” 两个子词 (这个##是为了表示这是个子词,不是新的词,是和上一个词app拼接起来的), 当词表中没有apple这个词时,就只能拆分成app和##le这两个子词了所以产生这么个情况, 你的数据集里面给的标签是给到 “apple” 这个词的, 但是分完词它产生了两个token, 这就导致了标签对齐的问题对于中文场景, 一般的BertTokenizer会将每个字都拆成一个token, 比如 “北京” 会被分成 “北” “京” 两个token这看起来没问题, 毕竟我们标注是每个字符但是我问了一些大模型, 它们指出可能有问题的两种情况情况1: 不认识的繁体字情况2: emoji 表情符号一个字符底层存储的是多个字节,这看你的编码方式, 这些字节可能会被拆分成多个子词, 这就导致了标签对齐的问题。但是我用google-bert模型会将不认识的词给一个特殊的token, “[UNK]”, 不会拆成多个子词, 这其实避免了标签对齐的问题, 但是这里仍然讲讲子词模型的标签对齐问题的处理方案。解决方案说白了, 我们标注的是一个字符,但是这个字符可能会被分成多个token(子词), 这些token才是真正要模型给学习的, 这些token的标签咋给?一个最简单的策略是第一个子词保持原标签后续子词使用-100一般都给这个-100作为忽略值当然基于对于最简单的策略下, 我们可以做一些额外处理当然对于B-XXX, 可以拆成 [B-XXX, I-XXX, …] 这种•对于S-XXX, 可以拆成 [B-XXX, I-XXX, …, E-XXX] 这种对齐算法示例1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 def align_labels_with_tokens(labels, word_ids, label_listNone): new_labels [] current_word None for word_id in word_ids: if word_id is None: # 特殊token处理[CLS], [SEP], 填充token new_labels.append(-100) elif word_id ! current_word: # 新词的开始保持原标签 current_word word_id new_labels.append(labels[word_id]) else: # 同一个词的后续subword if label_list is not None: label_name label_list[labels[word_id]] # BIOES智能转换 if label_name.startswith(B-): # B-LOC - I-LOC保持实体连贯性 entity_type label_name[2:] inside_label fI-{entity_type} if inside_label in label_list: new_labels.append(label_list.index(inside_label)) else: new_labels.append(-100) else: # S-XXX, E-XXX, I-XXX, O 都使用-100 new_labels.append(-100) else: new_labels.append(-100) return new_labels关键代码示例详解• 基本上讲完数据处理的问题, 这个任务其实就好理解了, 本身上就是一个 token 分类的问题• 分类问题, 就是直接使用 softmax 函数, 再计算交叉熵损失即可, 这是一个标准的分类任务, 没有什么特殊的地方• 硬要说特殊, 就是每个token都要分类而已现在的库封装的很严实, 其实我们只需要关注数据处理的问题, 模型训练的问题, 关于损失函数怎么写等, 库已经帮我们封装好了, 我们只需要调用即可。 当然也过于严实了, 可能导致一些细节不太直观。数据加载器实现我们的数据采用BIO格式每行是字符\t标签空行分隔句子1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 def load_bio_format_data(file_path): sentences [] sentence_tokens [] sentence_labels [] with open(file_path, r, encodingutf-8) as f: for line in f: line line.strip() if line or line.startswith(-DOCSTART-): if sentence_tokens: sentences.append({ tokens: sentence_tokens, ner_tags: sentence_labels }) sentence_tokens [] sentence_labels [] else: parts line.split() if len(parts) 2: token parts[0] label parts[-1] # 最后一列是标签 sentence_tokens.append(token) sentence_labels.append(label) return sentences模型训练核心我们使用Hugging Face Transformers库进行训练这是最优雅的方式注意我们使用了 AutoModelForTokenClassification 这个类, 它是一个通用的类, 可以用于所有的 token 分类任务, 我们只需要指定 num_labels 这个参数, 就可以自动添加一个分类头, 用于分类任务。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 加载预训练模型设置分类头 model AutoModelForTokenClassification.from_pretrained( model_path, num_labelslen(label_list), # 关键设置标签数量 id2labelid2label, # 标签ID到名称映射 label2idlabel2id # 标签名称到ID映射 ) # 训练参数配置经验之谈 training_args TrainingArguments( output_diroutput_dir, learning_rate2e-5, # 学习率不宜过大 per_device_train_batch_size16, # 根据GPU内存调整 per_device_eval_batch_size16, num_train_epochs3, # 轮数根据效果调整 weight_decay0.01, # 权重衰减防止过拟合 eval_strategyepoch, # 每个epoch评估一次 save_strategyepoch, load_best_model_at_endTrue, # 自动加载最佳模型 metric_for_best_modelf1, # 使用F1作为评估指标 fp16torch.cuda.is_available(), # 混合精度加速训练 )评估指标实现NER任务使用seqeval库计算评估指标:• 分类任务的指标无非是精确率、召回率、F1值1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 def compute_metrics(eval_preds, label_list): predictions, labels eval_preds # 从logits获取预测标签 predictions np.argmax(predictions, axis2) # 移除被忽略的标签-100 true_labels [] true_predictions [] for prediction, label in zip(predictions, labels): true_label [] true_prediction [] for pred, lab in zip(prediction, label): if lab ! -100: # 忽略特殊token true_label.append(label_list[lab]) true_prediction.append(label_list[pred]) true_labels.append(true_label) true_predictions.append(true_prediction) # 计算精确率、召回率、F1值 return { precision: precision_score(true_labels, true_predictions), recall: recall_score(true_labels, true_predictions), f1: f1_score(true_labels, true_predictions), }如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。天道酬勤你越努力就会成为越优秀的自己。如果你能在15天内完成所有的任务那你堪称天才。然而如果你能完成 60-70% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】