Text Speech APIを試す1

Posted on

JMT西森です。

 

今回は Microsoft Cognitive Service の1つである

・Text Analytics API

を試してみたいと思います。

 

Text Analytics APIですが、大きく以下4つの機能を提供しています。

Sentiment Analysis(感情分析:Positive or Negative) 日本語不可(英語/スペイン語/フランス語/ポルトガル語)
Key Phrase Extraction(キーフレーズ抽出) 日本語可(英語/スペイン語/ドイツ語/日本語)
Topic Detection(トピック検出) 日本語不可(英語のみ)
Language Detection(言語検出) 日本語検出可(120言語をサポート)

今回は、「Sentiment Analysis」の機能を試してみたいと思います。

 

1. 準備
まず最初にMicrosoft Accountの取得と、Cognitive Service Accountの登録が必要です。
こちらについては以下サイトで登録可能ですので、実施します。# 手順割愛

・Microsoft Account
https://www.microsoft.com/ja-jp/msaccount/?lc=1033

・Cognitive Service Account
https://www.microsoft.com/cognitive-services/en-us/

 

次に、Free Subscription Keyの取得を行います。
Cognitive Service Accountにログイン後、画面上の「Get started for free」を選択します。

k.nishimori_20170308_001

 

 

 

 

 

 

 

 

 

リストから「Text Analytics」を探してチェックを入れ、さらに画面下の
「I agree to the Microsoft Cognitive Service ~~~」にチェックを入れ、
最後に「Subscribe」を選択します。

k.nishimori_20170308_002

 

 

 

 

 

 

 

 

 

【My free Subscriptions】の画面で、「Text Analytics」の行があればOKです。
【Key 1】もしくは【Key 2】の値を取得しておいてください。

 

2. Sentiment Analysis を試す
REST APIに分析したいテキストを送信すると、0~1の間のスコアが返ってきます。
スコアが1に近ければ近い程ポジティブ、スコアが0に近ければ近い程ネガティブな感情を持っていることを表します。

 

コード書くのもいいんですが、今回は手抜きしてAPI ReferenceのWebページから動作検証してみます。
Text Analytics APIのホームページから、画面右の「API Reference」を選択します。
k.nishimori_20170308_003

 

 

 

 

 

 

 

 

 

画面左のメニューから「Sentiment」を選択し、続けて「Open API Testing Console」からページ遷移します。

k.nishimori_20170308_004
ちなみに、本ページ下部に各言語でのサンプルコードがあります。

 

ここでは、以下3つの情報を入力します。

Ocm-Apim-Subscription-Key 【1.準備】で取得した free subscription key を入力してください

k.nishimori_20170308_005

 

Request Body – language 今回は英語で試すので、「en」としてください
Request Body – text 解析したい文章を入力してください。

k.nishimori_20170308_006

 

今回使用する文章として、以下2つを試してみました。

<オバマ大統領の真珠湾での演説の1節>
“Here in this quiet harbor, we honor those we lost, and we give thanks for all that our two nations have won — together, as friends.May God hold the fallen in His everlasting arms. May He watch over our veterans and all who stand guard on our behalf. May God bless us all.Thank you.”
出典:http://www.nikkei.com/article/DGXLASGM28H37_Y6A221C1000001/

 

<メリル・ストリープ氏のスピーチの1節>
“There was one performance this year that stunned me. It sank its hooks in my heart. Not because it was good. There was nothing good about it. But it was effective and it did its job. It made its intended audience laugh and show their teeth. It was that moment when the person asking to sit in the most respected seat in our country imitated a disabled reporter, someone he outranked in privilege, power, and the capacity to fight back. It kind of broke my heart when I saw it. I still can’t get it out of my head because it wasn’t in a movie. It was real life.”
出典:http://d.hatena.ne.jp/tuber/20170110/1484023906

 

まずはオバマ大統領の真珠湾演説のほうで試します。
TextSpeechAPI1_007

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

結果はこうなりました。

TextSpeechAPI1_008

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

見て分かる通り非常に1に近いスコアとなっており、非常にPositiveであると認識されています。

 

次に、メリル氏のスピーチのほうで試します。
TextSpeechAPI1_009

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

