LangChain-v0.2文档翻译:2.13、教程-将文本分类为标签

部署运行你感兴趣的模型镜像
  1. 介绍
  2. 教程
    2.1. 构建一个简单的 LLM 应用程序
    2.2. 构建一个聊天机器人
    2.3. 构建向量存储库和检索器
    2.4. 构建一个代理
    2.5. 构建检索增强生成 (RAG) 应用程序
    2.6. 构建一个会话式RAG应用程序
    2.7. 在SQL数据上构建一个问答系统
    2.8. 构建查询分析系统
    2.9. 基于查询分析系统构建一个本地RAG应用程序
    2.10. 基于图形数据库构建问答应用程序
    2.11. 构建一个提取链
    2.12. 生成合成数据
    2.13. 将文本分类为标签(点击查看原文

将文本分类到标签中

标记意味着用以下类别标记文档:

  • 情绪

  • 语言

  • 风格(正式、非正式等)

  • 涵盖的主题

  • 政治倾向
    在这里插入图片描述
    标记有几个组成部分:

  • function:与提取一样,标记使用函数来指定模型应如何标记文档

  • schema:定义我们如何标记文档

快速入门

让我们来看一个非常直接的例子,展示如何使用LangChain中的OpenAI工具调用进行标记(tagging)。我们将使用OpenAI模型支持的with_structured_output方法:

%pip install --upgrade --quiet langchain langchain-openai

# Set env var OPENAI_API_KEY or load from a .env file:
# import dotenv
# dotenv.load_dotenv()

让我们在我们的模式中指定一个具有几个属性及其预期类型的Pydantic模型。

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI

# 创建一个用于提取信息的提示模板
tagging_prompt = ChatPromptTemplate.from_template(
    """
从以下段落中提取所需信息。

只提取'Classification'函数中提到的属性。

段落:
{input}
"""
)

# 定义一个Pydantic模型,用于分类
class Classification(BaseModel):
    # 文本的情感倾向,预期为字符串类型
    sentiment: str = Field(description="文本的情感")
    # 文本的攻击性,预期为1到10的整数
    aggressiveness: int = Field(
        description="描述文本的攻击性,数字越大表示越攻击性"
    )
    # 文本使用的语言,预期为字符串类型
    language: str = Field(description="文本使用的语言")

# 初始化一个OpenAI语言模型,设置温度为0,模型为gpt-3.5-turbo-0125,并指定结构化输出的模型为Classification
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0125").with_structured_output(
    Classification
)

# 将提示模板与语言模型结合
tagging_chain = tagging_prompt | llm
inp = "Estoy increiblemente contento de haberte conocido! Creo que seremos muy buenos amigos!"
tagging_chain.invoke({"input": inp})

Classification(sentiment=‘positive’, aggressiveness=1, language=‘Spanish’)

inp = "Estoy muy enojado con vos! Te voy a dar tu merecido!"
res = tagging_chain.invoke({"input": inp})
res.dict()

{‘sentiment’: ‘negative’, ‘aggressiveness’: 8, ‘language’: ‘Spanish’}

正如我们在示例中看到的,它正确地解释了我们想要什么。

结果会有所变化,例如,我们可能会得到不同语言中的情感(‘positive’, 'enojado’等)。

我们将在下一节中看到如何控制这些结果。

更精细的控制

仔细的模式定义让我们对模型的输出有更多的控制。

具体来说,我们可以定义:

  • 每个属性的可能值
  • 描述以确保模型理解该属性
  • 需要返回的属性

让我们重新声明我们的Pydantic模型,使用枚举来控制前面提到的每个方面:

# 使用枚举来限制情感、攻击性和语言的取值范围
class Classification(BaseModel):
    sentiment: str = Field(..., enum=["happy", "neutral", "sad"])
    aggressiveness: int = Field(
        ...,
        description="描述声明的攻击性,数字越大表示越攻击性",
        enum=[1, 2, 3, 4, 5],
    )
    language: str = Field(..., enum=["spanish", "english", "french", "german", "italian"])

# 创建一个用于提取信息的提示模板
tagging_prompt = ChatPromptTemplate.from_template(
    """
从以下段落中提取所需信息。

只提取'Classification'函数中提到的属性。

段落:
{input}
"""
)

# 初始化一个OpenAI语言模型,设置温度为0,模型为gpt-3.5-turbo-0125,并指定结构化输出的模型为Classification
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0125").with_structured_output(
    Classification
)

# 将提示模板与语言模型结合
chain = tagging_prompt | llm

现在答案将以我们期望的方式受到限制!

inp = "Estoy increiblemente contento de haberte conocido! Creo que seremos muy buenos amigos!"
chain.invoke({"input": inp})

Classification(sentiment=‘happy’, aggressiveness=1, language=‘spanish’)

inp = "Estoy muy enojado con vos! Te voy a dar tu merecido!"
chain.invoke({"input": inp})

Classification(sentiment=‘sad’, aggressiveness=5, language=‘spanish’)

inp = "Weather is ok here, I can go outside without much more than a coat"
chain.invoke({"input": inp})

Classification(sentiment=‘neutral’, aggressiveness=2, language=‘english’)

LangSmith的踪迹让我们得以一窥内部情况:
在这里插入图片描述

  • 您可以使用元数据标记器文档转换器从 LangChain 中提取元数据Document
  • 这涵盖了与标记链相同的基本功能,仅适用于 LangChain Document

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

`Could not find artifact org.apache.kafka:kafka-streams:pom:2.13 in central` 错误通常表示Maven在中央仓库中找不到指定版本的 `kafka-streams` 依赖项。以下是一些可能的解决方法: ### 检查依赖版本 确保 `2.13` 是 `kafka-streams` 的有效版本号。可以在Maven中央仓库(https://mvnrepository.com/artifact/org.apache.kafka/kafka-streams )中查看 `kafka-streams` 可用的版本,然后在 `pom.xml` 中修改为正确的版本号。例如: ```xml <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> <version>最新有效版本号</version> </dependency> ``` ### 强制更新Maven仓库 有时候本地仓库的缓存可能导致依赖无法正确下载,可以尝试强制更新Maven本地仓库。在命令行中执行以下命令: ```bash mvn clean install -U ``` `-U` 参数表示强制更新所有的快照和发布版本的依赖。 ### 检查网络连接 确保你的网络连接正常,能够访问Maven中央仓库。如果网络存在问题,可能会导致依赖无法下载。 ### 添加其他仓库 如果中央仓库确实没有该版本的依赖,可以尝试添加其他Maven仓库。在 `pom.xml` 中添加额外的仓库配置,例如: ```xml <repositories> <repository> <id>confluent</id> <url>https://packages.confluent.io/maven/</url> </repository> </repositories> ``` ### 手动安装依赖 如果以上方法都无法解决问题,可以尝试手动下载 `kafka-streams` 的 `pom` 文件和 `jar` 文件,然后使用以下命令将其安装到本地Maven仓库: ```bash mvn install:install-file -Dfile=path/to/kafka-streams-2.13.jar -DgroupId=org.apache.kafka -DartifactId=kafka-streams -Dversion=2.13 -Dpackaging=jar mvn install:install-file -Dfile=path/to/kafka-streams-2.13.pom -DgroupId=org.apache.kafka -DartifactId=kafka-streams -Dversion=2.13 -Dpackaging=pom ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值