原文:
www.kdnuggets.com/2022/07/domain-knowledge-important-machine-learning.html
开发机器学习模型涉及很多步骤。无论你是处理标记数据还是未标记数据,你可能会认为数字只是数字,并且在生成具有真正影响力的见解时,数据集中每个特征的意义并不重要。确实,有许多优秀的机器学习库,如scikit-learn,使得收集一些数据并将其放入一个模板模型中变得简单快捷。很快,你可能会开始认为没有什么问题是机器学习无法解决的。
坦率地说,这是一个初学者的思维方式。你还未意识到你不知道的所有东西。机器学习课程中提供的数据集或你在网上找到的免费数据集通常已经被处理过,使用这些数据集应用机器学习模型时很方便,但一旦你将技能和知识从玩具世界带到现实世界,你将面临一些额外的挑战。
许多人认为领域知识,或者关于数据所涉及行业或领域的额外知识,是多余的。这确实有一定的道理。你是否需要在你开发模型的领域中具备领域知识?不需要。你仍然可以在没有它的情况下生成相当准确的模型。从理论上讲,深度学习和机器学习是黑箱方法。这意味着你可以将标记数据放入模型中,而无需对领域有深入了解,甚至无需仔细查看数据。
但是,如果你走这条路,你将不得不面对后果。这是一种非常低效的训练分类器的方法,并且为了正常运作,你将需要大量标记数据集和大量计算能力来生成准确的模型。
如果你将领域知识融入到你的架构和模型中,这可以使解释结果变得更加容易,无论是对你自己还是对外部观察者。每一份领域知识都可以作为穿越机器学习模型黑箱的垫脚石。
很容易认为领域知识不是必需的,因为对于像COCO这样许多显而易见的数据集,所需的有限领域知识是作为一个“看得见”的人自然具备的。即使是包含癌细胞的更复杂的数据集,对人眼来说也同样明显,尽管缺乏专家级的知识。你可以在没有任何特定医学知识的情况下,对细胞之间的相似性或差异性进行基本评估。
自然语言处理(NLP)和计算机视觉是领域知识看似完全不必要的典型例子,但正因为这些任务对我们来说非常普通,我们可能甚至不会注意到我们是如何应用领域知识的。
如果你开始在异常值检测等不那么常见的领域工作,领域知识的重要性很快会变得显而易见。
让我们深入探讨领域知识如何在机器学习模型开发周期的数据预处理步骤中发挥作用。
在一个数据集中,并非每个数据点的值都是相同的。如果你收集了 100 个相同的新样本,它们不会帮助模型学习任何额外的信息。它们可能实际上会使模型集中在一个不重要的特定方向上。
如果你正在查看 100 张伞的图片,并且知道这个模型应该分类所有种类的配件,那么显然你的样本数据集并不代表整个总体。没有领域知识的话,很难知道哪些数据点有价值,或者它们是否已经在数据集中有所代表。
如果你在一个不容易用现有的通用知识解决的领域工作,你可能会通过训练数据引入偏差,这会影响模型的准确性和鲁棒性。
领域知识在数据预处理步骤中发挥重要作用的另一个方式是确定特征的重要性。如果你对每个特征的重要性有良好的感觉,你可以制定更好的策略来相应地处理数据。理解实际特征是什么非常重要,这对你如何处理特征有很大的影响。
机器学习模型有很多种,考虑到许多因素,有些模型可能比其他模型更适合。数据是标记过的还是未标记的?你拥有多少数据?特征的数据类型是什么?特征的数据类型是否同质?你的目标输出是连续值还是分类?选择合适的模型很重要,但能够直接应用你选择的模型而不进行调整的情况非常少见。例如,随机森林可以直接处理异质数据类型。
选择正确的模型需要深入的机器学习知识,但如果你不是机器学习专家,还有很多资源可以帮助你做出选择。我从Towards Data Science、datacamp和Microsoft的机器学习备忘单中收集了我的前三个推荐。
领域知识使你能够更好地调整模型以适应情况。数学优化只能做到一定程度,通常要实现大的改进跳跃,拥有相当的领域知识至关重要。
将领域知识应用于提高模型的准确性和鲁棒性的一种重要方法是将领域知识融入到你正在开发的模型的架构中。
如前所述,自然语言处理是机器学习的一个领域,这清楚地表明领域知识可以带来帮助。让我们谈谈词嵌入和注意力机制,以展示说人类语言是如何大有帮助的,但像语言学家一样思考可以真正提升自然语言处理模型的性能。
领域知识已经应用于所有机器学习应用中。在过去几十年里,已经做出了一些小的调整,以更好地在许多领域应用机器学习模型。领域知识肯定已被应用于自然语言处理中的模型。让我们来看看这些发展是如何产生的。
如果你考虑数字和文字,我们对它们的思考方式差别很大。如果你有一组人的身高数据,你可以很容易地根据身高输出一些统计数据,例如中位数、离群值等。如果这个小组中的每个人都给你一个词来表示他们今天的感受,你将如何将其转化为任何有意义的汇总?
你应该考虑如何创建一个单词的数字表示。是否应该仅仅使用字母?这样做是否有意义?作为一个讲这种语言的人,我们立即理解单词背后的意义。我们不会按字母来存储单词。想想树。你是想象了一棵树,还是你的脑海里出现了 t-r-e-e?以字母形式存储单词的表示方式,在理解意义或重要性时并没有真正带来任何优势。
词嵌入是“一种词表示方法,允许具有相似含义的词具有类似的[数值]表示”。这些数值表示是通过无监督学习模型学习得到的。
这些数值表示是表示一个词如何使用的向量。这种数值表示甚至可以让你使用两个词表示之间的欧氏距离来量化两个词在训练文本中使用的相似程度。
“Adidas”和“Nike”的向量可能会非常相似。虽然每个向量字段的具体表示不甚清楚,因为它们是通过无监督学习开发的,但一个代表类似概念的词在模型理解中有类似的表示是有意义的。
如果你想了解什么是监督学习和无监督学习,以及使用这些学习方法的算法,查看我们的帖子“监督学习与无监督学习”。
注意力是一个非常宝贵和有用的概念。注意力之所以能在自然语言处理和图像识别中得到应用,是有充分理由的。
自2000 年代初以来,自然语言处理翻译一直是深度学习模型的一部分。大约在 2013 年,长短期记忆(LSTM)在该领域首次出现,并主导了几年。LSTM 模型读取句子,创建隐藏表示,然后利用隐藏表示生成输出句子。
作为人类,如果我们进行翻译,我们不仅仅是阅读句子并直接输出翻译。我们倾向于反复查看整个句子,或者在需要重新审视目标词的上下文时专注于某些部分。
例如,词语“read”。它表示的是现在时还是过去时?你需要关注句子的哪些其他部分来确定?是否需要周围句子的上下文信息?“I read books every year”单独来看有一个意思,但如果我说,“I did many things before I went to university. I read books every year. I ate dinner with my parents every day”,句子的意义就会发生变化,而“read”在第一个例子中表示的是现在时的动作,在第二个例子中则是过去时的动作。
注意力机制在句子或句子之间建立不同词汇之间的关系。对于我们想要翻译的每个词,它会根据这些相关词与目标词的重要性来突出显示原句中的不同词。一个缺乏经验或专业背景的翻译者可能只会逐字翻译,虽然基本信息会传达,但考虑到相关词的重要性会产生更准确的翻译。注意力机制允许我们将这种专业翻译模式融入深度学习模型的架构中。
没有领域知识,你可以完成一个能够输出一些数字的可接受模型。拥有领域知识,你将知道什么数据最适合用来训练和测试你的模型。你还会意识到如何调整你使用的模型,以更好地代表数据集和你试图解决的问题,以及如何最好地利用模型产生的洞察。
机器学习是一个工具箱。如果你拿出一个电锯,你可能能切割一些木头,但没有木匠的专业知识,你可能无法构建一堆橱柜。领域知识将使你的机器学习技能的影响力达到更高的层次。
内特·罗西迪 是一位数据科学家和产品策略专家。他同时担任分析课程的兼职教授,并且是 StrataScratch,一个帮助数据科学家通过顶级公司的真实面试问题为面试做好准备的平台的创始人。你可以在 Twitter: StrataScratch 或 LinkedIn 上与他联系。
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织进行 IT 相关工作