結果はこうなりました。
TextSpeechAPI1_010

 

 

 

 

 

 

 

 

 

 

 

 

 

こちらも見て分かる通り非常に0に近いスコアとなっており、非常にNegativeであると認識されています。

 

ちなみにトランプ次期大統領がツイッターで”CNNはうそのニュース”と呟いた内容を使って本機能を試したところ、非常にNegativeな内容と認識されました。この機能はあくまでも「テキストの内容が Positive or Negative であるかどうかを判別している」のであって、「発言者の感情を表しているわけではない」ことに注意が必要です。

 

また日本語が使えないのが非常に残念です…が、これは今後に期待したいと思います。
今回はここまで。

LINEで送る

Microsoft Cognitive Servicesを試してみる

Posted on

非常に久し振りの投稿になります。
JMT西森です。

 

ある案件でMicrosoft Cognitive Servicesについて色々と調べる機会がありました。
いくつか試してみたものもありますので、何回かに分けて紹介したいと思います。

 

Microsoft のサイトによると、Microsoft Cognitive Services は
“機械ベースのインテリジェンスを活用してユーザー エクスペリエンスを高めるツールにより、やり取りを自然かつ状況に応じて行うことができるようにします。視覚、音声、言語、および知識に関する、現在も拡大中の強力な人工知能アルゴリズムのコレクションを活用してください。”
とあります。

https://azure.microsoft.com/ja-jp/services/cognitive-services/

 

色々な機能を持つREST APIが提供されており、例えば画像やテキストの認識処理、音声認証/音声認識/音声→テキスト変換、テキスト翻訳等の様々な機能を利用することが出来ます。現時点(2017/1/13)ではPreview含め、24ものAPIが公開されています。
https://www.microsoft.com/cognitive-services/en-us/apis

 

例えば以下のような機能を提供しています。

・Computer Vision API
画像から、画像に含まれる情報を取得します。
プールで泳いでいる画像をREST APIにPOSTすると、「水」「人」「男性」「28歳」「泳いでる」「スポーツ」
等といった解析結果をJSON形式で返答します。

・Bing Speech API
音声データをテキストに変換したり、テキストから音声データに変換します。
日本語にも対応しています。

・Text Analytics API
テキストから感情(ポジティブorネガティブ)を読み取ったり、文章からキーフレーズやトピックとなる言葉を読み取ります。
但し感情読み取りに関しては日本語に対応していないようです。

 

また、ほとんどのAPIは(機能制限有り)無償で利用することが可能です。
利用には Cognitive Services Account の登録と、利用するAPIのfree subscription keyの取得が必要です。
https://www.microsoft.com/cognitive-services/en-us/sign-up

20170113_k.nishimori_001

 

 

 

 

 

 

 

 

 

 

上記画面では、既にいくつかのAPIを利用してるため、リストが表示されていますが、
最初にログインした状態では、「My free subscriptions」が(0)になっています。

 

次回から実際に各APIを利用してみたいと思います。

LINEで送る

Azure HDInsight Spark を試してみた3

Posted on

JMT西森です。

今回はデフォルトで用意されているサンプルデータを用いて、
Apache Hive(以後、Hive)を使用して色々と遊んでみたいと思います。

まず、Hiveについて少しだけ説明します。

HiveはHadoop上で動作可能な、データの集約・問い合わせ・分析が可能なデータウェアハウスソフトウェアです。
SQLによく似た記述方式(厳密にはサポートしていません)であるHiveQLを使用し、Select文をMapReduce方式に
置き換えて実行することができます。

但しあくまでもSQL”ライク”なだけなので、RDBMS上で使用するSQLクエリがそのまま使用できるわけではありません。

詳細については下記が非常に参考になります。
# 本ブログ作成にあたっても非常に参考とさせて頂いています
・Wikipedia: https://ja.wikipedia.org/wiki/Apache_Hive
・Hiveメモ: http://www.ne.jp/asahi/hishidama/home/tech/apache/hive/index.html

それでは本題。サンプルデータで遊んでみましょう。

Azure Console 画面から「SPARK DASHBOARD」を選択(ID/Pass入力)し、
表示される画面のタブから「Hive Editor」を開きます。

20151127_001

