On July 6, 2023, we announced the deprecation of ada, babbage, curie and davinci models. These models, including fine-tuned versions, will be turned off on January 4, 2024. We are actively working on enabling fine-tuning for upgraded base GPT-3 models as well as GPT-3.5 Turbo and GPT-4, we recommend waiting for those new options to be available rather than fine-tuning based off of the soon to be deprecated models.
Basically means using ada fine-tuning (and other older fine-tuned models) will be deprecated by Jan 4, 2024.
I would start directly with gpt-3.5-turbo to get the required result and collect data for further fine-tuning of gpt-3.5-turbo when available.
Quickly going through your training set, some notices:
- the examples look pretty much like those generated by a machine because they are all in a finite set of grammatical structures with poor language variations (have they been generated by an LLM or come out preformatted from a previous stem of your assistant APP ?)
- example number is too short for a decent training of ada (725 unique items) do you have more real-life examples?
How I would personally approach the task (let me know your thoughts):
- study features of similar apps like the wallet (from budget bakers) and decide if there is a chance you would support one day the features like:
- multiple accounts (cash, cards, bank 1, bank 2 etc)
- multiple currencies
- custom labels (when the app reads various input and reformats it in a standard user-defined label)
- custom transaction categories
- custom transaction tags
- etc.
-
Make a list of all those features to build a roadmap of features and see which of them have to be foreseen (prebuilt) on the launch (not to recode the core engine when you need to add a feature later on)
-
The above will define (will help you define) the transaction object structure to be stored in the APP DB:
{
"transactionId": "1234567890", // A unique identifier for the transaction. This can be automatically generated by the backend.
"description": "Purchased a facial cleanser", // A brief description of the transaction. This can be directly extracted from the "userInput".
"amount": {
"value": 25.0, // Transaction amount. Extracted from the "userInput".
"currency": "USD" // Currency type. This can be inferred based on the region or explicitly provided.
},
"merchant": "Ulta Beauty", // The store or service where the purchase was made. Extracted from the "userInput".
"category": "Beauty & Personal Care", // A broader classification of the transaction. This can be automatically inferred using the description and merchant, or selected by the user.
"suggestedCategory": "Beauty & Cosmetics", // This can be an AI-generated suggestion or from a predefined list.
"paymentMethod": "Credit Card", // Specifies how the transaction was paid for. Taken directly from the input "paymentMethod".
"timestamp": "2023-08-21T12:00:00Z", // The time when the transaction occurred. Taken directly from the input "timestamp".
"location": {
"latitude": null, // Latitude of the transaction location. Taken from the input "location".
"longitude": null, // Longitude of the transaction location. Taken from the input "location".
"address": null, // Physical address of the location (can be null if not provided). Taken from the input "location".
"isExact": true // Indicates if the note was made directly at the merchant's location. Taken from the input "location".
},
"tags": ["facial", "cleanser"], // A list of keywords or tags associated with the transaction. This can be generated based on the "description".
"userNote": "This is a special cleanser for sensitive skin", // Notes added by the user about the transaction. Taken directly from the input "userNote".
"userInput": "Purchased a facial cleanser for 25 dollars at Ulta Beauty" // Original raw input by the user. Taken directly from the input "userInput".
}
Or similar. And also will help you to define the API input object format:
{
"userId": "abcd1234", // A unique identifier for the user making the request
"userInput": "Purchased a facial cleanser for 25 dollars at Ulta Beauty", // The original raw input string provided by the user
"timestamp": "2023-08-21T12:00:00Z", // The time when the user made the input
"location": {
"latitude": null, // Latitude of the location where the user made the input (can be null if not provided)
"longitude": null, // Longitude of the location where the user made the input (can be null if not provided)
"address": null, // Physical address of the location (can be null if not provided)
"isExact": true // Indicates if the note was made directly at the merchant's location
},
"paymentMethod": "Credit Card", // How the user paid for the transaction, e.g., "Credit Card", "Cash", etc.
"userNote": "This is a special cleanser for sensitive skin" // Any additional notes or details the user wants to add about the transaction
}
- then decide on how many steps are needed to get the stored transaction object from the input (example):
- get input and parse to base fields extracted (all fields without the category)
- embed the user input and match it against the vector of existing categories to find the best match
- update the transaction object with found category and user input vector values
- store the transaction in the DB
or :
- get input and parse to base fields extracted (all fields without the category)
- embed the user input and match it against the vector of existing user-defined categories to find the best match
- if nothing fits, match the vector against the existing vectors of standard categories to get the one that fits
- update the transaction object with found category and user input vector values
- store the transaction in the DB
i need to combine them into 1 api call to reduce api cost
Well, the trade is Quality vs Cost, personally, I would take quality in the beginning (if the cost is financially not insane) to start collecting real-life data and see how I can optimize the cost later (using fine-tuned GPT3.5-turbo when available or switch to a different LLM or embedding model), because if quality lacks in the beginning, the chances are this will never take off.
- for the DB I would use weviate.io as the best fit for my taste, but that is arguable
Here is an example of how the chat GTP3.5-turbo setup would look like: OpenAI Platform