27、优化NLP解决方案的最佳实践

优化NLP解决方案的最佳实践

1. 实施最小权限访问

高度安全的架构的核心原则之一是实施所谓的资源访问最小权限。AWS Identity and Access Management (IAM) 是一项安全服务,可用于定义和实施身份验证和授权策略,以确保用户对AWS基础设施的安全访问。借助 IAM,你可以创建权限策略,并将其附加到角色或用户(身份)上,这些策略将定义该身份对AWS服务(资源)所能执行或不能执行的操作(动作)。

最小权限,顾名思义,就是为用户和角色定义高度受限的权限策略。在AWS中,默认权限是拒绝。如果未为用户指定任何策略,则该用户在AWS中没有执行任何操作的权限。因此,你需要添加允许用户或角色使用AWS服务或资源执行特定任务的策略语句。

以下是 ComprehendFullAccess 权限策略的JSON定义:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "comprehend:*",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "iam:ListRoles",
                "iam:GetRole"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

上述JSON代码中,附加在 “comprehend” 后的通配符 (*) 表示,拥有此策略的角色或用户可以执行所有 Amazon Comprehend API 操作。这并非一个限制性策略,而是提供了广泛的权限。

为了实施最小权限访问,应创建一个新的策略,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "comprehend:DetectEntities",
                "comprehend:BatchDetectEntities",
                "comprehend:DetectPiiEntities",
                "comprehend:ContainsPiiEntities",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "iam:ListRoles",
                "iam:GetRole"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

在这个修改后的JSON语句中,我们提供了限制性权限,只允许用户或角色使用 Amazon Comprehend 中的实体检测功能。一个好的做法是,仅为用户或角色提供执行任务所需的绝对必要权限。此外,你还需要监控 IAM 角色和策略分配情况,确保在用户或角色完成任务后清理权限,避免旧权限赋予用户超出其所需的访问权限。AWS 提供了名为 IAM Access Analyzer 的功能,可主动监控权限并根据需要采取行动。有关 Access Analyzer 的详细介绍,请参考文档:https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html。

2. 混淆敏感数据

保护数据的机密性至关重要。企业通常会将数据分类为公共、机密、秘密和绝密等类别,并根据这些分类应用相应的控制和防护措施。如果你不确定如何对数据进行分类,可以参考现有的数据分类模型,如美国国家分类方案。有关该模型的更多详细信息,以及 AWS 推荐的数据分类最佳实践,请参阅文档:https://docs.aws.amazon.com/whitepapers/latest/data-classification/welcome.html。

一旦对数据进行了分类,下一步就是确定数据包含的机密性类型。数据可以是个人身份信息 (PII),例如可能包含社会安全号码、信用卡号码、银行账户号码等。或者,如果你的数据包含客户的私人健康记录,则称为受保护健康信息 (PHI)。如果你从事法律行业,律师 - 客户特权信息属于受保护数据,必须予以保密。

在构建基于 AWS 的 NLP 解决方案时,可以通过多种方式保护机密数据,包括静态数据加密和传输中数据加密。有关 AWS 如何支持最高隐私标准,以及帮助你保护客户数据的资源信息,请参阅链接:https://aws.amazon.com/compliance/data-privacy/。

Amazon Comprehend 提供了检测数据中 PII 实体的功能。你可以在文档预处理阶段,通过 AWS S3 Object Access Lambda 使用此功能。该服务可用于在将 S3 存储桶中的数据用于 NLP 管道之前,检测并编辑 PII 数据。S3 Object Access Lambda 允许你在从 Amazon S3 获取数据时,自动执行 AWS Lambda 函数来处理或转换数据。对于 PII 检测,有两个 Lambda 函数可与 S3 Object Access Lambda 配合使用。Amazon Comprehend ContainsPiiEntites API 用于对包含 PII 数据的文档进行分类,而 DetectPiiEntities API 用于识别文档中的实际 PII 数据,以便进行编辑。有关如何使用 S3 Object Access Lambda 检测和编辑文档中 PII 数据的教程,请参考 GitHub 仓库:https://github.com/aws-samples/amazon-comprehend-s3-object-lambda-functions。

