使用和學(xué)習(xí)人工智能堆棧的lm驅(qū)動產(chǎn)品,建立AI膳食計劃,第3部分,創(chuàng)建數(shù)據(jù)集并進行實踐
現(xiàn)在我們準(zhǔn)備開始收集數(shù)據(jù)了!但是我們有一些選擇,我們必須決定前進的道路?;旧?我們可以有兩種方法來收集數(shù)據(jù):使用現(xiàn)有數(shù)據(jù)或創(chuàng)建新數(shù)據(jù)。
利用現(xiàn)有數(shù)據(jù)
·
從相關(guān)社區(qū)或內(nèi)部來源收集第一方數(shù)據(jù)。
·
o 調(diào)查、內(nèi)部數(shù)據(jù)來源和眾包可以用來收集第一方的數(shù)據(jù)。
o 專業(yè)知識 當(dāng)前位置這可能是你最接近的"地面真相"數(shù)據(jù),從而是你可能收集到的最高質(zhì)量的數(shù)據(jù)。
o 債權(quán)人 :除非您已經(jīng)可以訪問數(shù)據(jù)集,否則以這種方式構(gòu)建新的數(shù)據(jù)集可能是緩慢和耗時的。如果您的數(shù)據(jù)集中有可識別的個人信息,您還需要建立保證,以確保您的數(shù)據(jù)提供者的隱私不受損害。
·
從公共數(shù)據(jù)集、數(shù)據(jù)提供者.
·
o 現(xiàn)有的數(shù)據(jù)集可以在網(wǎng)上找到,從數(shù)據(jù)經(jīng)紀(jì)人那里購買,或者直接從網(wǎng)絡(luò)上刮走,可以成為利用已經(jīng)收集的數(shù)據(jù)的強大方式。
o 專業(yè)知識 :這個方法可以是收集大量和多樣化的真實數(shù)據(jù)的一個很好的方法。
o 債權(quán)人 :在使用第三方數(shù)據(jù)集時,可能難以確保個人隱私。此外,一些數(shù)據(jù)收集方法,如網(wǎng)絡(luò)收集,可能會違反一些網(wǎng)站的服務(wù)條款。
創(chuàng)建新數(shù)據(jù)
人類生成的
顯然,您可以編寫自己的提示/響應(yīng)演示來培訓(xùn)模型。為了擴大規(guī)模,您甚至可以與數(shù)據(jù)公司合作(例如:?涌動 ,?比例尺 )以規(guī)模制作人為數(shù)據(jù)。
· 專業(yè)知識 :人類的判斷對于確保生成的數(shù)據(jù)有意義和有用是有用的。
· 債權(quán)人 :讓人類編寫數(shù)據(jù)可能成本高昂,時間很長。加上各種層次的質(zhì)量控制,人類數(shù)據(jù)就會變成一個復(fù)雜的操作。
合成生成的
您還可以簡單地請求一個LLM為您生成數(shù)據(jù)。
· 專業(yè): 這是一種可以很快擴展到大量數(shù)據(jù)集的廉價方法。
· 債權(quán)人 :模型無法超越自身的性能,所以通常合成數(shù)據(jù)只會導(dǎo)致模型回歸到均值。雖然可以通過測試不同的數(shù)據(jù)生成步驟模型來解決這一問題,但它也可以在數(shù)據(jù)集中引入幻覺和錯誤,這對人類來說很容易發(fā)現(xiàn),但對LLM來說卻很難捕捉到。
混合體
一個強大的技術(shù)是通過讓人類和模型連續(xù)地重寫彼此的輸入來結(jié)合人類和合成數(shù)據(jù)的生成。
· 專業(yè)知識 :最好的人類和LLM一代??赡軙^模型。
· 債權(quán)人 當(dāng)前位置雖然這是一個很好的妥協(xié),但它仍然需要相當(dāng)多的復(fù)雜性和努力來糾正。
為你的項目選擇正確的方法
選擇最佳數(shù)據(jù)生成方法取決于各種因素:
· 項目范圍和時間表
· 現(xiàn)有資源(預(yù)算、人力、現(xiàn)有數(shù)據(jù))
· 所需數(shù)據(jù)質(zhì)量和具體性
· 隱私和法律考慮
對于我們的膳食計劃機器人,我們選擇合成數(shù)據(jù)生成。這一選擇使我們能夠:
1. 快速生成一個大的、不同的數(shù)據(jù)集
2. 保持對數(shù)據(jù)分布和邊緣案例的控制
3. 避免與真實用戶數(shù)據(jù)有關(guān)的潛在隱私問題
然而,請記住,在生產(chǎn)環(huán)境中,將合成數(shù)據(jù)與經(jīng)過仔細審查的實際實例相結(jié)合的混合方法往往會產(chǎn)生最佳結(jié)果。
在我們的情況下,我們將創(chuàng)建合成數(shù)據(jù)。雖然混合方法在這里會很好地發(fā)揮作用,但為了本教程的目的,我們希望保持流程簡單而又便宜,這樣您就可以獲得建立模型的知識和信心。
生成合成數(shù)據(jù)
合成數(shù)據(jù)生成 在人工智能領(lǐng)域,它變得越來越重要,因為它允許開發(fā)人員創(chuàng)建大型的、多樣化的數(shù)據(jù)集,根據(jù)他們的具體用例定制。通過生成合成示例,我們可以擴展我們的培訓(xùn)數(shù)據(jù),涵蓋更廣泛的場景,并最終提高我們?nèi)斯ぶ悄苣P偷男阅堋@?國家衛(wèi)生研究院與該行業(yè)合作,創(chuàng)建了對場景規(guī)劃和其他目的有用的"19號數(shù)據(jù)集"。
在人工智能膳食計劃中,合成數(shù)據(jù)生成使我們能夠根據(jù)各種用戶屬性和偏好創(chuàng)建個性化膳食計劃。通過構(gòu)造一組規(guī)則和模板,我們可以生成模擬模型在實際使用中將遇到的數(shù)據(jù)類型的實際例子。
一種流行的合成數(shù)據(jù)生成方法叫做"基于規(guī)則的生成"。"這個方法包括創(chuàng)建一個結(jié)構(gòu)化提示符,概述所需數(shù)據(jù)的上下文、輸入?yún)?shù)、輸出格式和示例。讓我們打破構(gòu)建這樣一個提示的過程:
· 背景: 首先,明確描述這個任務(wù)和模型應(yīng)該扮演的角色。在我們的案例中,我們希望模型作為專家營養(yǎng)師創(chuàng)造個性化的膳食計劃。
· 輸入?yún)?shù) :指定模型生成膳食計劃時應(yīng)考慮的用戶屬性和偏好。這可以包括年齡、身高、體重、活動水平、飲食限制和個人目標(biāo)。
· 產(chǎn)出格式 :為生成的膳食計劃確定一個一致的結(jié)構(gòu),包括大量營養(yǎng)素(碳水化合物、蛋白質(zhì)、脂肪)的分解、食物類型以及每頓飯和零食的數(shù)量。
· 例子 :提供一些符合指定格式和限制的膳食計劃的典型例子。這些示例作為模型生成新數(shù)據(jù)點時的模板。
下面是一個包含這些要素的提示的例子:
普通文本
You are an expert dietician. You prepare detailed meal plans for individuals customized based on their age, weight, activity level and a number of other attributes to optimize their health.
Below, I've provided you with the attributes of a specific user, please generate a meal plan for Breakfast, Lunch, Dinner, and 2 snacks. For each meal, use the following format:
Carbs (what type and how much)
Chicken/Fish/Meat (what type and how much)
Whey Protein (how much)
Veggies (what type and how much)
Oil/Fat (how much)
Include a calculation of total calories per meal, and for the whole day and include that in your response. Do not include any additional information.
{User Attributes}
通過向語言模型提供這個結(jié)構(gòu)化提示符,我們可以通過改變用戶屬性生成多個膳食計劃示例。這使我們能夠創(chuàng)建涵蓋廣泛的用戶檔案和偏好的多樣化數(shù)據(jù)集。
然而,驗證生成的數(shù)據(jù)以確保其準(zhǔn)確性和適當(dāng)性是至關(guān)重要的。涉及領(lǐng)域?qū)<?如營養(yǎng)學(xué)家或營養(yǎng)學(xué)家,可以幫助識別任何不一致,偏見,或不現(xiàn)實的例子。他們可以提供寶貴的反饋,以完善及時生成的膳食計劃和提高質(zhì)量。
讓我們在模型上測試這個提示符。使用下列用戶屬性:
· Age: 25
· 身高:160厘米
· 體重:55公斤
· 活動水平:不詳
· 膳食限制:不詳
· 個人偏好/目標(biāo):他們希望保持自己的體重,保持22%的脂肪比例。
我們得到以下答復(fù):
普通文本
Breakfast (400 calories)
Carbs: 50g (1 cup oatmeal)
Chicken/Fish/Meat: None
Whey Protein: 30g
Veggies: 1 cup mixed berries
Oil/Fat: 10g (2 tsp almond butter)
Lunch (450 calories)
Carbs: 60g (1 cup cooked quinoa)
Chicken/Fish/Meat: 120g grilled chicken breast
Whey Protein: None
Veggies: 2 cups mixed greens salad with cucumber, tomatoes
Oil/Fat: 15g (1 tbsp olive oil dressing)
Dinner (550 calories)
Carbs: 70g (1 medium baked sweet potato)
Chicken/Fish/Meat: 150g baked salmon
Whey Protein: None
Veggies: 2 cups steamed broccoli
Oil/Fat: 20g (1 tbsp olive oil + 1/4 avocado)
Snack 1 (150 calories)
Carbs: 20g (1 medium apple)
Chicken/Fish/Meat: None
Whey Protein: None
Veggies: None
Oil/Fat: 10g (2 tbsp peanut butter)
Snack 2 (200 calories)
Carbs: 25g (1 cup nonfat Greek yogurt)
Chicken/Fish/Meat: None
Whey Protein: None
Veggies: None
Oil/Fat: 5g (a small handful of almonds)
Total Daily Calories: 1750
看上去棒極了!遵循了格式,響應(yīng)看起來合理。現(xiàn)場檢查一些食物,熱量的計數(shù)似乎是檢查出來的。在這個階段,重要的是重復(fù)檢查這些值是否準(zhǔn)確,也許甚至與領(lǐng)域?qū)<?在我們的案例中是營養(yǎng)學(xué)家或營養(yǎng)學(xué)家)核實這些結(jié)果。
現(xiàn)在,您可能想知道,為什么我們需要生成數(shù)據(jù),而模型已經(jīng)非常擅長處理這個用例?是的!這個模型似乎能夠處理這個用例。然而,讓我們通過增加一個"不要乏味的食物"的個人偏好來使它更加復(fù)雜:
普通文本
Breakfast (350 calories)
Carbs: 1 cup oatmeal (50g)
Chicken/Fish/Meat: 1/2 cup scrambled eggs (2 eggs)
Whey Protein: 1 scoop (25g)
Veggies: 1/2 cup spinach (20g)
Oil/Fat: 1 tsp olive oil (5g)
Lunch (400 calories)
Carbs: 1 cup quinoa (40g)
Chicken/Fish/Meat: 4 oz grilled chicken breast (115g)
Whey Protein: N/A
Veggies: 1 cup mixed greens (30g), 1/2 cup cherry tomatoes (50g), 1/4 cup cucumber (25g)
Oil/Fat: 1 tbsp olive oil (15g)
Snack 1 (150 calories)
Carbs: 1/2 cup fruit salad (100g)
Chicken/Fish/Meat: N/A
Whey Protein: N/A
Veggies: N/A
Oil/Fat: N/A
Snack 2 (200 calories)
Carbs: 1/4 cup trail mix (50g)
Chicken/Fish/Meat: N/A
Whey Protein: N/A
Veggies: N/A
Oil/Fat: N/A
Dinner (500 calories)
Carbs: 1 cup brown rice (50g)
Chicken/Fish/Meat: 4 oz grilled turkey breast (115g)
Whey Protein: N/A
Veggies: 1 cup broccoli (100g), 1/2 cup bell peppers (50g)
Oil/Fat: 1 tbsp olive oil (15g)
Total Daily Calories: 1600 calories
嗯。.這種反應(yīng)不如第一個反應(yīng)那么強烈。我們早餐吃雞蛋,午餐吃雞胸肉等等。我們可以使用這個示例和其他具有挑戰(zhàn)性的場景來構(gòu)建我們的數(shù)據(jù)集。舉個例子,讓我們?yōu)樗鎏砣の?
普通文本
Breakfast (350 calories)
Carbs: 1 cup cassava (50g)
Chicken/Fish/Meat: 1/2 cup (80g) Scrambled Eggs with 1/2 cup chopped spinach
Whey Protein: 1 scoop (25g)
Veggies: 1/2 cup spinach (20g)
Oil/Fat: 1 tsp olive oil (5g)
Lunch (400 calories)
Carbs: 1 cup quinoa (40g)
Chicken/Fish/Meat: 4 oz (115g) Ground Turkey (can be seasoned and formed into patties)
Whey Protein: N/A
Veggies: 1 cup mixed greens (30g), 1/2 cup cherry tomatoes (50g), 1/4 cup cucumber (25g)
Oil/Fat: 1 tbsp olive oil (15g)
Snack 1 (150 calories)
Carbs: 1/2 cup fruit salad (100g)
Chicken/Fish/Meat: N/A
Whey Protein: N/A
Veggies: N/A
Oil/Fat: N/A
Snack 2 (200 calories)
Carbs: 1/2 cup Mango cubes (75g)
Chicken/Fish/Meat: N/A
Whey Protein: N/A
Veggies: N/A
Oil/Fat: N/A
Dinner (500 calories)
Carbs: 1 cup brown rice (50g)
Chicken/Fish/Meat: 4 oz (115g) Tofu (can be pan-fried or baked)
Whey Protein: N/A
Veggies: 1 cup broccoli (100g), 1/2 cup bell peppers (50g)
Oil/Fat: 1 tbsp olive oil (15g)
Total Daily Calories: 1600 calories
太好了-好多了,更有趣一點!
當(dāng)您構(gòu)建數(shù)據(jù)集時,您可能會發(fā)現(xiàn)您的模型同樣有能力。但是,當(dāng)你繼續(xù)測試不同的場景時,你肯定會發(fā)現(xiàn)一些邊緣案例,在這些案例中,模型會遇到困難,你可以幫助它更好地執(zhí)行。
現(xiàn)在有了很多例子,我們可以開始準(zhǔn)備數(shù)據(jù)了。然而,在這樣做之前,我們需要為每個用戶場景構(gòu)造一個提示符。如上所述,我們只是將一些用戶屬性注入到我們的提示符中,但是為了使它更現(xiàn)實,我們需要將其構(gòu)造成如下句子:
I'm 25, female, about 160cm and 120 pounds. I want to stay the same at around 22% BF.
就這樣!現(xiàn)在我們有數(shù)據(jù)集了。讓我們轉(zhuǎn)向谷歌的床單,開始為訓(xùn)練做好準(zhǔn)備。
培訓(xùn)數(shù)據(jù)
準(zhǔn)確的數(shù)據(jù)編制步驟可能取決于若干因素,但將數(shù)據(jù)放在一種易于廣泛受眾審查和操縱的形式中通常是有益的。由于大多數(shù)人都很熟悉谷歌的電子表格軟件,比如谷歌的表格軟件是這方面的一個自然選擇,它也很適合審查個人的"記錄"或者培訓(xùn)數(shù)據(jù)的"例子"。
設(shè)置數(shù)據(jù)非常簡單。首先,我們需要兩列:"提示"和"響應(yīng)"。"每一行應(yīng)根據(jù)我們先前構(gòu)建的數(shù)據(jù)集,在這些列中包含各自的值?,F(xiàn)在我們有了它,現(xiàn)在是清理數(shù)據(jù)的好時機。
數(shù)據(jù)清理
在我們準(zhǔn)備好訓(xùn)練數(shù)據(jù)之前,我們需要?確保沒有不準(zhǔn)確之處 ,不一致,錯誤,以及其他可能妨礙我們最終目標(biāo)的問題。
有幾個關(guān)鍵的注意事項:
缺失價值
您的數(shù)據(jù)集是完整的還是缺少字段的例子?您需要決定是否要完全刪除這些示例,或者是否要嘗試填寫它們(也稱為歸罪)。
格式問題
文本大寫是否恰當(dāng)?值是否在正確的單位?是否存在一些結(jié)構(gòu)性問題,如不匹配的括號?需要解決所有這些問題,以確保一致性。
異常、無關(guān)和不準(zhǔn)確的數(shù)據(jù)
是否有任何數(shù)據(jù)遠遠超出規(guī)范,可能誤導(dǎo)模型?應(yīng)刪除這些數(shù)據(jù)。另外,注意任何與你的用例無關(guān)的數(shù)據(jù),并刪除它。與領(lǐng)域?qū)<液献骺梢允且环N過濾不屬于的數(shù)據(jù)集的有效策略。
通過仔細清理和預(yù)處理你的數(shù)據(jù),你正在為自己成功地訓(xùn)練一個高性能的模型。這也許不是這個過程中最具魅力的部分,但這是絕對必要的。目前階段的時間投資對于生產(chǎn)級模型至關(guān)重要,并將使以后的步驟容易得多。
數(shù)據(jù)清理的其他最佳做法
· 盡可能自動化 :使用自動化工具和腳本來處理重復(fù)性任務(wù),如格式標(biāo)準(zhǔn)化和缺失的價值估算。
· 重復(fù)和驗證 *數(shù)據(jù)清理不是一次性任務(wù)。不斷迭代和驗證您的清理方法,以確保持續(xù)的數(shù)據(jù)質(zhì)量。
· 把一切都記錄下來 :保存所有數(shù)據(jù)清理步驟的詳細文件,包括所作的決定和所使用的方法。這將有助于調(diào)試和完善您的流程。
· 利用領(lǐng)域知識 :與領(lǐng)域?qū)<液献?以確保您的數(shù)據(jù)清理過程符合現(xiàn)實世界的需求和細微差別。