almost weekly useful materials - 04/26 -
Opened this issue · 7 comments
WebブラウザでPythonが動作する!PyScriptの詳解
html中にpythonスクリプトを埋め込みブラウザ上でそれを動作させることができるライブラリPyScriptを紹介している記事
pandasやnumpyといった外部ライブラリをimportして利用することもできるようで、実行環境に縛られずにデモやダッシュボードなどを提供できそう。
以下は外部ライブラリを読み込みつつ利用しているサンプルコード
# from https://gihyo.jp/article/2023/04/monthly-python-2304
<body>
<py-config>
packages = ["levenshtein-distance"]
</py-config>
<input class="py-input" type="text" id="text1" />
<input class="py-input" type="text" id="text2" />
<button class="py-button" type="submit" py-click="leven()">Go</button>
<div id="output"></div>
<py-script>
from levenshtein_distance import Levenshtein
def leven():
text1 = Element("text1").value
text2 = Element("text2").value
lev = Levenshtein(text1, text2)
display(f"レーベンシュタイン距離: {lev.distance()}", target="output", append=False)
</py-script>
</body>
コメント
実行環境を用意せずにデモや管理プロダクトを納品できるのは強そう
出典
表形式Diffusion Model(TabDDPM)で、生成したデータの品質の検証について
DiffusionModelによって生成した擬似テーブルデータの特徴量分布を検証している記事
CardioとAdultの二つのテーブルデータに対してデータ生成を試しており、元の特徴量分布には見られない外挿を行う傾向が確認されている。
コメント
diffusionでデータaugmentationをするって感じの話になるが、元の特徴量分布内のものをうまく利用するという感じになりそう。
出典
【ChatGPTハーレム】Slackに専門家美女AIを大量召喚したら全員反応してウザすぎたので調教する
ChatBotのロールとメッセージの関連性を判定させて敷居値以上のスコアが出た時だけ返信させる機構を実装したとのこと。
コメント
ロールとメッセージの関連性の判定は汎用性高そう。
出典
Google Colab で PEFT による大規模言語モデルのファインチューニングを試す
大規模言語モデルを省パラメータファインチューニング用ライブラリを用いてLoRAチューニングを実施している記事
いろいろ事前準備は必要だが、基本的にはconfigを読み、trainerに渡すだけというシンプル設計なのが使いやすい。
# from https://note.com/npaka/n/n932b4c0a2230
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, config)
trainer = transformers.Trainer(
model=model,
train_dataset=data['train'],
args=transformers.TrainingArguments(
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
warmup_steps=100,
max_steps=200,
learning_rate=2e-4,
fp16=True,
logging_steps=1,
output_dir='outputs'
),
data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False)
)
model.config.use_cache = False # 警告を黙らせます。 推論のために再度有効にしてください。
trainer.train()
コメント
日本語の数Bくらいのモデルに対してLoRAで気軽にfinetuningできるようになるというのは嬉しいかも。
ただ、lineのブログも見るにLoRAによる制度の劣化はだいぶ大きいので、元のパラメータ数が大きい日本語モデルが出てこないまではあまり出番がないかもしれない。
出典
ChatGPT (gpt-3.5-turbo) で安定してタスクの失敗時にもJSON形式で返す手法
ChatGPTの出力を安定的にJSON形式で変えさせるための手法を紹介している記事
ChatGPTはデフォルトで結果に対する説明を入れるように訓練されているので、json以外の場所で結果の説明をしてしまうことがあり、それを防ぐための方法を模索
コメント
この手の記事にしては珍しく、N回中M回成功をちゃんと教えてくれるありがたい記事
失敗する時でもjsonはちゃんと吐き出してくれるのであれば、ルールベースで{
と}
を検出してパースするのもありそう。
あとはデフォルトの訓練結果を無効化するようなプロンプトを入れ込みたいところである。
出典
[輪講資料] LoRA: Low-Rank Adaptation of Large Language Models
LLMを省パラメータでファインチューニングするLoRAの手法やその嬉しさ、実験結果までを丁寧に解説している資料
以下重要そうなスライドの抜粋
![スクリーンショット 2023-04-22 9 57 03](https://user-images.githubusercontent.com/19774756/233753447-6faca95b-
7df4-4ab5-a3d9-a00b6be7bc56.png)
コメント
理解が曖昧だったけど重要な点
- 推論コストは元のモデルから増えもしないし減りもしない
- fintuningコストを減少
- 手元に持っておく重みの容量を削減
とても勉強になった