デフォルトではサンプルデータのSelect文が記載されています。サンプルデータは
既にテーブルとして作成されており、「hivesampledata」という名前になっています。

なお前回も記載しましたが、実体はStorage Account上にあるテキストファイルです。
先程の「File Browser」から辿っていくことで、実体ファイルが確認出来ます。
「File Browser」⇒「アカウント名」⇒「コンテナ名」⇒「hive」⇒「warehouse」⇒「hivesampletable」
と辿ることで「HiveSampleData.txt」が見つけられると思いますので、
まずはそれを開いて中身を見てみましょう。なお、約5MB程度のデータです。

20151127_002

20151127_003

時間や文字コード、iPhoneやSamsung、California、United States等があります。
各データ列がどのような意味を持っているのか、テーブル構造を調べます。
Hive Editorにて以下クエリを発行し、完了後に結果を見てみましょう。
> desc hivesampletable

20151127_004

ジョブが完了した(StatusがComplated)ら、「View Details」を選択します。
20151127_005

Job Outputで列の情報が色々と取得できたかと思います。
「querydwelltime」や「sessionid」、「sessionpagevieworder」等があることから、
あるWebサイトで、ページごとの接続元デバイス情報、処理時間等をまとめた
ログデータであるように読み取れるかと思います。

それでは色々とやってみましょう。以後は
HiveQLを入力 ⇒ Submitをクリック ⇒ 完了を待つ ⇒ 完了したらView Detailsで確認
という流れが続きますので、上記手順は割愛して記載します。

まず、クライアントの数を数えることにします。ただのカウントだと重複レコードもそのまま
カウントされてしまうため、clientidをdistinctしてみたいと思います。以下HiveQLを発行してみましょう。
> select count(distinct clientid) from hivesampletable;

結果は「14517」でした。ちなみに全件数は「59793」です。

20151127_006

ちなみに、どれくらい処理に時間がかかったのでしょうか?
Job Logの最後のほうを参照すると、
Time taken: 60.285 seconds, Fetched: 1 row(s)
とあるので、全体の処理時間としては約1分程だったようです。

次は、en-US以外のマーケット(国?)からのアクセスしてきたデバイス数を、
それぞれのマーケットごとに集計してみます。以下HiveQLを発行してみましょう。
> select market, count(distinct clientid) from hivesampletable where market “en-US” group by market;

20151127_007

en-GBが一番多く、616件でした。ちなみにこれ、イギリスです。

次は、querydwelltimeの平均値を取得してみます。
以下HiveQLを発行してみましょう。
> select avg(querydwelltime) from hivesampletable where querydwelltime is not null;

20151127_008

26821…単位がms(マイクロ秒)だとしても、長すぎる気がしますね。

前のテキストを眺めてみても1桁2桁が多くあるので、一部の巨大な値の影響でしょうか。

querydwelltimeが本値以上となっているレコードを探します。
以下HiveQLを発行してみましょう。
> select * from hivesampletable where querydwelltime > 26821

20151127_009

16件もありました。そりゃぁ平均値が押し上げられるわけですね…。
querydwelltime の値の分布を力技で調べてみます。
以下HiveQLを発行してみましょう。
> select 1, count(*) from hivesampletable where querydwelltime > ‘1’;
> select 10, count(*) from hivesampletable where querydwelltime > ’10’;
> select 50, count(*) from hivesampletable where querydwelltime > ’50’;
> select 100, count(*) from hivesampletable where querydwelltime > ‘100’;
> select 500, count(*) from hivesampletable where querydwelltime > ‘500’;
> select 1000, count(*) from hivesampletable where querydwelltime > ‘1000’;
> select 5000, count(*) from hivesampletable where querydwelltime > ‘5000’;
> select 10000, count(*) from hivesampletable where querydwelltime > ‘10000’;
ちなみに複数行を一度に実行することが可能です。その場合は、最後にセミコロンを入れましょう。

20151127_010

値が500より大きいレコードの総数が 827 と全体(59793)の約2%に相当するようです。
では、値が500未満のものを対象として、改めて平均値を調べてみます。
以下HiveQLを発行してみましょう。
select avg(querydwelltime) from hivesampletable where querydwelltime < 500;

20151127_011