3. 保护静态和传输中的数据

现在来回顾一下保护静态和传输中数据的最佳实践(即数据存储在数据存储中以及在传输过程中,例如通过服务 API 调用时)。

当谈到静态数据保护时,指的是在 AWS 中存储数据时对其进行加密。你的数据可以存储在 Amazon S3 数据湖、Amazon RDS(AWS 托管的关系数据库服务)中的关系数据库、Amazon Redshift(PB 级规模的基于云的数据仓库)、Amazon DynamoDB 或其他专用数据库(如 Amazon DocumentDB(AWS 托管的 MongoDB 服务)或 Amazon Neptune(AWS 托管的图数据库服务)等)中。

借助 AWS,你可以使用 AWS Key Management Service (KMS) 轻松启用加密来保护静态数据。KMS 是一项可靠且安全的服务,用于创建、管理和保护加密密钥,并在 AWS 中的许多服务上应用数据加密。加密支持使用 AES - 256 标准(https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)。

例如,当你在 Amazon S3 中存储对象时,可以通过选择使用 S3 管理的加密密钥(即在存储桶级别在 KMS 中创建的密钥)或自己的加密密钥(在将对象上传到 S3 存储桶时提供)来请求服务器端加密(在数据存储到 S3 时在目的地进行加密)。

以下是一些不同 AWS 服务启用静态加密的相关文档:
| 服务名称 | 静态加密文档链接 |
| ---- | ---- |
| Amazon Redshift | https://docs.aws.amazon.com/redshift/latest/mgmt/security-server-side-encryption.html |
| Amazon DynamoDB | https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html |
| Amazon RDS | https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html |
| Amazon DocumentDB | https://docs.aws.amazon.com/documentdb/latest/developerguide/encryption-at-rest.html |

