使用和学习人工智能堆栈的lm驱动产品,建立AI膳食计划,第3部分,创建数据集并进行实践
扫描二维码
随时随地手机看文章
现在我们准备开始收集数据了!但是我们有一些选择,我们必须决定前进的道路。基本上,我们可以有两种方法来收集数据:使用现有数据或创建新数据。
利用现有数据
·
从相关社区或内部来源收集第一方数据。
·
o 调查、内部数据来源和众包可以用来收集第一方的数据。
o 专业知识 当前位置这可能是你最接近的"地面真相"数据,从而是你可能收集到的最高质量的数据。
o 债权人 :除非您已经可以访问数据集,否则以这种方式构建新的数据集可能是缓慢和耗时的。如果您的数据集中有可识别的个人信息,您还需要建立保证,以确保您的数据提供者的隐私不受损害。
·
从公共数据集、数据提供者.
·
o 现有的数据集可以在网上找到,从数据经纪人那里购买,或者直接从网络上刮走,可以成为利用已经收集的数据的强大方式。
o 专业知识 :这个方法可以是收集大量和多样化的真实数据的一个很好的方法。
o 债权人 :在使用第三方数据集时,可能难以确保个人隐私。此外,一些数据收集方法,如网络收集,可能会违反一些网站的服务条款。
创建新数据
人类生成的
显然,您可以编写自己的提示/响应演示来培训模型。为了扩大规模,您甚至可以与数据公司合作(例如: 涌动 , 比例尺 )以规模制作人为数据。
· 专业知识 :人类的判断对于确保生成的数据有意义和有用是有用的。
· 债权人 :让人类编写数据可能成本高昂,时间很长。加上各种层次的质量控制,人类数据就会变成一个复杂的操作。
合成生成的
您还可以简单地请求一个LLM为您生成数据。
· 专业: 这是一种可以很快扩展到大量数据集的廉价方法。
· 债权人 :模型无法超越自身的性能,所以通常合成数据只会导致模型回归到均值。虽然可以通过测试不同的数据生成步骤模型来解决这一问题,但它也可以在数据集中引入幻觉和错误,这对人类来说很容易发现,但对LLM来说却很难捕捉到。
混合体
一个强大的技术是通过让人类和模型连续地重写彼此的输入来结合人类和合成数据的生成。
· 专业知识 :最好的人类和LLM一代。可能会超过模型。
· 债权人 当前位置虽然这是一个很好的妥协,但它仍然需要相当多的复杂性和努力来纠正。
为你的项目选择正确的方法
选择最佳数据生成方法取决于各种因素:
· 项目范围和时间表
· 现有资源(预算、人力、现有数据)
· 所需数据质量和具体性
· 隐私和法律考虑
对于我们的膳食计划机器人,我们选择合成数据生成。这一选择使我们能够:
1. 快速生成一个大的、不同的数据集
2. 保持对数据分布和边缘案例的控制
3. 避免与真实用户数据有关的潜在隐私问题
然而,请记住,在生产环境中,将合成数据与经过仔细审查的实际实例相结合的混合方法往往会产生最佳结果。
在我们的情况下,我们将创建合成数据。虽然混合方法在这里会很好地发挥作用,但为了本教程的目的,我们希望保持流程简单而又便宜,这样您就可以获得建立模型的知识和信心。
生成合成数据
合成数据生成 在人工智能领域,它变得越来越重要,因为它允许开发人员创建大型的、多样化的数据集,根据他们的具体用例定制。通过生成合成示例,我们可以扩展我们的培训数据,涵盖更广泛的场景,并最终提高我们人工智能模型的性能。例如,国家卫生研究院与该行业合作,创建了对场景规划和其他目的有用的"19号数据集"。
在人工智能膳食计划中,合成数据生成使我们能够根据各种用户属性和偏好创建个性化膳食计划。通过构造一组规则和模板,我们可以生成模拟模型在实际使用中将遇到的数据类型的实际例子。
一种流行的合成数据生成方法叫做"基于规则的生成"。"这个方法包括创建一个结构化提示符,概述所需数据的上下文、输入参数、输出格式和示例。让我们打破构建这样一个提示的过程:
· 背景: 首先,明确描述这个任务和模型应该扮演的角色。在我们的案例中,我们希望模型作为专家营养师创造个性化的膳食计划。
· 输入参数 :指定模型生成膳食计划时应考虑的用户属性和偏好。这可以包括年龄、身高、体重、活动水平、饮食限制和个人目标。
· 产出格式 :为生成的膳食计划确定一个一致的结构,包括大量营养素(碳水化合物、蛋白质、脂肪)的分解、食物类型以及每顿饭和零食的数量。
· 例子 :提供一些符合指定格式和限制的膳食计划的典型例子。这些示例作为模型生成新数据点时的模板。
下面是一个包含这些要素的提示的例子:
普通文本
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}
通过向语言模型提供这个结构化提示符,我们可以通过改变用户属性生成多个膳食计划示例。这使我们能够创建涵盖广泛的用户档案和偏好的多样化数据集。
然而,验证生成的数据以确保其准确性和适当性是至关重要的。涉及领域专家,如营养学家或营养学家,可以帮助识别任何不一致,偏见,或不现实的例子。他们可以提供宝贵的反馈,以完善及时生成的膳食计划和提高质量。
让我们在模型上测试这个提示符。使用下列用户属性:
· Age: 25
· 身高:160厘米
· 体重:55公斤
· 活动水平:不详
· 膳食限制:不详
· 个人偏好/目标:他们希望保持自己的体重,保持22%的脂肪比例。
我们得到以下答复:
普通文本
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
看上去棒极了!遵循了格式,响应看起来合理。现场检查一些食物,热量的计数似乎是检查出来的。在这个阶段,重要的是重复检查这些值是否准确,也许甚至与领域专家(在我们的案例中是营养学家或营养学家)核实这些结果。
现在,您可能想知道,为什么我们需要生成数据,而模型已经非常擅长处理这个用例?是的!这个模型似乎能够处理这个用例。然而,让我们通过增加一个"不要乏味的食物"的个人偏好来使它更加复杂:
普通文本
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
嗯。.这种反应不如第一个反应那么强烈。我们早餐吃鸡蛋,午餐吃鸡胸肉等等。我们可以使用这个示例和其他具有挑战性的场景来构建我们的数据集。举个例子,让我们为它增添趣味:
普通文本
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
太好了-好多了,更有趣一点!
当您构建数据集时,您可能会发现您的模型同样有能力。但是,当你继续测试不同的场景时,你肯定会发现一些边缘案例,在这些案例中,模型会遇到困难,你可以帮助它更好地执行。
现在有了很多例子,我们可以开始准备数据了。然而,在这样做之前,我们需要为每个用户场景构造一个提示符。如上所述,我们只是将一些用户属性注入到我们的提示符中,但是为了使它更现实,我们需要将其构造成如下句子:
I'm 25, female, about 160cm and 120 pounds. I want to stay the same at around 22% BF.
就这样!现在我们有数据集了。让我们转向谷歌的床单,开始为训练做好准备。
培训数据
准确的数据编制步骤可能取决于若干因素,但将数据放在一种易于广泛受众审查和操纵的形式中通常是有益的。由于大多数人都很熟悉谷歌的电子表格软件,比如谷歌的表格软件是这方面的一个自然选择,它也很适合审查个人的"记录"或者培训数据的"例子"。
设置数据非常简单。首先,我们需要两列:"提示"和"响应"。"每一行应根据我们先前构建的数据集,在这些列中包含各自的值。现在我们有了它,现在是清理数据的好时机。
数据清理
在我们准备好训练数据之前,我们需要 确保没有不准确之处 ,不一致,错误,以及其他可能妨碍我们最终目标的问题。
有几个关键的注意事项:
缺失价值
您的数据集是完整的还是缺少字段的例子?您需要决定是否要完全删除这些示例,或者是否要尝试填写它们(也称为归罪)。
格式问题
文本大写是否恰当?值是否在正确的单位?是否存在一些结构性问题,如不匹配的括号?需要解决所有这些问题,以确保一致性。
异常、无关和不准确的数据
是否有任何数据远远超出规范,可能误导模型?应删除这些数据。另外,注意任何与你的用例无关的数据,并删除它。与领域专家合作可以是一种过滤不属于的数据集的有效策略。
通过仔细清理和预处理你的数据,你正在为自己成功地训练一个高性能的模型。这也许不是这个过程中最具魅力的部分,但这是绝对必要的。目前阶段的时间投资对于生产级模型至关重要,并将使以后的步骤容易得多。
数据清理的其他最佳做法
· 尽可能自动化 :使用自动化工具和脚本来处理重复性任务,如格式标准化和缺失的价值估算。
· 重复和验证 *数据清理不是一次性任务。不断迭代和验证您的清理方法,以确保持续的数据质量。
· 把一切都记录下来 :保存所有数据清理步骤的详细文件,包括所作的决定和所使用的方法。这将有助于调试和完善您的流程。
· 利用领域知识 :与领域专家合作,以确保您的数据清理过程符合现实世界的需求和细微差别。