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

ブログ    

推薦する

...

...

ゲームに「顔認識」を追加したことで生まれた考え

最近、国内で人気の「チキン早食い」ゲームに「顔認識システム」が導入され、大きな論争を巻き起こした。多...

...

...

...

人工知能は人間に取って代わろうとしているのでしょうか、あるいは人間を支配しようとしているのでしょうか?本当にそうなのでしょうか?

生産性が徐々に生産と生活をカバーするようになると、ロボットはすぐに生活のあらゆる分野に参入し、一部の...

倉庫の自動化は人気が高い。ソフトバンクは28億ドルを投じてオートストアの40%を買収した。

ソフトバンクグループは、ノルウェーの倉庫自動化企業オートストアの株式40%を28億ドルで買収すること...

...

...

AI生成画像に追加されたデジタル透かしは簡単に解読できると研究で判明

10月6日、EngadgetやWiredなどの海外メディアの報道によると、メリーランド大学の研究チー...

問題点を突き止める - Weiang 入札および評価ビデオインテリジェントアーカイブシステム

財務省令第87号では、購入者または購入代理店は入札および入札評価プロセス全体を録画および記録しなけれ...

RPAは人工知能の究極の発展方向でしょうか?

ロボティック・プロセス・オートメーション (RPA) は、単調で反復的なタスクを排除するのでしょうか...

行列乗算の最適化と畳み込みにおけるその応用

導入天気予報、石油探査、原子物理学などの現代の科学技術は、主にコンピュータシミュレーションに依存して...

...