Loading...
大型语言模型LLMs为从非结构化文本数据提取信息打开了新的可能性。虽然目前的热潮主要围绕着 LLMs 用于生成式 AI任务,但您可能想解决的许多主要用例并没有发生根本性的变化。例如,支持票的路由、从聊天机器人对话中识别客户意图、从合同、发票及其他文档中提取关键实体、分析客户反馈等都是长期以来的需求。
然而,LLMs 之所以具有变革性,正是因为它们能够在这些常见任务上以最少的数据和简单的提示实现最先进的成果,同时具有多任务处理能力。与其要求繁琐的特征工程和数据集标注,LLMs 可以在少量特定领域的数据上进行微调,迅速适应新的用例。通过处理大部分繁重的工作,Amazon SageMaker JumpStart 之类的服务消除了微调和部署这些模型的复杂性。
SageMaker JumpStart 是一个机器学习 (ML) 中心,提供基础模型FMs、内置算法和预构建的 ML 解决方案,您只需几次点击即可部署。借助 SageMaker JumpStart,您可以根据预定义的质量和责任指标快速评估、比较和选择基础模型,以执行诸如文章摘要和图像生成等任务。
本文将通过将 LLMs 与提示工程和 LangChain 等框架结合的实例,逐步演示如何构建信息提取的用例。我们还将考察为特定提取任务微调 LLM 的提升效果。无论您是希望分类文档、提取关键词、检测并消除个人身份信息 (PII) 还是解析语义关系,您都可以开始构思您的用例并利用 LLMs 进行自然语言处理 (NLP)。
提示工程使您能够以互动的方式指示 LLMs 生成建议、解释或文本的补全。它依赖于已经在大量文本数据上训练过的大型预训练语言模型。乍一看,可能并没有一种最佳的提示设计方式,且不同的 LLMs 可能在不同提示下的效果存在差异。因此,提示通常通过反复试验进行逐步优化,以产生更好的结果。作为起点,您可以参考模型文档,通常其中会包括针对提示模型的建议和最佳实践,以及 SageMaker JumpStart 中提供的实例。
在接下来的章节中,我们将重点讨论用于提取性用例的提示工程技术。这些技术通过提供有益的约束,帮助发掘 LLMs 的潜力,引导模型朝向预期行为。我们讨论的用例包括:
敏感信息检测和消除实体提取,包括一般和特定实体及其结构格式分类,运用提示工程和微调在我们探讨这些用例之前,需要设置开发环境。
本示例伴随的源代码在这个 GitHub 仓库 中可用。内容包括几个 Jupyter 笔记本和一个 [utilspy](https//githubcom/awssamples/llmsamazonbedrocksagemaker/blob/main/informationextractionsagemaker/utilspy) 模块。utilspy 模块存放了在整个笔记本中使用的共享代码。
运行此示例的最简单方式是使用 Amazon SageMaker Studio ,选择 Data Science 30 内核,或使用 Amazon SageMaker 笔记本实例,选择 condapython3 内核。可以选择默认设置的实例类型。
飞鸟加速器安卓版在此示例中,我们使用 mlg52xlarge 和 mlg548xlarge 实例进行端点使用,使用 mlg524xlarge 进行训练任务。使用 服务配额控制台 确保您在运行此示例的区域中对这些实例有足够的配额。
我们在本帖中一直使用 Jupyter 笔记本。在探索示例之前,确保您拥有最新版本的 SageMaker Python SDK。该 SDK 为在 SageMaker 上训练和部署模型提供了友好的接口。要安装或升级到最新版本,请在 Jupyter 笔记本的第一格中运行以下命令:
pythonpip install quiet upgrade sagemaker
在 SageMaker JumpStart 中有很多 LLMs 可供选择。在此示例中,我们使用 Llama270bchat,但您也可以根据用例选择其他模型。要查看 SageMaker JumpStart 模型的列表,请参见 JumpStart 可用模型表。
要从 SageMaker JumpStart 部署模型,您可以使用本文中展示的 API,或使用 SageMaker Studio UI。模型部署后,您可以通过向模型提问来测试它:
pythonfrom sagemakerjumpstartmodel import JumpStartModel
modelid modelversion = metatextgenerationllama270bf 2endpointname = modelidinstancetype = mlg548xlarge
model = JumpStartModel( modelid=modelid modelversion=modelversion role=rolearn)predictor = modeldeploy( endpointname=endpointname instancetype=instancetype)
如果未提供 instancetype,SageMaker JumpStart SDK 将选择默认类型。在本示例中,您明确将实例类型设置为 mlg548xlarge。
LLMs 展现出提取用于消除的敏感信息的潜力。这包括技巧,例如提示工程,其中包括让模型理解消除任务的原理,并提供可以改善性能的示例。例如,在提示模型时说明“消除敏感信息”,并展示几例消除姓名、日期和地点的示例,可以帮助 LLM 推断出任务规则。
更深入的提示形式包括提供正面和负面示例、展示常见错误,并利用上下文学习教授适当消除的细微差别。通过精心设计提示,LLMs 可以学习在保持可读性和文档实用性的同时进行信息消除。然而,在实际应用中,通常需要额外的评估,以提高 LLM 在处理机密数据时的可靠性和安全性。这通常通过加入人为审查实现,因为没有一种自动化方法是完全可靠的。
以下是使用提示工程提取和消除 PII 的几个示例。提示由多个部分组成:reportsample 包含您希望在文本中识别并屏蔽的 PII 数据,和附加的指令或引导,以 system 消息的形式传递给模型。
pythonreportsample = 本月,在 AnyCompany,我们看到来自多元化客户群的订单显著增长。2023 年 11 月 5 日,客户 Alice 从美国下了一个总额为 2190 的订单。之后,11 月 7 日,Bob 从英国为他的办公室设置订购了一批 25 个符合人体工程学的键盘,总额为 1000。趋势持续,来自澳大利亚的 Jane 于 11 月 12 日请求发运 10 台高清显示器,总额为 9000,强调需要环保的包装。那个月底,客户 John 位于新加坡,最终确认了一笔价值 3600 的 15 个 USBC 端口站的订单,旨在为他的设计工作室配备最新的技术。
system = 您的任务是准确识别提供文本中的个人身份信息PII和可识别的详细信息,包括姓名、地址和国籍,并将这些详细信息替换为恰好四个星号作为掩码。使用 来掩盖任何长度的文本。请仅在响应中写入被掩盖的文本。
在以下示例中,您定义了 llama2chat 函数,它封装了将提示发送给 Llama2 模型的过程。您将在各个示例中重复使用该函数。
pythondef llama2chat( predictor user temperature=01 maxtokens=512 topp=09 system=None) 构造压缩包以发送到 llama2 模型并返回响应。
inputs = []if system inputsappend({role system content system})if user inputsappend({role user content user})payload = { inputs [inputs] parameters { maxnewtokens maxtokens topp topp temperature temperature }}response = predictorpredict(payload customattributes=accepteula=true)return response使用以下代码调用函数,传递您的参数:
pythonresponse = utilsllama2chat( predictor system=system user=reportsample)print(utilsllama2parseoutput(response))
您将获得以下输出:
python本月,在 AnyCompany,我们看到来自多元化客户群的订单显著增长。2023 年 11 月 5 日,客户 从 下了一个总额为 2190 的订单。之后,11 月 7 日, 从 订购了一批 25 个符合人体工程学的键盘,总额为 1000。趋势持续,来自 的 于 11 月 12 日请求发运 10 台高清显示器,总额为 9000,强调需要环保的包装。那个月底,客户 位于 最终确认了一笔价值 3600 的 15 个 USBC 端口站的订单,旨在为他的设计工作室配备最新的技术。
实体提取是识别并提取来自非结构化文本的关键信息实体的过程。这项技术有助于从非结构化文本创建结构化数据,并为许多下游 NLP 任务提供有用的上下文信息。实体提取的常见应用包括构建知识库、提取元数据以用于个性化或搜索,以及改善用户输入和聊天机器人中的对话理解。
通过在提示工程中仔细设计提示,您可以有效地利用 LLM 进行实体提取任务。通过几个提取文本中的实体的示例、解释性提示和所需的输出格式,模型可以学习识别并提取人员、组织和地点等实体。以下示例展示了使用先前部署的 Llama270bchat 模型进行几种不同的实体提取任务,从较简单到更复杂的提示工程使用。
使用以下代码提取特定实体:
pythonemailsample = 你好,我的名字是 John。你的 AnyCompany 财务服务公司信用卡账户 1111000011110008 的最低支付金额为 2453,付款期限为 7 月 31 日。根据您的自动付款设置,我们将于到期日从您的银行账户号码 XXXXXX1111 中提取支付金额,并使用路由号码 XXXXX0000。客户反馈 Sunshine Spa,123 Main St,Anywhere。请将意见发给 Alicealiceaa@anycompanycom和 Bobbobbb@anycompanycom。我很喜欢访问水疗中心。环境很舒适,但费用也很昂贵。设施还不错,但服务使得水疗体验非常棒。
system = 您的任务是准确识别给定文本中的任何电子邮件地址,并将其逐行写出。请仅在文本中明确写出电子邮件地址。如果文本中没有电子邮件地址,请写 N/A。请不要写其他任何内容。
result = utilsllama2chat(predictor system=system user=emailsample)print(utilsllama2parseoutput(result))
您将获得以下输出:
pythonaliceaa@anycompanycombobbb@anycompanycom
使用先前的示例报告,您可以以结构化方式提取更复杂的信息。这次,您为模型提供了 JSON 模板以使用并以 JSON 格式返回输出。
通过让 LLMs 生成 JSON 文档作为输出,您可以轻松地将其解析为其他数据结构。这使得简单转换为字典、YAML,甚至使用第三方库如 LangChain 的 PydanticOutputParser生成 Pydantic 模型成为可能。您可以在 GitHub 仓库 中查看实现。
pythonimport json

system = 您的任务是准确提取提供文本中的信息,并根据给定的 JSON 模板格式化。请仅在响应中包括 JSON 输出。如果特定字段没有可用数据,请在输出 JSON 中将该字段的值写为null。如果没有可用数据,请返回一个空的 JSON 对象。请避免在响应中添加任何其他语句。
{jsonschema}
jsonschema = { orders [ { name location orderdate ordertotal orderitems [ { itemname itemquantity } ] } ]}
response = utilsllama2chat( predictor system=systemformat(jsonschema=jsonschema) user=reportsample)jsonstr = utilsllama2parseoutput(response)print(jsonstr)
您将获得以下输出:
json{ orders [ { name Alice location US orderdate 20231105 ordertotal 2190 orderitems [ { itemname null itemquantity null } ] } { name Bob location UK orderdate 20231107 ordertotal 1000 orderitems [ { itemname 符合人体工程学的键盘 itemquantity 25 } ] } { name Jane location Australia orderdate 20231112 ordertotal 9000 orderitems [ { itemname 高清显示器 itemquantity 10 } ] } { name John location 新加坡 orderdate 20231130 ordertotal 3600 orderitems [ { itemname USBC 端口站 itemquantity 15 } ] } ]}
LLMs 在信息提取任务如文本分类中也可以发挥重要作用。常见应用包括通过电子邮件、聊天机器人、语音等渠道分类用户交互的意图,或对文档进行分类以将其请求路由到下游系统。初步步骤涉及识别用户请求或文档的意图或类别。这些意图或类别可以采用多种形式,从短的单词到数千个层次分明的类别和子类别。
以下示例演示了在合成对话数据上的提示工程以提取意图。此外,我们还展示了如何评估是否需要对预训练模型进行微调。
让我们从以下示例开始。您拥有与虚构的健康和人寿保险公司进行的客户交互列表。首先,使用您之前部署的 Llama270bchat 模型:
pythoninferenceinstancetype = mlg548xlarge
modelid modelversion = metatextgenerationllama270bf 2endpointname = modelid
predictor = utilsgetpredictor( endpointname=endpointname modelid=modelid modelversion=modelversion inferenceinstancetype=inferenceinstancetype)
customerinteractions = [ 你好,我最近搬到了一个新州,想更新我的健康保险政策地址。能帮我吗? 下午好!我希望在我的现有健康计划中添加牙科覆盖。你可以提供选项和价格吗? 昨天我在客户服务方面遭遇了不愉快的经历,涉及我的索赔。我想正式投诉并与主管交
2026-01-27 14:59:24
2026-01-27 14:44:41
2026-01-27 14:29:58
2026-01-27 14:15:16
2026-01-27 14:00:33
2026-01-27 13:45:26
中国黑客通过Sophos软件中的零日漏洞入侵了81000台设备 媒体
美国司法部追捕中国黑客重点内容美国司法部正在寻求逮捕被指控入侵Sophos防火墙设备的中国黑客关天丰。关天丰被控在其公司门面下运作,涉嫌为中国共产党服务。他利用Sophos软件的零日漏洞,影响了约81...
在 Amazon Security Lake 中消耗自定义日志源的模式 安全博客
在 Amazon Security Lake 中使用自定义日志源的模式关键要点在这篇文章中,我们将介绍三种模式,旨在帮助企业有效地集中管理来自多种来源的日志数据。这将有助于安全团队在面对不断发展的安全...