——从 BIO 标注到医疗实体抽取实战)
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本篇技术指南聚焦于 AI-For-Beginners 课程中 NLP 部分的命名实体识别Named Entity Recognition, NER一课完整覆盖 NER 的核心概念token 分类与 BIO 标注体系、在智能对话系统中的应用场景并结合仓库中的示例 Notebook 与实验作业讲解如何用 LSTM 与 BERTPubMedBERT训练医疗领域实体识别模型。读完本文你将掌握 NER 的问题建模方式、标签体系设计以及从数据集到模型的完整训练流程。NER 是什么从文本分类走向更细粒度的理解在前面课程中我们主要集中于 NLP 中的一项任务——文本分类。但神经网络可以完成的 NLP 任务远不止分类其中就包括命名实体识别Named Entity Recognition, NER它的任务是识别文本中的特定实体例如地点、人名、日期时间区间、化学分子式等。以 lessons/5-NLP/README.md 中对整个 NLP 章节任务的梳理为例NER 被定义为从文本中抽取某些实体的问题例如在短语I need to fly to Paris tomorrow中模型需要理解tomorrow指向 DATE、Paris是 LOCATION。这与意图分类、情感分析、关键词抽取等任务共同构成了自然语言处理的核心问题集。典型应用场景智能对话系统中的意图与参数槽假设你想开发一个类似 Amazon Alexa 或 Google Assistant 的自然语言聊天机器人。智能机器人工作的方式是通过对输入句子做文本分类来理解用户想干什么分类结果称为意图intent它决定了机器人接下来该做什么。但用户往往会在句子里附带一些参数——例如询问天气时指定地点或日期。机器人需要识别出这些实体并在执行动作之前填充对应的参数槽位parameter slots。这正是 NER 发挥作用的地方。图片来源课程作者。左侧是用户话语Utterance如What is the temperature in Moscow today?模型一方面将其分类为 Weather 意图另一方面从中抽取locationMoscow、datetimetoday、measurementtemperature等实体两者共同支撑机器人的动作执行。另一个典型例子是分析医学科学论文我们需要从文献中抽取特定医学术语如疾病和药物物质。少量疾病名称或许可以通过子串搜索提取但像化合物、药物名称这类更复杂的实体就需要更精细的方法这也是本课实验作业的主题。NER 的本质Token 分类模型NER 模型本质上是一种token 分类模型token classification model——对于输入文本的每一个 token我们需要判定它是否属于某个实体以及属于哪一类实体。考虑下面这个医学论文标题Tricuspid valve regurgitationandlithium carbonatetoxicityin a newborn infant.其中的实体是Tricuspid valve regurgitation三尖瓣反流是一种疾病DISLithium carbonate碳酸锂是一种化学物质CHEMToxicity中毒也是一种疾病DIS注意一个实体可能跨越多个 token如Tricuspid valve regurgitation由三个词组成而且本例中还出现了两个相邻实体lithium carbonate与toxicity。因此通常为每个实体类别使用两种标签一种标记实体的第一个 token常用前缀B-即beginning 开头另一种标记实体的延续 tokenI-即inner 内部 token。此外用O表示所有other 其他 token。这种 token 标注体系称为 BIO 标注也称 IOB。对上述标题进行标注后如下Token标签TricuspidB-DISvalveI-DISregurgitationI-DISandOlithiumB-CHEMcarbonateI-CHEMtoxicityB-DISinOaOnewbornOinfantO.O由于我们需要在 token 与类别之间建立一一对应关系因此可以训练一个**多对多many-to-many**的神经网络模型即下图最右侧的架构图片来自 Andrej Karpathy 的博客。NER token 分类模型对应图中最右侧的多对多网络架构——输入一串 token输出每个 token 对应的类别。训练 NER 模型LSTM 实现 token 分类由于 NER 模型本质上是 token 分类模型我们可以直接使用前面课程中已经熟悉的 **RNN循环神经网络**来完成该任务。此时循环网络的每个模块都会返回对应 token 的类别 ID。关于 RNN 与 LSTM 的底层原理可参考 lessons/5-NLP/16-RNN/README.md经典 RNN 存在梯度消失问题难以学习远距离 token 间的依赖而 LSTM 通过遗忘门、输入门、输出门等门机制实现显式的状态管理更适合 NER 这类需要上下文信息的序列标注任务。仓库中的 lessons/5-NLP/19-NER/NER-TF.ipynb 给出了完整的 TensorFlow/Keras 训练示例整体流程如下。1. 准备数据读取并向量化示例使用 Kaggle 上的 Annotated Corpus for Named Entity Recognition 数据集ner_dataset.csv每个词一行包含句子编号、词、词性POS与实体标签Sentence # Word POS Tag Sentence: 1 Thousands NNS O NaN of IN O NaN demonstrators NNS O处理要点用 Pandas 读取 CSV注意encodingunicode-escape按Sentence #列分组把散列的单词聚合为完整的句子列表X与标签列表Y构建id2tag/tag2id字典完成标签到类别编号的转换对词汇表同样构建id2word/word2id字典并将未知词映射为UNK示例中未考虑词频实际工程中可改用 Keras 向量化并限制词表大小用keras.preprocessing.sequence.pad_sequences将句子统一 padding 到最大长度paddingpost标签序列也做同样的 padding。2. 定义 token 分类网络示例网络是两层双向 LSTM TimeDistributed 分类头maxlen X_data.shape[1] vocab_size len(vocab) num_tags len(tags) model keras.models.Sequential([ keras.layers.Embedding(vocab_size, 300, input_lengthmaxlen), keras.layers.Bidirectional(keras.layers.LSTM(units100, activationtanh, return_sequencesTrue)), keras.layers.Bidirectional(keras.layers.LSTM(units100, activationtanh, return_sequencesTrue)), keras.layers.TimeDistributed(keras.layers.Dense(num_tags, activationsoftmax)) ]) model.compile(losssparse_categorical_crossentropy, optimizeradam, metrics[acc])关键点Embedding层将词索引映射为 300 维向量双向 LSTM 的return_sequencesTrue让每一时间步都输出隐状态为的是给每个 token 都产生一个输出TimeDistributed(Dense(num_tags, softmax))将同一个全连接层复制应用到每个时间步的输出上从而对每个 token 输出一个类别分布——这正是 token 分类模型多对多架构的落地方式由于标注了maxlen网络只接受固定长度输入若要支持变长序列需要更精巧的网络定义如不固定input_length仅在批内 padding。从 Notebook 中保存的模型摘要可以看到完整参数量Embedding 层 9,545,400 参数、两个双向 LSTM 层各 320,800 / 240,800 参数、TimeDistributed 分类层 3,417 参数总计约 1010 万参数。3. 训练与推理训练时调用model.fit(X_data, Y_data)损失函数为sparse_categorical_crossentropy。为演示方便示例只训练 1 个 epochNotebook 记录的单轮精度约 0.98实际使用时应训练更久并划分验证集观察验证精度。推理阶段对测试句子John Smith went to Paris to attend a conference in cancer development institute将每个 token 经word2id向量化并 padding 后送入模型对输出取argmax映射回标签john - B-per smith - I-per went - O paris - B-geo ... cancer - B-org development - I-org institute - I-org模型成功识别出人名John Smith、地点Paris与机构名cancer development institute验证了简单的 LSTM 也能在 NER 上取得合理效果这一结论。实验作业训练医疗实体识别模型课程配套实验lessons/5-NLP/19-NER/lab/README.md要求训练一个针对医学术语的命名实体识别模型流程如下。数据集BC5CDR训练 NER 模型需要带医疗实体标注的数据集。BC5CDR 数据集包含从 1500 多篇论文中标注的疾病Disease与化学物质Chemical实体需在其官网注册后下载。数据格式如下6794356|t|Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infant. 6794356|a|A newborn with massive tricuspid regurgitation, atrial flutter, ... 6794356 0 29 Tricuspid valve regurgitation Disease D014262 6794356 34 51 lithium carbonate Chemical D016651 6794356 52 60 toxicity Disease D064420前两行分别是论文标题t与摘要a随后每行是一条实体标注论文ID 实体在标题摘要文本中的起始/结束位置 实体文本 实体类型 本体论ID。你需要编写 Python 代码把这种基于字符位置的标注转换为 BIO 编码供模型训练使用。注意实体存在跨 token 与相邻实体的情况正对应课程中 BIO 标注的动机。网络选型从 LSTM 到 BERT首次尝试可以像课程示例一样使用LSTM网络。不过在 NLP 任务中Transformer 架构BERT 通过掩码语言建模在大规模语料上预训练吸收了丰富的语言理解能力再用相对较小的数据集做微调即可适配下游任务即迁移学习。针对医疗场景微软研究院发布了用 PubMed 文献文本微调过的PubMedBERT预训练模型。训练 Transformer 模型的事实标准是 Hugging Face Transformers 库其中也托管了社区维护的预训练模型含 PubMedBERT。加载并使用该模型只需几行代码model_name microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract classes ... # 类别数2*实体数1每个实体有 B-/I- 两类再加 O 类 tokenizer AutoTokenizer.from_pretrained(model_name) model BertForTokenClassification.from_pretrained(model_name, classes)上述代码得到model针对 token 分类任务构建的模型输出类别数为classestokenizer可将输入文本切分为 token 的 tokenizer 对象。你需要将数据集转换为 BIO 格式并考虑 PubMedBERT 的 token 化方式例如某些词可能被拆分为子词标注需与 tokenizer 对齐。应用与延伸这项任务与实际场景非常接近——如果你希望从大规模自然语言文本中获取洞察NER 几乎是必经之路。例如可以把训练好的模型应用到 COVID 相关论文数据集上从中抽取疾病、化学物质等实体进而支撑文献计量与医学研究分析。总结命名实体识别NER是一种token 分类模型用于识别文本中的具体实体包括地点、人名、日期、化学物质、疾病等NER 与意图分类协同工作是智能对话系统填充参数槽位、执行动作的关键能力实体可能跨越多个 token因此普遍采用BIO 标注B-实体开头、I-实体内部、O其他训练 NER 模型既可使用双向 LSTM见 lessons/5-NLP/19-NER/NER-TF.ipynb 的完整示例也可以使用 BERT 等预训练 Transformer 模型进行微调见 lessons/5-NLP/19-NER/lab/README.md 的实验指引。挑战将模型迁移到新数据集完成实验作业训练一个针对医学术语的 NER 模型然后把它应用到一个不同的数据集上例如课程中提到的 COVID 相关论文语料观察模型在新领域的泛化表现。这能帮助你真正理解 token 分类模型的迁移能力与局限。复习与延伸阅读阅读 Andrej Karpathy 的博客文章 The Unreasonable Effectiveness of Recurrent Neural Networks并跟进该文中的Further Reading部分深入理解循环网络在多对多序列任务如 NER上的设计动机与能力边界。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐AI-For-Beginners 第 19 课实战命名实体识别NER从 BIO 标注到 LSTM 与 BERT 医疗实体抽取AI For Beginners 第 19 课实战命名实体识别NER从 BIO 标注到 LSTM 与 BERT 医疗实体抽取 本指南以 AI For Be教程人工智能机器学习深度学习AI-For-Beginners 第 19 课命名实体识别NER——从 BIO 标注到 LSTM 与 PubMedBERT 的医学实体抽取实战AI For Beginners 第 19 课命名实体识别NER——从 BIO 标注到 LSTM 与 PubMedBERT 的医学实体抽取实战 命名实体识教程人工智能机器学习深度学习AI for Beginners 第 19 课命名实体识别NER实战指南——从 BIO 标注到 LSTM 与 PubMedBERTAI for Beginners 第 19 课命名实体识别NER实战指南——从 BIO 标注到 LSTM 与 PubMedBERT 本篇技术指南以 AI教程人工智能机器学习深度学习上一篇深入NewsRecommendSystem核心协同过滤、内容推荐与热点推荐的完美融合下一篇突破驱动适配瓶颈跨平台连接技术的Windows与Apple设备融合方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考