DX station

【第四回】Azure Cognitive Services for Language で簡単テキスト分析!~文書要約を使ってみる編~

高橋 良輔

高橋 良輔

こんにちは。データサイエンスチームの高橋です。

前回の記事「Azure Cognitive Services for Language で簡単テキスト分析!~会話言語理解を使ってみる編~」では Azure Cognitive Services for Language の会話言語理解の利用方法について紹介しました。前回、前々回とチャットボットに関連する機能を紹介しましたが、今回は少し毛色を変えて、文書を自動で要約できる機能について取り上げようと思います。

機能 説明 用途
固有表現抽出 (NER) 固有表現と呼ばれる人名や地名、日付などを文中から抽出します チャットボット
テキストマイニング
個人を特定できる情報 (PII) の検出 電話番号やメールアドレスなどの個人を特定できる情報を、文中から検出します データの匿名化
キーフレーズ抽出 文中からキーフレーズを抽出し、そのリストを返します 文書のタグ付け可視化
エンティティ・リンキング 文中の語句と知識ベース (Wikipedia) を紐づけ、詳細情報を提供します チャットボット
テキストマイニング
Text Analytics for Health 電子カルテなどの医療関係の文書に対する分析機能を提供します 医療用文書の分析
カスタム NER ユーザーが独自の専門領域に特化した NER のモデルを構築できます 領域に特化したチャットボット
テキストマイニング
感情分析 文章に対して “negative”, “neutral”, “positive” でラベリング・スコアリングします レビュー・SNS分析
株価予測
言語検出 文章がどの言語で書かれているかを検出します 他機能との連携
カスタム文書分類 (プレビュー) ユーザーが任意のカテゴリに分類する文書分類モデルを構築できます スパムフィルタリング
ニュース記事分類
文書要約 (プレビュー)
★本記事
記事や論文などの要約を生成します 要約
Conversational Language Understanding (プレビュー) 会話の内容を理解して、対応する意図 (Intent) に分類します チャットボット
音声コントロール
Question answering 質問から適切な回答を選択します チャットボット
FAQ ボット


「CogEra」はこちら

「Knowledge Bot」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


文書要約とは?

文書要約とはその名の通り、文書を要約することを指します。本機能は自動要約とも呼ばれ、文書の要約を自動で行います。私たちの周りには、ニュース記事や議事録など、文量の多い文書が数多く存在しています。しかしこのような文書に一行ずつ目を通すことは、非常にコストがかかる作業です。情報であふれる現代において、効率的な情報の取捨選択は必須です。本機能はそのような長い文書を短く要約することで、文書確認を効率化できるものとなっています。例えば100行もあるような文書を、たった10行の要約として出力することが本機能を利用することで可能になります。100行の内容を10行分で確認することができれば、単純に9割分のコスト削減が可能となります。もちろん要約なので、100%の情報が得られるわけではありませんが、元の文書も確認する際においても、一度要約に目を通しておくことで、効率的に読み進めていくことが可能だと考えられます。また、確認する文書の取捨選択をしたい場合においても、要約の存在は非常に有用となります。このように業務効率化において文書要約は非常に効果的であると言えます。

文書要約は、NLP の分野で盛んに研究されています。。文書要約の手法は大きく分けて、抽出型と抽象型の2種類存在しています。それぞれの簡単な説明を以下に示します。

  • 抽出型
    元の文書から適切な文を抽出して、要約を出力するものです。文自体が修正されることが無いため、全く要領を得ない文になる可能性が低くなります。その一方、文と文の接続に違和感がある場合があります。
  • 抽象型
    元の文書の意味を読み取ったうえで、新しく文を生成し要約を出力するものです。出力の自由度が高く、自然な要約を出力できます。その一方、文を生成するため学習コストが高く、内容と一致しない出力となる可能性もあります。

本サービスで提供している文書要約は抽出型となります。抽出型では文単位での出力となるので、出力する文の数を指定できます。より具体的な仕組みとしては、入力された文書の各文に対して、要約文としての重要度をスコアリングし、スコア上位の何文かを出力する機能となっています。抽出型を採用していることにより、文自体の妥当性は損なわれることが無いため、実務においても使いやすい機能になっていると思います。



「CogEra」はこちら

「Knowledge Bot」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


Language Studio を利用して文書要約を試す

