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

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

推薦する

IoTとAI:輸送管理の変革

私たちが今生きている時代は、これまでで最も技術的に進歩した時代です。これらの新しいテクノロジーの登場...

私はパニックになりました。上司はこう言いました。「AIはフロントエンドを100%置き換えるだろう」

この記事では、フロントエンド開発と人工知能の関係、そして将来 AI がフロントエンド開発の仕事に取っ...

人工知能が銀行業界の変革を加速します!ビッグデータにより各ユーザーの信用格付けが提供されます!

[[221188]]将来、人工知能が 380 万人以上の銀行員の仕事を全て置き換える日が来るのでし...

人工知能に関する究極の議論: 私たちは AI なのか?

有名な科学者ホーキング博士の死からわずか半年後に、世界で最も聡明な科学者たちが歴史的な議論を始めると...

制御可能な人工知能には未来がある

8月29日、2019年世界人工知能会議が上海で開幕した。世界各国の著名なテクノロジー企業や学界、産業...

JSPフォーラムツリー構造を実装するための特定のアルゴリズム

1. JSP フォーラムのデモテーブルの構造: テーブル名: mybbslist フィールド データ...

人工知能の時代、栄智連は新しいメディアが新しいエコシステムを構築するのを支援します

[51CTO.com からのオリジナル記事] 今日、メディア業界はデジタル技術の影響を受けて新たな旅...

通信ネットワークにおけるOSPFプロトコルの適用とアルゴリズムの最適化

3G通信技術は広く利用されており、4Gに向けてますます進化しています。通信ネットワーク内のアクセスス...

...

「万能AI」GPT-3の中国版を作る方法

質問に答えたり、翻訳したり、記事を書いたり、コードを書いたり、数式を計算したり、アイコンを描いたりす...

Google Brainの主要研究:高速微分可能ソートアルゴリズム、桁違いに高速

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AIがソフトウェアテストを変える5つの方法

[51CTO.com クイック翻訳] AI技術は、ソフトウェアテスト作業を5つの方法で変えています。...

2021年世界人工知能会議の結論によって、どのような新しいトレンドが明らかになるのでしょうか?

7月10日、2021年世界人工知能会議(WAIC)が上海で閉幕した。 2011年以来、ビッグデータ...

...