清水理史の「イニシャルB」

NASでAI! 無料で試すテキスト分析! 「Azure Cognitive Services Containers」をQNAP「TS-453A」で動かす

 2018年末、Microsoft Azureの「Cognitive Services」の一部機能がDockerコンテナとして利用可能になった。現在はまだプレビューだが、ローカルで動作させることが可能になったことで、外部に持ち出せないデータも容易に解析できる環境が整い始めている。

 今回は、より小規模な環境での利用を想定して、QNAPのNASで「Text Analytics」のDockerコンテナを動かしてみた。

NASの可能性を広げる、Cognitive ServicesのDockerコンテナ提供

 Cognitive ServicesのDockerコンテナ提供は、NASの可能性を広げる1つのきっかけになりそうだ。

 2018年11月、Microsoftは、同社がクラウドサービスとして提供しているCognitive Services(いわゆるAI関連のサービス)の一部機能をDockerコンテナとして提供開始した。

 現状はプレビューで、利用できるサービスも以下のように少なく、さらに一部機能は招待制(用途を申請して許可されれば利用可能。本稿執筆目的で申請した筆者は残念ながら却下されてしまった……)となっているが、従来、クラウド上で提供されてきたサービスをローカルで利用できるようになった。

  • Computer Vision:画像から文字を認識(招待制)
  • Face:顔認識(招待制)
  • Text Analytics:キーフレーズ抽出、言語判定、センチメント分析
  • LUIS(Language Understanding):言語理解

 このように、クラウドサービスをローカルでも稼働させるハイブリッド構成は、最近、盛んに行われるようになってきた。今回の取り組みは、手軽なDockerコンテナとして提供することで、高価なハードウェアやSIと組み合わせることなく、誰でも手軽にクラウドの技術を扱えるようになった点であり、非常に興味深いものだ。

 実際にビジネスシーンで活用するには、それなりのハードウェアを用意する必要はありそうだが、実質的には中小向けのNASでも動作可能だ。内部にデータを保存した状態のままでも、クラウドと同じAIサービスを稼働させる環境が整ったことになる。

 NASベンダーの中でも、QNAPはこの分野への取り組みを比較的積極的に行ってきたことで知られ、CAFFE、CNTKなど各種のコンテナ(GPU版もあり)をNAS上で簡単に稼働できたが、Azure Cognitive Servicesのような商用サービスも稼働可能になったことで、その可能性が一段と広がった印象だ。

NASがスペック不足でも、試すだけなら大丈夫

 実際に稼働させる前に、いくつかの準備をしておこう。

 まずはハードウェアだが、今回利用したNASは、QNAPの「TS-453A」というモデル。2015年発売の古い製品で、CPUはクアッドコア1.6GHzのCeleron N3150を搭載し、メモリは8GBまで搭載可能な4ベイの製品となっている。

QNAPの4ベイNAS「TS-453A」

 QNAPのNASでは、ARM系のCPUを搭載した2ベイモデルなどでも、Container StationアプリでDockerコンテナを利用可能だ。ただし、Azure Cognitive Services Containersを稼働させる場合は、Intel系のCPUを搭載したモデルが必要になる(ARM系ではコンテナが起動しない)。

 なお、Azure Cognitive Services Containersでは、サービスごとに要求されるハードウェアのスペックが異なっている。今回、稼働させたText Analyticsのキーフレーズ抽出では、2.6GHz以上のCPU(1コア)、2GBのメモリが最低要件(推奨メモリは4GB)と定められている。

要求スペックはなかなか高いが……

 前述したTS-453Aは、メモリこそ要件を満たしているものの、CPUのクロックは要件を満たしていない。ただし、筆者がテストした限りでは、快適ではないものの、スペック不足でも稼働させることはできた。とはいえ実用性を考えるなら、よりパワフルなNASを用意すべきだろう。

 ちなみに、本稿ではQNAP TS-453Aを使っているが、Synologyの「DS1517+」(2.4GHz、クアッドコア)でも同様にAzure Cognitive Services Containersの稼働を確認済みだ。設定画面が若干違うだけで、ほぼ同じ手順で実装できるので、Synology NASのユーザーも試してみるといいだろう。

