分析活動の中でのAzureの活用法

では、そういった分析活動の中で、Azureをどのように活用しているかを説明します。分析活動の中でAzureを活用する意義は、手軽にできることと、Webアプリなどでの公開が非常に簡単なので、メンバー全員に知見のトレースや、デモの環境を簡単に渡せることが、最大のメリットだと思っています。

今回、はじめにお見せるデモ環境は、すごく簡単なトイプログラムですが、App Service planの中にApp Serviceを1個立てて、これがWebの入り口になります。そこに、Streamlitという、PythonベースでWebアプリが作成できるライブラリを置いて、Text AnalyticsのAPIを呼んで、その結果をただ表示してみるようなデモアプリです。このあと、見せて説明したいと思います。

(デモ開始)

先ほど紹介したデモサイトについてのApp Service planが、画面に映っています。このURLにアクセスすると、このようなすごく簡単なページが出てきます。

でもこれがサイトになっていて、ここにテストで用意したデータがありますが、それを上げるとそのデータが見えて、ここからさっそくAzureのText Analyticsを使っています。自動検出:Japanese、日本語でうまくいっています。

いくつかサンプルをもってきて、センチメント分析。ポジティブ、ネガティブ、中立のスコアリングが見えます。

固有表現抽出と言われている、固有名詞や企業などを抽出する機能も、日本語できっちり働いていて、例えば、“東京メトロ”はOrganization、組織にちゃんとなっているし、“KDDI”、“ソフトバンク”もOrganizationになっています。

この固有表現抽出には、ちゃんとカテゴリーやサブカテゴリーがつくような状態ですが、そのキーフレーズだけを抽出して集計するような機能ももちろん備わっていて、キーフレーズを抽出してきて、カウントをしているかたちになっています。

これだけだと、ちょっとなんぞやというかたちだったので。せっかく私が「比較比較」と言っているので、比較をしてみましょう。キーフレーズをカテゴリーごと頻度順に並べます。これはlivedoorのニュースコーパスですが、そのlivedoorのニュースコーパスのカテゴリーごとに、キーフレーズを頻度で並べてみます。

そうすると、違いがいろいろ出てきて、まず1つ目に見えるのは、「こと」は分析上大事じゃないと言われていて。

やはり自然言語の中でよくある、ストップワード処理を、「こと」は入れようかがこれでもうわかります。各記事の特徴が、それぞれ違う。今回は「単語、キーフレーズが使われているんだな」「しっかりジャンル分けされているんだな」ぐらいしか考察しませんが、そういうことをはっきり可視化できるのが、やはり比較の大きな強みかと思います。

今回はこれぐらいしかプログラムを用意していませんが、これに用いたライブラリは、実はこの3つだけです。requirementでサーバーに飛ばしているものですが、streamlit本体と、表で見せなければいけなかったのでpandasは入れました。あとは、azure-ai-textanalyticsのAPIを使うためのライブラリ。

しかも、総コード数は、フロントとバックエンド合わせて実は100行ちょっとしかないです。そのぐらい簡単なコードで、実はもうここまで分析チックなことができています。

実務上はさすがにこれだともう少し足りないので、自分たちでもう少しライブラリで可視化をしたり、スコア計算をして内部で展開して、可視化ツールとして使っています。これで今回のデモ、「はじめ」を終わります。

(デモ終わり)

BERTを利用したいときのAzureの活用パターン

先ほど見ていただいたデモでは、可視化のところまで、もしくは比較して集計をするところまででしたが、BERTなどを利用したいときにも、Azureは非常に便利です。

自分のBERTを利用したいときに、Azureの活用として大きく2つのパターンがあります。1つ目は、DSVM(Data Science Virtual Machines)を立てて、GPUを自分たちで利用すること。もう1つは、Azure Machine Learningと、その中に含まれているNotebookを活用するという方法があります。今回は後者を紹介します。

これもちょっと簡単なデモをまた用意しています。Azure Machine Learning上にJupyter Notebookを立て、そこでVMにTransformersを入れます。

先ほども出てきましたが、Transformersは事前学習済み言語モデルを活用する際に、Pythonではデファクトライブラリになりつつある、非常に有名なライブラリです。そのTransformersを使って、BERTの学習をAzure VM上で回してみます。

(デモ開始)

こちらがAzure Machine Learning Studioと呼ばれている、Azure Machine Learningのリソースを立てるとアクセスできる、Azure Machine Learningを使うためのポータルページのようなところです。

実は、もうデプロイ済みです。GPUを立てるのが非常に簡単で。コンピューティングというところで、Newを押して、GUPを選択すると、自分が立てられるGPUが出てきます。これを「次へ」とやり、名前決めればこれだけでもうGPUが使えるような環境になっています。

今回紹介するのはNotebookなので、「Notebooks」というところに行って。もう自分が作ってしまっているのもありますが、このフォルダのところで「ファイルをアップロード」を選択し、自分が作ったNotebookを上げて、それを開く。

さっきのGPUが使えるような、もうマウントされた状態でNotebookを使えます。このNotebookはネットにもよく落ちている、BERTでlivedoorのニュースコーパスを分類するNotebookです。自分で少し変えているところもありますが、それを今回デモで流します。

実行は「カーネルを再起動し、すべてのセルを実行する」を押せば、上からバーっと流れていきます。

VMを自分でもつことのいいところはけっこうあります。今マジックコマンドで各ライブラリをインストールしていますが、以前にGPUvmでは試しているので、各ライブラリはもうあるよということで、環境の保存ができます。

言語の分野はいろいろなことをやり始めると、ライブラリの依存関係で入れていき、コンパイルしてみたいな、いろいろな外部ツールのインストールも走るようになってきます。要は、1回やった作業をクラウドなどに保存できるのは非常に大きな強みかなと思っています。

