DX station

【第一回】Azure Cognitive Services for Language で簡単テキスト分析!~サービス紹介と感情分析を使ってみる編~

高橋 良輔

高橋 良輔

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

テキスト分析が Azure のサービスで簡単にできてしまうことをご存じでしょうか?テキスト分析というと、自然言語処理 (NLP) の知識やプログラミングの技術が必要で、データサイエンスに精通していないと難しいと考える方も多いのではないでしょうか。実際に私が前回執筆した Transformers の活用の記事 では、ある程度の自然言語処理や機械学習に関する知識や技術が必要となる内容であったと思います。前回の記事を見て「難しい!」と思われた方、ご安心ください。本記事では Azure のサービスである Azure Cognitive Services for Language を利用した、より簡単かつ実用的なテキスト分析の方法について紹介いたします。多くの機能が用意されているサービスとなりますので、連載形式で紹介していけたらと思います。気長にお付き合いいただければ幸いです。

テキストの分析といっても、目的や手法は様々となります。大量のテキストデータの分析による市場動向の予測を目的とするような活動もあれば、レビューや口コミを分析してマーケティング戦略に活かす目的の活動もあります。それぞれの目的に応じて適切な手法やサービスを選択する必要がありますが、Azure Cognitive Services for Language では多様なニーズに対応するため、様々な機能が提供されています。今回はその中でも、マーケティングや経営戦略に活用できる、テキストの「感情分析」のための機能をピックアップし、その利用方法について解説していこうと思います。



「CogEra」はこちら

「ML Connect」はこちら

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


Azure Cognitive Services for Language とは

Azure Cognitive Services for Language とは、Azure 上で提供されているテキストの分析に特化したサービスです。本サービスではテキスト分析に必要な自然言語処理の機能が提供されており、Language Studio や Web API (以降、単に API とする) から簡単に利用できるものとなっています。こちらは Microsoft Ignite November 2021 において発表されたサービスで、以前から存在していた Text Analytics、QnA Maker、Language Understanding (LUIS) の 3 つのサービスが統合され、更に新機能が追加されたものとなっています。このサービスでは様々な言語で学習された AI モデルがあらかじめ実装されています。そのため自分で大量のデータを用意して学習させる必要がなく、とても手軽に利用可能なサービスとなっています。

本サービスで用意された Language Studio とは、Azure Cognitive Services for Language の機能を WEB ベースで利用できる GUI ツールとなっています。コードを記述する必要がなく、出力結果も視覚的に分かりやすく表示されるため、とりあえず使ってみる場合は Language Studio の活用をおすすめします。

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 ボット

Azure Cognitive Services for Language では、12 種類(12月現在)の自然言語処理の機能が提供されており、これらを組み合わせることで様々なテキスト分析が可能となります。(参考: https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/overview)

これらの機能は Language Studio や API 経由で簡単に利用することができます。本記事では、これらの中から感情分析の機能をピックアップしてご紹介してきます。


「CogEra」はこちら

「ML Connect」はこちら

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


感情分析とは?

感情分析とは、人間の感情を AI によって分析することを指します。NLP では多くの場合、対象のテキストがポジティブな内容か、ネガティブな内容かを分類するタスクとなります。感情分析によって、顧客のニーズや不満を汲み取ることは大きなビジネス的価値があります。例えば以下の図のように、ある製品のレビューについて感情分析することで、製品が好評か不評かを定量的に判定することができます。この結果を事業戦略に取り込むことで、顧客満足度の向上などに繋げることが可能となります。

感情分析には様々な応用があります。アンケートやレビューの分析はもちろんのこと、チャットボットの応対をユーザーの感情に合わせて調整するといった使い方や、SNS などで攻撃的であったり悪質であったりする投稿を監視するような用途もあります。感情分析の AI モデルを自前で構築しようとすると、極性辞書を利用する、大量のラベル付きデータを用意するなど結構な手間がかかり、専門家でないと困難な作業となります。これらの手間や専門知識を必要とせずに、感情分析ができてしまう機能が Azure Cognitive Services for Language の感情分析のサービスとなります。本記事では、Azure Cognitive Services for Language での感情分析の利用方法についてご紹介していきます。

