在自然语言处理(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 技术:
-
Tagging:利用
LangChain
进行文本标签标注,包括情感分析、语言识别、攻击性检测等。 -
Entity Memory:通过
ConversationEntityMemory
让对话系统记住对话中的实体信息,提高交互体验。
这两项技术在智能客服、舆情分析、自动摘要等应用场景中都非常有价值。结合 LangChain
,我们可以快速实现这些功能,助力更智能的自然语言处理任务。
如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!
欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。
谢谢大家的支持!