約18と、なんとなくそれっぽい値が取得できたように思えます。

如何でしょうか。基本的なSQL構文さえ理解していれば、テキストデータに対して
様々な視点からデータ分析・調査できることが分かったかと思います。

なお今回はHiveQLを使って情報を取得しましたが、前回記載したJUPYTER NOTEBOOKや
ZEPEPLIN NOTEBOOK を使うことで、もう少しスマートに解析が出来て、かつグラフ化等の
可視化も出来るようになります。

今回はサンプルデータを使いましたが、出来れば手元にある実データを使いたいですよね。
次回は実データをこの環境にどう取り込むのか、HiveQLで実現する方法を記載したいと思います。

LINEで送る

Azure HDInsight Spark を試してみた2

Posted on

JMT西森です。

今回は、話題をAzure HDInsight Sparkに戻して、
前回作成した Azure HDInsight Spark 環境が
どんな状態になっているのか見てみます。

Azure Consoleの画面下にある、「SPARK DASHBOARD」を選択します。
20151112_001

IDとパスワードの入力を求められるため、
前回指定したIDとパスワードを入力してください。
認証に成功すると下記画面が表示されます。
20151112_002
ここでSpark環境の状態確認や、Storage Account上の
データの確認、Hiveを使用したクエリ実行が可能です。
他にもJUPYTER NOTEBOOKやZEPEPLIN NOTEBOOKへのリンクがあり、
Webブラウザ上からPythonやSparkSQLを使ったグラフ化等が可能です。

1. Resource Manager
Spark環境の様々なパラメータを確認、変更することが可能です。
20151112_003

2. Notebooks
Jupyter Notebook 及び Zeppelin Notebook へのリンクがあります。
また Azure Console 画面下にもリンクがあります。
20151112_004

3. File Browser
Spark環境が使用している、Azure Storage Account が表示されます。
アカウントをクリックするとコンテナが表示され、さらにそのコンテナを
クリックすると各フォルダが確認できます。
20151112_005

アカウント名をクリックすると、コンテナが表示されます。
20151112_006

コンテナをクリックすると、各フォルダが表示されます。
20151112_007

4. Hive Editor
Hive(リンク)を使ったSQL(HiveQL)の発行、及び結果の参照が可能です。
デフォルトではサンプルテーブルに対するSelect文が埋め込まれており、
この状態のまま右下の「Submit」をクリックすることで処理が実行されます。
20151112_008

ジョブが完了した(StatusがComplated)ら、「View Details」を選択します。
20151112_009

サンプルデータを確認することができます。
「Job Queue」が発行したHiveQL文になります。
「Job Output」が実行結果になります。
「Job Log」がHiveQL実行ログになります。
20151112_010
なおどちらも、Download Filesボタンで出力をファイルでダウンロード可能となっています。

ちなみにサンプルデータとなる hivesampletable の実体は、Storage Account上にあるテキストファイルです。
先程の「File Browser」から辿っていくことで、実体ファイルを確認することが可能です。
20151112_011

5. Quick Links
各種ドキュメントへのリンク集です。

今回説明したのはWebブラウザ上で出来ることのみ記載しましたが、
中身はWindows Serverなので、RDPでOS環境に接続することも可能です。

次回はサンプルデータを使って、Hiveを使用した解析を行ってみたいと思います。

LINEで送る

AzureActiveDirectoryDomainServicesを試してみる2

Posted on

JMT西森です。

前回に続き、今回は何がどこまで出来るのか、
色々とAADDSの環境を見ていきたいと思います。

 

なお Azure Console 上では、Domain Services に関する操作はほぼ何もできません。

そこで、普段ADを管理する上で使用する各種ツール群が使えるのかどうかを試してみます。

新たにAD管理用でVMを作るのは面倒なので、前回使用したVMをAD管理用として使いたいと思います。

なお画像内の名称等、前回と一部異なる部分がありますが、大人の事情で環境をリビルドしたせいです、察してください。

 

最初にまず訂正があります…。
AADDSの機能をフルで活用するには、AAD用の管理者グループを作成し、
さらにユーザーをその管理者グループに追加する必要がありました…。

Azure Console上で、管理者グループの作成及びユーザーの登録を行います。

