Google Colaboratory活用まとめ|Drive連携・GPU・MeCab・Selenium
/ 8 min read
Table of Contents
はじめに
Google Colaboratory(Colab)でよく使う設定を、1本にまとめ直しました。
Driveとのデータのやり取り、セッション切れ対策、GPU環境、日本語形態素解析、スクレイピングという構成です。必要なところだけ拾って読んでください。
Google Driveとデータをやり取りする
マウントする
まずDriveをマウントします。実行すると認証を求められます。
from google.colab import drive
drive.mount("/content/drive")Drive上のファイルを読み込む
import pandas as pd
df = pd.read_csv("/content/drive/My Drive/hoge/fuga.csv")Driveへ書き出す
base_dir = "/content/drive/My Drive/hoge/"file_name = "fuga.csv"
df.to_csv(base_dir + file_name, index=False)パスの My Drive には半角スペースが入っている点に注意してください。ここでつまずくことが多いです。
index=False を付けておかないと、書き出したCSVに余計なインデックス列が入ります。読み込み直したときに Unnamed: 0 という列が増えていたら、これが原因です。
90分セッション対策
Colabはブラウザを放置すると切断されます。学習を回している間に落とされないための対策です。
- ブラウザの拡張機能で自動更新系のアドオンを入れておく
- ノートブックのメニューから
ランタイム > ランタイムのタイプを変更を開き、「このノートブックを保存する際にコードセルの出力を除外する」にチェックを入れる - 最初のリロード時だけ手動で再読み込みする
2は出力が溜まってノートブックが重くなるのを防ぐためです。長時間の学習ログを出しっぱなしにすると、保存のたびに重くなって結局切れます。
GPUを使う
まず ランタイム > ランタイムのタイプを変更 でハードウェアアクセラレータをGPUにします。ここを切り替えないと、以下のインストールをしてもGPUは使われません。
PyTorch
公式の Get Started で自分の環境に合うコマンドを生成するのが確実です。
!pip install torch torchvision torchaudioLightGBM
LightGBMのGPU版は、ソースからビルドします。
!git clone --recursive https://github.com/Microsoft/LightGBM%cd /content/LightGBM/!mkdir build!cmake -DUSE_GPU=1 ..!make -j$(nproc)%cd /content/LightGBM/python-package!python setup.py install --precompileXGBoostのほうは特に設定不要で、GPUランタイムに切り替えるだけで使えます。
参考:GoogleColabratory + GradientBoosting + GPU - Qiita
MeCab + mecab-ipadic-NEologd
日本語の形態素解析を、新語に強いNEologd辞書つきで使います。
インストール
# MeCab!apt install aptitude swig!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y!pip install mecab-python3
# mecab-ipadic-NEologd!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -aNEologdのインストールは数分かかります。
使ってみる
辞書のパスを mecab-config から取ってTaggerに渡します。
import subprocess
import MeCab
cmd = 'echo `mecab-config --dicdir`"/mecab-ipadic-neologd"'path = ( subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) .communicate()[0] .decode("utf-8") .strip())
m = MeCab.Tagger(f"-Owakati -d {path}")
print(m.parse("私はペンギンと猫といつも仲良しです。"))-Owakati は分かち書き(単語をスペース区切りで返す)出力です。そのまま CountVectorizer などに渡せます。
出力ラベルの読み方
-Owakati を付けずに解析すると、単語ごとの詳細な情報が返ります。並びは次のとおりです。
表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音表層形の後だけがタブ区切りで、残りはカンマ区切りという点がポイントです。解析結果をパースするときは、まずタブで分けてから、後半をカンマで分ける必要があります。
tagger = MeCab.Tagger(f"-d {path}")
for line in tagger.parse("すもももももももものうち").split("\n"): if line in ("EOS", ""): continue surface, feature = line.split("\t") features = feature.split(",") print(surface, features[0], features[6]) # 表層形・品詞・原形原形(features[6])を使うと、活用形を揃えた集計ができます。頻度分析をする場合は、表層形ではなく原形で数えるほうが実態に合います。
複数ファイルをまとめてダウンロードする
Colabで作ったファイルを手元に持ってくるとき、files.download() を1つずつ呼ぶと、そのたびにブラウザのダウンロード確認が出て面倒です。フォルダごとzipに固めるのが早いです。
!zip -r /content/download.zip /content/output作成したzipをダウンロードします。
from google.colab import files
files.download("/content/download.zip")Seleniumとchromedriver
Colab上でブラウザ操作をしたい場合の準備です。
# 日本語フォント(スクリーンショットの文字化け対策)!apt install fonts-ipafont-gothic
# Selenium!pip install selenium
# chromedriver!apt update!apt install chromium-chromedriver!cp /usr/lib/chromium-browser/chromedriver /usr/binColabには画面がないので、ヘッドレスモードの指定が必須です。
from selenium import webdriver
options = webdriver.ChromeOptions()options.add_argument("--headless")options.add_argument("--no-sandbox")options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)driver.get("https://example.com")print(driver.title)driver.quit()--no-sandbox と --disable-dev-shm-usage は、コンテナ環境で落ちるのを防ぐためのお決まりの指定です。
おわりに
Colabは環境構築なしにGPUが使えるのが強みですが、そのぶんセッションが切れることと、実行環境が入れ替わることを前提に組む必要があります。
データはDriveに置き、インストール手順はノートブックの先頭にまとめておくと、再開が楽になります。
