成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用AWS云端機器學習,構建無服務器新聞數據管道

譯文
人工智能 機器學習
本文介紹了如何使用作為Sagemaker端點來部署的機器學習模型在AWS上構建無服務器數據管道。

[[436699]]

【51CTO.com快譯】作為一名分析師,我花很多時間來跟蹤新聞和行業最新資訊。我在休產假時考慮了這個問題,決定構建一個簡單的應用程序來跟蹤有關綠色技術和可再生能源的新聞。使用AWS Lambda及AWS的其他服務(比如EventBridge、SNS、DynamoDB和Sagemaker),可以非常輕松地上手,在幾天內構建好原型。

該應用程序由一系列無服務器Lambda函數和作為SageMaker端點來部署的文本摘要機器學習模型提供支持。AWS EventBridge規則每24小時觸發一次Lambda函數,從DynamoDB數據庫獲取新聞源(feed)。

然后這些新聞源作為SNS主題來發送,以觸發多個Lambda分析新聞源并提取新聞URL。每個網站每天更新RSS新聞源最多只更新幾篇文章,因此我們不會發送大批流量,不然可能會導致消耗任何特定新聞出版物的過多資源。

然而,一大問題是提取文章的全文,因為每個網站不一樣。對我們來說幸運的是,goose3之類的庫通過運用機器學習方法提取頁面正文來解決這個問題。由于版權問題,我無法存儲文章的全文,這就是為什么我運用HuggingFace文本摘要轉換器模型來生成簡短摘要。

下面詳細介紹了如何自行構建基于機器學習的新聞聚合管道。

1. 設置擁有必要權限的IAM角色。

雖然這個數據管道很簡單,但它連接許多AWS資源。想授予我們的函數訪問所有所需資源的權限,我們需要設置IAM角色。該角色為函數賦予了使用云端其他資源的權限,比如DynamoDB、Sagemaker、CloudWatch和SNS。出于安全原因,最好不要為我們的IAM角色賦予全面的AWS管理訪問權限,只允許它使用所需的資源。

2. 在RSS Dispatcher Lambda中從DynamoDB獲取RSS新聞源

使用AWS Lambda幾乎可以做任何事情,它是一種非常強大的無服務器計算服務,非常適合短任務。對我而言,主要優點在于很容易訪問AWS生態系統中的其他服務。

