導入済みのクラウド環境を活用するNewIT人材育成
2019/10/18
2019/10/18
テクノロジーコンサルティング本部 Intelligent Cloud & Infrastructure(ICI)の蒋楠琛(Jiang Nanchen)と申します。主要な仕事は企業のデジタルトランスフォーメーションを支援するコンサルティングワークですが、そのコンサルティングワークで描いたイメージをプロトタイプに具現化するためのクラウドネイティブ開発も担当しております。
はじめに
近年、AIやビッグデータなどのNewIT技術を企業の戦略レベルで検討している企業が増えていますが、NewITに対する理解や技術者の不足等が理由で計画段階で止まっているケースが多く見受けられます。その状況を打破するため、AWS、Azure、Googleなどのパブリッククラウドベンダーが次々と提供しているNewIT関連サービスとクラウドサービスを活用し、最小労力で実証実験を始めることで、企業戦略におけるデジタルトランスフォーメーションの実現に向けて前進することが可能です。
今回はクラウド導入済み企業のIT・情報関連部署向けに、せっかく導入したクラウド環境を如何に活用し、企業のNewIT人材育成に役立てるかというテーマで書きます。尚、記事の後半に、5分でクラウドにPoC環境を作り、Googleの学習済みAPIを呼び出す方法をコマンド付きで紹介します。
ABC戦略におけるクラウドのメリット
最近、AI・ビッグデータというキーワードを見ない日はないと言っても過言ではないでしょう。中国のIT業界では、そこにクラウドを加えて、ABC(AI・ビッグデータ・クラウド)戦略と呼んでいます。それは、「クラウドがビッグデータを蓄積する」・「ビッグデータがAIを最適化する」・「AIがクラウド上で威力を発揮してさらにデータを集める」という三位一体のサイクルを表現しています。
(図 ABC戦略)
参考:バイドゥ「ABCサミット2019」の開催でAIの産業化を加速
https://xtrend.nikkei.com/atcl/contents/technology/00004/00127/
普段、クラウドのメリットと聞かれると、「管理負荷・コストの削減」や「業務の効率化」といったキーワードが思い浮かぶかもしれませんが、このABC戦略においては、クラウドの最大のメリットは「データとサービスの距離を縮め、アイデアを最小労力でプロトタイプにする」というところにあると考えられます。そして、ここで言う「サービス」とは、企業が作ろうとしているサービスだけではなく、オープンソースやクラウドのプロバイダーが提供しているサービスのことも指しています。
ここで、GCP(Google Cloud Platform)を例として、パブリッククラウドのプロバイダーが提供しているNewIT系のサービスを見てみましょう。
(自作の表:GCPのAI・ビッグデータ等のNewIT関連サービス一部まとめ)
"最先端"の理想と現実
理想的には、上の表で羅列したサービスをうまく組み合せれば、スピーディーな計画・実装・検証・改善を行い、アイデアを最短距離でプロトタイプ化させ一刻も早くNewIT技術を活用したビジネスモデルをマーケットで検証することができます。
しかし現実を見ると、トップダウンでNewITを導入せよという指示の下、プロジェクトを実施したものの、ROIが見合わない等の理由でそのままPoCの域から出られないケースが多く見受けられます。その原因の一つとして、「NewITを導入せねば」と計画している場合、そもそもNewITとはいったい何を指しているかが明確になっていないことが考えられます。何故ならばNewITという言葉自体は非常に広範囲な意味を持つ言葉であり、世の中を見ても、とりあえずNewITと言っておけば注目を集められると思われてしまう状況でもあります。
そういった中で、教科書やネット記事のみでNewITというキーワードで知識を仕入れようとすると、大量な情報に埋もれます。故にNewIT人材を効率良く育成させるには、やはり手で動かせる、そして目に見えるNewITの実験環境を整備しないと、いつまで経ってもNewITを導入することでどのようなビジネス価値を創出できるかは見えないままになってしまいます。
一方、今までインフラとして使われていたクラウド環境ですが、上の表で示した通り、インフラだけではなく、AIやビッグデータ等のNewITサービスも沢山提供されています。さらにその中で、機械学習・深層学習等の専門知識がなくても、いわゆる学習済みの機械学習モデルを手軽に操作できるサービスがあるため、それを駆使すればどんなユースケースでどんなことができるかをプログラムの動きを見ながら直感的にかつクイックに確認できます。NewITの特徴と限界を効率よく理解するという観点では、まさに最適な環境だと考えられます。
ところで、NewITの実験環境の必要性を色々検討しましたが、「結局どんなことができるの?」など、まだまだイメージしにくい部分もあるのではないでしょうか?ここでは具体的なユースケースを3つ紹介します。
本記事では、GCPを例に、上記3つのユースケースに対して、実験の環境を実際に構築する方法を紹介します。
NewITサービス実験環境の作成
詳細手順は以下の通りです:
①GCPの管理コンソールの「APIとサービス」で以下の5つを検索して有効化にします。
②コンソール画面右上のCloud ShellのアイコンをクリックしCloud Shellを起動します。
③下記のコマンドを実行し、任意の名前でDatalab実行用のInstanceを作成し、継続しますかと聞かれたら「Y(Yes)」を入力します。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
datalab create <任意の名前> --zone asia-northeast1-a
+++++++++++++++++++++++++++++++++++++++++++++++++++++
※作成済みのDatalab Instanceにアクセスするには、以下のコマンドを使用します。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
datalab connect <作成済みのinstanceの名前>
+++++++++++++++++++++++++++++++++++++++++++++++++++++
④作成完了後、右上の「ウェブプレビューアイコン」で「ポートの変更」を選択し、「8081」を入力して実行します。
⑤Datalabで「+Notebook」ボタンをクリックするタイミングでPythonの実行環境構築が完了しました。
⑥Notebookを作成したら、「Kernel」のプールダウンリストで「python3」を選択します。
⑦上記⑤で作成したNotebookで「+code」をクリックし下記コマンドを貼り付けます。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
!pip install google-cloud
!pip install --upgrade google-cloud-language
!pip install --upgrade google-cloud-speech
!pip install --upgrade google-cloud-translate
!pip install --upgrade google-cloud-vision
+++++++++++++++++++++++++++++++++++++++++++++++++++++
⑧コマンドを実行して(Shift + Enter)pythonのライブラリをインストールします。
⑨ライブラリのインストールが完了したら一度「Reset Session」をクリックし、kernelを再起動します。
⑩Notebookで「+code」ボタンをクリックし、下記Translate APIを呼び出すコマンドを貼り付けして実行します。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
from google.cloud import translate
translate_client = translate.Client()
#翻訳したいテキストを入力
text = 'I would like to migrate three servers to cloud environment'
#翻訳対象言語を日本語(ja)に設定
target = 'ja'
#テキストと対象言語を指定し、APIを呼び出す
translation = translate_client.translate(
text,
target_language=target)
print('Translation: {}'.format(translation['translatedText']))
+++++++++++++++++++++++++++++++++++++++++++++++++++++
出力例:
+++++++++++++++++++++++++++++++++++++++++++++++++++++
Translation: 3台のサーバーをクラウド環境に移行したい
+++++++++++++++++++++++++++++++++++++++++++++++++++++
⑪次に、Natural Language APIのEntity抽出機能を呼び出すコマンドを貼り付けして実行します。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
languageClient = language.LanguageServiceClient()
entity_list = []
#Entityを抽出したいテキストを入力
text = '横浜中華街で唐揚げを食べたい。'
#テキスト・対象言語・入力形式を指定する
document = types.Document(
content = text,
language = "ja",
type=enums.Document.Type.PLAIN_TEXT)
#APIを呼び出す
entities = languageClient.analyze_entities(document).entities
#影響のあるEntityのみを出力する
for entity in entities:
if entity.salience > 0.01:
entity_list.append(entity.name)
print(entity_list)
+++++++++++++++++++++++++++++++++++++++++++++++++++++
出力例:
+++++++++++++++++++++++++++++++++++++++++++++++++++++
['横浜中華街', '唐揚げ']
+++++++++++++++++++++++++++++++++++++++++++++++++++++
⑫最後に、Vision APIのOCR機能を呼び出すコマンドを貼り付けして実行します(PDFのURLは各自ご用意する必要があります)。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
import re
from google.cloud import vision
from google.cloud import storage
from google.protobuf import json_format
# Supported mime_types are: 'application/pdf' and 'image/tiff'
mime_type = 'application/pdf'
#識別したいPDFのURLを指定する
gcs_source_uri = < cloud="" storage="" url="" (例:'gs://xxx/yyy.pdf')="">
#識別したファイルの出力先とファイル名を指定する
gcs_destination_uri = < cloud="" storage="" url="" (例:'gs://xxx/yyy.pdf')="">
#PDFのページ数を設定する
batch_size = 2
client = vision.ImageAnnotatorClient()
#VisionAPIの識別タイプを「DOCUMENT_TEXT_DETECTION」に指定
feature = vision.types.Feature(
type=vision.enums.Feature.Type.DOCUMENT_TEXT_DETECTION)
#入力ファイルのパラメーターを設定する
gcs_source = vision.types.GcsSource(uri=gcs_source_uri)
input_config = vision.types.InputConfig(
gcs_source=gcs_source, mime_type=mime_type)
#出力ファイルのパラメーターを設定する
gcs_destination = vision.types.GcsDestination(uri=gcs_destination_uri)
output_config = vision.types.OutputConfig(
gcs_destination=gcs_destination, batch_size=batch_size)
# 非同期でAPIを呼び出す
async_request = vision.types.AsyncAnnotateFileRequest(
features=[feature], input_config=input_config,
output_config=output_config)
# 処理の結果を取得する
operation = client.async_batch_annotate_files(
requests=[async_request])
print('非同期処理中...')
operation.result(timeout=180)
# 出力したファイルを取得し、結果を表示する
storage_client = storage.Client()
match = re.match(r'gs://([^/]+)/(.+)', gcs_destination_uri)
bucket_name = match.group(1)
prefix = match.group(2)
bucket = storage_client.get_bucket(bucket_name)
blob_list = list(bucket.list_blobs(prefix=prefix))
print('Output files:')
for blob in blob_list:
print(blob.name)
output = blob_list[0]
json_string = output.download_as_string()
response = json_format.Parse(
json_string, vision.types.AnnotateFileResponse())
first_page_response = response.responses[0]
annotation = first_page_response.full_text_annotation
print(u'Full text:\n{}'.format(
annotation.text))
+++++++++++++++++++++++++++++++++++++++++++++++++++++
※コードをコピーする際の注意事項:
以上、インプットを変えながら色々と試したり、またはこれらのAPIを組み合わせたり(例えばOCRで識別した文字に翻訳をかけ、さらにEntityを抽出するなど)すると、NewITに対する理解を深め、次のステップに繋がるヒントを得られるのではないでしょうか。
結論
昨今の日本では「NewITを導入せねば時代に取り残される」という不安と焦燥感に苛まれている方は多いのではないでしょうか。そういった中で、ビジネスとテクノロジーの両方を理解し、NewITを導入することでビジネス価値を創出できる領域を見極めることができる人材が必要とされています。本稿をここまでご覧になった皆様で、いま現在NewITを直接触ったり弄ったりする環境がないという方がいっしゃいましたら、導入済みのクラウド環境をうまく活用し、ここに記載されている方法でNewITに対する理解を深めてみてはいかがでしょうか。