Hello, new to the forum. I have lots of specific questions about fine-tuning that I will get into over time. For this one, I’ve searched all over and not found a definitive answer to this question.
I am fine-tuning gpt3.5-turbo for a conversational chatbot. At the moment, I’m focused on conversational starts. In general, I know the model responds to a prompt, but how about that first “How can I help you?” moment?
Unmodified, I was able to add a system message at the top of messages that (among other things) said:
{
"messages": [
{
"role": "system",
"content": "...Start the conversation with some variation on, \"Hey, how can I help?\""
}, {
"role": "assistant",
"content": "Hey, how's it going?"
}, {
"role": "user",
"content": "..."
}
]
}
That worked well enough for the base model. But now I’m fine-tuning.
So, now, it’s not about telling, but showing. I have training dataset examples that demonstrate variations on the conversation start, reckoning 5 variations would be sufficient, but how to format them in an effective way?
Suggested strategies for a conversational start appeared non-existent. (Bard and ChatGPT had opinions, but don’t they always?) Here’s some strategies I heard or made up. I’ve pretty printed the JSONL for clarity.
- Provide training examples that simply have the user role turn omitted, for example:
{
"messages": [
{
"role": "system",
"content": "You are a helpful, but not too helpful assistant.",
}, {
"role": "assistant",
"content": "Hey, how's it going?"
}
]
}
- Provide training examples that explicitly say in the system message that this is a conversation start (thanks, Bard):
{
"messages": [
{
"role": "system",
"content": "Start of conversation.",
}, {
"role": "assistant",
"content": "Hey, how's it going?"
}
]
}
- Provide training examples that explicitly say in the system message that this is a conversation start but also contain other system messages:
{
"messages": [
{
"role": "system",
"content": "Start of conversation. You are a helpful, but not too helpful assistant.",
}, {
"role": "assistant",
"content": "Hey, how's it going?"
}
]
}
- Provide training examples that demonstrate a user starting the conversation, then basically hide that start from the UI:
{
"messages": [
{
"role": "system",
"content": "Start of conversation. You are a helpful, but not too helpful assistant.",
}, {
"role": "assistant",
"content": "Hi"
}, {
"role": "assistant",
"content": "Hey, how's it going?"
}
]
}
Regardless of the strategy, I had several variations for the model to learn:
{"messages": [{"role": "system", "content": "Start of conversation. You are a helpful, but not too helpful assistant."}, {"role": "assistant", "content": "Hey, how's it going?"}]}
{"messages": [{"role": "system", "content": "Start of conversation. You are a helpful, but not too helpful assistant."}, {"role": "assistant", "content": "Hey, how can I help?"}]}
{"messages": [{"role": "system", "content": "Start of conversation. You are a helpful, but not too helpful assistant."}, {"role": "assistant", "content": "We probably have limited time, so what can I do to help?"}]}
{"messages": [{"role": "system", "content": "Start of conversation. You are a helpful, but not too helpful assistant."}, {"role": "assistant", "content": "Hey, thanks for coming. Whacha need?"}]}
{"messages": [{"role": "system", "content": "Start of conversation. You are a helpful, but not too helpful assistant."}, {"role": "assistant", "content": "What's on your mind?"}]}
Experimenting with various strategies, the fine-tuned model usually started with some variation of my greeting, but variously often would just generate nonsense, suggesting to me that my strategies were not super sound.
Is there a suggested best practice, hopefully backed by solid results?