見出し画像

NewsAPIとBeautifulSoupとCohereAIを使って英文記事を日本語要約


海外の最新の記事からトレンドを知るために、スクレイピングして生成AIで要約を和訳してもらうフローを作れば役立つのでは?、と考えたのが今回の取り組みのきっかけです。

NewsAPIとは

(ChatGPTの回答)
NewsAPIは、ニュース記事を取得するためのオンラインサービスおよびAPIです。このAPIを使用すると、様々なニュースソースから最新のニュース記事や特定のトピックに関する記事をプログラム的に取得することができます。主な機能には次のようなものがあります:

  • 最新ニュースの取得

  • 特定のトピックやキーワードに基づくニュース記事の検索

  • 特定のニュースソースからのニュース取得

  • 特定の日付範囲内のニュース記事の取得

これにより、開発者は自分のアプリケーションやウェブサイトにリアルタイムのニュースコンテンツを組み込むことが容易になります。

NewsAPIは、有名なニュースソース(例:BBC News、CNN、The New York Times など)や特定のカテゴリ(例:ビジネス、エンターテイメント、健康、科学、スポーツ、テクノロジー)のニュース記事にアクセスするための強力なツールを提供します。利用するにはAPIキーが必要で、無料プランと有料プランがあります。有料プランでは、より多くのリクエストや追加機能が提供されます。

BeautifulSoupとは

(ChatGPTの回答)
BeautifulSoupは、Pythonで使えるライブラリで、HTMLやXMLドキュメントを簡単にパース(解析)して操作するためのツールです。ウェブスクレイピングやデータ抽出のためによく使われます。主な機能としては次のようなものがあります:

  • HTML/XMLのパース: 複雑なHTMLやXMLドキュメントを、ツリー状のデータ構造として扱い、各要素にアクセスしやすくします。

  • 要素の検索: タグ名、属性、CSSセレクタなどを使って、ドキュメント内の特定の要素を簡単に検索できます。

  • データの抽出と変更: 見つけた要素からテキストや属性を取得したり、要素を変更したりすることができます。

  • HTMLの整形: 乱雑なHTMLを整形して、読みやすい形式で出力できます。

例えば、以下のコードはBeautifulSoupを使ってウェブページからタイトルを抽出する例です:

from bs4 import BeautifulSoup
import requests

# ウェブページの取得
response = requests.get('https://example.com')
html = response.content

# BeautifulSoupでパース
soup = BeautifulSoup(html, 'html.parser')

# タイトルを取得
title = soup.title.string
print(title)

このコードは、指定されたURLからHTMLを取得し、そのHTMLをBeautifulSoupで解析して、ページのタイトルを抽出して表示します。BeautifulSoupは、複雑なウェブページのデータを扱う際に非常に便利です。

Cohere APIとは

(Geminiの回答)
Cohere APIは、Cohereが提供する大規模言語モデル(LLM)の機能を、あなたのアプリケーションやサービスに直接組み込むことができるように設計されたインターフェースです。いわば、Cohereの高度なAI能力を、あなたのアイデアを実現するためのツールとして利用できる入り口のようなものです。

Cohere APIでできること

Cohere APIを使うと、以下のようなことが可能になります。

  • 文章生成: 文章の生成、翻訳、要約、質問応答など、様々な自然言語処理タスクを実行できます。

  • カスタマイズ: 特定のタスクやドメインに合わせて、モデルをカスタマイズできます。例えば、特定の業界の用語や表現に特化したモデルを作成することができます。

  • 多言語対応: 複数の言語に対応しており、グローバルなサービスへの展開が可能です。

APIの利用例

  • チャットボット: 自然な対話ができるチャットボットの開発

  • コンテンツ作成: 記事、ブログ記事、広告コピーなどのコンテンツ作成

  • コード生成: プログラムコードの自動生成

  • 翻訳: 高品質な機械翻訳

APIを使うメリット

  • 開発の効率化: 複雑な自然言語処理モデルを自分で開発する必要がありません。

  • 高性能: Cohereの大規模言語モデルの性能をそのまま利用できます。

  • 柔軟性: 様々な用途に利用できます。

APIの利用方法

