基于 Python 的自然语言处理系列(66)—— 标签标注(Tagging)与实体记忆(Entity Memory)

        在自然语言处理(NLP)任务中,文本的标签标注(Tagging)和实体记忆(Entity Memory)是两个重要的功能。标签标注可以帮助模型自动提取文本的情感、语种等信息,而实体记忆则能在对话过程中记住关于特定实体的信息,增强交互体验。

        本篇文章将介绍如何使用 LangChain 来实现这两种 NLP 任务。


1. 标签标注(Tagging)

1.1 什么是 Tagging?

        在 NLP 任务中,Tagging 指的是为文本添加结构化的标签信息。例如,我们可以标注文本的情感倾向(积极/消极)、攻击性等级(1-5)以及语言类型(英语、西班牙语等)。

1.2 LangChain 实现 Tagging

        我们使用 LangChain 提供的 create_tagging_chain 方法来创建标签标注链。首先,定义一个简单的标签模式(Schema),包括情感、攻击性和语言类型。

import os
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.chains import create_tagging_chain

# 加载环境变量
load_dotenv()
api_key = os.getenv("OPEN_AI_KEY")
organization = os.getenv("OPEN_AI_ORG")

# 初始化 LLM
llm = ChatOpenAI(
    temperature=0,
    openai_api_key=api_key,
    openai_organization=organization,
)

# 定义标签模式
schema = {
    "properties": {
        "sentiment": {"type": "string"},
        "aggressiveness": {"type": "integer"},
        "language": {"type": "string"},
    }
}

# 创建标注链
chain = create_tagging_chain(schema, llm)

# 测试输入
inp = "Estoy increiblemente contento de haberte conocido! Creo que seremos muy buenos amigos!"
print(chain.run(inp))

        在这个示例中,我们输入了一句西班牙语的正面情绪文本,模型将会对其进行情感分析、攻击性评估以及语言识别。

1.3 细粒度控制

        为了让模型的输出更加精准,我们可以定义更详细的 schema,例如:

  • 限制 aggressiveness 取值范围(1-5)。

  • 指定 language 只能是特定的几种语言。

  • 添加 description 以帮助 LLM 更好地理解字段含义。

schema = {
    "properties": {
        "aggressiveness": {
            "type": "integer",
            "enum": [1, 2, 3, 4, 5],
            "description": "描述文本的攻击性,数值越高攻击性越强",
        },
        "language": {
            "type": "string",
            "enum": ["spanish", "english", "french", "german", "italian"],
        },
    },
    "required": ["language", "sentiment", "aggressiveness"],
}

使用更严格的 schema,我们可以确保返回的标签信息符合预期。


2. 实体记忆(Entity Memory)

2.1 什么是 Entity Memory?

        在对话系统中,通常需要记住对话中的实体信息。例如:

用户: Chaky & Gun 正在开发一个 NLP 课程。

系统: 这听起来是个不错的项目!他们在做什么类型的 NLP 研究?

        当用户后续询问 “Chaky 是谁?” 时,系统应该能记住之前的对话内容,而不是忘记所有上下文。

2.2 使用 LangChain 进行实体记忆

        LangChain 提供了 ConversationEntityMemory,用于存储对话中的实体信息。

from langchain.memory import ConversationEntityMemory

# 初始化实体记忆
memory = ConversationEntityMemory(llm=llm)

# 记录对话内容
_input = {"input": "Chaky & Gun are working on a NLP course"}
memory.load_memory_variables(_input)
memory.save_context(
    _input,
    {"output": "That sounds like a great project! What kind of project are they working on?"}
)

# 查询实体信息
print(memory.load_memory_variables({"input": 'who is Chaky'}))

        执行后,系统会返回 “Chaky & Gun are working on a NLP course”,表示它成功记住了对话中的信息。

2.3 结合对话链使用

我们可以将实体记忆与 ConversationChain 结合使用,创建一个能记住上下文的对话系统。

from langchain.chains import ConversationChain
from langchain.memory import ConversationEntityMemory
from langchain.memory.prompt import ENTITY_MEMORY_CONVERSATION_TEMPLATE

# 创建带有实体记忆的对话链
conversation = ConversationChain(
    llm=llm,
    verbose=True,
    prompt=ENTITY_MEMORY_CONVERSATION_TEMPLATE,
    memory=ConversationEntityMemory(llm=llm)
)

# 进行对话
conversation.predict(input="Chaky & Gun are working on a hackathon project")

        这样,我们的对话系统不仅能进行自然语言交互,还能记住对话中的关键信息,在后续对话中提供更加连贯的回复。


3. 总结

        在本篇文章中,我们介绍了两种重要的 NLP 技术:

  1. Tagging:利用 LangChain 进行文本标签标注,包括情感分析、语言识别、攻击性检测等。

  2. Entity Memory:通过 ConversationEntityMemory 让对话系统记住对话中的实体信息,提高交互体验。

        这两项技术在智能客服、舆情分析、自动摘要等应用场景中都非常有价值。结合 LangChain,我们可以快速实现这些功能,助力更智能的自然语言处理任务。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的Anthony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值