見出し画像

シリーズPython⑧ 【緊急記事】事例で学ぶ特徴量エンジニアリング第5章メモリー対策

Ⅰ.事例で学ぶ特徴量エンジニアリングの紹介

この記事は書籍「事例で学ぶ特徴量エンジニアリング」(オライリー・ジャパン、以下「テキスト」と呼びます)のある問題を回避できたときの驚きを取り扱います。

テキストは、パイプライン構築を通じて、テーブルデータ、自然言語処理(英語)、画像、時系列分析に関連する特徴量エンジニアリングの基礎を学べる素晴らしい書籍です。

いろいろな形のパイプのイラスト:「いらすとや」さんより

Ⅱ.この記事が取り扱う大問題

テキストはPython実行環境として Google Colaboratory の使用を推奨しています。
しかも著者は有料の「Corab Pro」で動作確認を行っています。
理由は「GPU利用による時間短縮」と「大量のメモリーを消費するコードの存在」です。

特に大量メモリー消費問題は学習コストに直結する大問題です。
テキストの問題提起文章を引用いたします。

5章はメモリーを大量に消費するので、「ハイメモリ」を選択できるColab Proでなければエラーとなります

テキスト「ノートブックについて」XVページより引用

課金しないとテキストのコードを動かせないのでしょうか・・・

メモリーのイラスト(コンピューター):「いらすとや」さんより

Ⅲ.予告通り第5章で発生するエラー

第5章「自然言語処理:ソーシャルメディアの感情分析」では、著者が提供する「Tweetテキストデータ」をベクトル化して、ロジスティック回帰を用いた感情分析を実施します。
クライマックスは「BERTモデルのベクトル表現」の利用です!

私が最初にエラーに遭遇したのは「5.5.4 BERTによる転移学習」の「コード5.23 BERTによるテキストのベクトル化」でした。
もちろん、実行環境は Google Colaboratory 無料版です!

このときは「テキストのお断り通りにエラーになったのだから仕方がない。諦めて第6章に進もう」と思って、無念を抱えたまま5章を終えるつもりでした。

ただエラー画面を X (旧Twitter)で共有しようと考えて、再度、 Google Colaboratory(無料)を開き、Notebook を実行してみたところ、なんと!処理が完了したのです!
おかげでエラー画面を採掘することが叶いませんでしたw

この朗報をテキスト仲間にお知らせしなければと思って筆を取りました。

ブルースクリーンのイラスト:「いらすとや」さんより

Ⅳ.エラー回避対策の詳細

対策は「実行するコードを最小限にすること」です。
こうすることで、おそらくメモリーの全体の消費量を抑えることができ、エラー発生を回避できたのだと推測しています。

【実行手順】

1.Google Colaboratory(無料)を新規に起動して、第5章のNotebookを開きます(メモリー真っ更)。

◆◆◆

2.第5章のNotebookのセルのうち、次のコードだけを実行します。

① Google ドライブの接続

### グーグルドライブの接続
from google.colab import drive
drive.mount('/content/drive')

② データ保存ディレクトリに移動

### データディレクトリに移動
%cd '/content/drive/My Drive/適宜設定してください'

③ コード5.1 データセットの取り込み
コード内容はテキストをご参照ください。

④ コード5.3 データセットの訓練データとテストデータへの分割
コード内容はテキストをご参照ください。

⑤ コード5.22 BERT入門
コード内容はテキストをご参照ください。
最低限、ライブラリのインポートができればOKです。

◆◆◆

3.コード5.23 のベクトル化を実行
ここまで準備できましたら「コード5.23 BERTによるテキストのベクトル化」を実行します。
このコードはメモリー不足エラーが発生する箇所に該当しますので、注意して実行しましょう
処理時間はおよそ15分です。

【実行結果】
1行目の学習データのベクトル化100%完了時と、2行目のテストデータのベクトル化100%完了時の表示を見たときは、とても興奮しました。

◆◆◆

4.次の準備に戻りましょう。

① advanced_grid_search関数の読み込み
サンプルコードのadvanced_grid_search関数の定義をコピペして実行します。

② コード5.9 機械学習パイプラインでのCountVectorizerの利用
次のコードに示した「PipelineとLogisticRegressionのインポートとclf定義」だけを別のセルにコピペして実行します。

from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(max_iter=10000)

以上で準備は終了です。

◆◆◆

5.コード5.24 の分類タスクを実行
最終コード「コード5.24 BERTによる分類」を実行して、BERTでベクトル化したデータによる「感情分析 by Logistic回帰」の結果を楽しみましょう!
コードはテキストをご参照ください。

【実行結果】
分類評価指標がレポートされた時、涙で目が霞みそうになりました。

かすみ草のイラスト:「いらすとや」さんより

みなさんも無課金でテキストを楽しんでくださいね!

おわり

チームでプログラミングをしているイラスト:「いらすとや」さんより

ブログの紹介


note で7つのシリーズ記事を書いています。
ぜひ覗いていってくださいね!

1.のんびり統計

統計検定2級の問題集を手がかりにして、確率・統計をざっくり掘り下げるブログです。
雑談感覚で大丈夫です。ぜひ覗いていってくださいね。
統計検定2級公式問題集CBT対応版に対応しています。
Python、EXCELのサンプルコードの配布もあります。

2.実験!たのしいベイズモデリング1&2をPyMC Ver.5で

書籍「たのしいベイズモデリング」・「たのしいベイズモデリング2」の心理学研究に用いられたベイズモデルを PyMC Ver.5で描いて分析します。
この書籍をはじめ、多くのベイズモデルは R言語+Stanで書かれています。
PyMCの可能性を探り出し、手軽にベイズモデリングを実践できるように努めます。
身近なテーマ、イメージしやすいテーマですので、ぜひぜひPyMCで動かして、一緒に楽しみましょう!

3.実験!岩波データサイエンス1のベイズモデリングをPyMC Ver.5で

書籍「実験!岩波データサイエンスvol.1」の4人のベイジアンによるベイズモデルを PyMC Ver.5で描いて分析します。
この書籍はベイズプログラミングのイロハをざっくりと学ぶことができる良書です。
楽しくPyMCモデルを動かして、ベイズと仲良しになれた気がします。
みなさんもぜひぜひPyMCで動かして、一緒に遊んで学びましょう!

4.楽しい写経 ベイズ・Python等

ベイズ、Python、その他の「書籍の写経活動」の成果をブログにします。
主にPythonへの翻訳に取り組んでいます。
写経に取り組むお仲間さんのサンプルコードになれば幸いです🍀

5.RとStanではじめる心理学のための時系列分析入門 を PythonとPyMC Ver.5 で

書籍「RとStanではじめる心理学のための時系列分析入門」の時系列分析をPythonとPyMC Ver.5 で実践します。
この書籍には時系列分析のテーマが盛りだくさん!
時系列分析の懐の深さを実感いたしました。
大好きなPythonで楽しく時系列分析を学びます。

6.データサイエンスっぽいことを綴る

統計、データ分析、AI、機械学習、Pythonのコラムを不定期に綴っています。
統計・データサイエンス書籍にまつわる記事が多いです。
「統計」「Python」「数学とPython」「R」のシリーズが生まれています。

7.Python機械学習プログラミング実践記

書籍「Python機械学習プログラミング PyTorch & scikit-learn編」を学んだときのさまざまな思いを記事にしました。
この書籍は、scikit-learnとPyTorchの教科書です。
よかったらぜひ、お試しくださいませ。

最後までお読みいただきまして、ありがとうございました。

この記事が参加している募集

お金について考える

この記事が気に入ったらサポートをしてみませんか?