Cohere APIを利用するには、一般的に以下の手順を踏みます。

  1. アカウント作成: Cohereのウェブサイトでアカウントを作成します。

  2. APIキー取得: 作成したアカウントでAPIキーを取得します。

  3. プログラミング: 取得したAPIキーを使って、自分のアプリケーションからAPIを呼び出すプログラムを作成します。Cohereは、Python、Java、TypeScriptなど、様々なプログラミング言語に対応したライブラリを提供しています。

まとめ

Cohere APIは、生成AIの分野で革新的な技術を提供しているCohereの能力を、あなたのサービスに手軽に組み込むことができる強力なツールです。もし、自然言語処理の機能をあなたのアプリケーションに実装したいと考えているなら、Cohere APIは非常に魅力的な選択肢と言えるでしょう。

NewsAPIのフロー

News API のv2/everythingは過去 5 年間に集められた記事から検索します。

  1. 必要なライブラリのインポート

  2. APIキーを含むヘッダーの設定

  3. APIエンドポイントURLの設定

  4. APIに渡すパラメータの設定

  5. GETリクエストの送信とレスポンスの取得

  6. データフレーム表示設定

  7. レスポンスの確認とデータフレームの作成

  8. 必要な列のみ表示

 +----------------------------------+
 | 1. 必要なライブラリのインポート |
 +----------------------------------+
               |
               v
 +----------------------------------+
 | 2. APIキーを含むヘッダーの設定   |
 +----------------------------------+
               |
               v
 +----------------------------------+
 | 3. APIエンドポイントURLの設定    |
 +----------------------------------+
               |
               v
 +----------------------------------+
 | 4. APIに渡すパラメータの設定     |
 +----------------------------------+
               |
               v
 +----------------------------------+
 | 5. GETリクエストの送信と         |
 |    レスポンスの取得              |
 +----------------------------------+
               |
               v
 +----------------------------------+
 | 6. データフレーム表示設定       |
 +----------------------------------+
               |
               v
 +----------------------------------+
 | 7. レスポンスの確認と            |
 |    データフレームの作成          |
 |    +--------------------------+  |
 |    | レスポンスが正常か確認    |  |
 |    +--------------------------+  |
 |    | JSON形式に変換           |  |
 |    +--------------------------+  |
 |    | データフレームに変換      |  |
 |    +--------------------------+  |
 |    | 全体の検索結果数を表示    |  |
 +----------------------------------+
               |
               v
 +----------------------------------+
 | 8. 必要な列のみ表示              |
 +----------------------------------+

BeautifulSoupとCohereのフロー

スクレイピングと日本語要約の処理フローです。
最初にChatGPTが教えてくれたのはGoogle Translate APIを使う方法です。

①和訳にGoogle Translateを使用する場合

  1. スクレイピング:

    • BeautifulSoupを使って各記事のURLから記事内容を取得します

  2. Cohereの設定

    • Cohereクライアントを設定します。

  3. 要約:

    • CohereのAPIを使って、取得した記事内容を要約します。

  4. 翻訳:

    • Google Translate APIを使って、要約した内容を日本語に翻訳します。

②和訳にCohereを使用する場合

ただ、今回和訳もCohereに任せることにしました。
要約と和訳をCohereで処理するので、1ステップ少なくなる形になります。

  1. スクレイピング:

    • BeautifulSoupを使って各記事のURLから記事内容を取得します。

  2. Cohereの設定:

    • Cohereクライアントを設定します。

  3. 要約:

    • CohereのAPIを使って、取得した記事内容を日本語で要約します。

 +--------------------------------------+
 | 1. 記事内容のスクレイピング          |
 |    - 各記事URLから内容取得            |
 |    - BeautifulSoupを使用              |
 +--------------------------------------+
               |
               v
 +--------------------------------------+
 | 2. Cohereの設定                      |
 |    - Cohereクライアントの設定         |
 +--------------------------------------+
               |
               v
 +--------------------------------------+
 | 3. 記事の要約                        |
 |    - 記事内容をCohereで日本語に要約           |
 +--------------------------------------+
               |
               v
 +--------------------------------------+
 | 4. すべての記事URLに対して処理を実行  |
 |    - スクレイピングと要約を実行       |
 |    - 結果を表示                       |
 |    - リクエスト間に遅延を挿入         |
 +--------------------------------------+

NewsAPIを使ったコード

### NewsAPIで記事検索

import requests  # HTTPリクエストを送信するためのライブラリ

# APIキーを含むヘッダーを設定
headers = {'X-Api-Key': 'My NewsAPI Key'}

