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月の自動運転業界の完全な概要

ブログ    
ブログ    

推薦する

...

CUDA と TensorRT モデルの展開の最適化: 重要な考慮事項と実践的な戦略

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

Yandexとロシア郵便が配達ロボットサービスを開始

外国メディアの報道によると、ロシアの検索エンジン会社ヤンデックスとロシア郵便は最近、モスクワのいくつ...

2018 Baidu AI 開発者会議: Robin Li が「誰でも AI ができる」を提唱

7月4日、世界初のAI開発者カンファレンス「Baidu Create 2018」が2年目を迎えました...

...

マルチモーダルディープラーニング:ディープラーニングを用いてさまざまな情報を統合する

ディープラーニングを使用して、さまざまなソースからの情報を統合します。マルチモーダルデータ私たちの世...

...

顔認識におけるコモンズの悲劇

現在、顔認識などの個人情報の所有権と保護に関する権威ある解釈や体系的な政策や法的規範は存在せず、商業...

「突破」に注目! 2021年6月のドローン業界の重要な動向の概要

ドローンは無人航空機であり、センサー、インテリジェント制御、情報処理、電力システムなどの技術を統合し...

人工知能と遠隔監視:宇宙でのマッチング

データ センターが地球外の人々の長期的なコンピューティング ニーズを満たすことは避けられないと思われ...

リカレントニューラルネットワークの父:未来のロボットはアリを見るように人間を見るだろう

4月19日、ガーディアン紙は、ロボットの将来について語ったインタビューで、再帰型ニューラルネットワー...

人工知能を活用して顧客サービスを向上させる方法

顧客エンゲージメント、パーソナライゼーションなど、5 つの異なる領域で AI を使用して顧客サービス...

あなたのビジネスに最適なRPAコンサルタントを見つける方法

RPA 導入を成功させるために、この記事では、ビジネスに最適な RPA コンサルタントを選択するプロ...

...