Azure Cognitive Services for Language では、一般的な感情分析 (Sentiment analysis) の機能と、オピニオンマイニング (Opinion mining) という機能が提供されています。

  • 感情分析 (Sentiment analysis): 与えられた文章に対して “negative”、“neutral”、“positive”の感情ラベルを付与します。感情分析結果に対する信頼度も 0 から 1 の間のスコアとして出力します。
  • オピニオンマイニング (Opinion mining): 感情分析の一種で、アスペクトベース感情分析 (aspect-based sentiment analysis, ABSA) とも呼ばれるものです。何が positive で何が negative なのかといった、観点を特定して感情分析を行うことで、上記の感情分析よりも詳細な情報が得られます。記事執筆時点では日本語に対応していないため、本記事では取り扱いません。


「CogEra」はこちら

「ML Connect」はこちら

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


Language Studio を利用して感情分析を試す

まずは Language Studio を利用して、Azure Cognitive Services for Language の感情分析を試してみます。Azure のサブスクリプションを用意した上で、以下の手順を実施していきます。

  1. Language Studio (https://language.azure.com) にアクセスします。
  2. 初回ログイン時には以下のようなウィンドウが表示されます。Create a new language resource を選択して Azure Cognitive Services for Language のリソースを作成します。あらかじめ Marketplace から作成済みの場合は、プルダウンから作成済みのリソースを選択することも可能です。
  3. 各種情報を入力後、 Confirm を押下すると Azure Cognitive Services for Language のリソースが作成されます。Pricing Tier は無料の F0 を選択します。F0 では 1 か月あたり 5,000 文まで無料で実行可能です。
  4. リソースの作成が完了すると、Azure Cognitive Services for Language の各種機能が利用できるようになります。
  5. さっそく感情分析を試してみましょう。

    一覧から感情分析 (Analyze sentiment and opinions) を選択すると以下の画面が表示されます。

    各種設定および分析対象のテキストをボックスに入力して Run を押下するだけで、感情分析が実行できます。今回は入力テキストとして「機能が充実していて使いやすい。」という肯定的な文と、「デザインが好みではない。」という否定的な文で試してみます。

    以下が実行結果となります。実行結果には、入力テキスト全体での感情分析結果を示す Document sentiment と、各文の感情分析結果を示す Sentence sentiment があります。Sentence sentiment の結果をみると、「機能が充実していて使いやすい。」という文は Positive (肯定的) に、「デザインが好みではない。」という文は Negative (否定的) に判定されており、適切に感情分析が行われていることが確認できます。

    このように非常に簡単に感情分析を試すことができます。また結果も分かりやすく表示されるので、とりあえず使ってみる場合に最適です。



「CogEra」はこちら

「ML Connect」はこちら

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


Python から Web API を利用して感情分析を試す

続いて、Python から API を利用して、感情分析を実行してみます。Python と API を利用することで、より多くの文書を効率的に処理することが可能となります。Python の実行環境をご準備の上、以下の手順で実施していきます。

作成したスクリプトは、公式のサンプルを参考にしています。(https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/sentiment-opinion-mining/quickstart?pivots=programming-language-python)

  1. API を利用するにあたって、Azure のテキスト分析用のライブラリを pip でインストールします。
  2. pip install azure-ai-textanalytics==5.1.0
                    
  3. API の利用に必要なキーとエンドポイントを確認します。前章で作成した、Azure Cognitive Services for Language のリソースから確認できます。
  4. 以下のキーとエンドポイントを利用します。

  5. ここからは 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()
                        
  7. 続いて、感情分析のための記述を行います。入出力は JSON 形式となります。
  8. # Example function for detecting sentiment in text
    def sentiment_analysis_example(client):
        documents = [
            {
                "id": "1",
                "language": "ja",
                "text": "機能が充実していて使いやすい。デザインが好みではない。"
            },
        ]
    
        response = client.analyze_sentiment(documents=documents)
    
        for document in response:
            print("Document Id: ", document.id)
            print("Document Sentiment: {}".format(document.sentiment))
            print("Overall scores: positive={0:.2f}; neutral={1:.2f}; negative={2:.2f} \n".format(
                document.confidence_scores.positive,
                document.confidence_scores.neutral,
                document.confidence_scores.negative,
            ))
            for idx, sentence in enumerate(document.sentences):
                print("Sentence: {}".format(sentence.text))
                print("Sentence {} sentiment: {}".format(idx+1, sentence.sentiment))
                print("Sentence score:\nPositive={0:.2f}\nNeutral={1:.2f}\nNegative={2:.2f}\n".format(
                    sentence.confidence_scores.positive,
                    sentence.confidence_scores.neutral,
                    sentence.confidence_scores.negative,
                ))
    sentiment_analysis_example(client)
                    
  9. 上記のスクリプトを実行した結果が以下となります。Language Studio で実行した結果と同様であることが確認できます。
  10. Document Id:  1
    Document Sentiment: mixed
    Overall scores: positive=0.53; neutral=0.01; negative=0.46 
    
    Sentence: 機能が充実していて使いやすい。
    Sentence 1 sentiment: positive
    Sentence score:
    Positive=1.00
    Neutral=0.00
    Negative=0.00
    
    Sentence: デザインが好みではない。
    Sentence 2 sentiment: negative
    Sentence score:
    Positive=0.07
    Neutral=0.01
    Negative=0.92                    
                    

    このように Python からも簡単に利用することができます。Python から API を利用することで、大量のデータを処理したい場合でも対応可能となります。Python からの利用以外にも、Logic Apps と連携することでアプリケーションとして運用する方法など、目的に応じて様々な利用方法が用意されています。



「CogEra」はこちら

「ML Connect」はこちら

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


スポーツ記事のタイトルで感情分析をしてみる

Python から Azure Cognitive Services for Language を利用することで、大量の文書の感情分析が行えるようになります。実務でも多くのデータを対象として分析を行う場合が多いと考えられるので、ここでは Python から API を利用して、多くのテキストを対象とした感情分析を行ってみます。

今回は対象のテキストとして livedoor ニュースコーパスのスポーツ記事を利用します。ここではスポーツ記事のタイトル 900 件に対して感情分析を行い、positive なタイトルや negative なタイトルについて確認していきます。

実装の詳細は省略しますが、上記の Python のスクリプトを応用して 900 件のタイトルに対し感情分析を行います。900 件の感情分析は API の入出力も含めて、45 秒程度で実行完了となりました。

続いて、感情分析結果から positive の信頼度、または negative の信頼度でソートして確認します。以下がその結果となります。

  • positive スコアの上位 5 タイトル
  • negative スコアの上位 5 タイトル

結果を確認すると、positive の結果では「よかった」や「完璧」のような肯定的な表現があることが分かります。一方で、「恐怖」や「怖い」のような単語があるのも確認できます。Negative の結果では「最悪」や「残念」のような否定的な表現が目立つことが確認できます。

またニュース記事ということもあり、全体的に neutral の割合が多い印象でした。本検証では公開されているデータでの検証ということで、ニュース記事を利用しましたが、実際にはレビューや口コミのような、主観的な表現が多いものを対象とする方が、より分かりやすい結果が確認できるかもしれません。

このように Python と API を利用することで、多くのテキストを対象とした感情分析が可能となります。 900 件の分析も 45 秒程度で完了と、実務でも問題なく利用可能なことが確認できました。



「CogEra」はこちら

「ML Connect」はこちら

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


さいごに

本記事では Azure Cognitive Services for Language を利用して簡単に感情分析を行う方法をご紹介しました。Language Studio で少し試してみる使い方や、API を利用して大量のデータを分析する使い方など、目的に合わせて誰にでも使いやすいサービスとなっていることが、本記事の紹介で少しでも伝われば幸いです。かつては専門家の仕事だったテキスト分析も、このような SaaS の活用によって、専門知識なしで誰でもできるような時代となっています。社内外に溢れているテキストデータを使って、手軽に感情分析してみることで、新しい知見を手に入れられるかもしれません。テキストデータの活用で DX の推進をご検討されている方は、Azure Cognitive Services for Language の利用をご一考されてはいかがでしょうか。

当社でも、アンケート分析や SNS の口コミ分析向けのソリューションである CogEra など、本記事に関連するサービスをご用意しております。また、当社では Azure を活用したソリューションを得意としており、当社の AI 関連サービスでも Azure を広く利用しています。データ分析や Azure の活用にご興味がございましたら、お気軽にお問い合わせください。最後までお読みいただきありがとうございました。


関連ページ

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

お問い合わせ

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

ピックアップ

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