AWS クラウド機械学習を使用したサーバーレスニュースデータパイプラインの構築

AWS クラウド機械学習を使用したサーバーレスニュースデータパイプラインの構築

[[436699]]

[51CTO.com クイック翻訳]アナリストとして、私はニュースや業界の最新情報を追跡することに多くの時間を費やしています。私は産休中にこの疑問について考え、グリーンテクノロジーと再生可能エネルギーに関するニュースを追跡するシンプルなアプリを構築することにしました。 AWS Lambda と、EventBridge、SNS、DynamoDB、Sagemaker などの他の AWS サービスを使用すると、開始して数日でプロトタイプを構築するのは非常に簡単です。

このアプリケーションは、一連のサーバーレス Lambda 関数と、SageMaker エンドポイントとしてデプロイされたテキスト要約機械学習モデルによって実行されます。 AWS EventBridge ルールは、24 時間ごとに Lambda 関数をトリガーして、DynamoDB データベースからニュースフィードを取得します。

これらのニュース フィードは SNS トピックとして送信され、複数の Lambda がトリガーされてニュース フィードが分析され、ニュース URL が抽出されます。各サイトは、1 日に数件の記事のみで RSS ニュース フィードを更新します。そのため、特定のニュース発行のリソースを大量に消費する可能性のある大量のトラフィックは送信されません。

しかし、各ウェブサイトはそれぞれ異なるため、記事の全文を抽出することが大きな問題となります。幸いなことに、goose3 のようなライブラリは、機械学習の手法を適用してページの本文を抽出することでこの問題を解決します。著作権の問題により、記事の全文を保存することはできません。そのため、HuggingFace Text Summarizer モデルを適用して短い要約を生成しました。

ここでは、独自の機械学習ベースのニュース集約パイプラインを構築する方法について詳しく説明します。

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. boto3をインポート
  2. jsonをインポート
  3. def lambda_handler(イベント、コンテキスト):
  4. 接続する  DynamoDB
  5. dynamodb = boto3.resource( 'dynamodb' )
  6.      
  7. #テーブルを取得 
  8. テーブル= dynamodb.Table ( 'rss_feeds ' )
  9.      
  10. #テーブルからすべてのレコード取得する 
  11. data = table .scan()[ 'アイテム' ]
  12. rss = [y[ 'rss' ]データy ]
  13.      
  14. 接続する  SNS
  15. クライアント = boto3.client( 'sns' )
  16.      
  17. # メッセージをキュー送信する
  18. RSSアイテムの場合:
  19. client.publish(TopicArn= "arn:aws:sns:eu-west-1:802099603194:rss_to-parse" 、メッセージ = item)

3. 必要なライブラリでレイヤーを作成する

AWS Lambda で特定のライブラリを使用するには、それらをレイヤーとしてインポートする必要があります。ライブラリをインポート用に準備するには、ライブラリを python.zip アーカイブに格納する必要があります。その後、ライブラリを AWS にアップロードして関数で使用できます。レイヤーを作成するには、Python フォルダーに cd し、pip install を実行して zip ファイルに圧縮し、アップロードの準備をします。

  1. pip インストール feedparser -t

しかし、goose3 ライブラリをレイヤーとして展開するのは困難です。簡単に調査したところ、LXML などの一部のライブラリは、Lambda のような環境 (Linux) でコンパイルする必要があることがわかりました。したがって、ライブラリを Windows でコンパイルしてから関数にインポートすると、エラーが発生します。この問題を解決するには、tarball を作成する前に Linux にライブラリをインストールする必要があります。

これを行うには 2 つの方法があります。まず、Docker を使用してシミュレートされた Lambda 環境にインストールします。私にとって最も簡単な方法は、AWS sam build コマンドを使用することです。関数がビルドされたら、ビルド フォルダーから必要なパッケージをコピーし、レイヤーとしてアップロードするだけです。

  1. sam ビルド--use-container  

4. ニュースソースを解析するLambda関数を起動する