ダウンロードしたイメージからAzureサービスのコンテナを稼働させる

 続いて、実際にNAS上のDockerコンテナとして、Azure Cognitive Services Containersのサービスを稼働させてみよう。

 Azure Cognitive Services Containersは、あくまでもハイブリッド構成のためのソリューションで、データ処理はローカルで実行されるものの、課金などのためにクラウド上のサービスとの接続も必須となる。ただし、月5000トランザクションまでは無料で利用も可能だ。

 このため、あらかじめAzureのポータルで「Text Analytics」をデプロイしておき、リソースの概要画面で接続するためのエンドポイント(https://japaneast.api.cognitive.microsoft.com/text/analytics/v2.0など)と、アクセスキーをメモしておく。

Azureのポータルでエンドポイントとアクセスキーをメモしておく

1.イメージのダウンロード

イメージをダウンロード

 まずは、イメージをダウンロードする。前述したように、Computer VisionやFaceのイメージは招待制となっているが、そのほかのイメージは誰でもダウンロード可能だ。

 QNAPのContainer Stationの「Images」の画面で「Pull」ボタンをクリックして、次のアドレスからイメージをダウンロードする。ここでは以下のサービスの中から、キーフレーズ抽出のみをとりあえずセットアップする。

  • Text Analytics
      キーフレーズ抽出:mcr.microsoft.com/azure-cognitive-services/keyphrase
      言語判定:mcr.microsoft.com/azure-cognitive-services/language
      センチメント分析:mcr.microsoft.com/azure-cognitive-services/sentiment
  • LUIS
      mcr.microsoft.com/azure-cognitive-services/luis

2.コンテナの設定と作成

 次にコンテナを作成する。ダウンロードしたイメージの「+」アイコンをクリックして、イメージから新しいコンテナを作成する。

 CPUやメモリは任意で構わないが、クラウドに接続するためのいくつかの設定が必要だ。「Advanced Settings」の「Environment」で、次の3つの値を設定しよう。

  • ApiKey:Azure上で確認したアクセスキー
  • Billing:Azure上で確認したエンドポイント
  • Eula:ライセンスの同意「accept」と指定する

 次に、ローカルネットワークでアクセスするためのポートを指定する。標準のランダムな値でも構わないが、ここでは「50002」を割り当てておく(コンテナ側は5000)。

3つのパラメーターを設定
ポート番号を指定しておく

 これで、「Create」を選べばコンテナが動作し、NAS上で稼働するText Analyticsのキーフレーズ抽出サービスが利用可能になる。

 実際に稼働してリクエストを処理できるようになるまでは、しばらく時間がかかるので、コンソールで動作完了を確認してから「http://[NASのアドレス]:50002」とアクセスすると、「Your Azure Cognitive Service Container is up and running」というメッセージのウェブページが表示されるはずだ。

 なお、ウェブページの「Serive API Description」をクリックすると、APIの仕様を確認できる。サンプルを実行することもできるが、筆者がテストした限りでは「Status」の取得はできなかった。

コンテナが稼働するとローカルのウェブページを表示できる
APIの情報も参照できる

青空文庫のテキストからキーフレーズ抽出するリクエストを投げてみる

 では実際に、NAS上で稼働するキーフレーズ抽出を使ってみよう。

 REST APIを使ってアクセスするので、Curlなどを使ってもいいのだが、パラメーターが多く面倒なので、ここでは「POSTMAN」を利用する。POSTMANについては、過去の本連載でも解説しているので参考にして欲しい。

 リクエストで「POST」を選択し、アドレスに「http://[NASのアドレス]:50002/text/analytics/v2.0/keyPhrases/」を指定する。

 「Headers」に「Content-Type:application/json」と「Accept:application/json」を指定し、「Body」で「raw」を選択し、以下のように分析したいテキストをjson形式で投げればいい。これで、文章から「メロス」などのキーフレーズを抽出できる。

POSTMANを使ってリクエストを投げる
{
  "documents": [
     {
      "language": "ja",
      "id": "1",
      "text": "メロスは激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。メロスには政治がわからぬ。メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。けれども邪悪に対しては、人一倍に敏感であった。"
    }
    ]
}

 ちなみに、同じ文章をセンチメントを使って分析すると、スコアは「0.37715……」となった。「激高」したというフレーズの割りには、途中に生い立ちの記述が含まれるためか、若干、それほどネガティブな判定はされないようだ。

センチメントも分析してみた

実用的なのはLUISやComputer Vision

 というわけで、今回は、NASでマイクロソフトのAzure Cognitive Services Containersを動かしてみた。

 使い方自体は非常に簡単で、NASならGUIで設定できてしまうので、正直、誰でもすぐに稼働させることができるはずだ。

 今回は、Text Analyticsのキーフレーズ分析の使い方を紹介したが、実用的なのはLUISやComputer Visionだろう。LUISで企業や業界ならではの固有名詞を学習させてドキュメントを分析するとか(現状は文字数制限あるので難しい面もある)、画像として保存されているNAS上のデータからテキスト情報を抜き出すといった使い方ができると、眠っていた情報を活用できるようになる可能性がある。

 NASとCognitive Serviceの相性は、なかなか良さそうだ。

 ただ、やはりCPUパワーはそれなりに必要で、リクエストを投げると、NASのCPU負荷が瞬間的に30~50%ほどへ跳ね上がる。連続してリクエストを投げる可能性があるなら、やはりもっとパワフルなハードウェアが必要になるだろう。

Amazonで購入

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できる Windows 10 活用編」ほか多数の著書がある。