Prompt 辅助的实体识别(NER)实战案例
介绍基于大语言模型 Prompt 的命名实体识别(NER)技术。涵盖 NER 定义、与传统方法对比、设计原则及金融医疗法律领域实战案例。提供常见问题解决方案与进阶技巧,如领域词典结合、多轮对话处理等,旨在帮助开发者高效完成实体提取任务。

介绍基于大语言模型 Prompt 的命名实体识别(NER)技术。涵盖 NER 定义、与传统方法对比、设计原则及金融医疗法律领域实战案例。提供常见问题解决方案与进阶技巧,如领域词典结合、多轮对话处理等,旨在帮助开发者高效完成实体提取任务。

本文围绕 Prompt 辅助的实体识别(NER)展开,先介绍 NER 的核心定义,即从非结构化文本提取特定意义实体并归类,阐述其在多行业的价值,对比传统 NER 与 Prompt 辅助 NER 的差异。接着提出 Prompt 辅助 NER 需遵循目标明确、约束清晰、示例引导的设计原则。随后通过金融、医疗、法律领域的实战案例,展示 Prompt 设计、预期输出及技巧点。还分析常见问题与解决方案,分享结合领域词典、多轮对话、Logit Bias 参数等进阶技巧,最后给出新手入门、行业应用等实践建议,为相关 NLP 任务提供实体数据支撑。
实体识别(Named Entity Recognition,简称 NER)是自然语言处理(NLP)中的基础任务,指从非结构化文本中自动识别并提取出具有特定意义的'实体',同时将这些实体归类到预定义的类别中。这些预定义类别通常包括人名、地名、组织机构名、时间、日期、数字(如金额、数量)、专业术语(如医学疾病名、金融指标名)等。
例如,从句子'2024 年 3 月,阿里巴巴集团在杭州举办了首届全球数字贸易博览会'中,NER 任务需识别出:
在实际业务场景中,NER 是后续复杂 NLP 任务的'数据基石',其应用价值贯穿多个行业:
传统 NER 实现通常依赖'数据标注 + 模型训练'的模式,而 Prompt 辅助 NER 则通过设计特定提示词,直接调用大语言模型(LLM)完成实体识别,二者核心差异如下表所示:
| 对比维度 | 传统 NER | Prompt 辅助 NER |
|---|---|---|
| 数据依赖 | 需大量人工标注的结构化数据(如 BIO 格式标注语料) | 无需大规模标注数据,少量示例(Few-Shot)即可生效 |
| 技术门槛 | 需掌握深度学习框架(如 PyTorch/TensorFlow),熟悉 BERT、BiLSTM 等模型调优 | 无需模型开发经验,仅需设计符合任务需求的 Prompt |
| 迭代效率 | 新增实体类别需重新标注数据、训练模型,周期长(数天至数周) | 新增类别仅需修改 Prompt 中的实体定义,即时生效 |
| 泛化能力 | 对未见过的实体类型(如小众专业术语)适配性差 | 依托 LLM 的通用知识,对低频实体、跨领域实体识别能力更强 |
| 部署成本 | 需部署训练好的模型,需考虑算力、推理延迟问题 | 直接调用 LLM API(如 OpenAI、Claude),部署成本低 |
要让大语言模型精准完成 NER 任务,Prompt 设计需遵循'目标明确、约束清晰、示例引导'三大原则,具体要求如下:
在 Prompt 中需明确告知模型:1)需要识别哪些实体类别(避免模型混淆或遗漏);2)提取的文本范围(如单句、段落、多文档);3)输出格式(便于后续数据处理)。
反例(模糊):'从下面文本中提取实体。文本:[某新闻内容]'
问题:未定义实体类别,模型可能随意提取,如将'重要的''快速地'等非实体词汇纳入结果。
正例(明确):'请从以下新闻文本中提取 3 类实体:1)组织机构(如公司、协会);2)地名(如城市、国家);3)时间(如日期、年份)。文本:[2024 年 5 月,腾讯公司与深圳市人工智能协会在深圳联合发布《AI 安全白皮书》]'
优势:实体类别边界清晰,模型可精准聚焦目标。
为便于后续对 NER 结果进行自动化处理(如导入 Excel、对接数据库),需在 Prompt 中强制指定输出格式(如表格、JSON、列表),同时明确'无对应实体时的处理方式'(避免模型输出冗余内容)。
常见输出格式要求示例:
对于复杂 NER 任务(如专业领域术语识别),仅靠文字描述可能无法让模型准确把握实体边界,此时需在 Prompt 中加入 1-3 个'示例'(Few-Shot),展示'输入文本→正确 NER 结果'的对应关系,帮助模型快速对齐任务目标。
示例设计要点:
从某上市公司 2023 年年度财报片段中,提取'公司名称、营收金额、净利润、资产负债率、审计机构'5 类实体,用于后续财务指标对比分析。
你是一名金融领域的实体识别助手,需从以下财报文本中提取指定实体。
任务要求:
1. 实体类别定义:
- 公司名称:财报中提及的上市公司或关联公司全称;
- 营收金额:包含具体数值和单位的年度营业收入(如"120 亿元");
- 净利润:包含具体数值和单位的年度净利润(如"15.8 亿元");
- 资产负债率:以百分比表示的资产负债率(如"58.2%");
- 审计机构:负责财报审计的会计师事务所全称。
2. 输出格式:以 Markdown 表格输出,列名为'实体类别''实体内容''文本来源(原文片段)';若某类别无对应实体,填写'无'。
3. 示例参考:
(示例文本:2023 年,贵州茅台实现营业收入 1400.53 亿元,净利润 735.72 亿元,资产负债率为 21.4%,财报由普华永道中天会计师事务所审计。)
(示例结果:
| 实体类别 | 实体内容 | 文本来源(原文片段) |
|------------|------------------------|--------------------------------------------------------|
| 公司名称 | 贵州茅台 | 2023 年,贵州茅台实现营业收入 1400.53 亿元 |
| 营收金额 | 1400.53 亿元 | 2023 年,贵州茅台实现营业收入 1400.53 亿元 |
| 净利润 | 735.72 亿元 | 净利润 735.72 亿元,资产负债率为 21.4% |
| 资产负债率 | 21.4% | 净利润 735.72 亿元,资产负债率为 21.4% |
| 审计机构 | 普华永道中天会计师事务所 | 财报由普华永道中天会计师事务所审计 |
)
待处理财报文本:2023 年,比亚迪股份有限公司全年实现营业收入 4240.61 亿元,同比增长 10.6%;归属于上市公司股东的净利润 291.38 亿元,同比增长 44.1%;截至 2023 年末,公司资产负债率为 67.5%,较上年末下降 2.3 个百分点。本公司年度财务报告经立信会计师事务所(特殊普通合伙)审计,审计意见为标准无保留意见。
| 实体类别 | 实体内容 | 文本来源(原文片段) |
|---|---|---|
| 公司名称 | 比亚迪股份有限公司 | 2023 年,比亚迪股份有限公司全年实现营业收入 4240.61 亿元,同比增长 10.6% |
| 营收金额 | 4240.61 亿元 | 2023 年,比亚迪股份有限公司全年实现营业收入 4240.61 亿元,同比增长 10.6% |
| 净利润 | 291.38 亿元 | 归属于上市公司股东的净利润 291.38 亿元,同比增长 44.1% |
| 资产负债率 | 67.5% | 截至 2023 年末,公司资产负债率为 67.5%,较上年末下降 2.3 个百分点 |
| 审计机构 | 立信会计师事务所(特殊普通合伙) | 本公司年度财务报告经立信会计师事务所(特殊普通合伙)审计,审计意见为标准无保留意见 |
从某患者的门诊病历片段中,提取'患者性别、年龄、主诉症状、既往病史、开具药品'5 类实体,用于病历结构化归档与用药安全核查。
你是一名医疗领域的实体识别助手,需从以下门诊病历文本中提取指定医疗实体。
任务要求:
1. 实体类别定义:
- 患者性别:男/女;
- 患者年龄:包含数值和单位(如"52 岁""3 个月");
- 主诉症状:患者就诊时描述的主要症状(如"咳嗽 3 天""腹痛伴恶心");
- 既往病史:患者之前确诊的疾病(如"高血压 5 年""糖尿病 2 型");
- 开具药品:医生为患者开具的药品名称(含通用名,不含剂量)。
2. 输出格式:以 JSON 格式输出,键为实体类别,值为实体列表(若某类别无对应实体,值为 []);
3. 示例参考:
(示例文本:患者,女,38 岁,因'发热伴咽痛 2 天'就诊。既往有'甲状腺功能减退'病史 3 年,无药物过敏史。医嘱开具:左甲状腺素钠片、蓝芩口服液。)
(示例结果:
{ "患者性别": ["女"], "患者年龄": ["38 岁"], "主诉症状": ["发热伴咽痛 2 天"], "既往病史": ["甲状腺功能减退(3 年)"], "开具药品": ["左甲状腺素钠片", "蓝芩口服液"] }
)
待处理病历文本:患者,男,65 岁,因'反复胸痛 1 周,加重 1 天'来院就诊。追问病史,患者有'高血压病 10 年'"2 型糖尿病 8 年',长期服用硝苯地平控释片、二甲双胍片。查体:血压 150/95mmHg,心率 78 次/分。医嘱新增:阿司匹林肠溶片,用法:100mg/次,每日 1 次。
{"患者性别":["男"],"患者年龄":["65 岁"],"主诉症状":["反复胸痛 1 周,加重 1 天"],"既往病史":["高血压病(10 年)","2 型糖尿病(8 年)"],"开具药品":["硝苯地平控释片","二甲双胍片","阿司匹林肠溶片"]}
从某房屋租赁合同片段中,提取'出租方、承租方、房屋地址、租赁期限、租金金额、违约责任'6 类实体,用于合同条款合规审查与关键信息备案。
你是一名法律领域的实体识别助手,需从以下房屋租赁合同文本中提取指定法律实体。
任务要求:
1. 实体类别定义:
- 出租方:房屋所有权人或授权出租的主体(个人需含姓名,企业需含全称);
- 承租方:租赁房屋的主体(个人需含姓名,企业需含全称);
- 房屋地址:租赁房屋的详细地址(含省、市、区、街道、门牌号);
- 租赁期限:包含起止日期的租赁时间段(如"2024 年 6 月 1 日至 2027 年 5 月 31 日");
- 租金金额:包含月租金/年租金数值和货币单位(如"每月 5000 元""每年 6 万元");
- 违约责任:合同中约定的违约行为及对应责任(如'承租方逾期付款,按日支付租金 0.5% 的违约金')。
2. 输出格式:以'实体类别:实体内容(原文依据)'的列表形式输出,若某类别无对应实体,标注'无';
3. 示例参考:
(示例文本:出租方:张三(身份证号:1101011980XXXX1234),承租方:北京 XX 科技有限公司(统一社会信用代码:91110105XXXXXX1234)。双方约定:租赁房屋位于北京市朝阳区建国路 88 号 XX 小区 3 号楼 1 单元 501 室,租赁期限自 2023 年 1 月 1 日至 2025 年 12 月 31 日,月租金为每月 4800 元。若出租方提前收回房屋,需赔偿承租方 2 个月租金作为违约金。)
(示例结果:
1. 出租方:张三(原文依据:出租方:张三(身份证号:1101011980XXXX1234))
2. 承租方:北京 XX 科技有限公司(原文依据:承租方:北京 XX 科技有限公司(统一社会信用代码:91110105XXXXXX1234))
3. 房屋地址:北京市朝阳区建国路 88 号 XX 小区 3 号楼 1 单元 501 室(原文依据:租赁房屋位于北京市朝阳区建国路 88 号 XX 小区 3 号楼 1 单元 501 室)
4. 租赁期限:2023 年 1 月 1 日至 2025 年 12 月 31 日(原文依据:租赁期限自 2023 年 1 月 1 日至 2025 年 12 月 31 日)
5. 租金金额:每月 4800 元(原文依据:月租金为每月 4800 元)
6. 违约责任:出租方提前收回房屋,需赔偿承租方 2 个月租金作为违约金(原文依据:若出租方提前收回房屋,需赔偿承租方 2 个月租金作为违约金)
)
待处理合同文本:出租方:李华(身份证号:3101011975XXXX4321),承租方:王丽(身份证号:3101041990XXXX5678)。根据《中华人民共和国民法典》,双方达成如下协议:1. 租赁房屋地址:上海市浦东新区张江高科技园区博云路 2 号 XX 大厦 1508 室;2. 租赁期限:自 2024 年 9 月 1 日起至 2026 年 8 月 31 日止;3. 租金标准:每月 6500 元,按季度支付;4. 违约责任:承租方逾期支付租金超过 15 日,出租方有权解除合同,并要求承租方支付 1 个月租金作为违约金;出租方未按约定交付房屋,需赔偿承租方 5000 元。
在处理长文本(如多段落财报、病历)时,模型可能遗漏后半部分的实体(如仅提取前半段的营收金额,忽略后半段的净利润)。
优化后 Prompt 片段:'待处理文本较长,需按段落拆分提取:1. 先将文本拆分为 3 个段落(以句号分隔);2. 逐段提取'公司名称、营收金额、净利润'3 类实体;3. 汇总所有段落的实体结果,确保无遗漏;4. 最后核对:是否每个类别都有至少 1 个实体,若某段落无对应实体,标注'该段落无 XX 实体'。'
模型将非实体内容误判为实体,或实体边界错误(如将'比亚迪股份有限公司的子公司'整体识别为'公司名称',实际目标实体仅为'比亚迪股份有限公司')。
优化后 Prompt 片段:'公司名称定义:仅指企业核心全称,不包含'的子公司''分公司''关联企业'等后缀(示例:错误'比亚迪股份有限公司的子公司';正确'比亚迪股份有限公司')。提取后需检查:实体是否包含冗余后缀,若有,删除后缀保留核心名称。'
模型未按指定格式输出(如要求表格格式,实际输出纯文本;要求 JSON 格式,实际存在语法错误),导致后续无法导入 Excel 或数据库。
格式模板强制绑定:在 Prompt 中提供'空白格式模板',要求模型直接填充内容,如:
'输出格式模板(请直接填充括号内容,不得修改模板结构):
| 实体类别 | 实体内容 | 文本来源 |
|---|---|---|
| 公司名称 | (填写公司名称) | (填写原文片段) |
| 营收金额 | (填写营收金额) | (填写原文片段) |
| 净利润 | (填写净利润) | (填写原文片段) |
对于高度专业化的 NER 任务(如芯片领域的'芯片型号'、化工领域的'化学物质名称'),LLM 可能存在知识盲区,此时可在 Prompt 中嵌入'领域词典',让模型基于词典进行实体匹配。
示例(芯片领域 NER):
你是芯片领域的实体识别助手,需从文本中提取'芯片型号'实体。
任务要求:
1. 芯片型号词典:包含以下型号:A17 Pro、骁龙 8 Gen3、天玑 9300、麒麟 9000S、RTX 4090;
2. 提取规则:从文本中匹配上述词典中的型号,若存在未在词典中的型号,标注为'未知型号';
3. 输出格式:芯片型号列表(如 ["A17 Pro", "骁龙 8 Gen3"])。
待处理文本:2024 年新款手机中,苹果 iPhone 15 Pro 搭载 A17 Pro 芯片,小米 14 搭载骁龙 8 Gen3 芯片,华为 Mate 60 Pro 搭载麒麟 9000S 芯片,某款小众手机搭载 X123 芯片。
预期输出:["A17 Pro", "骁龙 8 Gen3", "麒麟 9000S", "未知型号(X123)"]
当需要从多个文本(如多篇新闻、多份病历)中提取同一类实体并汇总时,可通过'多轮对话'让模型逐步处理:
多轮对话示例(第一轮):
请从文本 1 中提取'组织机构'实体,输出格式:["实体 1", "实体 2"]。文本 1:阿里巴巴集团与浙江大学在杭州合作成立'数字经济研究院'。
模型输出:["阿里巴巴集团", "浙江大学", "数字经济研究院"]
多轮对话示例(第二轮):
请从文本 2 中提取'组织机构'实体,然后与上一轮结果(["阿里巴巴集团", "浙江大学", "数字经济研究院"])合并,去除重复实体,输出最终列表。文本 2:腾讯公司与浙江大学在深圳举办'AI 论坛',邀请数字经济研究院专家参与。
模型输出:["阿里巴巴集团", "浙江大学", "数字经济研究院", "腾讯公司"]
在调用 LLM API(如 OpenAI API)时,可通过设置'Logit Bias'参数,降低模型生成无关词汇(如非实体词汇)的概率,提升 NER 精度。例如,在提取'地名'实体时,可提高'北京''上海'等地名词汇的生成权重,降低'的''在''和'等虚词的权重。
API 参数设置示例(Python):
import openai
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role":"user","content":"请从文本中提取地名实体,输出格式:["地名 1", "地名 2"]。文本:2024 年 3 月,在上海举办的进博会吸引了来自北京、广州的企业参与。"}],
logit_bias={"上海":10,# 提高'上海'的生成权重
"北京":10,# 提高'北京'的生成权重
"广州":10,# 提高'广州'的生成权重
"的":-10,# 降低'的'的生成权重
"在":-10# 降低'在'的生成权重}
)
print(response.choices[0].message.content)
预期输出:["上海", "北京", "广州"]
Prompt 辅助 NER 凭借'低门槛、高效率、强泛化'的优势,已成为非专业 NLP 开发者处理实体识别任务的首选方案。通过本次案例实战,可总结出核心实践建议:
通过持续优化 Prompt 设计,结合行业场景特性,Prompt 辅助 NER 可满足从'简单文本提取'到'复杂专业场景'的多样化需求,为后续 NLP 任务(如知识图谱构建、智能检索)提供高质量的实体数据支撑。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online