要保护传输中的数据,可以使用传输层安全 (TLS) 等协议来保护 API 端点(https://en.wikipedia.org/wiki/Transport_Layer_Security)。与保护静态数据类似,AWS 提供了 AWS Certificate Manager(一项托管服务,用于配置和管理 TLS 证书)来保护通信、验证身份,并为应用程序交互实现 HTTPS 端点。所有处理客户数据的 AWS 服务都使用 TLS 和 HTTPS 进行安全保护。

4. 使用 Amazon API Gateway 进行请求限流

当构建 Amazon Comprehend 自定义实体识别器或分类器时,需要通过创建 Comprehend 实时端点来托管这些模型。你可以直接从代码中调用这些端点,以进行实体检测或文本分类,示例代码如下:

response = comprehend.detect_entities(Text=entry,
                    LanguageCode='en',
                    EndpointArn='endpoint-arn'
            )

推理端点按秒计费(https://aws.amazon.com/comprehend/pricing/),容量以推理单位衡量,每个推理单位代表每秒 100 个字符的吞吐量。对端点请求进行限流可以更合理地使用容量。

Amazon API Gateway(https://aws.amazon.com/api-gateway/)是一个完全托管、安全且可扩展的 API 管理服务,可用于创建 API,通过使用 AWS Lambda 函数来抽象对 Amazon Comprehend 端点的调用。具体教程可参考链接:https://github.com/aws-samples/amazon-comprehend-custom-entity-recognizer-api-example。

除了限流,API Gateway 还支持流量管理、访问控制、监控和版本管理,有助于为解决方案实现强大的请求处理方法。更多详细信息,请参考文档:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html。

5. 为 Amazon Comprehend 端点设置自动扩展

在前面的部分提到,需要端点来实现 Amazon Comprehend 自定义模型的实时预测。端点推理容量以推理单位 (IU) 表示,每个 IU 代表每秒 100 个字符的吞吐量。创建端点时,需要指定所需的 IU 数量,这有助于 Amazon Comprehend 确定分配给端点的资源。你根据端点所需的每秒字符输出吞吐量来计算 IU,并且无论端点是否接收请求,只要端点处于活动状态就会产生费用。因此,需要谨慎管理 IU,以确保在需要时获得所需的容量(保证性能),同时在不需要时释放容量(节省成本)。你可以使用 Amazon Comprehend 自动扩展功能来实现这一点:https://docs.aws.amazon.com/comprehend/latest/dg/comprehend-autoscaling.html。

只能通过 AWS 命令行界面 (AWS CLI) 设置自动扩展。以下是为自定义实体识别启用自动扩展的示例步骤:
1. 在 AWS CLI 中运行以下代码片段,注册可扩展目标:

aws application-autoscaling register-scalable-target \
--service-namespace comprehend \
--region <region> \
--resource-id <your-comprehend-custom-endpoint> \
--scalable-dimension comprehend:entity-recognizer-endpoint:DesiredInferenceUnits \
--min-capacity 1 \
--max-capacity 2

这里的 scalable - dimension 指的是 Amazon Comprehend 资源类型以及容量的度量单位(IU)。
2. 创建一个 JSON 配置,用于指定要跟踪的目标,代码如下:

{
"TargetValue": 90,
"PredefinedMetricSpecification": 
{
"PredefinedMetricType": "ComprehendInferenceUtilization"
}
}
  1. 最后,将此扩展策略付诸实施,代码如下:
aws application-autoscaling put-scaling-policy \
--service-namespace comprehend \
--region <region> \
--scalable-dimension comprehend:entity-recognizer-endpoint:DesiredInferenceUnits \
--resource-id <your-comprehend-custom-endpoint> \
--policy-name CERPolicy \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration file://config.json 
6. 自动化监控自定义训练指标

训练自定义分类或实体识别模型时,Amazon Comprehend 会根据对训练模型的评估生成指标,如 F1 分数、精度、召回率等(https://docs.aws.amazon.com/comprehend/latest/dg/cer-metrics.html)。

你可以使用 DescribeEntityRecognizer API(用于实体识别)或 DescribeDocumentClassifier API(用于分类)来获取自定义模型的评估指标。以下是使用 DescribeEntityRecognizer API 的代码示例:

comprehend = boto3.client('comprehend')
response = comprehend.describe_entity_recognizer(
    EntityRecognizerArn='<arn-of-your-entity-recognizer>'
) 

要监控 Amazon Comprehend 自定义训练作业的完成情况,可以使用 Amazon EventBridge(一个托管的无服务器事件总线)创建一个事件,该事件在提交训练作业时启用,并运行一个 AWS Lambda 函数定期监控训练作业的状态。训练完成后,此 AWS Lambda 函数将使用 DescribeEntityRecognizer 或 DescribeDocumentClassifier API 检索评估指标。如果指标低于阈值,该函数可以使用 Amazon Simple Notification Service (SNS) 发送警报或通知。有关如何使用 Amazon EventBridge 安排事件的详细信息,请参考文档:https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-run-lambda-schedule.html。

7. 使用 Amazon A2I 审查预测

当解决方案刚开发完成时,设置人工审查循环来审查预测、进行审计并根据需要进行修正,是一种最佳实践。解决方案还应包含基于人工审查数据的模型再训练反馈循环。建议在最初的三到六个月内使用 Amazon A2I 设置人工审查循环,以便让解决方案根据直接反馈进行优化。之后,可以禁用人工审查循环。

8. 使用异步 API 实现松耦合

当设置需要扩展以处理数百万文档的 NLP 解决方案管道时,使用异步批量 API 来实现此架构是个不错的选择。同步 API 遵循请求 - 响应范式,即请求应用程序会等待响应,并且在收到响应之前会一直处于阻塞状态。这种方法适用于需要快速处理少量文档以满足实时或近实时、关键任务需求的情况。然而,当文档数量增加时,同步方法会占用计算资源,导致处理速度变慢。通常,组织会实施两个独立的 NLP 解决方案管道:一个用于实时处理,另一个用于批量处理。对于批量处理,根据要处理的文档数量,推理结果可能在几分钟到几小时后可用,具体取决于架构的设置方式。

在 Amazon Comprehend 的实体识别器或分类器训练完成后,需要对大量文档进行推理时,可以使用批量 API。以下是实体识别的代码示例:

response = comprehend.start_entities_detection_job(
    InputDataConfig={
        'S3Uri': '<s3-location-input-documents>',
        'InputFormat': 'ONE_DOC_PER_FILE'|'ONE_DOC_PER_LINE'
    },
    OutputDataConfig={
        'S3Uri': '<s3-location-output-results>'
    }, 
    DataAccessRoleArn='<IAM-role>',
    JobName='<provide a job name>',
    EntityRecognizerArn='<ARN of your custom entity recognizer>')

使用 Amazon Textract 处理大量文档时,也可以使用批量 API。假设我们的用例是处理包含表格、表单数据和文本的文档,步骤如下:
1. 首先使用 StartDocumentAnalysis API(https://docs.aws.amazon.com/textract/latest/dg/API_StartDocumentAnalysis.html),并要求它查找表格和表单内容。段落中的文本会默认提取。同时,传递一个 Amazon SNS 主题和一个 IAM 角色,该角色为 Amazon Textract 提供向 SNS 主题发布消息的权限。此 API 返回一个 JobId,将在下一步使用:

textract = boto3.client('textract') 
job = textract.start_document_analysis(
    DocumentLocation={
        'S3Object': {
            'Bucket': '<s3-bucket-name>',
            'Name': '<file-name>'
        }
    },
    FeatureTypes=[
        'TABLES'|'FORMS',
    ],
    NotificationChannel={
        'SNSTopicArn': '<SNS-topic-arn>',
        'RoleArn': '<IAM-role-arn>'
    }
)

综上所述,在构建 NLP 解决方案时,通过实施最小权限访问、保护敏感数据、合理使用 API 进行限流和扩展、监控训练指标、引入人工审查和使用异步 API 等一系列优化措施,可以提高解决方案的安全性、可靠性和效率。

优化NLP解决方案的最佳实践

9. 流程总结与对比

为了更清晰地展示各个优化点的作用和操作方式,我们将前面提到的内容进行总结,并通过表格对比不同操作的特点。

优化点 作用 操作方式 相关文档链接
实施最小权限访问 避免用户获得超出所需的访问权限,增强安全性 创建限制性权限策略,监控 IAM 角色和策略分配,使用 IAM Access Analyzer 主动监控 https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html
混淆敏感数据 保护数据机密性,防止敏感信息泄露 对数据分类,使用 Amazon Comprehend 检测和编辑 PII 数据,结合 S3 Object Access Lambda https://github.com/aws-samples/amazon-comprehend-s3-object-lambda-functions
保护静态和传输中的数据 确保数据在存储和传输过程中的安全性 使用 AWS KMS 对静态数据加密,使用 TLS 协议和 AWS Certificate Manager 保护传输数据 各服务对应文档如 https://docs.aws.amazon.com/redshift/latest/mgmt/security-server-side-encryption.html 等
使用 Amazon API Gateway 进行请求限流 更合理地使用容量,避免资源浪费 创建 API 抽象对 Amazon Comprehend 端点的调用 https://github.com/aws-samples/amazon-comprehend-custom-entity-recognizer-api-example
为 Amazon Comprehend 端点设置自动扩展 平衡性能和成本,根据需求调整资源 通过 AWS CLI 注册可扩展目标、配置跟踪目标、实施扩展策略 https://docs.aws.amazon.com/comprehend/latest/dg/comprehend-autoscaling.html
自动化监控自定义训练指标 及时了解模型训练情况,发现问题并采取措施 使用 Amazon EventBridge 监控训练作业,使用 API 获取评估指标,通过 SNS 发送通知 https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-run-lambda-schedule.html
使用 Amazon A2I 审查预测 提高模型预测的准确性,根据人工反馈优化模型 设置人工审查循环,包含模型再训练反馈循环
使用异步 API 实现松耦合 处理大量文档时提高效率,避免计算资源占用 使用 Amazon Comprehend 和 Amazon Textract 的异步批量 API

下面是一个 mermaid 格式的流程图,展示了从数据处理到模型训练、预测以及优化的整体流程:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(数据分类):::process --> B(保护静态数据):::process
    A --> C(混淆敏感数据):::process
    B --> D(模型训练):::process
    C --> D
    D --> E(设置端点):::process
    E --> F(实时预测):::process
    F --> G(使用 API Gateway 限流):::process
    E --> H(设置自动扩展):::process
    D --> I(监控训练指标):::process
    F --> J(使用 Amazon A2I 审查预测):::process
    J --> D(模型再训练):::process
    K(大量文档处理):::process --> L(使用异步 API):::process
10. 操作注意事项

在实际操作过程中,还需要注意以下几点:
- 权限管理 :在创建和修改权限策略时,要仔细考虑每个权限的必要性,避免过度授权。定期审查 IAM 角色和策略分配,及时清理不再需要的权限。
- 数据保护 :对于敏感数据的分类要准确,根据不同的数据类型选择合适的保护方式。在使用加密功能时,要妥善管理加密密钥,确保密钥的安全性。
- API 使用 :在使用 Amazon API Gateway 进行限流时,要根据实际业务需求合理设置限流参数。使用异步 API 时,要注意处理作业状态和结果的获取,确保数据的完整性。
- 自动扩展设置 :在为 Amazon Comprehend 端点设置自动扩展时,要根据历史数据和业务预测合理设置最小和最大容量,以及目标跟踪指标。
- 监控与审查 :在自动化监控自定义训练指标时,要设置合理的阈值,及时发现模型性能下降的情况。使用 Amazon A2I 审查预测时,要确保人工审查的效率和质量,及时将反馈应用到模型再训练中。

11. 示例场景应用

为了更好地理解这些优化措施的实际应用,我们来看一个示例场景。假设一家金融公司需要处理大量的客户文档,包括合同、报表等,以提取关键信息并进行风险评估。

  • 数据处理阶段 :首先对文档数据进行分类,将包含客户个人信息的文档标记为敏感数据。使用 Amazon Comprehend 的 PII 检测功能和 S3 Object Access Lambda 对敏感数据进行编辑,保护客户隐私。同时,使用 AWS KMS 对存储在 Amazon S3 中的文档数据进行静态加密,确保数据在存储过程中的安全性。
  • 模型训练阶段 :使用 Amazon Comprehend 训练自定义实体识别器和分类器,识别文档中的关键实体和类别。在训练过程中,使用 Amazon EventBridge 监控训练作业的状态,使用 DescribeEntityRecognizer API 获取评估指标。如果指标低于阈值,通过 Amazon SNS 发送通知,及时调整训练参数或进行模型再训练。
  • 预测阶段 :创建 Amazon Comprehend 实时端点进行预测,使用 Amazon API Gateway 对请求进行限流,避免资源浪费。同时,为端点设置自动扩展功能,根据业务流量动态调整资源。在预测初期,使用 Amazon A2I 设置人工审查循环,对预测结果进行审计和修正,提高模型的准确性。
  • 批量处理阶段 :当需要处理大量文档时,使用 Amazon Comprehend 和 Amazon Textract 的异步批量 API,提高处理效率。例如,使用 Batch API 对合同文档进行实体识别和文本分类,将处理结果存储在指定的 S3 位置。
12. 总结

通过实施上述优化措施,金融公司可以提高 NLP 解决方案的安全性、可靠性和效率。在保护客户敏感数据的同时,能够快速准确地处理大量文档,为风险评估等业务提供有力支持。在实际应用中,要根据具体的业务需求和场景,灵活选择和组合这些优化措施,不断调整和完善解决方案,以适应不断变化的业务环境。

总之,优化 NLP 解决方案是一个持续的过程,需要综合考虑多个方面的因素。通过合理运用各种 AWS 服务和工具,以及遵循最佳实践原则,可以构建出更加安全、可靠和高效的 NLP 解决方案。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值