3分プロトタイピング: Jupyter Notebook, Google Colabの紹介

連載「3分プロトタイピング」

  1. Streamlitを用いたAIチャットアプリ
  2. RAGを使ってAIチャットアプリケーションに知識を与える
  3. ベクトルデータベース超入門
  4. ベクトルデータベースの登録内容を可視化してみる
  5. Jupyter Notebook, Google Colabの紹介(この記事です)

AIを用いたアプリケーションを開発するためのライブラリの多くはPythonで実装されています。

それらのチュートリアルには当たり前のようにJupyter NotebookやGoogle Colabというツール、サービスが出てくるのですが、これまでPythonを使っていない人には、少しハードルがあるかなと思っています。

そこで、この記事では、そうしたチュートリアルがサクッとこなせる程度にJupyter NotebookやGoogle Colabについて紹介します。

Jupyter NotebookとGoogle Colabについて

Jupyter Notebookは、Pythonをインタラクティブに実行できるウェブアプリケーションです。Pythonのコードを書いて、結果をみたり、データを可視化することが対話的に行えます。 また、対話の結果を.ipynbという形式のファイルで保存できるので共有や再現性の確保にも役立ちます。チュートリアル記事を書いてみたけど、実行結果が再現できないということもなくなります。 Jupyter Notebookは、ローカルマシンで動作させることもできますし、クラウドサービスを利用することもできます。

クラウドサービスの代表的なものがGoogle Colabです。名前の通りGoogleが提供しているサービスで、Jupyter Notebookをベースとしたクラウドサービスです。無料で使い始めることができ、必要な費用を支払うことでGoogleの高性能なサーバを利用できるため、機械学習の実験なども手軽に行えます。

ちなみに、Google Colabは正式名称がGoogle Colaboratoryですが、Google Colabと呼ばれることが多いです。Google ColabのウェブサイトでもほとんどGoogle Colabと表記されています。

Colab

Jupyter Notebookを使って対話的にベクトル検索をやってみよう

まずは、ローカルマシンでJupyter Notebookを動かしてみましょう。前の記事でQdrantというベクトルデータベースを使ったベクトル検索のチュートリアルを紹介しました。今回は、そのチュートリアルをJupyter Notebookで実行してみます。

前回の記事で作成したデータを使って進めようと思うので、まだやっていない方はやってからお進みください。どこに作成したか忘れてしまった方も、体感3分でできるので、再度やってみてもらえればと思います。

前回記事のリンク

動作確認

まずは、作成したアプリケーションが動作することを確認します。

Qdrantをdockerで動かして検索アプリケーションを起動し、検索できることを確認しましょう。

# DockerでQdrantを起動
docker run -d -p 6333:6333 -v $(pwd)/qdrant_data:/data qdrant/qdrant:v1.7.3
# 仮想環境を有効化して検索アプリケーションを起動
source .venv/bin/activate
python search-vector-db.py
# curlで動作確認
curl 'http://localhost:8000/search?text=冒険'

[{"Index": 0, "description": "10年前に交通事故で娘を亡くした主人公が、突然時間を超えて過去に戻され、娘と再会する。しかし過去を変えて娘を助けようとするほど、現実は歪んでいき、最後には娘を見送る決断を下さなければならない。", "director": "山本晋也", "genre": "ヒューマンドラマ", "name": "時を超えた約束"}, {"Index": 12, "description": "将来結婚する相手にタイムスリップできる機械を入手した主人公が試しに未来に跳んでみると、相手は思いがけない人物。それでも受け入れて結婚してみようと奮闘するラブコメディ。", "director": "落合正幸", "genre": "ラブコメディー", "name": "恋愛タイムスリップ"}, {"Index": 2, "description": "南米のジャングルで行方不明になった父を追う主人公が、現地のガイドとともに奥地へ向かう。そこで古代インカ文明の秘宝を発見するが、盗掘者たちの襲撃を受け、命からがら秘宝を持ち帰る。", "director": "野村英子", "genre": "アクション", "name": "アマゾンの秘宝"}]

ここまで動けば動作確認はOKです。

Jupyter Notebookをインストール

Jupyter Notebookを以下のコマンドでインストールします。

pip install notebook

インストールが完了したら以下のコマンドでJupyter Notebookを起動します。

jupyter notebook

起動するとブラウザが立ち上がり、Jupyter Notebookの画面が表示されます。

Jupyter Notebook

新しいノートブックを作成するには、NewからNotebookを選択します。

New Jupyter Notebook

Notebookが作成されると、Pythonのバージョンを選択する画面が表示されます。今回はPython3を選択しましょう。

Select Python3

これで準備完了です。この画面の要素について説明します。

Jupyter Notebookを使ってみる

Jupyter Notebookは、セルと呼ばれる単位で構成されています。

セルはノートブックの構造であり、コードを書く場所です。コードの一部を実行するには、セルをクリックして選択し、SHIFT+ENTERを押すか、上のツールバーの再生ボタンを押します。

Cell

Hello Worldを表示するセルを作成して実行してみましょう。

表示されているセルにprint("hello world")と入力して、SHIFT+ENTERを押すか、上のツールバーの再生ボタンを押します。

すると以下のように表示されると思います。

Hello World

次は、変数を使ってみましょう。次のセルに以下のように入力して、SHIFT+ENTERを押すか、上のツールバーの再生ボタンを押します。

a = 1
b = 2
print(a + b)

すると以下のように表示されると思います。

Print a variable

一度宣言した変数は他のセルで使えます。また、printをしなくても、セルの最後の行の結果が表示されます。

Remark the variables

Qdrantに接続してみる

では、新しいNotebookを作って、Qdrantに接続してみましょう。

from qdrant_client import QdrantClient
qdrant_client = QdrantClient("http://localhost:6333")
qdrant_client

実行するとこんな感じで表示されると思います。

Connect

もし、以下のようなエラーが表示された場合は、Qdrantのクライアントがインストールされていないので、上にセルを追加して、以下のコードを実行してください。 ライブラリのインストールもNotebookのセルから実行できます。

error

pip install qdrant-client

こんな感じですね。

インストールが完了後に、先ほどのコードを再度実行するとエラーが解消しているはずです。

Qdrantのデータをベクトル検索する

では、Qdrantのデータをベクトル検索してみましょう。まず必要になるライブラリをインストールします。

pip install sentence_transformers tdqm

インストールができたら、以下のコマンドを実行してください。

text = "冒険"
from sentence_transformers import SentenceTransformer
import tqdm as notebook_tqdm
model = SentenceTransformer("all-MiniLM-L6-v2")
vector = model.encode(text).tolist()
search_result = qdrant_client.search(
    collection_name="movies",
    query_vector=vector,
    limit=3
)
search_result

すると以下のように表示されると思います。

Search on Qdrant

検索キーワードを変更してみましょう。先ほどのセルのtext = "冒険"text = "結城"に変更して、再度実行してみてください。

結果が変わったと思います。

まとめ

Jupyter Notebookを使うとエディタでコードを編集してターミナルで実行してという作業を繰り返すことなく、編集して実行をシームレスに繰り返すことができました。AIを使ったアプリケーション開発ではパラメータを調整したり、比較したりすることが多いのですが、そんな時にこうして色々な入力値を素早く試したり、複数のセルの結果を比較できるのはとても便利です。

新しく使うライブラリやモデルは、まずはJupyter Notebookを使って色々動かして、方向性が決まったら、エディタで清書する。ような使い方もよさそうですね。