20151026_001

名称は必ず「AAD DC Administrators」と指定する必要があります。

20151026_901

グループの詳細画面に入り、メンバーの追加でユーザーを追加します。

20151026_902

ほんとはこれを前回の最初にすべきだったんですけど…結果オーライ!

 

次にVM上でAD管理ツール群が使えるようにしましょう。
サーバーマネージャーから機能を追加していきます。

サーバーマネージャーの右上にある「管理」から
「役割と機能の追加」を選び、以下の機能を追加します。
・Remote Server Administration Tools -> Role Administration Tools
-> AD DS and AD DS Tools -> AD DS Tools
・Group Policy Management

以後、ログインユーザーは上記「AAD DC Administratos」に追加したユーザーで実施する必要があります。

そのため、上記ユーザーでリモートデスクトップログインして以下を実施します。

 

ちなみに余談ですが、ドメイン参加したマシンでは、「AAD DC Administratos」に
ローカルのAdministorator権限を付与することになっています。

20151026_999

そのため、上記で追加したユーザーは、ドメイン参加しているマシンすべての
管理者権限を持っている ということに注意してください。

 

インストールが完了したら、管理ツールを開きます。
試しに「Active Directory Users and Computers」を起動します。

20151026_007

「Domain Controllers」や「System」等のOUオブジェクトが表示されません。
参照権限が与えられていないようです。

20151026_008

20151026_009
「AAD DC Computers」にComputerオブジェクトがありますね。
なお通常の「Computers」OUには何もオブジェクトがありません。

20151026_010

20151026_011

Azure Console で作成したユーザーオブジェクトが「AAD DC Users」OU以下にあります。
逆に通常の「Users」OU以下によく見るユーザーやグループオブジェクトがあります。

AADDSのユーザーやグループ、コンピューターオブジェクトは、この「AAD DC XXX」の
OUの下に作成されているようです。

なおユーザーやグループ、OU等のオブジェクトを、ここで作成・更新することはできません。

これはAADDSの仕様上、そうなっているようです。

※追記:再度確認したところ、「AAD DC Computers」OU以下に、「Computer」オブジェクトのみ作成することが出来ました

 

次は「Active Directory Sites and Services」を起動してみましたが、エラーが出ました。
詳細はここでは載せませんがattribute云々言われたので、上と同じく権限周りかなと。

 

今度は「Active Directory Domains and Trusts」を起動してみました。
正常に起動したので、そのままプロパティを確認してみました。

20151026_012

ドメインの機能レベルは「Windows Server 2012 R2」のようですが、
フォレストの機能レベルは表示されません。これも仕様でしょうね。

 

次は気になるグループポリシー!起動させましょう。
デフォルトのグループポリシーに加え、「AADDC Computers GPO」
「AADDC Users GPO」があるみたいですので、中身をみてみます。

20151026_013

administratorsというグループが存在するだけですね。
「AADDC Computers」というOUにリンクされています。

20151026_014

何も設定されていませんでした。
「AADDC Users」というOUにリンクされています。

なお、デフォルトのGPOである「Default Domain Controller Policy」及び
「Default Domain Policy」には、変更権限がありません。
右クリックしても、「Edit」の部分がグレーアウトされています。
また、新しいGPOを作成することもできません。

しかし「AADDC Computers GPO」「AADDC Users GPO」については
右クリック->Editで変更が可能です。

またドメインコントローラについてですが、本環境ですと1台構成のようです。

20151026_015

他に検証されている方のブログでは4つと記載があるようなので、今回とは違うようです。
またこのブログを書く前に一回ためしに作った環境だと、ADは2サーバーありました。
リージョンやタイミングによって変わるのか?…でも1台だと耐障害性が…うーん…。

 

今回はここまで。最後に軽くまとめてみると…
・Azure VMをドメイン参加させることは可能
・ユーザーやグループの作成はAzure Consoleのみ
・GPOの新規作成やデフォルトGPOの更新は不可
・AADDC用のGPOは更新可能、但しコンピューターやユーザーごとに1つのみ
という感じでした。

 

シンプルなGPOで管理されている事業者様であれば、十分使えそうな印象ですが…。
やはりOUやGPOは複数作成したいところです。今後に期待ですね。