こんなふうに話していると、どんどん処理が進んでいきます。今ちょうど、そのインストールしたライブラリを、さらにインポートしているところです。

ここでちょっと先に言ってしまうとcudaのavailable。いわゆる「GPU使えていますか?」という確認をここでちゃんとしてみます。ここでちゃんとTrueになっているので、GPUが使えていることがわかります。

あとはもうファイルを、ニュースコーパスを読み込んで。ラベルはトランスフォームしていますが、各ニュースコーパスについてFine-Tuningがここで始まります。

もう、Fine-Tuningの実施が始まろうとしていて、もう少しすると、始まりの画面が出てくると思います。今ちょうど、事前学習済みのモデルを読み込んでいて、Transformersで読み込んでいます。

ここでも使用デバイスはちゃんとcudaになっているので、GPUが使われています。スタートとなり、どんどん学習が進んでいきます。

ただこの学習、さすがにGPU使っても1時間弱ぐらいかかるので、実行済みのものをもってきています。 Fine-Tuningの実施をやっていくとどんどんログで吐き出していて、Lossなどが下がり、精度が上がっていくことが確認できます。

学習が終わったので、テストデータを使って、検証して。モデルの保存も1回行っていますが、そのあと精度検証ということで。まず精度はaccuracyのほうで、全体で0.95出ています。もう少しちゃんと見ていくということで、各ラベルについて、precision、recall、f1-scoreを出してみます。

ネットで転がっているものだと、実は0.97や0.98を越えていますが、今回はパラメーターチューニングをちゃんとしていないし、高速化のために少し学習をサボっているところがあるので、少し精度は落ちています。それでも、ベースラインと言われてるモデルよりもぜんぜん高い精度が叩き出せます。

confusion_matrixもこうやって出せます。あと、ここが少し特殊で、自分たちで学習したあとにBERTを分析するとき、どうしてもattentionsの中身や、hidden_statesの中身を見たいことがありますが、Transformersだとそれも簡単に取り出せます。

今回はモデルを読み込むときにoutput_attentionsをTrueにしているだけですが、hidden_statesもTrueにすれば、それも取り出せます。

今回はただベクトルを並べているだけですが、取り出して、数値を使ってattentionsの内容を可視化してみたり、ちゃんと自分たちが意図したところの単語にattentionsがついているかの分析の確認などもできるようになっています。

本当にこれだけ簡単にGPUをポチポチすれば動かせるのは、非常に有益です。毎回GPUを使う案件ではないからこそ、ただGPU使いたくなったときに、気楽に試せる環境は非常にありがたいと思って、今回デモとして紹介しています。

(デモ終わり)

デモで見てもらったように、かなりAzureの活用ができることが理解してもらえたかなと思います。

NLP分野でも、かなりGPUが必須になりつつあります。どうしてもBERTなどを使って分類をしたいという要件も少ないけれども増えてきています。分類までいったらBERT系の技術が必須になってきているこの時代の中で、やはりGPUをふだん用意できないときに、手軽に試せる環境がクラウドで用意できるというのは、私にとっては本当にありがたい状況になっています。

今見せたデモは、いきなりText Analyticsのリソースが立っていたり、Azure Machine Learning Studioから始めてしまいましたが、そこのデプロイ方法については公式のドキュメントがかなり丁寧に整備されています。

自社のサービス「ML Connect」「CogEra」の紹介

この章は自分たちのサービス紹介で、少し宣伝になりますが、今見せたデモ、トイプログラム2つなので、「実案件だとなかなか使えないんじゃない?」とか、「言うて、そんなに活用していないんじゃないの?」と言われるかなと思ったので、「いや、そんなことないですよ」ということで2つ。ちょっと宣伝もかねて紹介します。

1つ目が「ML Connect」。私たちはMLCと呼んでいます。こちらは先ほど見せたBERTのアーキテクチャーに実は近いです。私はNotebooksをデモをしましたが、そこにあるAutoMLを活用して、時系列予測と異常検知を早く手軽に低コストで提供するサービスになっています。

MLC - Forecast、時系列予測のほうは、例えばビルの電力需要の予測、もしくは材料や部品の需要予測などに活用してもらうことを想定しています。

異常検知モデルに関しては、工場設備の異常検知などで活用してもらえればと考えております。

2つ目、アンケート分析ツール「CogEra」です。こちらはデモ1のほうで使ったアーキテクチャーをもう少しサービス向きに拡充させて、もう少し内部でも自然言語処理のスコアリングや、可視化、カラフルにする活動をもう少しがんばってみた、みたいなツールになっています。

そのため、実は先ほどのApp Serviceとレジストリを使ったようなアーキテクチャー構成そのままに、私たちはサービス展開もしているのが実状になっています。

先ほど見せたようにアーキテクチャーは非常に簡単なので、低コストで早くサービスを届けることを目指しています。「簡単に、知見がなくても低コストで」をモットーに提供しています。

分析速度を上げてお客さまにぶつけていくことが大切

では、最後にまとめです。2018年度以降、NLPの研究は非常に活性化をしています。研究分野もどんどん実用に向けた応用系の分野にシフトが進んでいます。ただ一方、実案件上では、機械学習を利用した分類や翻訳、生成よりは、可視化や分析のニーズがまだ大多数です。

その中で、私がモットーにしているのは、いかに分析速度を上げて、お客さまにぶつけていくかということが大事になってくるかなと思っています。また、そういった活動をAzureをうまく活用することで、すごく効率的に、かつ、早くできることが、今回この発表で言いたかったことになります。