我將所有RSS新聞源存儲在DynamoDB表中,使用boto3庫從Lambda訪問它真的很容易。一旦從數據庫獲取所有新聞源后,我將它們作為SNS消息發送,以觸發新聞源解析Lambda。

  1. import boto3 
  2. import json 
  3. def lambda_handler(event, context): 
  4.     # Connect to DynamoDB 
  5.     dynamodb = boto3.resource('dynamodb'
  6.      
  7.     # Get table 
  8.     table = dynamodb.Table('rss_feeds'
  9.      
  10.     # Get all records from the table 
  11.     data = table.scan()['Items'
  12.     rss = [y['rss'for y in data] 
  13.      
  14.     # Connect to SNS 
  15.     client = boto3.client('sns'
  16.      
  17.     # Send messages to the queue 
  18.     for item in rss: 
  19.         client.publish(TopicArn="arn:aws:sns:eu-west-1:802099603194:rss_to-parse",  Message = item) 

3. 使用必要的庫創建層

想在AWS Lambdas中使用一些特定庫,您需要將它們作為層來導入。想準備庫導入,它需要位于python.zip壓縮包中,然后我們可以將其上傳到AWS并在函數中使用。想創建層,只需cd進入到Python文件夾中,運行pip install命令,將其壓縮并準備好上傳。

  1. pip install feedparser -t 

然而,我將goose3庫作為一個層來部署時遇到了一些困難。簡單的調查后發現,LXML等一些庫需要在類似Lambda的環境(Linux)中加以編譯。因此如果庫在Windows上編譯,然后導入到函數中,就會發生錯誤。為了解決這個問題,在創建壓縮包之前,我們需要在Linux上安裝該庫。

這有兩種方法。首先,安裝在帶有Docker的模擬Lambda環境上。對我來說,最簡單的方法是使用AWS sam build命令。函數構建后,我只需從構建文件夾中拷貝所需的包,并將它們作為層來上傳。

  1. sam build --use-container 

4. 啟動Lambda函數來解析新聞源

一旦我們將新聞URL作為主題發送到SNS,就可以觸發多個Lambda從RSS新聞源去獲取新聞文章。一些RSS新聞源不一樣,但新聞源解析器庫允許我們使用不同的格式。我們的URL是事件對象的一部分,所以我們需要通過key來提取它。

  1. import boto3 
  2. import feedparser 
  3. from datetime import datetime 
  4. def lambda_handler(event, context): 
  5.     
  6.     #Connect to DynamoDB 
  7.     dynamodb = boto3.resource('dynamodb'
  8.     # Get table 
  9.     table = dynamodb.Table('news'
  10.      
  11.     # Get a url from from event 
  12.     url = event['Records'][0]['Sns']['Message'
  13.     
  14.     # Parse the rss feed 
  15.     feed = feedparser.parse(url) 
  16.      
  17.     for item in feed['entries']: 
  18.         result = { 
  19.             "news_url": item['link'], 
  20.             "title": item['title'], 
  21.             "created_at": datetime.now().strftime('%Y-%m-%d') # so that dynamodb will be ok with our date 
  22.         } 
  23.          
  24.         # Save the result to dynamodb 
  25.         table.put_item(Item=result, ConditionExpression='attribute_not_exists(news_url)') # store only unique urls 

5. 在Sagemaker上創建和部署文本摘要模型

Sagemaker是一項服務,可讓您輕松在AWS上編寫、訓練和部署機器學習模型。 HuggingFace與AWS合作,使用戶更容易將其模型部署到云端。

這里我在Jupiter notebook中編寫了一個簡單的文本摘要模型,并使用deploy()命令來部署它。

  1. from sagemaker.huggingface import HuggingFaceModel 
  2. import sagemaker 
  3. role = sagemaker.get_execution_role() 
  4. hub = { 
  5.     'HF_MODEL_ID':'facebook/bart-large-cnn'
  6.      'HF_TASK':'summarization' 
  7. # Hugging Face Model Class 
  8. huggingface_model = HuggingFaceModel( 
  9.     transformers_version='4.6.1'
  10.     pytorch_version='1.7.1'
  11.     py_version='py36'
  12.     env=hub, 
  13.     role=role,  
  14. # deploy model to SageMaker Inference 
  15. predictor = huggingface_model.deploy( 
  16.     initial_instance_count=1, # number of instances 
  17.     instance_type='ml.m5.xlarge' # ec2 instance type 

一旦部署完畢,我們可以從Sagemaker -> Inference -> Endpoint configuration獲取端點信息,并用在我們的Lamdas中。

6. 獲取文章的全文、摘要文章并將結果存儲在DynamoDB中

由于版權我們不會存儲全文,這就是為什么所有處理工作都在一個Lambda中進行。一旦URL進入到Dynamo DB表,我啟動了文本處理Lambda。為此,我創建了DynamoDB項生成,作為啟動Lambda的觸發器。我創建了批大小,那樣Lambda每次只處理一篇文章。

  1. import json 
  2. import boto3  
  3. from goose3 import Goose 
  4. from datetime import datetime 
  5. def lambda_handler(event, context): 
  6.     # Get url from DynamoDB record creation event 
  7.     url =  event['Records'][0]['dynamodb']['Keys']['news_url']['S'
  8.      
  9.     # fetch article full text 
  10.     g = Goose() 
  11.     article = g.extract(url=url) 
  12.      
  13.     body = article.cleaned_text # clean article text 
  14.      
  15.     published_date = article.publish_date # from meta desc 
  16.      
  17.     # Create a summary using our HuggingFace text summary model 
  18.     ENDPOINT_NAME = "your_model_endpoint" 
  19.     runtime= boto3.client('runtime.sagemaker'
  20.      
  21.     response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME, ContentType='application/json', Body=json.dumps(data)) 
  22.     
  23.     #extract a summary 
  24.     summary = json.loads(response['Body'].read().decode()) 
  25.      
  26.     #Connect to DynamoDB 
  27.     dynamodb = boto3.resource('dynamodb'
  28.     # Get table 
  29.     table = dynamodb.Table('news'
  30.      
  31.     # Update item stored in dynamoDB 
  32.     update = table.update_item( 
  33.         Key = { "news_url": url  } 
  34.         , 
  35.         ConditionExpression= 'attribute_exists(news_url) ',  
  36.         UpdateExpression='SET summary = :val1, published_date = :val2' 
  37.         ExpressionAttributeValues={ 
  38.             ':val1': summary, 
  39.             ':val2': published_date 
  40.         } 
  41.     ) 

這就是我們如何使用AWS工具,構建并部署一個簡單的無服務器數據管道以讀取最新新聞的過程。

原文標題:Build a Serverless News Data Pipeline using ML on AWS Cloud,作者:Maria Zentsova

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關推薦

2018-11-28 09:28:28

無服務器架構網絡服務

2016-11-30 10:33:33

云計算AWS

2021-01-20 15:46:11

機器學習人工智能無服務

2018-10-24 12:15:06

無服務器軟件方式

2025-02-14 15:36:05

2015-08-11 09:48:53

2022-10-09 08:08:02

人工智能機器學習平臺

2024-01-02 09:00:00

無服務器架構RASP

2017-08-23 10:28:01

AWS云安全服務

2018-10-10 19:39:37

云計算云服務Kubernetes

2020-02-19 10:39:44

機器學習云計算數據

2018-11-02 09:00:15

云端無服務器虛擬機

2022-12-13 10:45:12

無服務器架構物聯網工具

2018-02-24 10:15:36

無服務器容器云計算

2019-04-30 10:27:46

無服務器云計算安全

2013-08-14 09:30:50

云端裸機服務器

2023-08-29 15:07:35

無服務器計算云計算

2017-06-05 10:08:33

無服務器計算AWS Lambda

2022-04-08 18:51:43

惡意軟件加密網絡攻擊

2022-01-05 09:28:31

無服務器計算服務器應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区二区户外勾搭野战 | 国产亚洲www| 九九热这里 | 一本久久a久久精品亚洲 | 日韩毛片在线观看 | 日韩欧美一区二区三区免费观看 | 韩日av片| 国产精品成人品 | 午夜三区| 91精品国产自产在线老师啪 | 91精品国产综合久久国产大片 | 综合久久综合久久 | 国产日韩亚洲欧美 | 精品一区电影 | 91在线精品一区二区 | 日韩亚洲一区二区 | 国产精品久久久久久久午夜片 | 亚洲精品久久久久久久久久久 | 三级视频在线观看电影 | 91精品一区二区三区久久久久久 | 国产美女精品视频免费观看 | 欧美一级精品片在线看 | 亚洲欧美在线观看视频 | 成人免费片 | 久久精品一二三影院 | 亚洲精品一区在线观看 | 99精品国产一区二区青青牛奶 | 免费毛片在线 | 91最新入口| 欧美一区二区三区久久精品 | 国产亚洲成av人片在线观看桃 | 美国av毛片 | 亚洲精品国产成人 | 福利精品在线观看 | 精品日韩一区二区 | 国产福利精品一区 | 欧美一区免费 | 亚洲欧美网站 | 岛国av免费看 | 国产精品亚洲一区 | 伊人激情综合网 |