使用Scikit-LLM进行命名实体识别
内容提要
文章介绍如何用Scikit-LLM结合大语言模型实现命名实体识别(NER):以Groq免费API为例,配置自定义实体字典(如高管、公司、产品、城市),用GPTExplainableNER从科技商业文本中提取结构化实体,并用正则表达式清理输出。结果表明,无需从零训练模型,仅少量配置即可获得不错效果。
延伸解读
自定义实体字典:用描述引导LLM识别
文章中的实体字典不仅列出类别(如EXECUTIVE、CORPORATION),还为每个类别提供描述,这些描述直接作为提示词指导LLM推理。例如“EXECUTIVE”的描述是“公司领导或个人的全名”。这种设计让LLM能根据业务需求灵活定义实体,无需重新训练模型。读者在构建自己的NER任务时,应重视描述的具体性和清晰度,以减少歧义。
输出格式不稳定:需后处理清洗
示例中LLM返回的是包含解释性文字的字符串,而非干净的结构化数据。文章通过正则表达式提取<entity>标签内的内容,才得到整洁的实体列表。这表明直接使用LLM输出时,需准备解析和清洗步骤,并处理格式异常(如模型幻觉导致的非预期输出)。实际应用中,建议设计健壮的后处理逻辑,或要求模型以更严格的格式返回。
免费API与轻量配置的可行性
文章使用Groq的免费API和开源模型openai/gpt-oss-20b,通过Scikit-LLM的配置覆盖base URL即可调用。整个流程在Google Colab中完成,无需本地GPU或大量训练数据。对于预算有限或快速原型的场景,这种方案降低了门槛。但需注意免费API可能有速率限制,且模型效果受限于所选模型的能力,生产环境需评估稳定性和准确性。
Q&A
Scikit-LLM 做命名实体识别需要自己训练模型吗?
不需要。Scikit-LLM 利用预训练大语言模型的推理能力,只需少量配置即可完成自定义实体识别,无需从零训练模型。
如何用 Groq 的免费 API 配置 Scikit-LLM?
在 Groq 官网注册并生成 API key,将其保存为 Colab 的 Secret 变量 GROQ_API_KEY。然后使用 SKLLMConfig.set_gpt_url("https://api.groq.com/openai/v1") 覆盖默认 URL,并用 SKLLMConfig.set_openai_key(groq_key) 设置密钥。
Scikit-LLM 中用于 NER 的类是什么?
用于 NER 的类是 GPTExplainableNER,它需要传入实体字典和模型名称(如 "custom_url::openai/gpt-oss-20b"),然后调用 fit_transform() 进行实体提取。
实体字典在 Scikit-LLM 的 NER 中起什么作用?
实体字典是一个键值对列表,键是待提取的类别(如 EXECUTIVE、CORPORATION),值是该类别的描述,作为提示词引导 LLM 进行推理和提取。
Scikit-LLM 的 NER 输出格式不干净怎么办?
可以使用正则表达式对原始输出进行后处理。例如,用 re.findall 匹配 <entity> 标签块,提取实体类型和值,整理成结构化的字典格式。
Scikit-LLM 做 NER 的效果如何?
文章示例表明,尽管设置简单,Scikit-LLM 的 NER 管道在科技商业文本上表现不错,能较准确地提取高管、公司、产品、城市等实体,但原始输出可能包含冗余文本,需后处理。