ニュース URL をトピックとして SNS に送信すると、複数の Lambda をトリガーして RSS ニュース フィードからニュース記事を取得できます。一部の RSS ニュースフィードは異なりますが、ニュースフィード パーサー ライブラリを使用すると、さまざまな形式を使用できます。 URL はイベント オブジェクトの一部なので、キーで抽出する必要があります。

  1. boto3をインポート
  2. フィードパーサーをインポートする
  3. datetimeからdatetime をインポート
  4. lambda_handler(イベント、コンテキスト):
  5.     
  6. 接続する  DynamoDB
  7. dynamodb = boto3.resource( 'dynamodb' )
  8. #テーブルを取得 
  9. テーブル= dynamodb.Table ( 'ニュース' )
  10.      
  11. # URL取得する イベントから
  12. url = event[ '記録' ][0][ 'SNS' ][ 'メッセージ' ]
  13.     
  14. # RSSフィードを解析する
  15. フィード = feedparser.parse(url)
  16.      
  17. フィード[ 'entries' ]内のアイテムの場合:
  18. 結果 = {
  19. "news_url" : 項目[ 'link' ],
  20. "タイトル" : 項目[ 'タイトル' ],
  21. "created_at" : datetime.now().strftime( '%Y-%m-%d' ) # こうすることで、Dynamodb は日付正しく処理できるようになります 
  22. }
  23.          
  24. # 結果をdynamodb保存する
  25. table .put_item(Item=result, ConditionExpression= 'attribute_not_exists(news_url)' ) # ストアのみ 固有のURL

5. Sagemakerでテキスト要約モデルを作成してデプロイする

Sagemaker は、AWS 上で機械学習モデルを簡単に作成、トレーニング、デプロイできるサービスです。 HuggingFace は AWS と提携して、ユーザーがモデルをクラウドに簡単にデプロイできるようにしました。