さっそく文書要約を利用してみましょう。Language Studio を利用して、以下の手順を実施していきます。

  1. Language Studio (https://language.azure.com) にアクセスおよびログインします。今回利用する機能はプレビュー版ということもあり、無料である F0 の Language リソースで利用可能です。
  2. 一覧から Summarize documents を選択すると以下の画面が表示されます。
  3. 要約したい文書をテキストボックスに入力して Run を押下するだけで、文書要約が実行できます。入力文の文字数は最大 5,000 文字で対応しています。設定項目として、言語や出力の文の数、出力の文の順番があります。出力の文の順番に関しては、元の文書中での出現順で出力するものと、文に割り当てたスコアの高い順に出力するものから選択できます。今回は要約したい文書として、livedoor ニュースコーパスにある記事の本文を利用します。2,000 文字を超える文書に対して、デフォルト値である 3 行への要約を行ってみます。
  4. 以下が実行結果となります。本文から 3 行を抽出する形で要約されていることが確認できます。上の 2 文に関しては、記事全体の要約となる文を適切に抽出できている印象です。下の 1 文に関しては、脈絡がなく意味が分かりづらいものの、話の中で重要な文を抽出していると考えられます。
  5. 各文の結果の詳細についても以下のように出力されます。各文に表示されている Rank Score が前述したスコアで、文書のメインとなる主張との関連度を表します。本機能では、Rank Score が上位の文を出力する仕組みとなっています。また元の文書内で要約文がどこに出現するかについても可視化するため、周りの文脈も簡単に確認することができます。

このように Language Studio を利用することで、非常に簡単に文書要約を試すことができます。



「CogEra」はこちら

「Knowledge Bot」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


Python から Web API を利用して文書要約を試す

続いて、Python から API を利用して、文書要約を実行してみます。APIの利用シーンとして、大量の文書を要約して確認作業を効率化するような場合が考えられます。Python の実行環境をご準備の上、以下の手順で実施していきます。

  1. API を利用するにあたって、Azure のテキスト分析用のライブラリを pip でインストールします。
  2. pip install azure-ai-textanalytics==5.2.0b1

  3. API の利用に必要なキーとエンドポイントを確認します。
  4. 以下のキーとエンドポイントを利用します。

  5. ここからは Python で記述していきます。以下の記述に対して、上記のキーとエンドポイント、それから要約したい文書のテキストを記載します。このスクリプトを実行することで、API 経由で文書要約を行うことが可能となります。 (https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/text-summarization/quickstart?pivots=programming-language-python)
  6. key = "ここに確認したキーを貼り付けます"
    endpoint = "ここに確認したエンドポイントを貼り付けます"
    
    # 各種ライブラリのインポート
    from azure.ai.textanalytics import TextAnalyticsClient
    from azure.core.credentials import AzureKeyCredential
    
    # キーとエンドポイントを利用してクライアントの認証を行います 
    def authenticate_client():
    ta_credential = AzureKeyCredential(key)
    text_analytics_client = TextAnalyticsClient(
        endpoint=endpoint, 
        credential=ta_credential)
    return text_analytics_client
    
    client = authenticate_client()
    
    # 文書要約
    def sample_extractive_summarization(client):
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.textanalytics import (
    TextAnalyticsClient,
    ExtractSummaryAction
    ) 
    
    document = [“要約したい文書のテキスト”]
    
    poller = client.begin_analyze_actions(
    document,
    actions=[
        ExtractSummaryAction(MaxSentenceCount=4)
    ],
    )
    
    document_results = poller.result()
    for result in document_results:
    extract_summary_result = result[0]
    if extract_summary_result.is_error:
        print("...Is an error with code '{}' and message '{}'".format(
            extract_summary_result.code, extract_summary_result.message
        ))
    else:
        print("Summary extracted: \n{}".format(
            " ".join([sentence.text for sentence in extract_summary_result.sentences]))
        )
    
    sample_extractive_summarization(client)
                    
    上記のスクリプトを応用することで、大量のニュース記事に対して要約を実行することができます。以下の結果は、livedoor ニュースコーパスのスポーツ記事 100 件に対して要約を行った結果です。100 件の要約は API の入出力も含めて 2 分半ほどで実行が完了しました。実行結果を確認すると、多くの場合で 1 文目や 2 文目の要約文は妥当な文が抽出されており、Rank Score も比較的高いことが確認できました。3 文目の要約文に関しては鍵カッコの途中で文が終わっているなど、違和感のある個所が一部確認できる状態が確認できます。このような部分については、後処理などで改善していく部分になると考えられます。

以上の手順により、Python から Web API 経由で文書要約の機能が利用できます。大量の文書に目を通したい場合には、この方法を用いて要約を作成することで、効率的に文書の確認作業が実施できると考えられます。

文書要約の機能はプレビュー版ということで、今後ブラッシュアップされていく部分もあると思います。Microsoft が昨年 11 月に発表した Azure OpenAI Service では、最新の自然言語処理モデルを利用した自動要約のデモンストレーションを公開しています。このように最新技術を取り入れることで、より高精度な機能が今後提供されるかもしれません。引き続きキャッチアップしていきたいと思います。



「CogEra」はこちら

「Knowledge Bot」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


さいごに

本記事では Azure Cognitive Services for Language における文書要約の機能の利用方法についてご紹介しました。Language Studio でサクッと利用してみる方法や、API を利用して大量の文書を要約する方法など、シーンに合わせた使い方ができるサービスとなっていることが分かります。今回は検証としてニュース記事の要約を行いましたが、メルマガを要約して情報の取捨選択を効率化するような使い道や、議事録を要約して会議の要点を掴むといった使い道もあると思います。このように様々な業務効率化に有用な機能と言えます。また文書を提供する側の場合でも、本機能を用いた要約文を合わせて提供することで、顧客満足度の向上にも寄与できると言えるでしょう。情報に溢れる現代において、効率的に情報を得ることは非常に重要であると考えられます。今回紹介した機能は、日々大量の文書に触れる私たちにとって、優秀なアシスタントとなるかもしれません。本機能がどんなところに活用できそうか、本記事がご検討の一助となれば幸いです。

当社では、アンケート分析や SNS の口コミ分析向けのソリューションである CogEra やチャットボットソリューションである Knowledge Bot など、本記事に関連するサービスをご用意しております。また、当社では AI モデルの構築やデータ分析はもちろん、Azure を活用したデータ分析基盤の構築から、分析結果の可視化まで、一気通貫で支援できる体制を整えております。データの利活用にご興味がございましたら、ぜひ当社までお気軽にお問い合わせください。最後までお読みいただきありがとうございました。


関連ページ

「CogEra」はこちら
「Knowledge Bot」はこちら
「ML Connect」はこちら
「機械学習導入支援サービス」はこちら

DX推進に役立つ情報をお届けします!メールマガジン登録はこちら

【総合】お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録