基於 Amazon SageMaker 構建細粒度情感分析應用

亞馬遜雲開發者發表於2023-04-27

背景介紹

細粒度情感分析(Aspect-Based Sentiment Analysis,ABSA)由於其廣闊的業務價值而吸引越來越多的從業者投身其中,透過分析客戶評論資料中的情感偏好往往有利於企業探尋客戶關注點,挖掘客戶需求,加速產品迭代,提高營銷效率,完善售後服務等。毫不誇張地說,發掘出客戶的聲音(voice of customer)就搶佔了企業發展的先機。

Voice of Customer (VOC) 是近年來各行業都在關注的概念,而亞馬遜作為全球最注重“以客戶為中心”理念的企業早在2018年就推出了“買家之聲”(VOC)板塊,助力買賣雙方互利共贏。Amazon 始終致力於“以客戶為中心”的技術創新,針對 VOC 場景, 我們針對不同行業客戶的實際業務需求進行了廣泛的技術實踐,並且最終基於自然語言生成(NLG)技術結合 Amazon SageMaker 搭建了一套高效的、可定製的、細粒度的生成式評論分析方案, 以提取評論中不同方面(Aspect)的情感極性並且以其中的觀點詞(Opinion)為佐證。

舉個例子:“今天的沙拉很好吃但是牛排不新鮮”,這裡同時存在兩個情感極性,對於正向情感(positive), 其方面詞是“沙拉”,對應的觀點詞為“很好吃”;對於負向情感(negative),其方面詞是“牛排”,對應的觀點詞為“不新鮮”。在這樣的場景下,我們透過AI把使用者留言進行了更高維度的知識提取(方面詞,方面詞類別,觀點詞,情感極性),這些高維知識使得客戶可以更精準地對(幾千倍幾萬倍的機器標籤)使用者進行分類,從而在廣告投放、行為誘導、客戶服務和產品升級方面有更最佳化的方法。

Amazon SageMaker 是亞馬遜雲端計算(Amazon Web Service)的一項完全託管的機器學習平臺服務,演算法工程師和資料科學家可以基於此平臺快速構建、訓練和部署機器學習 (ML) 模型,而無需關注底層資源的管理和運維工作。它作為一個工具集,提供了用於機器學習的端到端的所有元件,包括資料標記、資料處理、演算法設計、模型訓練、訓練除錯、超參調優、模型部署、模型監控等,使得機器學習變得更為簡單和輕鬆;同時,它依託於 Amazon 強大的底層資源,提供了高效能 CPU、GPU、彈性推理加速卡等豐富的計算資源和充足的算力,使得模型研發和部署更為輕鬆和高效。同時,本文還基於 Huggingface,Huggingface 是 NLP 著名的開源社群,並且與 Amazon SagaMaker 高度適配,可以在 Amazon SagaMaker 上以幾行程式碼輕鬆實現 NLP 模型訓練和部署。

亞馬遜雲科技開發者社群為開發者們提供全球的開發技術資源。這裡有技術文件、開發案例、技術專欄、培訓影片、活動與競賽等。幫助中國開發者對接世界最前沿技術,觀點,和專案,並將中國優秀開發者或技術推薦給全球雲社群。如果你還沒有關注/收藏,看到這裡請一定不要匆匆劃過,點這裡讓它成為你的技術寶庫!

解決方案概覽

在此示例中,我們將使用 Amazon SageMaker 執行以下操作:

  • 環境準備
  • 資料準備
  • 使用 Amazon SageMaker BYOS 進行模型訓練
  • 託管部署及推理測試

環境準備

我們首先要建立一個 Amazon SageMaker Notebook,由於本次實驗全程不會用到本地 GPU 訓練,所以筆記本例項型別可以任意選擇。

筆記本啟動後,開啟頁面上的終端,執行以下命令下載程式碼。

cd ~/SageMaker
git clone https://github.com/HaoranLv/GAS-SageMaker.git

資料準備

目前的 ABSA 存在多種子任務,分別用於聚焦於不同的情感元素,這裡我們給出目前主流的 ABSA 任務:

由於子任務眾多,故本文以 TASD 為例進行實驗,資料按照固定格式儲存到 txt 檔案中,具體格式為:

所使用的的所有資料均來自公開的資料集。資料的儲存位置為./data/tasd/。

資料集的具體介紹可以參照:

使用 Amazon SageMaker BYOS進行模型訓練

對於目前主流的深度學習框架(Tensorflow、Pytorch、 Mxnet),Amazon SageMaker 均提供預置的映象。具體來說,對於某個開原始碼,如果其使用主流的深度學習框架編碼,則理論上我們就可以透過 Amazon SageMaker 進行 BYOS 模式的呼叫。

