👨‍💻

Google Colabの生成AIを利用してみる

2023/12/20に公開

はじめに

皆さまはChatGPTなどの生成AIについて、どの程度有償のものを使っているでしょうか。
私は、ChatGPTはProを契約しているのですが、他のサービスはどうしようかなぁと思いつつも無償のものを使っていました。

そんな中で、Colabの生成AIが直近で無償ユーザーにも開放されていました。
これは使ってみるしかないということで、試してみた結果を整理してみます。

実験

普通に使う分には、生成AIならできて当たり前なので、それなりのことをやらせようと思ったのですが、ちょうどいいネタがなかったので、自然言語処理の基本的なことである、前処理をやらせてみました。

ひとまずChatGPTで作ってみる

比較対象として、まずはChatGPT(GPT-4)で作ってみます。

次の指示をもとに、Pythonのコードを作成してください

-自然言語処理の前処理
-HTMLタグや、一般的なストップワードの除去

すると出てきたのは、次の通りです。

import nltk
from bs4 import BeautifulSoup
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# NLTKのリソースをダウンロード(ストップワードリスト)
nltk.download('punkt')
nltk.download('stopwords')

def preprocess_text(text):
    # HTMLタグの除去
    soup = BeautifulSoup(text, "html.parser")
    cleaned_text = soup.get_text()

    # トークン化
    words = word_tokenize(cleaned_text)

    # ストップワードの除去
    filtered_words = [word for word in words if word.lower() not in stopwords.words('english')]

    return " ".join(filtered_words)

# テスト用のテキスト(HTMLタグと一般的なストップワードを含む)
sample_text = "<html><head><title>Test</title></head><body><p>This is a sample sentence with stop words and HTML tags.</p></body></html>"

# 前処理実行
preprocessed_text = preprocess_text(sample_text)
preprocessed_text

ついでにメッセージとして「インターネットへの接続がないため、nltk ライブラリのリソースをダウンロードできませんでした。そのため、punkt と stopwords モジュールが利用できません。これらのリソースは、トークン化とストップワードの除去に必要です。」とありました。

これは、nltkを使う上で必要な、stopwords等のダウンロードがChatGPT内だとできないことで、起きているものと思われます。

ただ、生成されたコードをColabで実行すると、ダウンロードも含めて問題なく実行できました。
やっぱり、生成AIとコーディングは相性がいいですね。

ちなみに、Mecab(日本語の形態素解析)とかを使ってのプログラム作成もお願いしたのですが、こちらは「現在の環境では、必要なライブラリの一部が利用できないため、MeCabを含む日本語自然言語処理の完全なデモンストレーションを行うことができません。」となってしまい、コードが完全には出来上がらなかったので、いったん断念しました。

同じ処理を、Colabの生成AIでやってみる

さて、では本丸のColabの生成AIでも同じことをやってみましょう。
Colabでは次のような画面(上のテキストボックスが指示ですね)で、生成AIに指示を出します。(改行できなかったので、2行分をまとめて)

でできたコードですが、なんと4つも候補をくれました。
選んで使えるのはいいですね。とりあえず、ChatGPTで出たものに1番近そうな1つ目の候補を見てみます。

# prompt: -自然言語処理の前処理 -HTMLタグや、一般的なストップワードの除去

import re
import nltk
from nltk.corpus import stopwords

def preprocess_text(text):
  text = text.lower()
  text = re.sub('<[^>]*>', '', text)
  words = text.split()
  words = [word for word in words if word not in stopwords.words('english')]
  text = ' '.join(words)
  return text

ChatGPTと違って、実行する部分は書かれていないけど、問題なさそう。
と思って下記のように関数を実行したところ、エラーになりました。

# テスト用のテキスト(HTMLタグと一般的なストップワードを含む)
sample_text = "<html><head><title>Test</title></head><body><p>This is a sample sentence with stop words and HTML tags.</p></body></html>"

# 前処理実行
preprocessed_text = preprocess_text(sample_text)
preprocessed_text

よく見ると、コードに次のダウンロードする部分が足りていませんでしたね。

# NLTKのリソースをダウンロード(ストップワードリスト)
nltk.download('punkt')
nltk.download('stopwords')

他の候補はどうかなぁとみていると、3つ目の候補ではしっかりとダウンロードしてしてくれていました。

# prompt: -自然言語処理の前処理 -HTMLタグや、一般的なストップワードの除去

import re
import nltk
nltk.download('stopwords')
stop_words = set(nltk.corpus.stopwords.words('english'))
def preprocess_text(text):
  text = re.sub('<[^<]+?>', '', text)
  text = text.lower()
  text = ' '.join([word for word in text.split() if word not in stop_words])
  return text

ChatGPTとの差でいうと、「HTMLタグの除去」がBeautifulSoupを使っているか、re.subで除外しているかの違いはありますが、ほとんど同じ内容で出力されましたね。

まとめ

生成されるコードの内容としては、ChatGPTもColabの生成AIも同様のレベルのアウトプットができていました。

ただ、実際に出力したコードを実行してみて、エラーが起きたかをチェックするChatGPTに比べると、Colabの生成AIではコードの候補としてでるだけで、実際に動くかはユーザー側で試さないといけないというのが、良し悪しありそうです。

既によくわかっている領域のコードを、自分が書くのも手間なので、パッと書いてもらうにはColabの生成AIが手っ取り早く良さそうです。
一方で、新しい領域のコードを学びながらやっていくには、ChatGPTと対話的にやる方がエラーの有無等もわかって良さそうですね。

個人的には、そこまでハードにプログラミングをしないのと、複数の生成AIを有償で使うのもなぁというのがあるので、ChatGPTメインのままになりそうですが、Colabの生成AIも無償で使えるうちは、そちらも時々使っていきたいと思っています。

Discussion