『ハンズオンで分かりやすく学べるGoogle Cloud実践活用術 AI・機械学習編』読書メモ
目次
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
この記事を書きながらでも、3日間ぐらいで読み通せました🙋♂️
機械学習の基本は知っているが、Google Cloudは未体験という方向けだと感じました。
(Google Cloudは別として)機械学習そのものの初心者はこの本を通じて一連の実験を体験はできますが、得られた結果を見ても何が嬉しいのかは理解できそうになさそうです。
本を入手したいきさつ
こういったハンズオン形式のIT技術書は発売後になるべく早く実践してしまうことをおすすめします。
なぜならばハンズオンの過程で活用しているソフトウェアのバージョンが上がることで画面の見た目、UIが変わることがあります。場合によっては、書籍通りに実行してもうまくいかず、ネットで色々調査する手間が生じるためです。
『ハンズオンで分かりやすく学べるGoogle Cloud実践活用術』は2021年5月に発売されています。私が実践したのは11月でしたが、ほぼ書籍と同様に進みました。
学習の前に出版社の書籍ページを確認して、正誤表・サポートページがないかを確認しましょう。
公式ページは次になります。
第1章:Google Cloudの基本
細かい話はざっくりと読みます。
Google Cloudアカウントを作成します。私は過去に90日間300ドル分無料トライアルが消費していました。
3章以降では実際にプログジェクトを作るため、初めてGCMに挑戦するのであれば、以下の箇所だけは実際に手を動かしておきましょう。
- P.27のmyfirst-projectプロジェクトの新規作成
- P.28のプロジェクト切り替え
- P.38のプロジェクトの削除
第2章:AI・機械学習サービスの概要
さくっと読みます。
Cloud AutoMLが活躍する場面を理解し、後はどういったAPIがあるのかをざっくりと把握しておけばよいでしょう。
第3章:Cloud Speech-to-Text APIを体験する
本書において、具体的なGCMの活用が3章から始まります。
手取り足取り書いてあるので、指示に従えば迷うところはあまりないでしょう。
ライブラリのインストール時に再起動【P.74】
!pip install --upgrade google-cloud-speech
上記コマンドを実行すると、以下のように再起動が促されましたので、ボタンを押してリスタートしました。
音声ファイルの作成には設定に注意する【P.83-92】
音声ファイルのサンプルがあれば楽と思いましたが、せっかくのスキルアップのチャンスなので本の通りに音声ファイルを作りました。
本の説明の通り、Audacityの画面で「1(モノラル)録音チャンネル」を指定し、ファイルの書き出しではRAW、Signed 16-bit PCMを指定して音声ファイルを作りました。
soxは以下のサイトから最新バージョンのZIP版をダウンロードしました。
コマンドプロンプトでsoxを実行します。
先の音声ファイルをsox.exeに読み込ませると、スローモーションの音声が出力されました(Audacityで録音してから再生した時は普通に聞こえる)。
変と思いつつ、以降のサンプルプログラムに進みます。その音声ファイルを読み込ませても、結果に何も表示されません。エラーが出ないということはプログラムに問題はありません。音声ファイルが空か内容に問題があると推測できます(P.89の「よくあるエラーへの対処法」の5に相当)。
音声データのつくりかたが怪しいと思い、P.84の画像をよく見ると、左下にある「プロジェクトのサンプリング周波数(Hz)」が16000になっていました。デフォルトではこの値になっていなかったので、16000にして再度録音させました(録音した内容はP.88の図3-36の下にあるメッセージ)。
その後、改めてsox.exeに読み込ませると、正常に聞こえました。このファイルをGoogleドライブにアップロードし直して、サンプルプログラムを実行すると無事音声を認識して文字列として出力してくれました😀
UIが変わっている【P.93】
本ではナビゲーションメニューの「ストレージ」に「Stroge」があるように書かれていましたが、私の環境では「Cloud Strage」になっていました。
オブジェクトの詳細の見た目は結構変わっています。本では「URI」となっていますが、新しいUIでは「gsutil URI」になります。
権限の付与で警告ダイアログが出る【P.95-96】
Cloud Storageに置いたvoice.rawに権限を付与しようとしましたが、"Cannot get legacy ACL for an object when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access"という警告ダイアログが表示されました。
同様の問題を解決した記事を見つけたので、リンクしておきます。
作成したバケットの右側の三点アイコンを押して、「バケットの権限を編集」を選びます。
Access controlにて「きめ細かい管理に切り替える」リンクを押します。
「アクセス制御の編集」画面にて「きめ細かい管理」にチェックを入れて[保存]を押します。
これで準備完了です。
最後voice.rawに対して権限の編集を試みます。すると、次のように表示されて、本の内容を進められます。P.97のサンプルプログラムを実行して、音声ファイルを認識させてテキスト化できました。
以上で実験が完了したので、プロジェクトを削除しました。
第4章:Cloud AutoMLで機械学習を体験する
「Cloud AI Platform API」が存在しない【P.104-105】
検索窓に「Cloud AI Platform API」の説明文である"Train high-quality custom machine learning models"で検索すると、「Cloud AutoML API」が見つかりました。
そこでこれを有効化しました。
「AI Platform(統合型)」が存在しない【P.105-106】
代わりに「Vertex AI」の「データセット」を選びました。
Vertex AI APIを有効にしないと、データセットを表示できません。
課金額を調べる【P.113】
第5章:BigQuery MLで機械学習を体験する
「データセットを作成」は三点アイコンにある【P.132】
クエリー【P.133-135】
P.134 1行目の"Browser"は多分"browser"が正しいです。
実行したクエリーは以下の通りです。
#standardsql
CREATE OR REPLACE TABLE ga.kmeans_base AS
SELECT
fullVisitorId,
date,
channelGrouping,
deviceCategory,
browser,
metro,
CASE
WHEN hour >= 20 THEN 'Night'
WHEN hour >= 17 THEN 'Evening'
WHEN hour >= 12 THEN 'Afternoon'
WHEN hour >= 6 THEN 'Moring'
ELSE 'Night' END as time,
SUM(events) as envens,
SUM(pageviews) as pageviews,
SUM(IF(rowNum = 1, timeOnSite, 0)) as timeOnSite,
SUM(IF(rowNum = 1, sales, 0)) as sales
FROM
(
SELECT
fullVisitorId,
date,
channelGrouping,
device.deviceCategory as deviceCategory,
device.browser as browser,
geoNetwork.metro as metro,
hits.Time,
hits.hour as hour,
IF(hits.type = 'EVENT' AND hits.eventInfo.eventCategory IS NOT NULL, 1, 0) AS events,
IF(hits.type = 'PAGE', 1, 0) AS pageviews,
IF(totals.timeOnSite IS NULL, 0, totals.timeOnSite) AS timeOnSite,
IF(totals.transactionRevenue IS NULL, 0, totals.transactionRevenue / 1000000) AS sales,
ROW_NUMBER() OVER(PARTITION BY fullVisitorId, visitStartTime ORDER BY hits.Time ASC) AS rowNum
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` AS ga, UNNEST(hits) AS hits
)
GROUP BY 1, 2, 3, 4, 5, 6, 7
HAVING sales > 0
モデルの作成してトレーニングする【P.138-139】
実行したクエリーは次の通りです。
CREATE OR REPLACE MODEL ga.kmeans_model
OPTIONS (model_type='kmeans', num_clusters=4, standardize_features=TRUE) AS
SELECT * EXCEPT(fullVisitorId, date, sales)
FROM ga.kmeans_base
WHERE date BETWEEN '20160801' AND '20170731'
実行すると、モデルが作られて、トレーニングも実行されます。完成までに数分かかり、終わるとkmeans_modelモデルが作成されます。
モデルを使って予想する【P.143】
実行したクエリーは以下の通りです。
#standardsql
SELECT
* EXCEPT(nearest_centroids_distance)
FROM
ML.PREDICT(MODEL ga.kmeans_model,
(
SELECT * EXCEPT(fullvisitorId, date, sales)
FROM ga.kmeans_base
WHERE date BETWEEN '20170801' AND '20170830'
))
第6章:Cloud AIの導入・運用時に心得ておくべきこと
製造業での活用事例を通じて、機械学習プロジェクトの流れを説明しています。
機械学習の運用では、「データの流れを作る」「モデルを管理する」の2つが重要であることがわかりました。