# APIのエンドポイントURLを設定
url = 'https://newsapi.org/v2/everything'

# APIに渡すパラメータを設定
params = {
    'q': 'AI AND LLM AND Gemma',  # 検索クエリ:'AI AND LLM AND Gemma'を含む記事を検索
    'language':'en',              # 記事の言語を英語に設定
    'sortBy': 'publishedAt',      # 記事を公開日でソート
    'pageSize': 10                # 一度に取得する記事の数を10件に設定
}

# GETリクエストを送信して、レスポンスを受け取る
response = requests.get(url, headers=headers, params=params)

import pandas as pd  # データ操作用のライブラリ
pd.options.display.max_colwidth = 25  # データフレーム表示のカラム幅を25に設定

# レスポンスが正常か確認
if response.ok:
    # レスポンスをJSON形式に変換
    data = response.json()
    # 'articles'キーのデータをデータフレームに変換
    df = pd.DataFrame(data['articles'])
    # 全体の検索結果数を表示
    print('totalResults:', data['totalResults'])

# 'publishedAt', 'title', 'url'列のみを表示
print(df[[ 'publishedAt', 'title', 'url']])
otalResults: 29
            publishedAt                     title                       url
0  2024-07-25T19:57:16Z  Revolutionizing Code ...  https://developer.nvi...
1  2024-07-24T17:15:46Z  Why Big Tech Wants to...  https://dublog.net/bl...
2  2024-07-24T10:00:00Z  Integrating Image-To-...  https://www.smashingm...
3  2024-07-23T23:00:02Z  Nvidia AI Foundry And...  https://www.forbes.co...
4  2024-07-23T15:15:59Z  How NVIDIA AI Foundry...  https://blogs.nvidia....
5  2024-07-23T01:49:58Z  xfastertransformer-gn...  https://pypi.org/proj...
6  2024-07-22T21:05:03Z  Train and Run Your Ow...  https://www.tweaktown...
7  2024-07-21T00:00:00Z  Llama, Llama, Oh Give...  https://www.r-blogger...
8  2024-07-19T12:06:04Z  AI Digest: Startups G...  https://www.medianama...
9  2024-07-18T06:28:08Z  Apple denies using Yo...  https://www.business-...

BeautifulSoupとCohereを使ったコード

# 追加で必要なライブラリをインポート
from bs4 import BeautifulSoup
import cohere
import time

# CohereのAPIキーを設定
cohere_client = cohere.Client('My CohereAPI Key')  # ここにCohereのAPIキーを入力

def get_article_content(url):
    """指定されたURLから記事の内容をスクレイピングして返す"""
    try:
        # URLにGETリクエストを送信
        article_response = requests.get(url)
        article_response.raise_for_status()  # レスポンスのステータスコードが200でない場合に例外を発生させる
        # BeautifulSoupを使ってHTMLをパース
        soup = BeautifulSoup(article_response.content, 'html.parser')
        # <p>タグ内のテキストを全て抽出して結合
        paragraphs = soup.find_all('p')
        article_content = ' '.join([p.get_text() for p in paragraphs])
        return article_content
    except Exception as e:
        print(f"Error fetching {url}: {e}")
        return None

def summarize_article(content):
    """記事の内容を日本語でサマリーする"""
    try:
        prompt = f"次の英語の文章を日本語で要約してください:\n\n{content}"
        response = cohere_client.generate(
            model='command-r-plus',  # 必要に応じてモデルを選択
            prompt=prompt,
            max_tokens=150,  # 必要に応じてトークン数を調整
            temperature=0.7,  # 生成の多様性を制御するパラメータ。必要に応じて調整。
            k=0,  # トップkサンプリング。必要に応じて調整。
            p=0.75  # トップpサンプリング。必要に応じて調整。
        )
        summary = response.generations[0].text.strip()
        return summary
    except Exception as e:
        print(f"Error summarizing article: {e}")
        return None

# すべての記事URLに対してスクレイピングとサマリー生成を行う
for index, row in df.iterrows():
    url = row['url']
    print(f"Fetching and summarizing article: {url}")
    content = get_article_content(url)
    if content:
        summary = summarize_article(content)
        if summary:
            print(f"Summary for {url}:\n{summary}\n")
        else:
            print(f"Failed to summarize article: {url}\n")
    else:
        print(f"Failed to fetch article content: {url}\n")
    # サマリー生成に時間がかかるため、リクエスト間に短い遅延を挿入
    time.sleep(1)

