GENZITSU / UsefulMaterials

34 stars 0 forks source link

almost weekly useful materials - 04/26 - #131

Open GENZITSU opened 1 year ago

GENZITSU commented 1 year ago

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>

コメント

実行環境を用意せずにデモや管理プロダクトを納品できるのは強そう

出典

GENZITSU commented 1 year ago

表形式Diffusion Model(TabDDPM)で、生成したデータの品質の検証について

DiffusionModelによって生成した擬似テーブルデータの特徴量分布を検証している記事

CardioとAdultの二つのテーブルデータに対してデータ生成を試しており、元の特徴量分布には見られない外挿を行う傾向が確認されている。

スクリーンショット 2023-04-13 18 16 51

スクリーンショット 2023-04-13 18 17 04

スクリーンショット 2023-04-13 18 17 14

スクリーンショット 2023-04-13 18 17 20

コメント

diffusionでデータaugmentationをするって感じの話になるが、元の特徴量分布内のものをうまく利用するという感じになりそう。

出典

GENZITSU commented 1 year ago

【ChatGPTハーレム】Slackに専門家美女AIを大量召喚したら全員反応してウザすぎたので調教する

ChatBotのロールとメッセージの関連性を判定させて敷居値以上のスコアが出た時だけ返信させる機構を実装したとのこと。

コメント

ロールとメッセージの関連性の判定は汎用性高そう。

出典

GENZITSU commented 1 year ago

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による制度の劣化はだいぶ大きいので、元のパラメータ数が大きい日本語モデルが出てこないまではあまり出番がないかもしれない。

出典

GENZITSU commented 1 year ago

ChatGPT (gpt-3.5-turbo) で安定してタスクの失敗時にもJSON形式で返す手法

ChatGPTの出力を安定的にJSON形式で変えさせるための手法を紹介している記事

ChatGPTはデフォルトで結果に対する説明を入れるように訓練されているので、json以外の場所で結果の説明をしてしまうことがあり、それを防ぐための方法を模索

スクリーンショット 2023-04-22 9 30 24

スクリーンショット 2023-04-22 9 32 30

コメント

この手の記事にしては珍しく、N回中M回成功をちゃんと教えてくれるありがたい記事

失敗する時でもjsonはちゃんと吐き出してくれるのであれば、ルールベースで{}を検出してパースするのもありそう。

あとはデフォルトの訓練結果を無効化するようなプロンプトを入れ込みたいところである。

出典

GENZITSU commented 1 year ago

[輪講資料] LoRA: Low-Rank Adaptation of
 Large Language Models

LLMを省パラメータでファインチューニングするLoRAの手法やその嬉しさ、実験結果までを丁寧に解説している資料

以下重要そうなスライドの抜粋

スクリーンショット 2023-04-22 9 56 50

スクリーンショット 2023-04-22 9 57 03

スクリーンショット 2023-04-22 9 57 13

スクリーンショット 2023-04-22 9 57 31

スクリーンショット 2023-04-22 9 57 48

スクリーンショット 2023-04-22 9 57 58

スクリーンショット 2023-04-22 9 58 14

スクリーンショット 2023-04-22 9 58 32

スクリーンショット 2023-04-22 9 59 13

スクリーンショット 2023-04-22 9 59 24

スクリーンショット 2023-04-22 10 03 18

コメント

理解が曖昧だったけど重要な点

とても勉強になった

出典

GENZITSU commented 1 year ago

権限移譲する技術

参考になりそうな点を抜粋

  1. ToDoではなくイシューを渡す

  2. 決定権を渡していることを繰り返し伝える

  3. 仕事の過程をチェックしない

  4. 役割を周囲に周知してあげる

コメント

ジュニア → ミドル → シニア になる過程でも権限移譲のタイミングは出てくるので参考にしていきたい。

出典