AWS Blogを自動要約! Amazon Bedrockで作る高度な要約アプリのヒント

SteinbergのセールでCubase 13 Proをお得に入手しました。以来、DAWに夢中です。最高です!

AWS Blogをみなさんは読んでいますか? AWS Blogは宝の山です。AWSサービスに関する内容がより詳細に記載されています。具体的な手順やGitHubへのリンクも含まれているので、実践しながら学ぶことができます。

しかしながら、このAWS Blogは複数のカテゴリに分かれており、1日に大量の投稿があります。さらに、一つのブログ投稿にはボリュームがあり、読了するのに時間がかかります。この私のブログ記事では、AWS Blogを要約し、ブログ投稿内容を短時間で把握する技術を紹介します。

読者の前提条件

  • ✅ ChatGPTやClaudeなどの生成AIチャットボットを利用した経験がある。
  • ✅ Amazon Bedrock*1を概要レベルで理解している。
  • ✅ Pythonのソースコードを読むことができる。

Amazon Bedrock と Claude AI を活用した要約の基本

まずは手っ取り早く、Amazon BedrockのプレイグラウンドでAWS Blogの記事を要約してみましょう。要約対象の記事はこちらです。

aws.amazon.com

次の画像のように、プレイグラウンドでURLを指定して要約を求めるだけです。簡単ですね。

Amazon Bedrock プレイグラウンドによるAWS Blogの記事要約の例

このように単純な指示でも要約は形になっています。しかし、この要約が本当に正確なのか疑問です。私が確認したところ、Claudeの要約結果には多くの誤りがありました。具体的な指摘点は次の通りです。

  • DynamoDBの標準とIAの2つの異なるストレージクラスを使用して、古いデータを移行しストレージコストを節約する方法が記載されています。ただし、DynamoDBのデータをAmazon S3 Glacierにアーカイブする方法については書かれていません。

質の高い要約結果を得るためには、大規模言語モデル(LLM)におけるハルシネーション(幻覚・作り話)を回避する工夫が必要です。LLMは時に事実無根のありもしない内容を生成してしまうことがあり、これをハルシネーションと呼びます。それではどうすれば良質な要約が可能になるのでしょうか。以下に要約の品質を向上させるためのテクニックを紹介します。

要約品質を向上させるためのプログラミングテクニック

これまでは単純にURLを指定して要約していただけでした。要約品質を上げるには、より具体的に要約対象の文章を指定する必要があります。AWS Blogではコンテンツが決まったHTMLタグで構造化されているため、特定のタグからコンテンツを抽出することができます。

PythonによるWebスクレイピングによるコンテンツ抽出

AWS Blogでは、HTML要素のproperty="articleBody"属性を指定してスクレイピングすることで、本文コンテンツを抽出できます。以下の画像は、Chromeの開発者ツールを使ってHTMLタグを検索する例を示しています。

AWS Blogにおける記事本文のタグ検索例

HTMLタグが分かれば、PythonのBeautifulSoupというライブラリを使ってスクレイピングができます。以下のPythonコードでは、記事本文に加えてブログの記事タイトルと投稿日も取得しています。

import requests
from bs4 import BeautifulSoup

def get_aws_blog_content(url):
    res = requests.get(url)
    soup = BeautifulSoup(res.text)

    title = soup.find('title').text
    date_published = soup.find('time', attrs={'property': 'datePublished'})
    article_body = soup.find('section', attrs={'property': 'articleBody'})

    return title, date_published['datetime'], article_body

取得した記事本文を、PythonプログラムからAmazon Bedrockの Claude 3に渡して要約させます。プロンプトの本文は、以下のように記事本文を変数に埋め込むだけのシンプルな内容です。

def prompt(article_body):
    return "以下の記事内容を要約してください。\n\n" + str(article_body)

同じAWS Blogの記事で、改善した結果を確認します。BeautifulSoupで取得した記事本文を、Amazon Bedrockのプレイグラウンド環境で要約します。要約の結果は以下の通りです。

改善された要約結果

記事本文を具体的に指定することで、ハルシネーション(幻覚・作り話)を回避し、より正確な要約結果を出力することができました。この程度の要約品質であれば、実用に値するでしょう。私はこのプログラムをアプリ化し、短時間でAWS Blogの内容を取り込めるようにしています。

まとめ

本記事では、AWS Blogを要約し、ブログ記事の内容を短時間で把握する方法を紹介しました。AWS Blogだけでなく、セッション資料や動画なども自動要約できる時代が目前に迫っています。ただし、英語のコンテンツについては、自動要約に完全に頼るのではなく、英語学習の一環としてインプットすることも大切です。この記事が参考になれば幸いです。

*1:Amazon Bedrock は、API を通じて主要な基盤モデルを利用できるようにするフルマネージド型サービスです。