首先,我們將資料進行預處理並儲存到本地或者 S3,而後我們只需要將訓練所需的指令碼以及其依賴準備好,就可以透過例項化 estimator 進行模型訓練和部署,實際過程中會啟動 EC2 訓練例項並且載入預置的映象並啟動容器,而後資料將會以 pipeline 的形式傳輸到 EC2 訓練例項進行模型訓練,訓練完成後所有的日誌均會儲存在 CloudWatch 中,訓練得到的模型檔案也會儲存在 S3 的特定位置以供後續使用。本文主要演示 Pytorch 框架下對 ABSA 生成任務進行 BYOS 的實驗過程。

在 Jupyter Notebook 中開啟gabsa.ipynb 逐行執行。

引入依賴並進行許可權配置

import sagemaker as sage
from time import gmtime, strftime
from sagemaker import get_execution_role
from sagemaker.pytorch import PyTorch
sess = sagemaker.Session()
role = sagemaker.get_execution_role()

print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")

將處理好的資料上傳到 S3

WORK_DIRECTORY = "./data"
# S3 prefix
prefix = "demo"
data_location = sess.upload_data(WORK_DIRECTORY, key_prefix=prefix)

定義超引數,本次實驗使用 Huggingface hub 公開的 T5-base 預訓練引數進行初始化

hyperparameters = {
    "task" : "tasd", 
    "dataset" : "rest15", 
    "model_name_or_path" : "t5-base", 
    "paradigm": "extraction",
    "eval_batch_size" :"16",
    "train_batch_size" :"2",
    "learning_rate" :"3e-4",
    "num_train_epochs":"30",
    "n_gpu": "1"
}

例項化 estimator,由於程式碼使用 Pytorch 框架,故這裡直接使用 SageMaker 預置的 Pytorch 容器

entry_point = 'finetune.py'
source_dir = ‘./ ’
git_config = None
framework_version = '1.7.1'
py_version='py36'
instance_type='ml.p3.2xlarge'
instance_count=1
estimator = PyTorch(
    entry_point = entry_point,
    source_dir = source_dir,
    git_config = git_config,
    role = role,
    debugger_hook_config=False,
    hyperparameters = hyperparameters,
    framework_version = framework_version, 
    py_version = py_version,
    instance_type = instance_type,
    instance_count = instance_count
)

啟動模型訓練

inputs = {'tasd': data_location+'/tasd/'}
response = estimator.fit(inputs)

訓練啟動後,我們可以在 Amazon SageMaker 控制檯看到這個訓練任務,點進詳情可以看到訓練的日誌輸出,以及監控機器的 GPU、CPU、記憶體等的使用率等情況,以確認程式可以正常工作。訓練完成後也可以在 CloudWatch 中檢視訓練日誌。

託管部署及推理測試

完成訓練後,我們可以輕鬆的將上面的模型部署成一個實時可在生產環境中呼叫的埠。

import sagemaker
instance_type = 'ml.m5.4xlarge'
role = sagemaker.get_execution_role()
from sagemaker.pytorch.model import PyTorchModel

pytorch_model = PyTorchModel(model_data='s3://sagemaker-ap-southeast-1-116572824542/pytorch-training-2022-05-28-10-05-39-029/output/model.tar.gz', 
                             role=role,
                             entry_point='inference.py', 
                             source_dir='./', 
                             framework_version='1.7.1', 
                             py_version='py36'
                ) # TODO set model_server_workers=1 to avoid torchhub bug

predictor = pytorch_model.deploy(instance_type=instance_type, initial_instance_count=1

部署完成後可以在控制檯看到如下狀態:

而後我們可以進行 endpoint 呼叫

predictor.predict({"inputs": "Worth an hour of frustration to put together Although not the easiest product I’ve ever assembled, it was worth the few minutes of cursing. I have not decided where I will put the lamp but I’m glad I purchased it. Had to struggle with one that was lost but Amazon made that right by sending another. Others have complained about the shade but that was very simple to put together. It looks like a quality item especially when compared to floor lamps I’ve seen on the floor at stores like Home Goods or Lowes. I’m happy with it. "}, initial_args={'ContentType': 'application/json'})

輸出結果為:

[( lamp, product, POSITIVE ); ( NULL, Services, POSITIVE )]

以上就是使用 Amazon SageMaker 構建細粒度情感分析應用的全部過程,可以看到透過 Amazon SageMaker 可以非常便利地結合 Huggingface 進行 NLP 模型的搭建,訓練,部署的全流程。整個過程僅需要準備訓練指令碼以及資料即可透過若干命令啟動訓練和部署,同時,我們後續還會推出,使用 Amazon SageMaker 進行更多 NLP 相關任務的實現方式,敬請關注。

參考資料

本篇作者

呂浩然
亞馬遜雲科技應用科學家,長期從事計算機視覺,自然語言處理等領域的研究和開發工作。支援資料實驗室專案,在時序預測,目標檢測,OCR,自然語言生成等方向有豐富的演算法開發以及落地實踐經驗。

文章來源:https://dev.amazoncloud.cn/column/article/6309e3bcafd24c6ba21...

相關文章