如何正确定义基于GPT-3.5/LLama2的spacy-llm自定义无监督分类任务
使用spaCy-LLM结合GPT-3.5/Llama2实现无监督分类任务示例
核心需求明确
你需要从给定文本中提取目标实体集合,示例输入:
"The Basilica of San Petronio is a minor basilica and church of the Archdiocese of Bologna located in Bologna, Emilia Romagna, northern Italy."
期望输出:{"Basilica of San Petronio", "minor basilica"}
GPT-3.5 实现示例
1. 环境配置
确保安装依赖:
pip install spacy spacy-llm openai
2. spaCy 配置文件(config.cfg)
[nlp] lang = "en" pipeline = ["llm"] [components] [components.llm] factory = "llm" [components.llm.model] @llm_models = "spacy.GPT-3.5.v1" api_key = "你的OpenAI API密钥" [components.llm.task] @llm_tasks = "spacy.TextCat.v3" labels = [] # 无监督场景不预设标签 prompt = """从以下文本中提取所有属于教堂/宗教建筑类别的实体名称,返回格式为Python集合,只输出集合内容,不要其他解释: 文本:{{text}}"""
3. 运行代码
import spacy from spacy_llm.util import assemble def extract_entities(text): nlp = assemble("config.cfg") response = nlp.get_pipe("llm").model.predict([text]) # 解析LLM返回的字符串为集合 return eval(response[0]) result = extract_entities("The Basilica of San Petronio is a minor basilica and church of the Archdiocese of Bologna located in Bologna, Emilia Romagna, northern Italy.") print(result)
Llama2 实现示例(本地部署)
1. 环境配置
安装额外依赖:
pip install spacy spacy-llm transformers accelerate
2. spaCy 配置文件(config_llama2.cfg)
[nlp] lang = "en" pipeline = ["llm"] [components] [components.llm] factory = "llm" [components.llm.model] @llm_models = "spacy.Llama2.v1" name = "meta-llama/Llama-2-7b-chat-hf" token = "你的Hugging Face访问令牌" [components.llm.task] @llm_tasks = "spacy.TextCat.v3" labels = [] prompt = """从以下文本中提取所有属于教堂/宗教建筑类别的实体名称,返回格式为Python集合,只输出集合内容,不要其他解释: 文本:{{text}}"""
3. 运行代码
import spacy from spacy_llm.util import assemble def extract_entities_llama(text): nlp = assemble("config_llama2.cfg") response = nlp.get_pipe("llm").model.predict([text]) return eval(response[0]) result = extract_entities_llama("The Basilica of San Petronio is a minor basilica and church of the Archdiocese of Bologna located in Bologna, Emilia Romagna, northern Italy.") print(result)
关键优化点
- Prompt 精准性:明确指定提取类别(教堂/宗教建筑)和输出格式(Python集合),避免LLM返回冗余内容
- 任务适配:无监督分类场景下,不要预设
labels,让LLM完全根据Prompt提取目标内容 - 输出解析:直接解析LLM返回的字符串为Python集合,跳过TextCat默认的概率计算逻辑
优质参考方向
- spaCy-LLM官方文档:重点关注
llm组件的自定义任务配置和模型适配章节 - Hugging Face Transformers与spaCy集成指南:学习本地LLM模型的加载和参数调优
- Prompt工程最佳实践:针对实体提取类任务,优化指令的明确性和约束性
内容的提问来源于stack exchange,提问作者ascimenti
相关产品推荐
相关产品推荐

