
OpenAI API ã® ãã¡ã€ã³ãã¥ãŒãã³ã°ã¬ã€ã
以äžã®èšäºãé¢çœãã£ãã®ã§ãããããŸãšããŸããã
 åå
1. ãã¡ã€ã³ãã¥ãŒãã³ã°ã®å©ç¹
ãã¡ã€ã³ãã¥ãŒãã³ã°ã®å©ç¹ã¯ã次ã®ãšããã§ãã
(1) ããã³ãããããé«å質ãªå¿ç
(2) ããã³ããã«åãŸããããªãããå€ãã®äŸã®é©çš
(3) ããã³ããã®ççž®ã«ããããŒã¯ã³æ° (ã³ã¹ã) ã®ç¯çŽ
(4) ããã³ããã®ççž®ã«ããåŠçæéã®ççž®
ã¢ãã«ã¯èšå€§ãªéã®ããã¹ãã§äºååŠç¿ãããŠããããã®ã¢ãã«ã广çã«å©çšãããããããã³ããã«æé ãå¿çã®äŸãæå®ããææ³ã䜿ãããŸãããã®äŸã䜿çšããŠã¿ã¹ã¯ã®å®è¡æ¹æ³ã瀺ãããšããFew-ShotããšåŒã³ãŸãã
ãã¡ã€ã³ãã¥ãŒãã³ã°ã§ãããã³ããã«åãŸããããªãããå€ãã®äŸã§åŠç¿ããããšã«ãããããŸããŸãªã¿ã¹ã¯ã§ããè¯ãçµæãéæã§ããããã«ãªããŸããããã³ããã«å€ãã®äŸãæå®ããå¿ èŠã¯ãªããªããŸããããã«ããããŒã¯ã³ (ã³ã¹ã) ãç¯çŽãããåŠçæéãççž®ãããŸãã
2. ãã¡ã€ã³ãã¥ãŒãã³ã°ã®äœ¿çšæé
ãã¡ã€ã³ãã¥ãŒãã³ã°ã®äœ¿çšæéã¯ã以äžã®ããŒãžã§åç §ã§ããŸãã
3. ãã¡ã€ã³ãã¥ãŒãã³ã°ã§ããã¢ãã«
çŸåšããã¡ã€ã³ãã¥ãŒãã³ã°ã§ããã¢ãã«ã¯ã次ã®3çš®é¡ã§ãã
ã»gpt-3.5-turbo-0613 (æšå¥š)
ã»babbage-002
ã»davinci-002
ãgpt-3.5-turboããæšå¥šãããŸãããbabbage-002ããšãdavinci-002ãã¯éå»ã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã¢ãã«ããç§»è¡ã®ããçšæãããŠãŸãããGPT-4ãã¯ä»å¹ŽåŸåã®äºå®ã§ãã
5. ãã¡ã€ã³ãã¥ãŒãã³ã°ã䜿çšãã¹ãã
ãã¡ã€ã³ãã¥ãŒãã³ã°ã¯ã¢ãã«ãæ¹åã§ããŸãããæéãšåŽåãããããŸãããŸãã¯ããããã³ãããšã³ãžãã¢ãªã³ã°ãããããã³ãããã§ãŒã³ã (è€éãªã¿ã¹ã¯ãè€æ°ã®ããã³ããã«åå²)ããFunction Callingãã䜿çšããããšãããå§ãããŸãã
äž»ãªçç±ã¯æ¬¡ã®ãšããã§ãã
ã»ããŸãæ©èœããŠããªãããã«èŠããã¿ã¹ã¯ã§ããããé©åãªããã³ããã䜿çšããããšã§ãã¯ããã«åªããçµæãåŸããããã¡ã€ã³ãã¥ãŒãã³ã°ããå¿ èŠãªããªãå ŽåããããŸãã
ã»ããã³ããããã®ä»ã®ææ³ã®æ¹ãããã¡ã€ã³ãã¥ãŒãã³ã°ãããã¯ããã«é«éã«ãã£ãŒãããã¯ã«ãŒãããããšãã§ããŸãã
ã»ããã§ããã¡ã€ã³ãã¥ãŒãã³ã°ãå¿ èŠãªå Žåã§ããæåã®ããã³ãããšã³ãžãã¢ãªã³ã°ã®äœæ¥ã¯ç¡é§ã«ã¯ãªããŸãããéåžžããã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã§åªããããã³ããã䜿çšãããšãæè¯ã®çµæãåŸãããŸãã
ãGPTãã¹ããã©ã¯ãã£ã¹ã¬ã€ããã§ã¯ããã¡ã€ã³ãã¥ãŒãã³ã°ããã«ããã©ãŒãã³ã¹ãåäžãããããã®ã广çãªæŠç¥ã»æŠè¡ã解説ããŠããŸãã
6. ãã¡ã€ã³ãã¥ãŒãã³ã°ã®äžè¬çãªãŠãŒã¹ã±ãŒã¹
ãã¡ã€ã³ãã¥ãŒãã³ã°ã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ã¯ã次ã®ãšããã§ãã
ã»äŒããã®ã§ã¯ãªãèŠããæ¹ãç°¡åãªå Žå
ã»æäœã»å£èª¿ã»æžåŒããŸãã¯ãã®ä»ã®å®æ§çåŽé¢ã®èšå®ã
ã»ç®çã®åºåãçæããéã®ä¿¡é Œæ§ã®åäžã
ã»è€éãªããã³ããã«åŸããªãå Žåã®ä¿®æ£ã
ã»å€ãã®ç¹æ®ãªã±ãŒã¹ãç¹å®ã®æ¹æ³ã§åŠçã
ã»ããã³ããã§æç¢ºã«èª¬æããã®ãé£ããæ°ããã¹ãã«ãã¿ã¹ã¯ã®å®è¡ã
ã»ã³ã¹ããé
å»¶ãåæžãããå Žå
å質ãç ç²ã«ããããšãªããGPT-4ã®çœ®ãæãããããçãããã³ããã®å©çšã§ãã³ã¹ããé
å»¶ãåæžã§ããŸãã
7. ãã¡ã€ã³ãã¥ãŒãã³ã°ã®æé
ãã¡ã€ã³ãã¥ãŒãã³ã°ã®æé ã¯ã次ã®ãšããã§ãã
(1) åŠç¿ããŒã¿ã®æºå
(2) åŠç¿ããŒã¿ã®ã¢ããããŒã
(3) ãã¡ã€ã³ãã¥ãŒãã³ã°ã®å®è¡
(4) ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã®äœ¿çš
7-1. åŠç¿ããŒã¿ã®æºå
ãgpt-3.5-turboããåŠç¿ããŒã¿ã®äŸã¯ã次ã®ãšããã§ãã
{"messages": [{"role": "system", "content": "Marvã¯äºå®ã«åºã¥ãããã£ãããããã§ãç®èãèšããŸãã"}, {"role": "user", "content": "ãã©ã³ã¹ã®éŠéœã¯ïŒ"}, {"role": "assistant", "content": "ããªããŸãã§ã¿ããªãããç¥ããªããã®ããã«"}]}
{"messages": [{"role": "system", "content": "Marvã¯äºå®ã«åºã¥ãããã£ãããããã§ãç®èãèšããŸãã"}, {"role": "user", "content": "ããããªãšãžã¥ãªãšããããæžããã®ã¯èª°ïŒ"}, {"role": "assistant", "content": "ããããŠã£ãªã¢ã ã»ã·ã§ã€ã¯ã¹ãã¢ãšãã人ã ããèããããšããïŒ"}]}
{"messages": [{"role": "system", "content": "Marvã¯äºå®ã«åºã¥ãããã£ãããããã§ãç®èãèšããŸãã"}, {"role": "user", "content": "å°çããæãŸã§ã®è·é¢ã¯ïŒ"}, {"role": "assistant", "content": "çŽ384,400ããã¡ãŒãã«ã§ããå€å°ã®èª€å·®ã¯ãããŸãã"}]}ãbabbage-002ããdavinci-002ãã®åŠç¿ããŒã¿ã®äŸã¯ã次ã®ãšããã§ãã
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}ãã¡ã€ã³ãã¥ãŒãã³ã°åã«ãæé©ãšå€æããäžé£ã®äŒè©±å±¥æŽãåéãããããããã¹ãŠã®åŠç¿ããŒã¿ã«å«ããããšããå§ãããŸããåŠç¿ããŒã¿ãå°ãªã (100 æªæº) å Žåã«ãæè¯ãã€æãäžè¬çãªçµæãåŸãããšãã§ããŸãã
ãŸãã50ã®åŠç¿ããŒã¿ããéå§ãããã¡ã€ã³ãã¥ãŒãã³ã°åŸã«ã¢ãã«ã«æ¹åã®å åãèŠããããã©ããã確èªããããšããå§ãããŸããåŠç¿ããŒã¿ãã¹ã±ãŒã«ããåã«ãã¿ã¹ã¯ã®èšå®ãããŒã¿ã®åæ§ç¯ãåèãã¹ãå ŽåããããŸãã
ååŠç¿ããŒã¿ã¯ã4096ããŒã¯ã³ ã«å¶éãããŠããŸããåãã¡ã€ã«ã¯ 50MB ã«å¶éãããŠããŸãã
ãã¡ã€ã³ãã¥ãŒãã³ã°ã®å®è¡åã«ãåŠç¿ããŒã¿ã®æžåŒã確èªããããšãéèŠã§ãããããè¡ãããã«ãæœåšçãšã©ãŒã®æ€åºãããŒã¯ã³æ°ãã³ã¹ãã®èŠç©ããã«äœ¿çšã§ããç°¡å㪠Python ã¹ã¯ãªãããæäŸãããŠããŸãã
ã»Data formatting script
# We start by importing the required packages
import json
import os
import tiktoken
import numpy as np
from collections import defaultdict
# Next, we specify the data path and open the JSONL file
data_path = "<YOUR_JSON_FILE_HERE>"
# Load dataset
with open(data_path) as f:
dataset = [json.loads(line) for line in f]
# We can inspect the data quickly by checking the number of examples and the first item
# Initial dataset stats
print("Num examples:", len(dataset))
print("First example:")
for message in dataset[0]["messages"]:
print(message)
# Now that we have a sense of the data, we need to go through all the different examples and check to make sure the formatting is correct and matches the Chat completions message structure
# Format error checks
format_errors = defaultdict(int)
for ex in dataset:
if not isinstance(ex, dict):
format_errors["data_type"] += 1
continue
messages = ex.get("messages", None)
if not messages:
format_errors["missing_messages_list"] += 1
continue
for message in messages:
if "role" not in message or "content" not in message:
format_errors["message_missing_key"] += 1
if any(k not in ("role", "content", "name") for k in message):
format_errors["message_unrecognized_key"] += 1
if message.get("role", None) not in ("system", "user", "assistant"):
format_errors["unrecognized_role"] += 1
content = message.get("content", None)
if not content or not isinstance(content, str):
format_errors["missing_content"] += 1
if not any(message.get("role", None) == "assistant" for message in messages):
format_errors["example_missing_assistant_message"] += 1
if format_errors:
print("Found errors:")
for k, v in format_errors.items():
print(f"{k}: {v}")
else:
print("No errors found")
# Beyond the structure of the message, we also need to ensure that the length does not exceed the 4096 token limit.
# Token counting functions
encoding = tiktoken.get_encoding("cl100k_base")
# not exact!
# simplified from https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb
def num_tokens_from_messages(messages, tokens_per_message=3, tokens_per_name=1):
num_tokens = 0
for message in messages:
num_tokens += tokens_per_message
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == "name":
num_tokens += tokens_per_name
num_tokens += 3
return num_tokens
def num_assistant_tokens_from_messages(messages):
num_tokens = 0
for message in messages:
if message["role"] == "assistant":
num_tokens += len(encoding.encode(message["content"]))
return num_tokens
def print_distribution(values, name):
print(f"\n#### Distribution of {name}:")
print(f"min / max: {min(values)}, {max(values)}")
print(f"mean / median: {np.mean(values)}, {np.median(values)}")
print(f"p5 / p95: {np.quantile(values, 0.1)}, {np.quantile(values, 0.9)}")
# Last, we can look at the results of the different formatting operations before proceeding with creating a fine-tuning job:
# Warnings and tokens counts
n_missing_system = 0
n_missing_user = 0
n_messages = []
convo_lens = []
assistant_message_lens = []
for ex in dataset:
messages = ex["messages"]
if not any(message["role"] == "system" for message in messages):
n_missing_system += 1
if not any(message["role"] == "user" for message in messages):
n_missing_user += 1
n_messages.append(len(messages))
convo_lens.append(num_tokens_from_messages(messages))
assistant_message_lens.append(num_assistant_tokens_from_messages(messages))
print("Num examples missing system message:", n_missing_system)
print("Num examples missing user message:", n_missing_user)
print_distribution(n_messages, "num_messages_per_example")
print_distribution(convo_lens, "num_total_tokens_per_example")
print_distribution(assistant_message_lens, "num_assistant_tokens_per_example")
n_too_long = sum(l > 4096 for l in convo_lens)
print(f"\n{n_too_long} examples may be over the 4096 token limit, they will be truncated during fine-tuning")
# Pricing and default n_epochs estimate
MAX_TOKENS_PER_EXAMPLE = 4096
MIN_TARGET_EXAMPLES = 100
MAX_TARGET_EXAMPLES = 25000
TARGET_EPOCHS = 3
MIN_EPOCHS = 1
MAX_EPOCHS = 25
n_epochs = TARGET_EPOCHS
n_train_examples = len(dataset)
if n_train_examples * TARGET_EPOCHS < MIN_TARGET_EXAMPLES:
n_epochs = min(MAX_EPOCHS, MIN_TARGET_EXAMPLES // n_train_examples)
elif n_train_examples * TARGET_EPOCHS > MAX_TARGET_EXAMPLES:
n_epochs = max(MIN_EPOCHS, MAX_TARGET_EXAMPLES // n_train_examples)
n_billing_tokens_in_dataset = sum(min(MAX_TOKENS_PER_EXAMPLE, length) for length in convo_lens)
print(f"Dataset has ~{n_billing_tokens_in_dataset} tokens that will be charged for during training")
print(f"By default, you'll train for {n_epochs} epochs on this dataset")
print(f"By default, you'll be charged for ~{n_epochs * n_billing_tokens_in_dataset} tokens")
print("See pricing page to estimate total costs")7-2. åŠç¿ããŒã¿ã®ã¢ããããŒã
åŠç¿ããŒã¿ã®ãã¡ã€ã«ãã¢ããããŒãããŸãã
openai.File.create(
file=open("mydata.jsonl", "rb"),
purpose='fine-tune'
)7-3. ãã¡ã€ã³ãã¥ãŒãã³ã°ã®å®è¡
ãã¡ã€ã³ãã¥ãŒãã³ã°ãå®è¡ããŸãã
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTuningJob.create(training_file="file-abc123", model="gpt-3.5-turbo")ãã¡ã€ã³ãã¥ãŒãã³ã°ãéå§ããåŸãå®äºãããŸã§ã«æéãããããŸããã¢ãã«ã®åŠç¿ãå®äºãããšããŠãŒã¶ãŒã«ç¢ºèªã¡ãŒã«ãå±ããŸãã
ãã¡ã€ã³ãã¥ãŒãã³ã°ã®å®è¡ã«å ããŠãæ¢åã®ãžã§ãã®ãªã¹ã衚瀺ãç¶æ 衚瀺ããã£ã³ã»ã«ãªã©ãè¡ãããšãã§ããŸãã
import openai
# ãã¡ã€ã³ãã¥ãŒãã³ã°ã®ãžã§ãã®ãªã¹ã衚瀺
openai.FineTuningJob.list(limit=10)
# ãã¡ã€ã³ãã¥ãŒãã³ã°ã®ãžã§ãã®ç¶æ
衚瀺
openai.FineTuningJob.retrieve("ft-abc123")
# ãã¡ã€ã³ãã¥ãŒãã³ã°ã®ãžã§ãã®ãã£ã³ã»ã«
openai.FineTuningJob.cancel("ft-abc123")
# ãã¡ã€ã³ãã¥ãŒãã³ã°ã®ãžã§ãã®ã€ãã³ãã®ãªã¹ã衚瀺
openai.FineTuningJob.list_events(id="ft-abc123", limit=10)
# ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã®åé€
openai.Model.delete("ft-abc123")7-5. ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã®äœ¿çš
ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã䜿çšããŸãã
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
completion = openai.ChatCompletion.create(
model="ft:gpt-3.5-turbo:my-org:custom_suffix:id",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
)
print(completion.choices[0].message)8. ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã®åæ
åŠç¿éçšã§èšç®ãããæ¬¡ã®ã¡ããªã¯ã¹ãæäŸããŸãã
ã»åŠç¿æå€±
ã»åŠç¿ããŒã¯ã³ã®ç²ŸåºŠ
ã»ãã¹ãæå€±
ã»ãã¹ãããŒã¯ã³ã®ç²ŸåºŠãããã®çµ±èšã¯ãåŠç¿ãã¹ã ãŒãºã«è¡ããããã©ããã®å¥å šæ§ãã§ãã¯ãæäŸããŸã (æå€±ãæžå°ããããŒã¯ã³ã®ç²ŸåºŠãåäžãã)ã
ãã ãããã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã䜿çšããŠè©äŸ¡ããããšããã¢ãã«ã®å質ã«ã€ããŠæãé©åãªæèŠãæäŸããŸãããµã³ãã«ã䞊ã¹ãŠæ¯èŒããããšããå§ãããŸããæåè©äŸ¡ã«æéãããããããå Žåã¯ãEvalsã©ã€ãã©ãªã§GPT-4 ã䜿çšããŠè©äŸ¡ããããšãæ€èšããŠãã ããã
9. ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã®èª¿æŽ
9-1. åŠç¿ããŒã¿å質ã®èª¿æŽ
ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã®çµæãæåŸ ããã»ã©è¯ããªãå Žåã¯ãæ¬¡ã®æ¹æ³ã§åŠç¿ããŒã¿ã調æŽããããšãæ€èšããŠãã ããã
ã»æ®ãã®åé¡ã察象ãšããäŸãåé
ã¢ãã«ãç¹å®ã®åŽé¢ã§æ§èœãäžååãªå Žåã¯ããããã®åŽé¢ãæ£ããåçããæ¹æ³ãã¢ãã«ã«çŽæ¥ç€ºãåŠç¿ããŒã¿ã远å ããŸãã
ã»æ¢åã®äŸã§åé¡ããªãã粟æ»
ææ³ãããžãã¯ãã¹ã¿ã€ã«ã«åé¡ãããå Žåã¯ãåŠç¿ããŒã¿ã«åãåé¡ããããã©ããã確èªããŠãã ããã
ã»ããŒã¿ã®ãã©ã³ã¹ãšå€æ§æ§ãèæ
®
åŠç¿ããŒã¿å
ã®60%ããçããããŸããããšåçããŠããã®ã«å¯Ÿããå®éçšæã«ã¯ãçããããŸããããšåçããç¶æ³ã5%ããçºçããªãå Žåãéå°ã«ãçããããŸããããšåçããŠããŸãå¯èœæ§ããããŸãã
ã»åŠç¿ããŒã¿ã«å¿çã«å¿
èŠãªãã¹ãŠã®æ
å ±ãå«ãŸããŠããããšã確èª
äŸãã°ãã¢ãã«ã«ãŠãŒã¶ãŒã®ç¹åŸŽã«åºã¥ããŠã»ããããš (ãå匷ããã°ã£ãŠãŠåããããªã©) ãåŠç¿ããããå ŽåãåŠç¿ããŒã¿ã«å¯Ÿè±¡ããã®ç¹åŸŽãæã£ãŠããæ
å ± (ãå¡Ÿã«æ¯æ¥éã£ãŠãŸãããªã©) ãå«ããªããšããã«ã·ããŒã·ã§ã³ã«ãªã£ãŠããŸãå¯èœæ§ããããŸãã
ã»åŠç¿ããŒã¿ã®äžèŽ / äžè²«æ§ã確èª
è€æ°ã®äººãåŠç¿ããŒã¿ãäœæããå Žåãã¢ãã«ã®ããã©ãŒãã³ã¹ã¯äººã
éã®åæ/äžè²«æ§ã®ã¬ãã«ã«ãã£ãŠå¶éãããå¯èœæ§ããããŸããããšãã°ãããã¹ãæœåºã¿ã¹ã¯ã§ã人ã
ãæœåºãããã¹ããããã® 70% ã«ããåæããªãã£ãå Žåãã¢ãã«ã¯ãã以äžã®ããã©ãŒãã³ã¹ãçºæ®ã§ããªãå¯èœæ§ããããŸãã
ã»åŠç¿ããŒã¿ãæšè«ã«æåŸ ãããã®ãšåã圢åŒã§ããããšã確èª
9-2. ããŒã¿éã®èª¿æŽ
åŠç¿ããŒã¿ã®åè³ªã«æºè¶³ããããåŠç¿ããŒã¿ã®æ°ãå¢ããããšãæ€èšã§ããŸãã ããã¯ãç¹ã«èããããããšããžã±ãŒã¹ãã«é¢ããŠãã¢ãã«ãã¿ã¹ã¯ãããããåŠç¿ããã®ã«åœ¹ç«ã€åŸåããããŸããåŠç¿ããŒã¿ã®æ°ã2åã«ãªããã³ã«ãåæ§ã®éã®æ¹åãæåŸ ãããŸãã
æ¬¡ã®æé ã§ãåŠç¿ããŒã¿ãµã€ãºã®å¢å ã«ãã£ãŠæåŸ ãããå質ã®åäžã倧ãŸãã«èŠç©ããããšãã§ããŸãã
(1) çŸåšã®ããŒã¿ã»ããããã¡ã€ã³ãã¥ãŒãã³ã°
(2) çŸåšã®ããŒã¿ã»ããã®ååããã¡ã€ã³ãã¥ãŒãã³ã°
(3) äž¡è ã®å質ã®å·®ã芳å¯
äžè¬ã«ããã¬ãŒããªããèæ ®ããå¿ èŠãããå Žåã倧éã®äœå質ããŒã¿ãããå°éã®é«å質ããŒã¿ã®æ¹ã广çã§ãã
9-3. ãã€ããŒãã©ã¡ãŒã¿ã®èª¿æŽ
ã¢ãã«ããã¡ã€ã³ãã¥ãŒãã³ã°ãããšããã¯æ°ãæå®ã§ããŸããæåã¯ãšããã¯æ°ãæå®ããã«åŠç¿ããããšããå§ãããŸãã
ã¢ãã«ãæåŸ ããã»ã©åŠç¿ããŒã¿ã«åŸã£ãŠããªãå Žåã¯ãæ°å€ã1ãŸãã¯2ãšããã¯ãã€å¢ãããŸããããã¯ãåäžã®çæ³çãªåçãååšããã¿ã¹ã¯ (åé¡ããšã³ãã£ãã£æœåºãæ§é åè§£æãªã©) ã§ããäžè¬çã§ãã
ã¢ãã«ã®å€æ§æ§ãäºæ³ãããäœããªã£ãå Žåã¯ãæ°å€ã1ãŸãã¯2ãšããã¯ãã€æžãããŸããããã¯ãé©åãªå¿çãåºç¯å²ã«ããã¿ã¹ã¯ã§ããäžè¬çã§ãã
10. FAQ
ã»ãã¡ã€ã³ãã¥ãŒãã³ã°ãšRAGã¯ã©ã®ããã«äœ¿ãåããå¿
èŠããããŸãã?
RAGã¯ãé¢é£ããã³ã³ããã¹ããšæ
å ±ãå«ãããã¥ã¡ã³ãã®å€§èŠæš¡ãªããŒã¿ããŒã¹ãå¿
èŠãªå Žåã«æé©ã§ãã
ããã©ã«ãã§ã¯ãOpenAIã®ã¢ãã«ã¯ãæçšãªãžã§ãã©ãªã¹ãã¢ã·ã¹ã¿ã³ãã«ãªãããã«åŠç¿ãããŠããŸãããã¡ã€ã³ãã¥ãŒãã³ã°ã䜿çšãããšãçãç¯å²ã«çŠç¹ãåœãŠãç¹å®ã®æ·±ãæ ¹ä»ããåäœãã¿ãŒã³ã瀺ãã¢ãã«ãäœæã§ããŸããRAGã䜿çšãããšãå¿çãçæããåã«é¢é£ããã³ã³ããã¹ããã¢ãã«ã«æäŸããããšã§ãæ°ããæ å ±ãã¢ãã«ã§å©çšã§ããããã«ãªããŸãã RAGã¯ãã¡ã€ã³ãã¥ãŒãã³ã°ã«ä»£ãããã®ã§ã¯ãªããå®éã«ã¯ãã¡ã€ã³ãã¥ãŒãã³ã°ãè£å®ãããã®ã«ãªããŸãã
ã»GPT-4 ãš GPT-3.5-Turbo-16k ããã¡ã€ã³ãã¥ãŒãã³ã°ã§ããããã«ãªãã®ã¯ãã€ã§ããïŒ
ä»å¹ŽåŸåã«ãªãªãŒã¹ããäºå®ã§ãã
ã»ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ãå®éã«ããŒã¹ã¢ãã«ãããåªããŠãããã©ããã確èªããã«ã¯ã©ãããã°ããã§ããïŒ
ãã£ããäŒè©±ã®ãã¹ãã»ããã§ããŒã¹ã¢ãã«ãšãã¡ã€ã³ãã¥ãŒãã³ã°ã¢ãã«ã®äž¡æ¹ã®ãµã³ãã«ãçæãããµã³ãã«ã䞊ã¹ãŠæ¯èŒããããšããå§ãããŸããããå
æ¬çãªè©äŸ¡ãè¡ãã«ã¯ãOpenAI Evalsã䜿çšããŠããŠãŒã¹ã±ãŒã¹ã«åºæã®è©äŸ¡ãäœæããããšãæ€èšããŠãã ããã
ã»ãã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ãåŒãç¶ããã¡ã€ã³ãã¥ãŒãã³ã°ã§ããŸããïŒ
ããããçŸæç¹ã§ã¯ããžã§ãçµäºåŸã®ãã¡ã€ã³ãã¥ãŒã€ã³ã°ã®ç¶ç¶ã¯ãµããŒããããŠããŸããã è¿ãå°æ¥ãããããµããŒãããäºå®ã§ãã
ã»ãã¡ã€ã³ãã¥ãŒãã³ã°ã®ãžã§ãã¯äžåºŠã«ããã€å®è¡ã§ããŸããïŒ
å¶éã«é¢ããææ°æ
å ±ã«ã€ããŠã¯ããã¬ãŒãå¶éã¬ã€ãããåç
§ããŠãã ããã