ここでは、Jupiter ノートブックに簡単なテキスト要約モデルを記述し、deploy() コマンドを使用してデプロイしました。

  1. sagemaker.huggingfaceからHuggingFaceModel をインポートします
  2. sagemaker をインポートする
  3. ロール = sagemaker.get_execution_role()
  4. ハブ = {
  5. 'HF_MODEL_ID' : 'facebook/bart-large-cnn'
  6. 'HF_TASK' : '要約'  
  7. }
  8. # ハグフェイスモデルクラス
  9. huggingface_model = ハギングフェイスモデル(
  10. トランスフォーマーバージョン = '4.6.1'
  11. pytorch_version = '1.7.1'
  12. py_version = 'py36'
  13. env=ハブ、
  14. 役割=役割、
  15. # SageMaker Inferenceモデルをデプロイする
  16. 予測子 = huggingface_model.deploy(
  17. initial_instance_count=1、#インスタンス
  18. instance_type = 'ml.m5.xlarge' # ec2 インスタンスタイプ

デプロイされると、Sagemaker -> 推論 -> エンドポイント構成からエンドポイント情報を取得し、Lamdas で使用できるようになります。

6. 記事の全文と要約を取得し、結果をDynamoDBに保存する

著作権の関係で全文を保存していないため、すべての処理は Lambda で実行されます。 URL が Dynamo DB テーブルに格納されたら、テキスト処理 Lambda を起動します。これを実現するために、Lambda を起動するトリガーとして DynamoDB アイテム生成を作成しました。 Lambda が一度に 1 つの記事のみを処理するようにバッチ サイズを作成しました。

  1. jsonをインポート
  2. boto3をインポート
  3. goose3からGooseをインポート
  4. datetimeからdatetime をインポート
  5. lambda_handler(イベント、コンテキスト):
  6. # DynamoDB レコード作成イベントからURL を取得する
  7. url = event[ 'レコード' ][ 0 ][ 'dynamodb' ][ 'キー' ][ 'news_url' ][ 'S' ]
  8.      
  9. #記事の全文取得
  10. g = ガチョウ()
  11. 記事 = g.extract(url=url)
  12.      
  13. body = article.cleaned_text # 記事のテキストをクリーンアップする
  14.      
  15. published_date = article.publish_date #メタ記述から 
  16.      
  17. # HuggingFaceテキスト要約モデルを使用して要約を作成する
  18. ENDPOINT_NAME = "your_model_endpoint"  
  19. ランタイム = boto3.client( 'runtime.sagemaker' )
  20.      
  21. レスポンス =runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME、ContentType= 'application/json' 、Body=json.dumps(data))
  22.     
  23. #要約を抽出
  24. summary = json.loads(response[ 'Body' ] .read ()).decode()) です。
  25.      
  26. 接続する  DynamoDB
  27. dynamodb = boto3.resource( 'dynamodb' )
  28. #テーブルを取得 
  29. テーブル= dynamodb.Table ( 'ニュース' )
  30.      
  31. # dynamoDB保存されているアイテムを更新する
  32. 更新=テーブル.update_item (
  33. キー= { "news_url" : url }
  34. 条件式 = 'attribute_exists(news_url)'
  35. UpdateExpression = 'SET summary = :val1、published_date = :val2'  
  36. 式属性値={
  37. ':val1' : 要約、
  38. ':val2' : 公開日
  39. }

これは、AWS ツールを使用して最新のニュースを読み取るためのシンプルなサーバーレス データ パイプラインを構築およびデプロイした方法です。

元のタイトル: AWS クラウドで ML を使用してサーバーレス ニュース データ パイプラインを構築する、著者: Maria Zentsova

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  ファーウェイが「天才少年」の業績を初めて明らかに:彼は入社から1年も経たないうちにこの偉業を成し遂げた

>>:  3分レビュー:2021年11月の自動運転業界の完全な概要

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

自分でゴミを分別できるスマートゴミ箱が登場するまで、どれくらい時間がかかるのでしょうか?

あなたの市では今日から「ゴミの分別」が始まりましたか?上海が先導して実証を進め、北京、天津、重慶、成...

デジタルビジネスにおける AI の 6 つの設計原則

人工知能 (AI) は、現在人間が行っている意思決定やタスクを補強し、自動化する機能を備えているため...

このスタートアップは、アイドル状態のGPUを分散ネットワークに接続することで、AIモデルのトレーニングコストを90%削減できると主張している。

モンスターAPIは、採掘機器などのGPUコンピューティングパワーを使用してAIモデルをトレーニングし...

Baidu が DeepVoice の最終バージョンをリリース: 10,000 人の声を真似て 30 分でアクセントを習得

今年初め、検索大手の百度は、人気のディープラーニング技術を使用してテキスト読み上げ(TTS)変換を実...

Appleとオレゴン州立大学がAutoFocusFormerを提案: 従来のグリッドを廃止し、適応型ダウンサンプリング画像セグメンテーションを使用

従来の RGB 画像はラスター形式で保存され、ピクセルは画像全体に均等に分散されます。ただし、この均...

IntelがBigDLディープラーニングフレームワークをリリース、CPUを使ってGPUを攻撃する予定

[51CTO.com クイック翻訳] 先週、Intel は分散型ディープラーニング用のオープンソース...

OpenAI: 大規模ニューラルネットワークをトレーニングするための 4 つの基本手法

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

Redis に基づく分散ロックと Redlock アルゴリズム

[[403381]]この記事はWeChatの公開アカウント「UP Technology Contro...

72歳の男性がコーラを飲みながら脳で麻雀をする:これはすべて脳コンピューターインターフェース技術のおかげです

浙江省メディアの報道によると、現在浙江大学医学部第二付属病院で治療を受けている72歳の張さんは、意識...

...

人工知能はどのようにして新しい世界を創造するのでしょうか?

AI は時間の経過とともにさらに賢くなり、パワーを増していきます。私たちの多くにとって、人工知能 ...

画像認識が最も得意な会社はどこでしょうか? Microsoft、Amazon、Google、それともIBM?

[51CTO.com クイック翻訳] 認識ソフトウェアは、特定の種類の画像を正しく分類するのに非常...