神戸のデータ活用塾!KDL Data Blog

KDLが誇るデータ活用のプロフェッショナル達が書き連ねるブログです。

Azure Cognitive Service for Languageでテキスト分析してみた:②キーフレーズ抽出編

こんにちは!神戸デジタル・ラボ、DataIntelligenceチームの垣内です

前回の記事ではGoogle Colaboratory上でAzure Cognitive Service for Languageを使えるように環境の準備をしました。
もう一度見たい方はこちらからご覧ください!

kdl-di.hatenablog.com

また、Azure Machine Learning 上で実行したい方はこちらをご覧ください。

kdl-di.hatenablog.com

今回は、キーフレーズの抽出をします! 早速やっていきましょう!




前回の記事で使用したプログラムをベースに、日本語テキストからキーフレーズ抽出を行えるように修正していきます。
Azure Cognitive Service for LanguageのAPI仕様書はこちらになります。

プログラムの修正

前回の記事で使用したプログラムは、英文テキストからキーフレーズ抽出するものでした。 今回は、日本語テキストからキーフレーズ抽出ができるように設定を変更します。

①設定言語を日本語に変更する

分析するテキストがどの言語で書かれているかを引数で設定します。デフォルトでは「en(英語)」が設定されています。
変更前のプログラムでは、デフォルトの設定を使用していたため、言語を指定する引数を省略していました。

今回は日本語で分析したいので、以下のように引数に「language="ja"」を追加しています。
他の言語で分析したい場合は、こちらを参照してください。

# 変更前
client.extract_key_phrases(documents = documents)

#変更後
client.extract_key_phrases(documents = documents, language="ja")

②分析するテキストを変更

前回は「My cat might need to see a veterinarian.」という英文を分析しました。 今回は、原口さんが執筆してくれた「【やってみた】YOLOv5+ByteTrackでオブジェクトトラッキング!」 から分析に使うテキストを抜粋しました!

# 変更前
documents = ["My cat might need to see a veterinarian."]

# 変更後
documents = ["【やってみた】YOLOv5+ByteTrackでオブジェクトトラッキング!  近年様々なところで利用される物体検出AI。物体検出AIで検出された物体を追跡することをオブジェクトトラッキング(物体追跡)と言います。このオブジェクトトラッキング、どういった場面で使われているのでしょうか?例えば防犯カメラ。一般的な物体検出では、その瞬間人が何人写っているかは分かりますが、ある人物がどこからどの方向に移動しているかは認識できません。この問題にオブジェクトトラッキングを利用すると、ある人物がどこからどの方向に移動したのか、どういう経路で移動したのかを追跡できるようになります。"]

これでプログラムの修正は完了しました!実行前に完成版のプログラムを眺め、どのようなことをしているか見ていきましょう。

※完成版のプログラム

key = "{KEY}"
endpoint = "{ENDPOINT}"

from azure.ai.textanalytics import TextAnalyticsClient
from azure.core.credentials import AzureKeyCredential

# キーとエンドポイントを使用してクライアントを認証し、TextAnalyticsClientを使えるようにする
def authenticate_client():
    ta_credential = AzureKeyCredential(key)
    text_analytics_client = TextAnalyticsClient(
            endpoint=endpoint, 
            credential=ta_credential)

    return text_analytics_client

client = authenticate_client()

# キーフレーズ抽出を実行し、結果を表示
def key_phrase_extraction_example(client):

    try:
        documents = ["【やってみた】YOLOv5+ByteTrackでオブジェクトトラッキング!  近年様々なところで利用される物体検出AI。物体検出AIで検出された物体を追跡することをオブジェクトトラッキング(物体追跡)と言います。このオブジェクトトラッキング、どういった場面で使われているのでしょうか?例えば防犯カメラ。一般的な物体検出では、その瞬間人が何人写っているかは分かりますが、ある人物がどこからどの方向に移動しているかは認識できません。この問題にオブジェクトトラッキングを利用すると、ある人物がどこからどの方向に移動したのか、どういう経路で移動したのかを追跡できるようになります。"]

        response = client.extract_key_phrases(documents = documents, language="ja", show_stats=True)[0]

        if not response.is_error:
            print("\tKey Phrases:")
            for phrase in response.key_phrases:
                print("\t\t", phrase)
        else:
            print(response.id, response.error)
    except Exception as err:
        print("Encountered exception. {}".format(err))
        
key_phrase_extraction_example(client)

関数定義をして、それを実行するプログラムを用意すれば準備完了です。比較的簡単に作成できましたね!
※実務で分析をする際はdocumentsの内容はベタ書きしません。今回はご愛嬌でお願いします!!

いざ分析!

では分析結果を見てみましょう!
左上の再生マークを押して、プログラムを実行すると...
0.189秒で結果が表示されました!! 1秒もかからないうちに抽出が完了しました。

では次に、どのようなキーフレーズが得られたのか見てみましょう!

f:id:kdl-di:20220311135019p:plain
キーフレーズ抽出結果
どれどれ...不自然な結果は少なく、綺麗にキーフレーズ抽出ができましたね。
「オブジェクトトラッキング」という長いフレーズや「物体検出AI」のような「日本語+英語」の組み合わせでも抽出できているのがとても印象的です。
一方、「YOLOv5」が「YOLOv」という形で抽出されていて固有名詞抽出の難しさを感じました。

少ないプログラムで、高精度かつスピーディーにキーフレーズ抽出ができるので、業務にも使えそうです。

まとめ

Azure Cognitive Service for Languageを用いれば、手軽に高精度なキーフレーズ抽出ができることが分かりました。 Pythonを書くことができれば簡単に分析が出来るので、プログラマーの方も参入しやすいですね。
一方で「YOLOv5」という固有名詞が意図しない形で抽出されてしまうので、対策が必要という事も分かりました。

次回予告

次回は人や場所、組織、数量などを自動で識別・分類する「固有表現認識(NER)」に挑戦してみたいと思います。 いったいどんな結果になるのかとても楽しみです!

垣内優花

データインテリジェンスチーム所属
テキスト活用するプロジェクトを担当。ビジネスを意識したデータ活用を考えるデータアナリスト。初心者向けの情報・テキスト活用について発信していきます!