将LLMs集成到结构化NLP管道中
项目描述
spacy-llm
结构化NLP与LLMs
此包将大型语言模型(LLMs)集成到spaCy中,具有模块化系统,用于快速原型设计和提示,并将非结构化响应转换为各种NLP任务的强大输出,无需训练数据。
功能亮点
- 可序列化的
llm
组件,用于将提示集成到您的spaCy管道中 - 模块化函数,用于定义任务(提示和解析)和模型
- 与以下API接口:
- 支持托管在Hugging Face 🤗上的开源LLMs
- 与LangChain 🦜️🔗集成 - 所有
langchain
模型和功能都可以在spacy-llm
中使用 - 开箱即用的任务
- 通过 spaCy 的注册表 轻松实现 您自己的函数,用于自定义提示、解析和模型集成。例如,请参阅此处。
- 映射-归约方法 用于分割过长而无法放入 LLM 上下文窗口的提示,并将结果重新组合
🧠 动机
大型语言模型(LLMs)具有强大的自然语言理解能力。只要有几个(有时没有)示例,LLM 就可以被提示执行自定义 NLP 任务,如文本分类、命名实体识别、指代消解、信息提取等。
spaCy 是一个成熟的库,用于构建需要以各种方式处理语言的系统。spaCy 的内置组件通常由监督学习或基于规则的策略提供支持。
与 LLM 提示相比,监督学习在原型设计方面要好得多,但在许多任务中,对于生产来说要好得多。一个在单个 GPU 上运行得很好的 Transformer 模型非常强大,对于任何具有明确输出定义的任务来说,它可能都是更好的选择。您可以用从几百到几千个标记的示例来训练模型,并且它会学会这样做。与 LLM 提示相比,监督学习具有更高的效率、可靠性和控制性,并且准确性通常也更高。
spacy-llm
让您可以 两者兼得。您可以快速初始化一个由 LLM 提示驱动的组件组成的管道,并自由混合其他方法驱动的组件。随着项目的进展,您可以根据需要替换一些或全部的 LLM 驱动的组件。
当然,您的系统中可能包含一些组件,LLM 的能力是完全合理的。如果您希望有一个可以从多个文档中微妙地合成信息并为您生成详细摘要的系统,那么更大的系统更好。但是,即使您的生产系统需要 LLM 来执行某些任务,这并不意味着您需要在整个系统中使用 LLM。也许您想使用一个廉价的文本分类模型来帮助您找到要总结的文本,或者也许您想添加一个基于规则的系统来检查摘要的输出。使用一个成熟和经过深思熟虑的库,这些前后的任务会更容易,这正是 spaCy 提供的。
⏳ 安装
spacy-llm
将在未来 spaCy 版本中自动安装。目前,您可以在已经安装 spacy
的相同虚拟环境中运行以下命令安装。
python -m pip install spacy-llm
⚠️ 此软件包仍然处于实验阶段,并且接口的更改可能会导致小版本更新中的破坏性更改。
🐍 快速入门
让我们使用来自 OpenAI 的 GPT 模型进行一些文本分类。
从 openai.com 创建新的 API 密钥或获取现有的密钥,并确保密钥已设置为环境变量。有关更多信息,请参阅设置 API 密钥 的文档。
在 Python 代码中
为了进行快速实验,从 0.5.0 版本开始,您可以运行
import spacy
nlp = spacy.blank("en")
llm = nlp.add_pipe("llm_textcat")
llm.add_label("INSULT")
llm.add_label("COMPLIMENT")
doc = nlp("You look gorgeous!")
print(doc.cats)
# {"COMPLIMENT": 1.0, "INSULT": 0.0}
通过使用 llm_textcat
工厂,将使用最新的内置文本分类任务,以及 OpenAI 的默认 GPT-3-5 模型。
使用配置文件
为了控制 llm
管道的各种参数,我们可以使用 spaCy 的配置系统。首先,创建一个包含以下内容的配置文件 config.cfg
(或查看完整的示例 此处)
[nlp]
lang = "en"
pipeline = ["llm"]
[components]
[components.llm]
factory = "llm"
[components.llm.task]
@llm_tasks = "spacy.TextCat.v3"
labels = ["COMPLIMENT", "INSULT"]
[components.llm.model]
@llm_models = "spacy.GPT-4.v2"
现在运行
from spacy_llm.util import assemble
nlp = assemble("config.cfg")
doc = nlp("You look gorgeous!")
print(doc.cats)
# {"COMPLIMENT": 1.0, "INSULT": 0.0}
这就完成了!还有很多其他功能——提示模板、更多任务、日志等。有关如何使用这些功能的更多信息,请查看 https://spacy.io/api/large-language-models。
🚀 进行中的工作
在不久的将来,我们将
- 添加更多示例任务
- 支持更广泛的模型
- 提供更多示例用例和教程
PR总是受欢迎!
📝️ 报告问题
如果您对使用 spacy-llm
有任何疑问,或者想在我们试用后给我们反馈,请使用 讨论板。可以在 spaCy 问题追踪器 上提交错误报告。谢谢!
迁移指南
请参阅我们的 迁移指南。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
spacy_llm-0.7.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf0fa43d28849f4fdf48ad23a6e68d921d06cb29e2f9c84445551e80c16a01f8 |
|
MD5 | 6f6d4a32b6aa41e39cc6a5fe5063d363 |
|
BLAKE2b-256 | 32a6c9a65b1d7765778af02b2d43fa2b2ba0453d1580255f7f0eaad8487a834f |
spacy_llm-0.7.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 19540d782d25477d173117b513f284e89863292e3ec1d61640f0d75f6af52f5b |
|
MD5 | b0e086ddd4b0f03af4ed1c84a20d5cee |
|
BLAKE2b-256 | 7c0ade2e557f472707339a1501126effb8172802f8bfa1ce1a6bbfdbf12e616b |