出力結果

Fetching and summarizing article: https://developer.nvidia.com/blog/revolutionizing-code-completion-with-codestral-mamba-the-next-gen-coding-llm/
Summary for https://developer.nvidia.com/blog/revolutionizing-code-completion-with-codestral-mamba-the-next-gen-coding-llm/:
生成AIの急速に進化する分野において、コーディングモデルは開発者にとって欠かせないツールとなり、ソフトウェア開発の生産性と精度を向上させています。複雑なタスクの自動化、スケーラビリティの向上、イノベーションの促進により、現代のソフトウェア開発に不可欠なツールとなっています。Mistral社が開発したCodestral Mambaは、革新的なMamba-2アーキテクチャをベースにした画期的なコーディングモデルです。優れたコード補完に特化して設計されており、fill-in-the-middle (FIM) と呼ばれる先進的な技術を用いて、正確かつ文脈的に関連性の高いコード例を生成します。また、NVIDIA NIMとのシームレス

Fetching and summarizing article: https://dublog.net/blog/commoditize-complement/
Summary for https://dublog.net/blog/commoditize-complement/:
メタ社は、極めて強力な大規模言語モデルである Llama 3.1 のソースコードとモデルパラメータをオープンソース化しました。このモデルの性能は、Open AI の ChatGPT や Anthropic の Claude に匹敵します。リリース条件は非常に寛大で、月間アクティブユーザーが 7 億人以下の組織であれば、Llama 3.1 を自由に利用することができます。つまり、Google、Apple、Microsoft、Netflix 以外のほとんどの企業が、自社の製品に Llama を組み込むことができます。しかし、なぜメタ社はこれを無料で公開したのでしょうか?純粋な利他主義からでしょうか?それとも、プライバシー

Fetching and summarizing article: https://www.smashingmagazine.com/2024/07/integrating-image-to-text-and-text-to-speech-models-part1/
Summary for https://www.smashingmagazine.com/2024/07/integrating-image-to-text-and-text-to-speech-models-part1/:
Joasは、機械学習(ML)と人工知能(AI)に情熱を持ち、これらの技術を現実世界の問題解決に活用している人物です。彼は、音声説明技術の中核をなす2つの重要なコンポーネント、つまり説明と音声について説明しています。説明とは、画像や動画の視覚的なコンテンツを理解し、解釈することであり、アクション、設定、表情などの詳細が含まれます。一方、音声コンポーネントは、これらの説明を明確で、明瞭で、自然に聞こえる音声に変換します。Joasは、画像入力を分析し、関連情報を抽出し、正確な説明を生成するプレトレーニングされたビジョン言語モデルを統合

Fetching and summarizing article: https://www.forbes.com/sites/karlfreund/2024/07/23/nvidia-ai-foundry-and-nims-a-huge-competitive-advantage/
Summary for https://www.forbes.com/sites/karlfreund/2024/07/23/nvidia-ai-foundry-and-nims-a-huge-competitive-advantage/:
Nvidia は、企業がカスタム モデルを開発および展開する負担を軽減するために、包括的なソフトウェア スタックを整備しました。これは AI Nervana への道筋となるのでしょうか? AMD や Intel などの企業は、これに対抗できるのでしょうか? 企業が AI を導入するには、より簡単かつ手頃な価格になる必要があります。 Nvidia は、企業が AI を自社のビジネス ニーズに適応および採用し、一から始める必要なく、また巨額の費用をかけずに AI を活用できるよう、AI Foundry を立ち上げました。この発表のタイミングは、投資家が AI への投資に対するリターンが難しいの

Fetching and summarizing article: https://blogs.nvidia.com/blog/ai-foundry-enterprise-generative-ai/
Summary for https://blogs.nvidia.com/blog/ai-foundry-enterprise-generative-ai/:
NVIDIA AI Foundry は、企業が AI の力を活用できるようにするサービスです。このサービスを利用することで、企業はデータ、アクセラレーテッド コンピューティング、ソフトウェア ツールを使用して、自社の業界に特化したカスタム AI モデルを作成および展開することができます。NVIDIA AI Foundry は、TSMC が他の企業が設計したチップを製造するのと同様に、他の企業が AI モデルを開発およびカスタマイズするためのインフラストラクチャとツールを提供します。主な違いは製品で、TSMC は物理的な半導体チップを生産するのに対し、NVIDIA AI Foundry はカスタム モデルを作成する支援をします。どちらもイノベーションを

