A. Radford et al., “Learning Transferable Visual Models From Natural Language Supervision,” arXiv [cs.CV], Feb. 26, 2021. [Online]. Available: http://arxiv.org/abs/2103.00020
The entire human body from head to toe is captured in the image.
entire body, head to toe, captured
The image features a person fully dressed, providing a complete view of the attire from head to toe. All clothing items and accessories are clearly visible, offering an all-encompassing look at the fashion style. This allows for an in-depth analysis and categorization of the overall outfit, including design, color schemes, and combinations.
person fully dressed, complete view, head to toe, clothing items, accessories, visible, fashion style, in-depth analysis, categorization, design, color schemes, combinations
complete view, head to toe, fashion style, in-depth analysis, color schemes, combination
#2
モデルがアイテムを着用しているが、モデルの体の一部しか映っていない画像か?
Only a part of the human body is captured in the image.
part of body, captured
In this image, attention is given to a specific part of the body and attire. The focused view presents detailed features of the clothing, including fabric, design, and accessories. This partial display aids in a concentrated analysis, enabling categorization based on the distinct visible elements.
specific part of body, focused view, detailed features, clothing, fabric, design, accessories, partial display, concentrated analysis, categorization, visible elements
specific part of body, detailed features, fabric, concentrated analysis, visible elements
#3
アイテムのみが写ったモデルが着用していない、物撮りの画像か?
No human is captured in the image.
no human, captured
This image contains no human subject, featuring only clothing and accessories. The absence of a person allows for an unobstructed view of the attire’s design, texture, and style. It facilitates a straightforward classification of the clothing items, free from the influence of human form and posture.
no human subject, clothing and accessories, unobstructed view, design, texture, style, straightforward classification, free from human form and posture
no human subject, unobstructed view, texture, style, free from human form and posture
OpenAI の model における Fine-tuning とは、追加での学習をさせる事で様々なタスクでの性能向上させる事ができる手法です。
Fine-tuning improves on few-shot learning by training on many more examples than can fit in the prompt, letting you achieve better results on a wide number of tasks
具体的には FIne-tuning 用のデータを準備した上で OpenAI の API を叩く事で作成する事ができます。
Fine-tuning のユースケースは公式にも乗っていますが、その中で興味深い一文があります。
Another scenario where fine-tuning is effective is in reducing costs and / or latency, by replacing GPT-4 or by utilizing shorter prompts, without sacrificing quality. If you can achieve good results with GPT-4, you can often reach similar quality with a fine-tuned gpt-3.5-turbo model by fine-tuning on the GPT-4 completions, possibly with a shortened instruction prompt.
データを準備できたら Training 用のデータと Test 用のデータに分離しました。Test 用のデータは Training には使用せず、Fine-tuning されたモデルでタスクを実行してみて結果が同じになるかどうかを試してモデルの性能を評価するために利用します。
Fine-tuning を実施
Fine-tuning の実施は簡単です。OpenAI の API を利用して以下を実施します。
トレーニングデータをアップロード
アップロードしたデータを指定しつつトレーニングを開始
DROBE では以下のスクリプトを GitHub Actions で実施しました。
# Upload data
file_response = openai.File.create(
file=open("<path-to-file>.jsonl", "rb"), purpose="fine-tune"
)
# Get the file ID
file_id = file_response["id"]
# Check the file's status
status = file_response["status"]
while status != "processed":
print(f"File status: {status}. Waiting for the file to be processed...")
time.sleep(10) # Wait for 10 seconds
file_response = openai.File.retrieve(file_id)
status = file_response["status"]
# Create the fine-tuning job using the file IDif status == "processed":
fine_tuning_response = openai.FineTuningJob.create(
training_file=file_id, model="gpt-3.5-turbo"
)
fine_tuning_job_id = fine_tuning_response["id"] # Store the fine-tuning job IDelse:
print(f"File processing failed with status: {status}")
print(f"Fine-tuning job created with id: {fine_tuning_job_id}")
fine_tuning_job_response = openai.FineTuningJob.retrieve(fine_tuning_job_id)
fine_tuning_job_status = fine_tuning_job_response["status"]
while fine_tuning_job_status != "succeeded":
print(
f"Fine-tuning job status: {fine_tuning_job_status}. Waiting for the fine-tuning job to complete..."
)
time.sleep(10) # Wait for 10 seconds
fine_tuning_job_response = openai.FineTuningJob.retrieve(fine_tuning_job_id)
fine_tuning_job_status = fine_tuning_job_response["status"]
print(f"Fine-tuning job completed with status: {fine_tuning_job_status}")
print(f"Fine-tuned model id: {fine_tuning_job_response['fine_tuned_model']}")
結果
Fine-tuning が完了したら、そのモデルを利用して事前に準備しておいた Test データに対してタスクを実行します。
その際に以下のような事を検証しました。
プロンプトは GPT-4 で利用していたものと完全に同じにする
ただし実験として、プロンプトを省略したものも同時に実施しました
few-shot learning に対してどれくらいの精度向上が見られるかを試す
結果としては以下のようになりました。
Fine-tuning すると結果が GPT-4 に近づく事が観測できた
100 data よりも 500 data の方が性能が向上した
500 data で Fine-tuning した場合には 84% が GPT-4 の結果と完全一致した
Fine-tuning しても prompt を削ると性能が悪化した
比較のため gpt-3.5-turbo-16k-0613 を few shot したものも入れた
few shot なしよりも性能が向上したが、fine tune したものには及ばなかった
fine tune したモデルは現状 4k token max なので few shot は出来なかった