概要
いつも忘れるのでメモ、音ありじゃないと気づかないことがある
環境
- macOS 14.2.1
コマンド
-
ls && osascript -e 'display notification "Command finished!" with title "Terminal" sound name ""'
いつも忘れるのでメモ、音ありじゃないと気づかないことがある
Ubuntu + pyenv 環境で発生したので対処しました
Python 3.11.3 (main, Feb 5 2024, 14:46:38) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lzma
phpMyAdmin の代わりになるものがないか探していたところ ILLA Builder というツールを見つけたので試してみました
テーブルのデータをグリッドに表示するところまでやってみました
localhost:2022 にアクセスするとログイン画面が表示されるのでとりあえずデフォルトの root/password でログインしましょう
右上の「Create new」から作成します
MySQL をリソースとして追加します
Action List から New -> Create from resource を選択します
リソースのタイプを選択します
今回は MySQL を選択します
接続先 MySQL の情報を入力しましょう
入力できたら Save Resource します
右ペインにある Data grid をドラッグアンドドロップして中央に配置します
データはダミーなので表示されているデータはまだ MySQL のデータではありません
追加リソースに対してすでにアクションがあるのでそれを使います
アクションをクリックすると SQL を入力することができるので適当なテーブルの一覧を取得する SQL を入力します
そして Save してアクションを保存します
アクションの名前は適宜変更してください
グリッドを選択し Data source から先程追加したアクションを選択します
そしてアクションの Run をクリックするとグリッドにデータの一覧が表示されます
データがうまく表示されない場合は Primary Key を正しく設定しましょう
Primary Key を設定するとソーティングなども行えます
紹介した機能はほんの一部なので他にもいろいろなアクションと UI コンポーネントを紐付けることができます
任意のスクリプトを実行することも可能です
ILLA Builder を試してみました
イメージとしては Redash のような BI ツールに近いのかなと思います
最近ではこのようなツールをローコード開発ツールと呼ぶようです
普通に MySQL の Web クライアントととしても十分に使えそうです
いつも忘れるのでメモ
基本は apt + dpkg で網羅できます
インストール元のリポジトリなどの確認もこれ (APT-Source)
インストール済みも削除済みも
Open Interpreter は ChatGPT に問い合わせた結果をローカルのマシンで実行することができるツールです
今回は ChatGPT ではなく llama2 をローカルで動かして ChatGPT の代わりとして動かしそこに対して Open Interpreter を実行してみます
ollama というローカルで LLM を動作させるツールを使います
また今回は軽めの LLM (llama2 [3.8GB]) を使いますがサイズの大きい LLM モデル (dolphin-mixtral:8x7b-v2.6 など) を使う場合は /tmp などの領域が十分に空いている状態で実行してください
モデルのダウンロードが始まるので待ちましょう
まずはコマンドで実行してみます
インタラクティブモードになるので質問してみます
とりあえず今回は特定のサイトをスクレイプする Python スクリプトを作成してもらいます
すると生成したスクリプトをそのままローカルマシンで実行するか確認するダイアログが表示されるので Yes を選択しましょう
もしライブラリなどの準備が整っていればそのまま実行することができます
▌ Model set to ollama/llama2
Open Interpreter will require approval before running code.
Use interpreter -y to bypass this.
Press CTRL-C to exit.
> Create a script to scrape https://hawksnowlog.blogspot.com/ in Python.
We were unable to determine the context window of this model. Defaulting to 3000.
If your model can handle more, run interpreter --context_window {token limit} --max_tokens {max tokens per response}.
Continuing...
Plan:
1 Write a script to scrape the website https://hawksnowlog.blogspot.com/ using Python.
2 Use therequests library to make HTTP requests to the website and retrieve the desired data.
3 Use theBeautifulSoup library to parse the HTML content of the website and extract the desired information.
4 Store the extracted data in a dictionary or other data structure for further use.
Code:
import requests
from bs4 import BeautifulSoup
# Send an HTTP request to the website
response = requests.get('https://hawksnowlog.blogspot.com/')
# Parse the HTML content of the website using BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Extract the desired information from the website
title = soup.find('title').text
author = soup.find(' author').text
date = soup.find('date').text
# Store the extracted data in a dictionary
data = {'title': title, 'author': author, 'date': date}
# Print the extracted data
print(data)
Would you like to run this code? (y/n)
ここで y を入力するとそのまま実行されます
ライブラリなどがまだインストールされていない場合は以下のようにエラーになります
ModuleNotFoundError Traceback (most recent call last)
Cell In[2], line 4
2 import requests
3 print('##active_line2##')
----> 4 from bs4 import BeautifulSoup
5 print('##active_line3##')
6 pass
ModuleNotFoundError: No module named 'bs4'
The output means that thebs4 module is not available in your Python environment. This is likely because you have not installed thebeautifulsoup4 package.
To install the package, you can use the following command in your terminal:
pip install beautifulsoup4
Would you like to run this code? (y/n)
インタラクティブモードを抜ける場合は Ctrl+c を入力します
コマンドではなく Python スクリプトから実行してみます
実行後はコマンド同様インタラクティブモードに入り結果をそのまま実行するか確認されます
from interpreter import interpreter
interpreter.llm.model = "ollama/llama2"
ret = interpreter.chat("Create a script to scrape https://hawksnowlog.blogspot.com/ in Python")
print(ret)
/bye を入力しましょうOpen Interpreter を試してみました
LangChain では LLM に入力する情報を工夫していましたが Open Interpreter は取得後の情報を使って何かしらのアクションを実行することができます
ローカルに実行するのでスクリプトを実行するマシン上に open-interpreter のインストールが必要になりますが LLM 自体はローカルではなく ChatGPT (OpenAI) や Azure OpenAI などの API を使えるのでそこまでスペックを要求しないのも良いかなと思います
また今回は試していませんが -y というオプションを使えば自動で実行したりエラーになった場合はトライアンドエラーを繰り返してくれるので勝手にすべてやってくれる機能もあります
さすがにプロダクション環境などでは -y は怖い感じもしますが開発のサポートやローカル環境などでは便利なのかもしれません
とりあえず Fine Tuning できるかどうか試したかったので Transformers + keras でやってみました
基本は Transformers にある Fine Tuning のチュートリアルコードにコメントを入れているだけです
基本的な流れは以下のとおりです
詳細な流れは以下のコード内のコメントに記載しています
import numpy as np
import tensorflow as tf
from datasets import load_dataset
from transformers import AutoTokenizer, TFAutoModelForSequenceClassification
# Fine-Tuning で新たに学習させるデータセットのダウンロード
# データセットは {'sentence': 'It is easy to slay the Gorgon.', 'label': 1, 'idx': 8548} というデータが 8551 個ある
dataset = load_dataset("glue", "cola")
dataset = dataset["train"]
# トークナイザーの取得
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
# トークナイズしてテキストを ID とトークンに変換
# padding=True にすることで最も長い文章の文字数に合わせる、溢れた部分はゼロ埋めになる
tokenized_data = tokenizer(dataset["sentence"], return_tensors="np", padding=True)
# print(tokenized_data[0])
# print(tokenized_data[0].ids)
# print(tokenized_data[0].type_ids)
# print(tokenized_data[0].attention_mask)
# 学習データの作成、トークナイズしたデータを辞書化するだけ
tokenized_data = dict(tokenized_data)
# 学習データの正解ラベルの作成
labels = np.array(dataset["label"])
# 事前学習済みモデルの取得、これに dataset を Fine-Tuning する
model = TFAutoModelForSequenceClassification.from_pretrained("bert-base-cased")
# モデルのコンパイル、損失関数の指定は不要 (らしい
# M2 Mac では以下のエラーが出るので最適化関数は tf.keras.optimizers.legacy.Adam を使用する
# E tensorflow/core/grappler/optimizers/meta_optimizer.cc:961] model_pruner failed: INVALID_ARGUMENT: Graph does not contain terminal node Adam/AssignAddVariableOp_10.
model.compile(optimizer=tf.keras.optimizers.legacy.Adam(3e-5))
# モデルの再学習
model.fit(tokenized_data, labels)
# モデルの保存
model.save("fine_tuned_bert_base_cased")
Transformers + keras でとりあえず Fine Tuning に触れてみました
元々公開されている LLM (GPT2) を使って新たに学習したモデルが作成できました
再学習させるのである程度のマシンスペックが必要になる他データ量に応じても負荷が変わるので注意しましょう
できれば GPU 環境があるのが望ましいです
また学習元の LLM も今回は GPT2 でしたが日本語の場合には日本語に特化した事前学習済みモデルがあるのでそういったものを選択したほうがより目的にあったモデルを作成することができます (例えば cl-tohoku/bert-base-japanese など)