Fetching and summarizing article: https://pypi.org/project/xfastertransformer-gnr/
Summary for https://pypi.org/project/xfastertransformer-gnr/:
xFasterTransformer は、Xeon プラットフォーム上で Large Language Model (LLM) の推論を高速化するためのソリューションです。xFasterTransformer は、複数のソケットやノードにまたがる分散モードで動作し、大規模なモデルの推論をサポートします。C++ と Python の両方の API を提供し、高い柔軟性と統合のしやすさを実現しています。また、さまざまな AI シナリオで広く使用されている LLM の主流モデルに対応しています。xFasterTransformer は、シングルソケットやマルチソケット/マルチノード環境で LLM の推論を高速かつスケーラブルに行うことができます。さらに、ユーザーがxFasterTransformer を自社の

Fetching and summarizing article: https://www.tweaktown.com/articles/10797/train-and-run-your-own-ai-with-gigabyte-top/index.html
Summary for https://www.tweaktown.com/articles/10797/train-and-run-your-own-ai-with-gigabyte-top/index.html:
ギガバイトは、AI TOPと呼ばれるAIツールとハードウェアの組み合わせをリリースしました。これは、家庭やオフィスで強力なAIをトレーニングおよび実行するためのソリューションです。 AI TOP Utilityは、ユーザーがローカルでAIモデルをトレーニングおよびカスタマイズできるようにするツールで、スキルレベルに関係なく誰でも利用できます。一般的なオープンソースのLLM(大規模言語モデル)をサポートし、カスタムデータセットを使用できます。このツールは、最新のテクノロジーを活用したい企業や組織、個人に理想的なソリューションです。

AI TOP Utilityは、最大2360億個のパラメーターを持つ大規模な言語モデルをサポートします。これまでは

Fetching and summarizing article: https://www.r-bloggers.com/2024/07/llama-llama-oh-give-me-a-sign-whats-in-the-latest-idsa-guideline/
Summary for https://www.r-bloggers.com/2024/07/llama-llama-oh-give-me-a-sign-whats-in-the-latest-idsa-guideline/:
この記事では、著者が医療分野における大規模言語モデル(LLM)の活用方法を学習した経験について語っています。著者は、LLMを活用することで、IDSA(米国感染症学会)のガイドラインを読み解き、情報を取得するのに役立てることができたと述べています。著者は、LLMの直観、プロンプト エンジニアリング、RAG(Readability、Accuracy、Generality)、エージェントなどの概念を理解することが重要であると考えています。著者は、Pythonの知識がなくても、Reticulate を使用して R で LLM を活用できることを発見しました。著者は、GPT4All GUI LangChain チュートリアルに従って、ローカル L

Fetching and summarizing article: https://www.medianama.com/2024/07/223-ai-digest-whats-happening-with-ai-around-the-world/
Summary for https://www.medianama.com/2024/07/223-ai-digest-whats-happening-with-ai-around-the-world/:
インドのテクノロジーと政策に関する最新の動向をまとめたものです。インドは AI の急速な進歩に歩調を合わせ、 AI 能力やツールの進歩を監視する必要性、およびインドやテクノロジー業界などの部門がこれらの進歩にどのように対応しているかをハイライトしています。インドの電子情報技術省の S・クリシュナン長官は、AI の倫理的リスクを解決し、その責任ある使用を確保するためには、民主的で複数の利害関係者によるアプローチが重要であると強調しました。さらに、グーグル・インディアは、最大 10,000 社のスタートアップに AI トレーニングを提供するために、

Fetching and summarizing article: https://www.business-standard.com/technology/tech-news/apple-denies-using-youtube-videos-for-training-apple-intelligence-report-124071800397_1.html
Error fetching https://www.business-standard.com/technology/tech-news/apple-denies-using-youtube-videos-for-training-apple-intelligence-report-124071800397_1.html: 403 Client Error: Forbidden for url: https://www.business-standard.com/technology/tech-news/apple-denies-using-youtube-videos-for-training-apple-intelligence-report-124071800397_1.html
Failed to fetch article content: https://www.business-standard.com/technology/tech-news/apple-denies-using-youtube-videos-for-training-apple-intelligence-report-124071800397_1.html

いいなと思ったら応援しよう!