LINEで送る

AzureActiveDirectoryDomainServicesを試してみる

Posted on

JMT西森です。

個人的に非常に待望していた、Azure Active Directory に
ドメイン機能がパブリックプレビューされました!!!

ということで、Spark?ナニソレ??といわんばかりに予告をスルーして、
こちらの機能を色々と試してみたいと思います。

今回はとりあえず、Azure Active Directory Domain Services
(以下、AADDS)を有効にして、Azure VMのマシンをドメイン参加
させるところまでやってみたいと思います。

長い説明となってしまうので、最初に流れだけ説明すると…
 1. AAD作成
 2. ユーザ作成&管理者権限付与
 3. 仮想ネットワーク作成
 4. ドメインサービスを有効可
 5. 仮想ネットワークでDNS設定
 6. ユーザーのパスワードリセット
 7. VM作成し、ドメイン参加
という感じです。それでは、やってみましょう。

 

1. AAD作成
AADを作成します。
20151022_001

20151022_002

20151022_003

 

2. ユーザー作成&管理者権限付与
AADでユーザーを作成します。

20151022_004
画面下の「ユーザーの追加」をクリック。

20151022_005

20151022_006

20151022_007

20151022_008
パスワードは後半で使うので忘れないようにしましょう。

20151022_009
画像では5つ作っていますが、とりあえず1つで大丈夫です。

今度は作成したユーザーに管理者権限を付与します。ユーザの詳細画面に移動します。

20151022_010

上の画面を下にスクロールすると、【ロール】があります。
ここが通常は「組織のロール:ユーザー」になっていますが、
これを「サービス管理者」に変更して、保存してください。

20151022_011

 

3. 仮想ネットワーク作成
AADDSが所属するための仮想ネットワークを作成します。

20151022_012

20151022_013

20151022_014

20151022_015

 

4. ドメインサービスを有効可
AADにて、ドメインサービスを有効にします。
1.で作成したAADの画面に移動して、「構成」を選択します。

20151022_016

下にスクロールすると、【ドメインサービス(プレビュー)】がありますね。
これを有効にし、DNSドメイン名を指定(デフォルトのままにしました)し、
有効にする仮想ネットワーク(2.で作ったネットワーク)を指定します。
指定したら忘れずに保存してください。

20151022_017

なお結構時間がかかります。私の環境では30分から40分程度でした。
正常に完了すると、下記のような画面になります。

20151022_018
IPアドレスが付与されています。2つあるようです。
ここだけ見ると、ADが2台あるように見えます。

 

5. 仮想ネットワークでDNS設定
3.で作った仮想ネットワークの画面に移動して、「構成」を選びます。
DNSサーバの設定箇所があるので、上で表示された、IPアドレスを付与します。
なお名称は任意で構いません。

20151022_019

 

6. ユーザのパスワードリセット
この手順が大事です。※2.以降であればいつ実施しても構いません
オンプレADとAADが連携している環境の場合は、再度パスワードをsyncする必要があるようです。
# AADDS上のユーザーのパスワードハッシュが生成されていないから?

今回はシンプルに、ログイン画面からリセットします。
IDは<アカウント名>@<AD名>.onmicrosoft.com、パスワードは2.で表示されるものでログインします。
するとパスワードの有効期限切れで再入力を求められるので、設定を実施してください。

 

7. VM作成し、ドメイン参加
Azure VMを作成し、2.で作ったネットワーク上で起動させます。
なお手順は割愛します。

VM作成完了後、コマンドプロンプトでipconfigの情報をみてみました。

20151022_020

DNS Servers としてADのIPが設定されていることが分かります。

それでは、いつもの手順でドメインに参加してみます。
ドメイン名は 4. で表示されるDNSドメイン名です。
今回の場合だと、【testadjmt001.onmicrosoft.com】になります。
すると、認証画面が出てきました!!!

20151022_021

2. で作成したIPとパスワードを入力します。
すると…

20151022_022

ドメイン参加することが出来ました!
再起動後にコンピュータの情報を見ると、参加できていることが分かります。

20151022_023

今回はここまで。次回はAADDSどのような環境となっているか、色々と調べてみたいと思います。

LINEで送る