docs-merge-21

TowardsDataScience 2024 中文翻译(二十二)

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

为什么 2024 年诺贝尔化学奖(人工智能化学奖)如此重要

原文:towardsdatascience.com/why-the-2024-nobel-prize-in-ai-for-chemistry-matters-so-much-a06126cb5ca3?source=collection_archive---------5-----------------------#2024-10-12

致 DeepMind 的 Demis Hassabis 和 John Jumper,以及蛋白质设计研究所的领导者 David Baker

LucianoSphere (Luciano Abriata, PhD)Towards Data Science LucianoSphere (Luciano Abriata, PhD)

·发表于Towards Data Science ·阅读时间 5 分钟·2024 年 10 月 12 日

--

图表来自瑞典皇家科学院(公有领域)

总结:因为这一诺贝尔奖背后的研究和开发不仅解锁了新的生物学,还解锁了新的计算机科学,这一切都直接推动了人类在各个领域的进步。

2024 年诺贝尔化学奖授予使用人工智能进行蛋白质结构预测和设计的开创性进展,反映了我们(处于化学与生物学交界处的科学家)正在经历的变革性时刻。而且,这一奖项的颁发尤为值得注意,因为就在前一天,另一项诺贝尔奖颁给了那些开发了人工智能基础的人。

从本质上讲,利用人工智能可靠预测蛋白质结构的能力正在重塑基础和应用生物学研究。此外,DeepMind 和贝克教授的蛋白质设计研究所的工作为许多人建立了支柱,实际上是一个庞大的社区可以在此基础上继续发展。你在我上面的总结中已经窥见了一些,但让我们深入探讨一下,我会将你引导到其他博客文章中,在那里我会更深入地展开这些子话题。

解锁基础生物学研究

为什么图灵测试变得过时

原文:towardsdatascience.com/why-the-turing-test-became-obsolete-efe941cb7aec?source=collection_archive---------3-----------------------#2024-02-01

以及应该使用的替代方法

Rafe Brena, Ph.D.Towards Data Science Rafe Brena, Ph.D.

·发布于 Towards Data Science ·9 分钟阅读·2024 年 2 月 1 日

--

作者提供的图像,使用了 Microsoft Designer

通常所谓的“图灵测试”是用来区分人类和假装成人类的机器的。区分“人工制造”和“机器制造”的界限似乎每天都更加相关,不是吗?

在这篇文章中,我将简要解释图灵测试如何获得了终极证明人类水平智能的地位,然后是这个地位如何丧失的。接着,我会提到一些值得使用的替代方法,用于测试人类甚至超人类的认知能力。

对机器认知能力的有效测量对于数据专业人员来说至关重要,因为我们被各种“智能”甚至“意识”的主张淹没,而这些大多数都是噪音和炒作。

什么是图灵测试?

图灵本人称他的测试为“模仿游戏”,但事情变得模糊,因为这也是一部关于图灵个人生活和奋斗的电影的名字——这些内容非常重要。

虽然我喜欢这部电影,也喜欢本尼迪克特·康伯巴奇饰演主角的表现,但“模仿游戏”并不是“图灵机”,而“图灵机”也不是“恩尼格玛机”。电影把它们搞混了。

看,我在大学教授了超过十年的自动机理论课程,最终的主题……

为什么你(目前)不需要深度学习进行时间序列预测

原文:towardsdatascience.com/why-you-currently-do-not-need-deep-learning-for-time-series-forecasting-0de57f2bc0ed?source=collection_archive---------0-----------------------#2024-06-20

你需要的是什么:来自马克里达基斯 M5 竞赛和 2023 年 Kaggle AI 报告的经验教训

Jonte DanckerTowards Data Science Jonte Dancker

·发表于Towards Data Science ·阅读时间:11 分钟·2024 年 6 月 20 日

--

图片由作者提供。

深度学习在时间序列预测中受到了广泛关注。许多文章和科学论文讨论了最新的深度学习模型,以及它如何比任何机器学习(ML)或统计模型更好。这给人一种深度学习将解决我们在时间序列预测中所有问题的印象,特别是对该领域的新手来说。

但根据我的经验,深度学习并不是你需要的东西。其他方法对于时间序列预测更为重要且效果更好。

因此,在本文中,我想向你展示哪些方法有效。我将展示那些在多种方式中已被验证有效的内容。我将使用马克里达基斯 M5 竞赛和 2023 年 Kaggle AI 报告的研究结果,并将其与我的经验进行对比。

马克里达基斯竞赛通过真实数据集比较预测方法,展示了哪些方法在实践中有效。自从近 40 年前竞赛开始以来,研究结果发生了变化。在前三届竞赛(M1 至 M3)中,统计模型主导了这一领域。而在 M4 竞赛中,机器学习(ML)模型开始展示出它们的潜力,表现形式为……

为什么你应该雇佣方法学家

原文:towardsdatascience.com/why-you-should-be-hiring-methodologists-1455384b43f8?source=collection_archive---------9-----------------------#2024-10-17

“你所需要做的就是发展你的思维。如果你有深入的思考,几乎所有的事情看起来都很有趣。” — 奥斯卡·王尔德

Mel Richey, PhDTowards Data Science Mel Richey, PhD

·发表于Towards Data Science ·5 分钟阅读·2024 年 10 月 17 日

--

DALL-E 图像生成器

什么是方法学家?

传统上,方法学家是那些研究研究方法的人员,包括定性和定量方法。现代方法学家(方法学分析师、方法学科学家和方法学工程师)是应对复杂问题的多种方法的使用者。他们也精通可用的实施工具和技术,尽管通常与这些领域的真正专家(如云架构师、软件开发人员或数据工程师)合作时效果最好。

我之前曾写过关于分析方法学作为一门学科的创造性和系统性工作。拥有正确的个性和适当的技术或分析背景,方法学家可以成为组织中最具影响力的技术角色。

那么,当你的组织急需数据工程师、数据科学家和软件工程师时,为什么要雇佣一个方法学家?更进一步,谁会自我认同为方法学家呢?(我认为这个人是.)

方法学家是…

  • 具有跨学科的学术或专业背景。 这可能意味着简历上有多个看似不相关的条目,涵盖了定性和定量的角色,并涉及多个行业。我们已经在团队建设的生态中接受了这一概念——一个成功的团队是一个跨学科的团队,能够促进思想的多样性。我认为,心智的运作也是如此。

  • 以每个问题都有不止一个解决方案为基本假设。 一个好的方法学家明白,虽然可能没有一个“正确”的答案,但很可能有一个“最佳”的答案。他们还会使用简洁但结构化的过程,探索多种方法后再做选择。这种心态的转变是微妙的,但至关重要:寻找最优解,而不是寻找正确答案。

  • 具有卓越的学习能力。 一个方法学家简历上最具影响力的技能不是 Python,而是能够快速适应并精通一个新的学科、方法或技术的能力。

  • 对不同产业如何解决相似问题充满好奇。 方法学家不会因为参加自己领域之外的会议而感到困扰,只要内容不是表面化的。无论是思维策略、艺术形式、统计方法,还是编程常规,几乎所有东西在用真正创造性的方法解决复杂问题时都可能是有用的。通常,是那些促使思维走向非常规方向的课程、研讨会、讲座、活动或对话,在创造性问题解决中最为有益。方法学家常常通过类比来思考和写作。

  • 具有目标对齐的心态。 随着方法学家的职业发展,常常会看到方法学思维超越原有学科,进一步扩展到对周围世界的组织与排序。由于固有的好奇心和学习能力,方法学家通常会接触到商业、金融以及行业中面向公众的各个方面。因此,方法学家常常擅长将所有的部分整合到一个程序、一个投资组合或一个商业计划中。换句话说,方法学家能够将多个相互竞争的目标围绕一个结果进行对齐——这些目标包括客户、投资者、最终用户和其他利益相关者的目标。目标对齐的心态关注的是“最优”,而非“正确”。这通常类似于用来自多个 1000 片拼图的拼块来完成一副 1000 片拼图。

我们听说创新往往发生在学科交汇的地方,或者说是美第奇效应,这一理论归功于弗朗斯·约翰逊。方法学家在学科交汇处提供解决方案。他们作为组织内运营障碍的连接纽带;在概念思维的图谱中,他们是具有最高中介中心性的节点。

不幸的是,很难准确说出在哪些地方可以找到方法学家。方法学家通常被埋藏在深奥的高等教育项目中,或者深深扎根于他们的行业。归根结底,方法学家需要广泛的分析性和/或技术性曝光,但这个职位名称更多地代表一种思维方式,而非简历,更可能在文化契合度面试中被识别,而非技术面试。

想要打造一份方法学家简历吗?

建立方法学思维方式的关键在于获得个人思维和技能的多样性。 概念多样性和分析广度是通过多种方式培养的,包括正规教育项目、训练营课程、在职经验以及广泛的阅读和交流。“应用型”学术项目往往比理论型项目培养出更优秀的方法学家,因为它们更注重解决方案的实际应用。例如,我的学位分别为:语言学(学士)、分析学(硕士)和仿真学(博士)。

语言学源于人文学科,它让我广泛接触了人类学、文化观念、个体与集体的关系、分组与子分组、以及传播等内容。它同样也填补了我技术脑袋中的一些概念,即为看似无结构的事物(如语言)构建形式化结构,这在概念上与解决数据问题直接相关。语言学甚至让我第一次接触到计算语言学中的编程。

在我分别获得分析学和仿真学的学位时,前者为我提供了广泛的多种方法及其应用(即地理空间建模、时间序列分析、认知思维策略、社交网络分析、游戏化、统计学)。后者则让我深入探索了一个非常具体的领域(基于代理的建模与仿真),这个领域与我作为数据科学家和解决方案架构师的职业工作交叉融合,在这过程中我也获得了许多实践经验。

与此同时,通过阅读小说和技术文章,参加聚会和华盛顿 D.C.地区的沙龙,与教授讨论深奥的课题,我的个人兴趣在图形分析、复杂社会的演化、社会文化历史、可持续农业与营养、电子游戏设计以及高级数据可视化与讲故事等方向不断增长。方法学家的背景与杰出人物的童年并无太大不同——通过多种方式得到暴露、挑战并融入文化。

我能给那些渴望发展方法学家简历的人的最大建议是,找到与核心领域学习或职业边缘相关的具体机会(正规教育项目、学徒制、训练营、聚会、沙龙、在线社区、一对一对话和导师指导)。

然后,精通转化这一技巧。

例如,我学习了分析学,并能够将这门正式的分析培训转化为在工作中学习 AI 实施的机会,当机器学习(ML)的广泛应用进入我的行业时。我将这一点与项目管理专业人员(PMP)认证结合起来,获得了 AI 实施项目的技术项目经理职称。鉴于此,我本应攻读机器学习或深度学习的博士学位,但我选择了计算社会科学(CSS)。这使我将新的技术知识应用到分析领域——也就是我的旅程开始的地方:语言学和社会文化研究。机器学习在 CSS 领域非常相关,但研究的对象是模拟,而非机器学习算法本身。

这些追求是我在当时主攻领域之外的扩展举例——从硕士学位到职业,从职业到博士学位。这些边缘探索有助于扩展一个人的知识基础,同时与个人的核心技能或领域相连接。正是这种增加的连接性——与图形并不太不同——造就了方法学家。

你是一个方法学家吗?我经常被寻找拥有美国政府安全许可的公司问到,如何最好地招募你。你在下一个项目或机会中在寻找什么?

为什么你永远不应该使用交叉验证

原文:towardsdatascience.com/why-you-should-never-use-cross-validation-4360d42456ac?source=collection_archive---------0-----------------------#2024-03-27

在真实世界的应用中,使用随机交叉验证始终是一个错误的选择。以下是原因。

Samuele MazzantiTowards Data Science Samuele Mazzanti

·发表于 Towards Data Science ·12 分钟阅读·2024 年 3 月 27 日

--

[作者插图]

作为一名数据科学家,我经常需要快速粗略地估算一个预测模型在给定数据集上的表现。很长一段时间里,我是通过交叉验证来完成这一点的。然后,我意识到我完全走错了方向。事实上,

对于真实世界的问题,交叉验证完全不可信。

由于我敢打赌很多数据科学家仍然依赖这种技术,因此我认为深入探讨这个话题非常有意义。

在这篇文章中,我将通过一个玩具示例和一个真实数据集,讲解为什么交叉验证在处理真实世界问题时永远不是一个好选择。

什么是交叉验证?

交叉验证是一种模型验证技术,用于估算在一个数据集上训练的模型在新(未见过的)数据集上的表现。

注:交叉验证有很多种类型。在本文中,为了简单起见,当我们说“交叉验证”时,我们指的是随机 K 折交叉验证,这是迄今为止最常用的……

为什么你不应该将数值评估用作大语言模型的评判标准

原文:towardsdatascience.com/why-you-should-not-use-numeric-evals-for-llm-as-a-judge-bf22424f5379?source=collection_archive---------7-----------------------#2024-03-08

由作者使用 Dall-E 3 创建的图像

测试主要的大语言模型在进行数值评估时的表现

Aparna DhinakaranTowards Data Science Aparna Dhinakaran

·发布于 Towards Data Science ·8 分钟阅读·2024 年 3 月 8 日

--

除了为日益增多的行业应用生成文本外,大语言模型(LLMs)现在广泛被用作评估工具。模型可以量化检索系统中文档的相关性,评估评论和帖子的情感等——评估人类和 AI 生成的文本。这些评估通常是数值型或类别型的。

不同类型的大语言模型评估(由作者提供的图示)

数值评估涉及大语言模型根据一组评估标准返回一个数字。例如,模型可能会被要求在 1 到 10 的尺度上评估一个文档与用户查询的相关性。

类别评估则有所不同,它允许大语言模型从一组预定义的、通常是基于文本的选项中进行选择来进行评估。例如,一个提示可能会询问一个段落是“快乐的”,“悲伤的”还是“中立的”,而不是试图量化段落的快乐程度。

本文展示了对几种主要大语言模型(OpenAI 的 GPT-4、Anthropic 的 Claude 和 Mistral AI 的 Mixtral-8x7b)进行的测试结果,测试它们在进行数值评估时的表现。完成这些测试所使用的所有代码可以在这个 GitHub 仓库中找到。

主要结论

  • 在大语言模型(LLMs)中的数值评分评估并不一致,即使是微小的提示模板差异也可能导致结果出现巨大的偏差。

  • 即使保持所有独立变量(模型、提示模板、上下文)不变,也可能导致在多轮测试中结果有所不同。LLM 不是确定性的,有些模型在其数值判断上完全不一致。

  • 有充分的理由怀疑,GPT-4、Claude 或 Mixtral 能够处理足够精确的连续范围,足以在现实世界的用例中用于数值评分评估。

研究

拼写错误实验

第一个实验旨在评估 LLM 根据文档中包含拼写错误单词的百分比,在 0 到 10 之间为文档评分的能力。

我们选取了一段拼写正确的文字,将文本编辑为在不同频率下包含拼写错误的单词,然后使用以下提示模板将这些错误文本输入给 LLM:

SIMPLE_TEMPLATE_SPELLING = """
  You are a helpful AI bot that checks for grammatic, spelling and typing errors in a document context. 
  You are going to score the document based on the percent of grammatical and typing errors. The score should be between {templ_high} and {templ_low}. 
  A {templ_low} score will be no grammatical errors in any word, a score of {templ_20_perc} will be 20% of words have errors, a {templ_50_perc} score will be 50% errors, a score of {templ_70_perc} is 70%, and a {templ_high} will be all words in context have grammatical errors. 
  The following is the document context.

  #CONTEXT
  {context}
  #ENDCONTEXT

  #QUESTION
  Please return a score between {templ_high} and {templ_low}, with a case of {templ_high} being all words have a grammatical error and {templ_low} being no words have grammatical or spelling errors. 
  You will return no other text or language besides the score. Only return the score.
  Please

然后我们要求模型返回一个数字评估,表示文章中拼写错误单词的百分比(3 → 30% 拼写错误,8 → 80% 拼写错误,依此类推)。理想情况下,得分为 10 表示文档中的每个单词都拼写错误,而得分为 0 表示没有拼写错误。针对三种大型语言模型(LLM)——GPT-4、Claude 和 Mixtral——的实验结果并不理想。

GPT-4 拼写错误结果(图片来源:作者)

观察到的结果与预期的完美线性范围相差甚远;评分系统并未始终如一地反映文档中拼写错误的比例。实际上,GPT-4(如上所示)在每个拼写错误密度为 10% 或以上的文档中都返回了 10(表示 100% 错误率)。报告的得分是多次试验的中位数,试验是在每个指定的错误级别进行的。

GPT-4、Claude、Mixtral 拼写错误结果(图片来源:作者)

Claude 的结果稍微好一些,但仍然不完美,也没有达到可能接受用于部署的水平。Mixtral,作为这三种模型中最小的,表现最好。

那么,为什么这很重要呢?考虑到在各种环境中使用 LLM 数值评估器的兴趣,有充分的理由相信,以这种方式使用 LLM 可能会在性能和客户满意度上遇到障碍。

情感定性实验

第二个和第三个实验旨在评估 LLM 根据文本中包含表明悲伤或沮丧的单词的句子数量,在 0 到 10 之间为文档评分的能力。

在这些测试中,我们将带有悲伤/沮丧情感的短语和单词嵌入文本中。然后要求模型量化文本中情感的普遍性,1 表示没有句子表达该情感,10 表示 100% 的句子都传达了这种情感。

这些实验与拼写测试一起进行,目的是确定将模型的关注点从字数转向句子数是否会影响结果。拼写测试根据拼写错误的词语百分比进行评分,而悲伤/沮丧测试则是根据情感句子的百分比来评分的。

提示模板开头的指令在不同的测试中有所不同,而所有以上下文开始的内容保持不变,通过省略号表示:

SIMPLE_TEMPLATE_FRUSTRATION = """
  You are a helpful AI bot that detects frustrated conversations. You are going to score the document based on the percent of sentences where the writer expresses frustration.
  The score should be between {templ_high} and {templ_low}.
  A {templ_low} will indicate almost no frustrated sentences, a score of {templ_20_perc} will be 20% of sentences express frustration, a {templ_50_perc} will be 50% of sentences express frustration, a score of {templ_70_perc} is 70%, and a {templ_high} score will be all the sentences express frustration. 

...
"""
SIMPLE_TEMPLATE_SADNESS = """
  You are a helpful AI bot that detects sadness and sorrow in writing. You are going to score the document based on the percent of sentences where the writer expresses sadness or sorrow.
  The score should be between {templ_high} and {templ_low}.
  A {templ_low} will indicate almost no sentences that have sadness or sorrow, a score of {templ_20_perc} will be 20% of sentences express sadness or sorrow, a {templ_50_perc} will be 50% of sentences express sadness or sorrow, a score of {templ_70_perc} is 70%, and a {templ_high} score will be all the sentences express sadness or sorrow.

...
"""

再次强调,得分为 10 应表明文档中的每个句子都包含悲伤或沮丧的修饰词,而得分为 0 则意味着完全没有此类修饰词。得分介于两者之间的情况对应于不同程度的情感频率,得分越高,情感句子的比例越大。

GPT-4 拼写错误、悲伤、沮丧结果(图像由作者提供)

与拼写错误实验类似,结果显示与预期结果存在显著差异。GPT-4 对于悲伤率超过 30% 或沮丧率约为 70% 的每个文档都给出了 10 分的评分。值得注意的是,在所有与 GPT-4 进行的测试中,只有在完全没有修饰词或拼写错误时,中位答案才能满足完美的线性范围。

Mixtral 拼写错误、悲伤、沮丧结果(图像由作者提供)

Mixtral AI 在情感修饰符实验中表现相对较好。虽然有充分的理由怀疑这些模型目前是否能足够好地处理连续范围,以便用于数字评分评估,但 Mixtral 是最接近实现这一目标的模型。

根据这些结果,我们不建议在生产代码中使用得分评估。

结果差异

值得注意的是,我们对每个模型进行了多次测试,并绘制了它们的响应分布图。

跨多个测试的评估结果比较,得分范围为 1 到 10(图像由作者提供)

理想的分布应在低端和高端周围较为集中(如果所有或没有词语/句子被计入,信心较高),而中间可能会有一个较长的过渡区间(例如,区分 4 和 5 时信心较低)。

有两点特别突出。首先,各个模型和任务的分布密度差异很大。Claude 的分布在我们的测试中变化较大;例如,在 80% 拼写错误的情况下,我们有模型始终给出 1 到 4 的评分。另一方面,GPT-4 的分布要紧凑得多——尽管大部分情况下其得分未能满足合理的预期。

其次,一些模型比其他模型更擅长处理连续范围中的过渡。Mixtral 的分布看起来接近于可能的可接受性能,但这三种模型似乎仍然有一段路要走,才能准备好投入生产。

LLM 评估的影响

目前有大量关于LLM 评估的研究正在进行。例如,微软的 GPT 估算指标评估(GEMBA)考察了不同大型语言模型评估不同翻译段落质量的能力。虽然一些研究论文将概率和数字分数作为评估输出的一部分——包括 GEMBA 在内的研究报告了有希望的结果——但我们看到客户在现实世界中应用分数评估的方式往往与当前的研究大不相同。

有鉴于此,我们试图将我们的研究调整为更具实践性、面向现实世界的应用——结果突出显示了直接使用分数做决策可能存在的问题。考虑到我们在评分评估研究中对 GPT-4 回答的分析,似乎该模型倾向于选择两个选项之一:1 或 10,要么全选,要么不选。

最终,类别评估(无论是二元还是多类)很可能具有很大潜力,未来在这一领域的进展值得关注。

结论

使用 LLM 进行数字评估非常挑剔且不可靠。模型之间的切换以及提示模板的微小变化可能会导致截然不同的结果,这使得很难将 LLM 作为数字评估标准的一致可靠的裁决者。此外,跨多次测试的大量结果分布表明,这些模型在回答时往往不一致,即使独立变量保持不变。构建 LLM 评估的读者应谨慎,避免以这篇文章中概述的方式使用数字评估。

有问题吗?请随时通过 X LinkedIn,或 Slack联系我们!

Transformer 是否会彻底改变时间序列预测?

原文:towardsdatascience.com/will-transformers-revolutionize-time-series-forecasting-1ac0eb61ecf3?source=collection_archive---------2-----------------------#2024-07-31

结合来自工业界、学术界和领先研究人员的数据

Nikos KafritsasTowards Data Science Nikos Kafritsas

·发表于 Towards Data Science ·阅读时间 9 分钟·2024 年 7 月 31 日

--

由作者使用 DALLE*3 创作

“生成式 AI 革命”的核心是 Transformer 模型——由谷歌于 2017 年推出。

但是,每一次科技革命都会带来困惑。在快速增长的环境中,很难公正地评估创新——更不用说估算它们的影响了。

启动了这场 AI 突破的 Transformer,已经成为了一个“有争议的模型”。目前存在两种极端观点:

  1. 热衷的采纳者:他们在各个领域使用 Transformer,包括 NLP 之外的领域。即便他们不能或不想使用,仍然被雇主、经理、投资者等逼迫使用。

  2. 怀疑论者和技术拒绝者:他们批评包括 Transformer 在内的 AI 模型。他们无法理解或接受通过增加数据量和层数来扩展模型,往往能超越基于严谨证明的优雅数学模型。

随着尘埃逐渐落定,现在是进行公正研究的时候了。

本文重点讨论用于预测的 Transformer 模型。我将讨论来自学术界工业界领先研究人员的最新发展。

我还将解释在什么情况下以及如何基于 Transformer 的预测…

你的圣诞节会是白色的吗?问问 AI 天气模型吧!

原文:towardsdatascience.com/will-your-christmas-be-white-ask-an-ai-weather-model-388323f1d2e3?source=collection_archive---------11-----------------------#2024-12-17

学习如何可视化 AI 天气并为假期创建自己的天气预报

Caroline ArnoldTowards Data Science Caroline Arnold

·发表于Towards Data Science ·6 分钟阅读·2024 年 12 月 17 日

--

图片由作者使用Midjourney创建。

“我梦见一个白色圣诞节” … 当你在圣诞节当天睁开眼睛时,你会看到雪吗?当然,你可以直接打开手机上的天气应用查看预报。

但作为一个真正的 AI 爱好者,你可以使用一个预训练的 AI 天气模型来创建你自己的全球天气预测。

AI 天气预报非常轻便,你可以轻松在Google Colab的免费版本中运行,或者在Lightning Studio上,甚至在你的笔记本电脑上运行。

你可以直接从我发布的笔记本开始,这样可以省去一些打字的时间。

创建 AI 天气预报

我们将使用欧洲天气服务 ECMWF 的ai-models包来创建 AI 天气预报。它包含了我们所需的所有工具:

  • 下载预训练的 AI 天气模型

  • 下载最新的开放天气预报初始化数据

  • 执行预测

复制我的笔记本,或者在云环境或你的笔记本上打开一个笔记本。如果你有可用的 GPU,确保你的当前运行时已经连接到它——这样会加快速度。

你的选票会决定下一任总统吗?

原文:towardsdatascience.com/will-your-vote-decide-the-next-president-0875a4927c75?source=collection_archive---------3-----------------------#2024-10-15

模拟你的单一选票在 11 月的选举中扭转结果的概率

Jarom HuletTowards Data Science Jarom Hulet

·发布于数据科学前沿 ·阅读时间 18 分钟·2024 年 10 月 15 日

--

图片来源:Element5 Digital, Pexels.com

好吧,选举季节已经全面展开——我告诉你,假如你还没注意到的话,电视广告和院子里的标语足够让人不耐烦。拥有投票权是一项美妙的机会,而许多世界公民却没有这种权利。然而,我常常想,我的单一选票到底能有多大的影响。在这篇文章中,我将尝试使用我最喜欢的工具之一——模拟,来回答这个问题!

我喜欢使用模拟来解决问题——今年早些时候我写了一系列关于模拟的文章——如果你感兴趣,可以看看。

Jarom Hulet

Jarom Hulet

数据模拟

查看列表6 个故事

在这篇文章中,我们将涵盖以下话题:

  1. 设置模拟

  2. 模拟你的选票改变你所在州的选举结果

  3. 模拟你所在州改变整个选举的结果

  4. 估算你的选票决定总统的总体概率

与嵌入的工作:闭源与开源的对比

原文:towardsdatascience.com/working-with-embeddings-closed-versus-open-source-39491f0b95c2?source=collection_archive---------2-----------------------#2024-09-26

与检索的工作

使用技术来改进语义搜索

Ida SilfverskiöldTowards Data Science Ida Silfverskiöld

·发布于 Towards Data Science ·17 分钟阅读·2024 年 9 月 26 日

--

在执行语义搜索之前演示聚类 | 图片来自作者

如果你不是会员但想阅读这篇文章,请查看此朋友链接 这里

嵌入是自然语言处理的基石。你可以使用嵌入做很多事情,但其中一个更常见的用途是语义搜索,常用于检索应用中。

尽管整个技术社区都在热议如何理解知识图谱检索管道的工作原理,但使用标准的向量检索仍然没有过时。

你会看到多篇文章向你展示如何从语义搜索中过滤掉无关的结果,我们在这里也会关注这一点,并使用聚类和重新排序等技术。

本文的主要焦点比较开源和闭源嵌入模型,并涵盖各种模型的规模。

将重点介绍的模型 — 还有更多可用的模型 | 图片来自作者

我们将比较多达 9 种在 MTEB 排行榜上排名靠前的不同嵌入模型。这将帮助你了解大模型与小模型在表现上的差异,以及随着你…

使用 Python 的 Dataclasses 和 Dataclass Wizard

原文:towardsdatascience.com/working-with-python-dataclasses-and-dataclass-wizard-4e000b03fe5c?source=collection_archive---------1-----------------------#2024-02-26

让我们用几行代码来创建 Python 数据对象吧!

Jose D. Hernandez-BetancurTowards Data Science Jose D. Hernandez-Betancur

·发表于Towards Data Science ·阅读时间 10 分钟·2024 年 2 月 26 日

--

图片由作者使用 Gencraft 生成。

如果你是 Python 开发者,你可能已经听说过 Zen。它的 19 条准则中有三条指出:“显式优于隐式”,“可读性很重要”,以及“简单优于复杂”。当你在创建或集成现有的 Python 包时,你的目标是找到最符合 Python 风格的方式来高效、功能性地完成任务。Python 的dataclasses库提供了一种快速而简便的创建对象的方式。这个包包含了一系列工具,能够加速并使你的代码更具可读性,无论你是在进行数据科学还是软件开发项目。然而,既然没有巫师就没有魔法棒,dataclass wizard包为dataclasses提供了额外的功能,能够以 Pythonic 的风格增强你的代码。在这篇文章中,我们将深入探讨这两个包,帮助我们将工作提升到一个新的层次。

Dataclasses 包

要使用dataclasses,我们需要导入并应用@dataclass装饰器。这个装饰器让我们能够指定实例是否应该被冻结(frozen=True)、是否需要初始化(init=True)或使用插槽(slots=True)。此外,虽然field对象在创建dataclasses对象时不是必需的,但我们可以使用它来…

用纯 Python(无 JVM)实现的数据湖写入-审计-发布

原文:towardsdatascience.com/write-audit-publish-for-data-lakes-in-pure-python-no-jvm-25fbd971b17d?source=collection_archive---------4-----------------------#2024-04-12

使用 Apache Iceberg、Lambdas 和 Project Nessie 的开源 WAP 实现,全部通过 Python 运行

Ciro GrecoTowards Data Science Ciro Greco

·发表于Towards Data Science ·阅读时间 9 分钟·2024 年 4 月 12 日

--

看,妈妈:没有 JVM!图片来自Zac OngUnsplash

引言

在这篇博客文章中,我们提供了一个简明的参考实现,用于在数据湖上实施写入-审计-发布(WAP)模式,使用Apache Iceberg作为开放表格格式,并使用Project Nessie作为支持类似 git 语义的数据目录。

我们选择Nessie是因为它的分支功能提供了一个良好的抽象,能够实现 WAP 设计。最重要的是,我们选择在PyIceberg上构建,以消除开发者体验中对 JVM 的需求。事实上,要运行整个项目,包括集成的应用程序,我们只需要 Python 和 AWS。

虽然Nessie在技术上是用 Java 构建的,但在本项目中,数据目录通过AWS Lightsail作为容器运行,我们将仅通过其端点与之交互。因此,我们可以仅使用 Python 表达整个 WAP 逻辑,包括下游查询!

由于PyIceberg相对较新,实际上很多功能并不直接支持。特别是,写入功能仍处于初期阶段,Iceberg 表的分支仍不被支持。因此,您在这里看到的内容是我们自己进行的一些原创工作,以便直接从 Python 中使Nessie支持 Iceberg 表的分支。

所以,这一切或多或少地发生了。

WAP 到底是什么?

2017 年,Netflix 的 Michelle Winters 在talked中谈到了一个名为“写入-审计-发布”(Write-Audit-Publish,WAP)的数据设计模式。WAP 本质上是一种功能性设计,旨在使数据质量检查在数据提供给下游消费者之前更容易实现

例如,一个非典型的用例是数据摄取时的数据质量。流程看起来像是创建一个临时环境,并对新摄取的数据进行质量测试,然后再将这些数据提供给任何下游应用程序。

正如名称所示,基本上有三个阶段:

  1. 写入。 将数据放在一个下游消费者无法访问的位置(例如,暂存环境或分支)。

  2. 审计。 转换和测试数据,确保它符合规格(例如,检查模式是否突然变化,或是否存在意外值,如 NULL)。

  3. 发布。 将数据放在消费者可以读取的地方(例如,生产数据湖)。

图片来自作者

这只是 WAP 模式应用的一种可能示例。很容易看出,它如何应用于数据生命周期的不同阶段,从 ETL 和数据摄取,到支持分析和机器学习应用的复杂数据管道。

尽管非常有用,WAP 仍然不太普及,而且直到最近,企业才开始更系统地思考它。开放表格格式和像NessieLakeFS这样的项目的兴起正在加速这一过程,但它仍然有些前卫

无论如何,它是一种非常好的数据思维方式,并且在驯服一些让工程师夜不能寐的最广泛的问题时极为有用。那么,接下来我们来看看如何实现它。

在 Python 中的数据湖上实现 WAP

我们不会进行关于 WAP 的理论讨论,也不会提供实现它的各种方式的详尽调查(Alex Merced来自DremioEinat Orr来自LakeFs已经做得非常出色)。相反,我们将提供一个关于数据湖中 WAP 的参考实现。

👉 系好安全带,克隆 Repo,然后试试看!

📌 更多详情,请参考 README 项目文档。

架构和工作流

这里的想法是模拟一个数据摄取工作流,并通过分支数据湖来实现 WAP 模式,在决定是否将数据放入数据湖的最终表之前,先运行数据质量测试。

我们使用 Nessie 的分支功能来获取我们的沙箱环境,在该环境中,数据无法被下游消费者读取,同时使用 AWS Lambda 来运行 WAP 逻辑。

本质上,每当一个新的 parquet 文件上传时,一个 Lambda 函数会被触发,创建一个数据目录中的分支,并将数据追加到 Iceberg 表中。然后,使用 PyIceberg 执行一个简单的数据质量测试,检查表中的某一列是否包含 NULL 值。

如果答案是肯定的,则数据质量测试失败。新的分支将不会被合并到数据目录的主分支中,从而使数据无法在数据湖的主分支中被读取。相反,警报消息将被发送到 Slack

如果答案是否定的,并且数据中不包含任何 NULL 值,那么数据质量测试通过。新的分支将被合并到数据目录的main分支中,数据将被追加到数据湖中的 Iceberg 表,以便其他流程读取。

我们的 WAP 工作流:图来自作者

所有数据都是完全合成的,只需运行项目即可自动生成。当然,我们提供了选择是否生成符合数据质量规范的数据,或者生成包含 NULL 值的数据的可能性。

为了实现完整的端到端流程,我们将使用以下组件:

项目架构:图来自作者

这个项目是相当自包含的,带有设置整个基础设施的脚本,因此只需要对 AWS 和 Python 有基础的了解即可。

这并不打算作为一个生产级的解决方案,而是作为一个参考实现,是更复杂场景的起点:代码非常详细且有大量注释,便于修改和扩展基本概念,以更好地适应任何人的用例。

可视化

为了可视化数据质量测试的结果,我们提供了一个非常简单的 Streamlit 应用,可以用来查看当一些新数据上传到 S3 上的第一个位置时发生了什么——该位置对下游消费者不可用。

我们可以使用该应用检查不同分支中的表格有多少行,对于 main 之外的分支,可以轻松地查看数据质量测试在哪一列和多少行中失败。

数据质量应用——当你检查某个上传分支(即 emereal-keen-shame)时会看到这种情况,在该分支中,3000 行数据被附加进来,但由于 my_col_1 中的一个值为 NULL,数据质量检查未通过。图片来自作者。

从数据湖到 Lakehouse

一旦我们基于 Iceberg 构建了 WAP 流程,就可以利用它为下游消费者实现一个可组合的设计。在我们的仓库中,我们提供了 Snowflake 集成的说明,以便探索这一架构可能性。

向 Lakehouse 迈出的第一步:图片来自作者

这是 Lakehouse 架构的一个核心理念,它的设计目的是比现代数据仓库更灵活,同时比传统数据湖更易用。

一方面,Lakehouse 的核心是利用对象存储来消除数据冗余,并同时降低存储成本。另一方面,它应该提供更多灵活性,让用户能够为不同的目的选择不同的计算引擎。

所有这些听起来在理论上很有趣,但在大规模工程实践中似乎非常复杂。即使是 Snowflake 和 S3 桶作为外部卷的简单集成,说实话也相当繁琐。

事实上,我们必须强调这一点,转向完整的 Lakehouse 架构需要大量的工作。真的很多工作!

话虽如此,即使是千里之行,亦始于足下,那么为什么我们不从解决那些最简单但能带来实际影响的问题开始呢?

该仓库中的示例展示了其中一个简单的用例:WAP 和数据质量测试。这里的 WAP 模式提供了一个机会,将数据质量测试所需的计算(以及可能的一些摄取 ETL)移出数据仓库,同时仍然能够利用 Snowflake 对经过认证的制品进行更高价值的分析工作负载。我们希望这篇文章能够帮助开发者构建自己的概念验证并加以使用。

结论

这里提出的参考实现有几个优势:

表格比文件更好

数据湖在历史上一直很难开发,因为数据抽象与传统数据库中通常采用的方式非常不同。大数据框架如 Spark 最早提供了处理存储为不同格式文件(例如 parquet、csv 等)的海量原始数据的能力,但人们通常并不以文件为单位进行思考:他们是以表格为单位思考的。

我们出于这个原因使用开放表格格式。Iceberg 将主要的数据湖抽象转换为表格,而不是文件,这使得操作变得更加直观。现在我们可以原生使用 SQL 查询引擎来探索数据,并且可以依赖 Iceberg 来提供正确的模式演进。

互操作性对我们有利

Iceberg 还从架构角度提供了更好的互操作性。使用开放表格格式的主要好处之一是数据可以保存在对象存储中,同时可以使用高性能的 SQL 引擎(如 Spark、TrinoDremio)和数据仓库(如 SnowflakeRedshift)进行查询。Iceberg 被大多数计算引擎支持这一事实,对我们如何构建数据平台有着深远的影响。

如上所述,我们建议的与 Snowflake 的集成旨在展示可以故意将用于摄取 ETL 和数据质量测试的计算移出数据仓库,并将数据仓库保留用于大规模分析作业和需要高性能的最后一公里查询。大规模应用时,这一理念可以转化为显著降低成本。

分支是有用的抽象

WAP 模式要求一种写入数据的位置,以避免消费者不小心读取。分支语义自然提供了一种实现此目标的方式,这也是我们使用 Nessie 在数据目录级别利用分支语义的原因。Nessie 基于 Iceberg 并依赖其时间旅行和表格分支功能。我们在代码库中做了大量工作,使得 Nessie 可以直接与 Python 配合使用。结果是,用户可以与 Nessie 目录交互,并在数据目录的不同分支中写入 Iceberg 表格,而无需依赖基于 JVM 的进程来执行写入。

更简洁的开发者体验

最后,完全基于 Python 的端到端体验显著简化了系统的设置和与之交互的过程。我们所知道的任何其他系统,都需要 JVM 或额外的托管服务来将数据写回到 Iceberg 表格中的不同分支,而在这个实现中,整个 WAP 逻辑可以在单个 lambda 函数内运行。

JVM 本身并没有什么固有的缺陷。它是许多大数据框架的核心组件,提供了一个通用 API,以便与平台特定资源进行交互,同时确保安全性和正确性。然而,从开发者体验的角度来看,JVM 带来了一定的代价。任何与 Spark 打过交道的人都知道,基于 JVM 的系统往往脆弱,容易出现神秘的错误。对于许多从事数据工作并将 Python 视为其通用语言的人来说,JVM 的优势是以可用性为代价的。

我们希望更多的人能像我们一样对可组合设计充满热情,我们希望像 Iceberg 和 Arrow 这样的开放标准能成为主流,但最重要的是,我们希望这对大家有所帮助。

就是这样。

编写更简洁、一致的代码:ChatGPT 和自动格式化工具能帮忙吗?

原文:towardsdatascience.com/write-cleaner-consistent-code-can-chatgpt-and-autoformatters-help-6e3250deb18f?source=collection_archive---------13-----------------------#2024-01-10

数据科学中的自动化

使用 ChatGPT 和自动格式化工具精炼匆忙编写的代码,你的未来自己将感谢你。

Christabelle PabalanTowards Data Science Christabelle Pabalan

·发表于Towards Data Science ·7 分钟阅读·2024 年 1 月 10 日

--

DALLE 生成的照片,作者提供

当你回顾旧代码时,只有两种情况会发生:要么你因后悔而痛苦地捂住脸,要么你默默地点头,赞赏自己编写的整洁、可读且维护良好的代码。

在这篇文章中,我们将努力实现第二种情景。

本文中的自动格式化工具和技巧将帮助你节省不必要的时间和精力,避免以后手动格式化和解读结构不清晰的代码。

我们将讨论:

  • 一个可以帮助你精炼 Python 代码并遵循最佳编码实践的提示

  • **black****autopep**这样的 Python 代码格式化库

  • 将 ChatGPT 作为提升编码实践的资源,而不仅仅是一个自动化工具

提示:最佳实践的代码重构

以下的提示可以帮助我快速优化匆忙编写的代码,并突出潜在的改进机会……

为数据科学/机器学习职位编写一份好的职位描述

原文:towardsdatascience.com/writing-a-good-job-description-for-data-science-machine-learning-bd98f29c75cb?source=collection_archive---------7-----------------------#2024-08-16

为了找到合适的候选人来填补你开放的职位,需要做的事情和避免做的事情

Stephanie KirmerTowards Data Science Stephanie Kirmer

·发布于Towards Data Science ·13 分钟阅读·2024 年 8 月 16 日

--

一位非常优秀候选人的照片,来自Thomas Butler,拍摄于Unsplash

在我的职业生涯中,我可能参与过十几次数据科学家的招聘过程,尽管我从未亲自担任过招聘经理,但我曾深度参与了其中几次职位描述的撰写。看起来这应该是件简单的事——你只是想说服人们来申请你的职位,然后你可以挑选最喜欢的那个,不是吗?

其实,事情比这更复杂。世界上大多数人都不具备某个职位的资格,而即使是那些合格的人,可能也有原因不愿意从事这个角色。这不是单向的过程;你不希望任何人都来申请,你希望最合适的人来申请,他们是那些适合这份工作的人。那么,如何在其中找到平衡呢?你应该写些什么?

这一栏目仅代表我的个人观点,并不代表我雇主的立场。我并未参与撰写我当前雇主发布的任何职位描述,无论是机器学习相关职位还是其他职位。

为什么要写职位描述?

为了弄清楚该写什么,我们来拆解一下职位描述应该做什么,不论是数据科学/机器学习职位还是其他职位。

  • 向候选人解释这个职位的内容,以及他们在这个职位上需要做的工作

  • 向候选人解释你在申请者身上寻找的资格要求

这些是最基本的职能,尽管你的职位描述发布应该还做一些其他事情:

  • 让你的组织看起来是一个吸引各种合格候选人来工作的地方

  • 描述薪酬、工作环境和福利,以便候选人决定是否值得申请

在这一点上,我们开始进入一些更主观和复杂的部分了。

在某些部分,我将为两种不同的情景提供建议:首先,对于一个数据科学/机器学习员工很少或没有的的小型组织;其次,对于一个有一些数据科学/机器学习员工的中型或大型组织。这两种情况可能会非常不同,某些领域的需求和挑战也不同。

你可能注意到我在这篇文章中经常使用“数据科学/机器学习(DS/ML)”这个术语——我认为这里的建议对于招聘数据科学家和机器学习工程师的人都适用,因此我希望在可能的情况下做到包容。抱歉,如果感觉有点笨拙。

这份工作是什么?

首先,对于任何组织,都要考虑你开放的职位是什么类型的。我曾在过去写过关于不同类型数据科学家的文章,我强烈建议你阅读一下,看看你的职位属于哪种原型。考虑这个人将如何融入你的组织,并在此过程中明确这一点。

小型组织

对于小型组织,特别是那些没有现有数据科学/机器学习能力或专业知识的组织,面临的挑战是你不知道你的机器学习工程师或数据科学家最终会做什么。你知道你希望这个人能够产生的总体结果,但你不知道他们将如何实现这些结果,因为这不是你的专业领域!

然而,你仍然需要想办法描述这个职位的职责。我建议对公司数据科学的成熟度保持诚实和透明,并解释你期望看到的结果。有足够经验和技能的候选人将能够构思他们如何解决这个问题,在面试过程中你应该要求他们做到这一点。你应该有一个针对这个人的项目或目标,否则你为什么要雇佣这个人呢?

大型组织

在这种情况下,你至少已经有几个数据科学/机器学习的员工,所以希望可以请这些人告诉你这个职位作为个人贡献者(IC)每天的工作是什么样的。问问他们!令人惊讶的是,你会发现 HR 或管理层在这种情况下竟然没有充分利用他们现有的内部专业知识。

然而,你还需要确定这位新员工是否将主要或完全从事与现有员工相同的工作,还是他们可能会填补不同类型的空缺。如果你现有的问题仅仅是缺乏足够的技能人员来完成工作,那么期望新员工担任与现有职位类似的角色是合理的。但是,如果你是为了一个非常特定的技能集而招聘(例如,出现了一个新的自然语言处理问题,而你的团队中没人对此有足够的了解),那么一定要在职位描述中明确该角色将承担的独特职责。

你需要什么?

这也引出了一个重要问题——你的候选人需要具备多少经验和哪些技能,才能成功地完成这项工作?

小型组织

  • 经验:如果这个人是你的第一个或第二个数据科学/机器学习招聘,不要 招聘没有一定工作经验的人。这些人可能会更贵,但在你的情况中,你需要的是一个能够非常自我驱动,并且已经在其他专业环境中见识过数据科学和机器学习的实践的人。这个可能不言而喻,但你几乎没有内部培训这位员工的能力,所以你需要他们已经在之前的工作中获得过相关的培训。

  • 技能要求:那么,你究竟需要寻找什么样的技能呢?为了有效实现你的目标,候选人需要具备哪些技术能力、编程语言等?除了确保他们能够使用 Python 之外,我建议如果可能的话,向行业内的其他从业者咨询,询问他们认为你的需求应该具备哪些技能。这些技能要求变化非常快,因为这是一个发展迅速的领域,所以我无法告诉你今天的招聘要求,明年你的数据科学家或机器学习工程师需要做什么。(我可以告诉你,要求博士学位几乎肯定不是正确答案。)

如果你确实要寻求建议,确保你咨询的是那些在实际工作中从事数据科学/机器学习的人,而不是那些所谓的“思想领袖”或自我推销为招聘专家的人。如果你认识的人中没有符合条件的,可以尝试通过你的网络寻找或联系数据科学/机器学习专业组织。看看其他类似职位的招聘广告,但要小心,因为这些职位的质量也可能不怎么样。

无论如何,认真对待这一点——如果你在职位描述中写下不切实际、不合理或完全无关/过时的技能要求,你会把合格的候选人拒之门外,因为他们会意识到“哦,这家公司根本不知道自己在做什么”,而这将完全违背这次招聘的初衷。

另一种选择是找到一位数据科学/机器学习的自由职业者来帮助你启动项目,而不是自己雇佣某个人。如今有很多兼职或自由职业的从业者,还有一些咨询公司可以帮助你解决这个问题。快速在 Google 上搜索“兼职数据科学家”会得到很多选择,但记得做好尽职调查。

更大的组织

  • 经验:我深信如果你的组织能够承受,应该雇佣经验较少的人并进行培训。进入该领域的新人员必须通过某种方式学习,而商业经验往往是新数据科学家技能中最大的一块空白。考虑一下,你是否真的需要招聘一位高级员工机器学习工程师,还是可以通过内部晋升并替换一个初级职位。没有绝对对错的答案,但在直接跳到招聘最资深的人之前,值得考虑一下。我们这些资深人员既昂贵又稀缺!

  • 技术技能:和职位职责一样,这是向现有团队寻求建议的时候。不要仅仅问他们使用什么技术,还要问他们如果有一个技术娴熟的人加入,能够分享相关知识,他们希望学习什么。(这些技能可以放在“可选的”或“理想的”栏目,而不是“要求”中!)你们已经有了数据科学/机器学习的技术栈,因此新加入的人需要能够适应这个技术栈,但如果有一些相关或更新的技术能够提升团队能力,这是一个很好的机会去了解并考虑是否将这些技术引入。不要陷入只要求团队中已经使用的技术,而没有考虑或重视其他技能的陷阱。

还要记住,候选人需要具备哪些能力,和他们可以从你的团队在工作中学习到的技能之间的区别。不要为了让职位听起来更有声望,或者故意排除候选人而夸大你的要求,尤其是当你的薪资与这些夸大的要求不符时,因为这会适得其反。你会排除那些可能非常适合这个职位的候选人,并且把一些过于资深的人带入候选池,他们根本不会接受你能提供的薪水。如果不是至关重要的,不要要求博士学位!(几乎从来都不是至关重要的。)

职位标题

这可能看起来微不足道,但一旦你定义了职位,发布一个职位标题的选择确实会向外界候选人发出信号,帮助他们决定是否申请这个职位。我在其他文章中提到过数据科学领域职位标题的演变,这种变化随着时间不断发生。但至少今天,我的简短建议是:

  • 数据科学家:不负责数据工程、数据管道或自己部署,尽管他们可能具备这些能力。可能会做商业智能(BI)或分析,也可能会进行模型开发。

  • 机器学习工程师:负责数据工程、数据管道和自己部署的全部或部分工作。进行模型开发,但最少或不做商业智能(BI)或分析工作。

关于职级,我会说这一点,作为一个非常粗略的经验法则,你的情况可能会有很大差异:

  • 初级或助理:刚从学校毕业,没有工作经验,可能有实习经历。

  • 无职级:可能有一到两份专业工作或 2-3 年的经验。

  • 高级:三年以上的工作经验。

此外,还有一些组织有更高的职级,而有些则没有:

  • 职员:可能有 6-10 年的专业经验。

  • 首席、高级职员等:超过这些要求。不同组织之间差异很大,实际上很难明确说明。

所以,如果你想要一个能做自己数据管道、部署和建模的人,并且不需要他们做分析,同时你希望他们有几年经验,那么你应该写“高级机器学习工程师”。如果你在寻找刚毕业的学生做一些建模和分析工作,而工程师可以处理部署等事务,那么你需要一个助理数据科学家。

这些建议可能会随着该领域的发展而有所变化。如果你真的想写类似“机器学习科学家”这样特别的职位名称,我建议你不要这么做,除非你有非常充分的理由解释为什么。这里的关键是清晰度和可查找性——使用候选人熟悉且会搜索的术语。

自我推销

现在我们可以进入你的招聘介绍部分:把你的组织宣传为一个好的工作场所,并分享你提供的薪资/福利。我们已经花了很多时间告诉候选人他们需要带来什么,以及如果他们获得这份工作需要做什么,但这并不是职位描述的全部内容。你实际上还需要宣传你的公司和部门是一个有吸引力的工作场所,以便吸引最优秀的候选人关注你们的职位。这些建议大多数适用于任何规模的组织。

不要撒谎

我在描述公司给求职者时有一些经验法则,无论是在书面形式还是面试中。最重要的一条就是:不要撒谎。不要说你们有“快节奏的文化”,却要花三周时间才能部署;不要说你们“重视工作与生活的平衡”,却没有一个团队成员在一年内请过假。还有,千万不要说“远程工作”,而实际上是“混合工作”!你可能认为你只是在加一些听起来不错的标准话术,但这些词语是有实际意义的。

感觉自己被诱骗加入一个不适合的组织是非常糟糕的。可以把它看作是卖产品——如果你承诺过多而兑现不足,也许你初期成交了,但当客户意识到自己的错误时,他们会立刻离开,心里充满不好的印象。这样,你不仅失去了这个客户,还可能让一个人在外面对你的公司持有不好的看法,并把这个经历告诉他们的整个网络。

如果你找不到一些既不虚假也不夸大其词的公司卖点,那么你需要冷静、严肃地审视你公司运营的方式。

诚实不仅能让你最终招聘到更合适的人,还能吸引那些真心希望在像你公司这样的地方工作的人。每个人对工作的需求和期望不同,并不是每个人都想在一个“拼命工作,尽情玩乐”的地方工作。公司没有一种正确的文化,接受你公司现有的文化会让你吸引到那些可能在这个环境中感到幸福的候选人。

价值多样性

另一个重要的要点是要确保并展示公司重视并包容员工多样性各个方面。你的职位描述是候选人首次了解你如何关照员工的途径,不论是保护类别还是一般的经验、背景、能力等多样性。在这种情况下,这意味着你需要非常小心地考虑用词。除非你真心实意,不要要求“专家”具备某项技能。不要说候选人必须是“摇滚明星”。这既会让那些对自己技能保持合理谦逊的候选人望而却步,也让你的公司听起来像是,嗯,有点像混蛋。

注意:我们都听过无数次的陈词滥调——“女性只有在符合所有要求时才会申请工作”,这一说法已经非常疲劳,并且因为很多原因具有问题,但它提醒我们要列出你真正需要的技能,而不是仅仅列出一堆愿望清单。

相反,使用包容性语言。我建议将你希望的资格要求写成“成功的候选人能够……”的形式,然后列出具体的行动项,比如“使用 Python 构建机器学习模型”或“使用合适的指标如召回率、精确度、MAE、RMSE 等进行模型评估”。要清晰明确,让别人能轻松地说出“哦,我能做这个”或“嗯,我做不到这个”。

如果你知道潜在候选人的群体非常单一,例如因为在你的领域中,少数族裔的人很少获得大学学位,考虑是否需要采取额外的步骤来将你的职位展示给这些候选人。花时间在多元化导向的招聘网站上发布职位,并与不同群体的专业组织分享你的职位。如果你的职位从未被多样化的个体看到,你就不会吸引到多样化的候选人来申请。

薪酬与福利

现在这应该不言而喻,但请对职位的福利和薪酬保持透明和清晰。即使法律上没有要求,也要提供一个薪酬范围。如果你所在的州没有强制要求提供薪酬范围,你可能会认为这对你来说不是问题,但实际上是的,因为拥有选择的候选人会更倾向于申请那些他们可以清楚看到薪酬与自己期望相符的职位。如果你省略了薪酬范围(或者提供一个跨度为$100k 的范围,使得该范围实际上毫无用处),这会让你看起来像在剥削员工。跟上时代,给出一个合理的薪酬范围。

此外,我之前已经提到过,但值得重复——要诚实地说明工作情况。不要把职位广告标成“远程”,然后在面试时才透露实际上是每周有三天需要到现场办公。这也是非常不好的做法,是对大家时间的粗鲁浪费。给候选人他们所需的细节,让他们能够做出明智的申请决定。

更进一步,请记住,健康保险对于在美国找工作的人来说非常重要,尽可能清楚地说明你提供的内容。如果你能列出保险公司,最好这么做;这有助于人们了解他们的医生或服务提供者是否在保险网络中。这对每个候选人来说可能不是大问题,但许多候选人,包括那些有残疾或健康问题(或有依赖人的候选人),会对此表示感谢。

结论

招聘技术岗位,包括数据科学/机器学习岗位,确实不容易。这些建议听起来可能像是你不愿意做的繁琐工作,但请考虑:替代方案是需要从成千上万的申请者中筛选出不合格的候选人,或者那些根本不会接受该职位的候选人。提前做一些工作,这样你就不会浪费自己和申请者的时间。这样做不仅更高效,也是道德的选择。申请者是有血有肉的人,应该得到相应的待遇。

总结:

  • 确定职位的职责(或者你希望看到的结果)

  • 确定所需的经验水平和技术技能要求(不是你的梦想清单,而是现实需求)

  • 写一个清晰、准确且易于搜索的职位名称

  • 不要对你的公司或职位说谎

  • 公开薪酬范围,并描述福利

祝你好运!

阅读更多我的作品,请访问 www.stephaniekirmer.com.

进一步阅读

[## DEI 招聘:如何创建包容性的职位描述

找到合适的候选人从合适的职位描述开始。正确的职位描述是那个…

www.inclusionhub.com](https://www.inclusionhub.com/articles/inclusive-job-descriptions?source=post_page-----bd98f29c75cb--------------------------------) ## 数据科学家角色的原型

数据科学岗位可能差异很大,职位发布内容并不总是清晰。你想戴什么帽子?

towardsdatascience.com ## 你的数据科学家不需要一个 STEM 博士学位

招聘数据科学家非常困难。它需要时间和精力,而且关于什么才是正确的…

towardsdatascience.com ## 机器学习工程师——他们到底做什么?

机器学习工程师对我们领域意味着新的东西吗?如果是,是什么?

towardsdatascience.com [## 为什么女性只有在完全符合要求时才申请工作

并不是因为他们缺乏信心。

hbr.org](https://hbr.org/2014/08/why-women-dont-apply-for-jobs-unless-theyre-100-qualified?source=post_page-----bd98f29c75cb--------------------------------)

用 Rust 编写 LLM:寻找高效的矩阵乘法

原文:towardsdatascience.com/writing-llms-in-rust-looking-for-an-efficient-matrix-multiplication-e9539b0cb9d3?source=collection_archive---------4-----------------------#2024-11-14

从 Karpathy 的 llm.c 开始,我不禁想:“我能用 Rust 写这个吗?”以下是我学到的经验,以及我如何编写 llm.rust。在这篇文章中,我们来解决矩阵乘法问题。

Stefano BosisioTowards Data Science Stefano Bosisio

·发布于 Towards Data Science ·阅读时长 14 分钟·2024 年 11 月 14 日

--

图片来自 GoogleDeepMindUnsplash

矩阵乘法可能是机器学习中最重要的操作。我仍然记得当我还是一名工程学学生时,在一次线性代数的课堂上,老师开始讲解矩阵、特征向量、基和正交基。我当时非常困惑,花了些时间才开始理解我们为什么如此关注矩阵和基集合,以及一个好的基对我们世界意味着什么。从那时起,我便对线性代数产生了浓厚的兴趣,并且从纯粹的计算机科学角度来看,所有那些试图在处理矩阵时变得越来越高效的算法,真的非常惊人。

特别是,我们知道矩阵-向量乘积相对简单,但当我们处理矩阵-矩阵或张量-张量乘积时,问题变得越来越复杂。从这里开始,许多方法已经被实现以优化矩阵乘法。例如,很久以前我发布了关于 DeepMind的文章……

撰写有影响力的编程文章:成功指南

原文:towardsdatascience.com/writing-powerful-programming-articles-a-guide-for-success-4739dca9f290?source=collection_archive---------8-----------------------#2024-05-31

4 年多编程文章发布的反思

Amanda Iglesias MorenoTowards Data Science Amanda Iglesias Moreno

·发表于Towards Data Science ·阅读时间 6 分钟·2024 年 5 月 31 日

--

图片来源:unsplash.com/es/@clemhlrdt

在 2019 年夏天,我决定开始写关于编程和数据科学的文章。我的主要动机是将我两大热情融合在一起:写作和数据科学。此外,我也视其为一个很好的机会,能让我学习并将职业转向这一领域,而这个领域当时与我的工作相距甚远。当时我在汽车行业工作,尽管我那时使用的许多工具后来在数据科学家的职业生涯中派上了用场,但有很多工具我在工作中并没有用过,只是通过博客和在线课程不断阅读到。创建博客将让我学到更多。所以我想,为什么不试试看呢?

接下来,我将基于过去几年的经验,给你一些有助于你在编程和数据科学领域发展写作职业的建议。让我们开始吧!

独立完成:不要仅仅追逐粉丝

我写作时的一个重要建议是创建一个个人博客。不要只关注获得粉丝;相反,专注于创作代表你热爱做的事情的内容。稍后,我将讨论根据我的经验,哪些类型的文章更容易获得接受……

XPER:揭示预测性能的驱动因素

原文:towardsdatascience.com/xper-unveiling-the-driving-forces-of-predictive-performance-309ce4f10b0a?source=collection_archive---------12-----------------------#2024-09-10

一种分解您喜爱性能指标的新方法

Sébastien SaurinTowards Data Science Sébastien Saurin

·发表于Towards Data Science ·9 分钟阅读·2024 年 9 月 10 日

--

图片由Sira Anamwong提供,来源于123RF

与 S. Hué、C. Hurlin 和 C. Pérignon 共同撰写。

I - 从解释模型预测到解释模型性能

敏感的人工智能系统的可信度和可接受性在很大程度上取决于用户理解相关模型的能力,或者至少能够理解其预测结果。为了揭开不透明人工智能应用的面纱,当前常用的可解释人工智能(XAI)方法,如事后可解释性工具(例如 SHAP、LIME),能够帮助我们理解其输出生成的洞察,这些洞察现在已经被广泛理解。

除了单一预测外,本文展示了如何使用可解释性能(XPER)方法识别任何分类或回归模型的性能指标(例如 AUC、R2)的驱动因素。能够识别预测模型统计或经济性能的驱动因素是建模的核心,对于数据科学家以及根据这些模型做决策的专家来说都具有重要意义。下文所述的 XPER 库已被证明是一个高效的工具,可以将性能指标分解为各个特征的贡献。

虽然 XPER 和 SHAP 都基于相同的数学原理,但它们在本质上是不同的,目标也各不相同。SHAP 重点识别显著影响模型单个预测的特征,而 XPER 则识别对模型性能贡献最大的特征。后者的分析可以在全局(模型)层面或局部(实例)层面进行。实际上,单个预测中影响最大的特征(例如特征 A)可能不是对性能影响最大的特征。实际上,当模型做出正确预测时,特征 A 会驱动单个决策,但当模型发生错误时也会如此。从概念上讲,如果特征 A 主要影响错误预测,那么在 XPER 中的排名可能低于在 SHAP 中的排名。

性能分解用于什么?首先,它可以通过提供更全面的模型内部工作原理洞察来增强任何后期可解释性分析。这使得我们能更深入地理解模型为何有效或无效。其次,XPER 可以帮助识别并解决异质性问题。通过分析单个 XPER 值,能够找出特征对性能有相似影响的子样本。然后,可以为每个子样本估算一个单独的模型,以提升预测性能。第三,XPER 有助于理解过拟合的来源。实际上,XPER 允许我们识别在训练样本中对模型性能贡献更大的特征,而这些特征在测试样本中贡献较小。

II - XPER 值

XPER 框架是一种理论上有依据的方法,基于 Shapley 值(Shapley, 1953),Shapley 值是一种源自联盟博弈论的分解方法。虽然 Shapley 值将博弈中的收益分配给玩家,XPER 值则将模型中各特征的性能度量(例如 AUC,R2)进行分解。

假设我们使用三个特征训练一个分类模型,并通过 AUC 为 0.78 来衡量其预测性能。以下是 XPER 分解的一个例子:

第一个 XPER 值 𝜙₀ 被称为基准值,代表模型在三个特征未提供任何相关信息来预测目标变量时的表现。当使用 AUC 来评估模型的预测性能时,基准值对应于随机分类。由于模型的 AUC 大于 0.50,这意味着至少有一个特征包含了有用的信息来预测目标变量。模型的 AUC 与基准值之间的差异表示特征对模型性能的贡献,而这种贡献可以通过 XPER 值进行分解。在这个示例中,分解结果表明,第一个特征是模型预测性能的主要驱动因素,因为它解释了模型的 AUC 与随机分类之间差异的一半(𝜙₁),其次是第二个特征(𝜙₂)和第三个特征(𝜙₃)。这些结果衡量了每个特征对模型预测性能的全球性影响,并按重要性从最不重要的特征(第三个特征)到最重要的特征(第一个特征)进行排名。

虽然 XPER 框架可以用来进行模型预测性能的全局分析,但它也可以用于提供实例级别的局部分析。在局部层面,XPER 值表示给定实例和特征对模型预测性能的贡献。基准值则代表在目标变量与特征独立的情况下,给定观察值对预测性能的贡献,而个别贡献与基准值之间的差异由个体 XPER 值解释。因此,个体 XPER 值可以帮助我们理解为什么某些观察值比其他观察值对模型的预测性能贡献更大,并且可以通过识别特征对不同个体的影响相似的群体,来解决异质性问题。

还需要注意的是,XPER 是模型和度量无关的。这意味着 XPER 值可以用来解释任何计量经济学模型或机器学习模型的预测性能,并分解任何性能指标,如预测准确度(AUC、准确率)、统计损失函数(MSE、MAE)或经济性能衡量(盈亏函数)。

III - Python 中的 XPER

01 — 下载库 ⚙️

XPER 方法通过 XPER 库在 Python 中实现。要计算 XPER 值,首先需要按照以下步骤安装 XPER 库:

pip install XPER

02 — 导入库 📦

import XPER
import pandas as pd

03 — 加载示例数据集 💽

为了说明如何在 Python 中使用 XPER 值,让我们通过一个具体的例子来说明。考虑一个分类问题,其主要目标是预测信用违约。数据集可以直接从 XPER 库中导入,例如:

import XPER
from XPER.datasets.load_data import loan_status
loan = loan_status().iloc[:, :6]

display(loan.head())
display(loan.shape)

由于包含的变量,这个数据集的主要目标似乎是构建一个预测模型来确定潜在借款人的“贷款状态”。换句话说,我们想要根据申请人提供的信息预测贷款申请是否会被批准(“1”)或不批准(“0”)。

# Remove 'Loan_Status' column from 'loan' dataframe and assign it to 'X'
X = loan.drop(columns='Loan_Status')

# Create a new dataframe 'Y' containing only the 'Loan_Status' column from 'loan' dataframe
Y = pd.Series(loan['Loan_Status'])

04 — 估计模型 ⚙️

然后,我们需要训练一个预测模型并衡量其性能,以计算相关的 XPER 值。为了说明,我们将初始数据集拆分为训练集和测试集,并在训练集上拟合一个 XGBoost 分类器:

from sklearn.model_selection import train_test_split

# Split the data into training and testing sets
# X: input features
# Y: target variable
# test_size: the proportion of the dataset to include in the testing set (in this case, 15%)
# random_state: the seed value used by the random number generator for reproducible results
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.15, random_state=3)

import xgboost as xgb

# Create an XGBoost classifier object
gridXGBOOST = xgb.XGBClassifier(eval_metric="error")

# Train the XGBoost classifier on the training data
model = gridXGBOOST.fit(X_train, y_train)

05 — 评估性能 🎯

XPER 库提供了一种直观且简单的方法来计算预测模型的预测性能。考虑到我们关心的性能度量是 ROC 曲线下的面积(AUC),可以通过以下方式在测试集上进行测量:

from XPER.compute.Performance import ModelPerformance

# Define the evaluation metric(s) to be used
XPER = ModelPerformance(X_train.values, 
                        y_train.values, 
                        X_test.values, 
                        y_test.values, 
                        model)

# Evaluate the model performance using the specified metric(s)
PM = XPER.evaluate(["AUC"])

# Print the performance metrics
print("Performance Metrics: ", round(PM, 3))

06 — 计算 XPER 值 ⭐️

最后,为了解释 AUC 的驱动因素,可以计算 XPER 值,如下所示:

# Calculate XPER values for the model's performance
XPER_values = XPER.calculate_XPER_values(["AUC"],kernel=False)

“XPER_values”是一个元组,包括两个元素:XPER 值和各特征的单独 XPER 值。

对于特征变量超过 10 个的用例,建议使用默认选项 kernel=True,以提高计算效率 ➡️

07 — 可视化 📊

from XPER.viz.Visualisation import visualizationClass as viz

labels = list(loan.drop(columns='Loan_Status').columns)

为了分析全局层面的驱动力,XPER 库提供了 XPER 值的条形图表示。

viz.bar_plot(XPER_values=XPER_values, X_test=X_test, labels=labels, p=5,percentage=True)

为了简化展示,特征贡献以 AUC 和其基准(即 0.5)之间的差距百分比表示,并按从大到小的顺序排列。从这张图中,我们可以看到,模型相对于随机预测器的过度表现中,超过 78% 来自于信用历史,其次是申请人收入,贡献约为 16%,共同申请人收入贷款金额期限的贡献分别不到 6%。另一方面,我们可以看到,变量贷款金额几乎对模型预测违约概率没有帮助,其贡献接近于 0。

XPER 库还提供了图形化表示,以在局部层面分析 XPER 值。首先,可以使用力图分析给定观测的性能驱动因素:

viz.force_plot(XPER_values=XPER_values, instance=1, X_test=X_test, variable_name=labels, figsize=(16,4))

上述代码绘制了观测 #10 的正(负)XPER 值,其中正值用红色(负值用蓝色)表示,同时还显示了该观测对模型 AUC 的基准(0.33)和贡献(0.46)。借款人 #10 的过度表现归因于贷款金额期限申请人收入信用历史的正 XPER 值。另一方面,共同申请人收入贷款金额产生了负面影响,减少了该借款人的贡献。

我们可以看到,虽然申请人收入贷款金额在全球层面上对 AUC 有正向影响,但这些变量对借款人#10 有负面影响。因此,分析单个 XPER 值可以识别出特征对性能有不同影响的观测值组,可能揭示异质性问题。

其次,可以在单个图中表示每个观测值和特征的 XPER 值。为此,可以依赖于蜂群图,该图将每个特征的 XPER 值作为特征值的函数进行表示。

viz.beeswarn_plot(XPER_values=XPER_values,X_test=X_test,labels=labels)

在此图中,每个点代表一个观测值。横轴表示每个观测值对模型性能的贡献,而纵轴表示特征值的大小。与之前展示的条形图类似,特征按其对模型性能的贡献从大到小排列。然而,通过蜂群图,还可以分析特征值对 XPER 值的影响。在这个例子中,我们可以看到较大的信用历史值与相对较小的贡献(绝对值)相关,而较低的值则导致较大的贡献(绝对值)。

除非另有说明,否则所有图片均由作者提供。

IV - 致谢

本库的贡献者包括:

V - 参考文献

[1] L. Shapley, n 人博弈的价值 (1953), 博弈论贡献,2:307–317

[2] S. Lundberg, S. Lee, 统一的模型预测解释方法 (2017), 神经信息处理系统进展

[3] S. Hué, C. Hurlin, C. Pérignon, S. Saurin, 衡量预测性能的驱动因素:应用于信用评分 (2023), HEC 巴黎研究论文编号 FIN-2022–1463

是的,你在“ChatGPT 时代”依然需要 NLP 技能

原文:towardsdatascience.com/yes-you-still-need-old-school-nlp-skills-in-the-age-of-chatgpt-a26a47dc23d7?source=collection_archive---------9-----------------------#2024-02-12

大型语言模型有其优势,但对于许多生产问题,简单的 NLP 技术更快、更便宜,且同样有效。

Katherine MunroTowards Data Science Katherine Munro

·发布于 Towards Data Science ·7 分钟阅读·2024 年 2 月 12 日

--

大型语言模型需要新的技能,但同样重要的是不要忘记那些老技能,比如如何准备 LLM 需要使用的文本数据。来源:Markus Winkler 在 Unsplash。

当我开始攻读计算语言学硕士时,我认识的任何人都不知道什么是自然语言处理(NLP)。就连我自己也不清楚 [1]。四年后,当我说我从事 NLP 工作时,只有一半的时间能得到一些理解 [2]。得益于媒体的广泛宣传,大多数人知道有一种叫做大型语言模型的东西,它们可以用文本做很多惊人的有用的事情。现在,我向别人解释我的工作变得容易多了(前提是我告诉他们“它基本上就是 ChatGPT”)。但最近,这也让我陷入了沉思。

我是一本 数据科学与人工智能教科书的编辑,这本书早在 2022 年就已出版(说真的,在人工智能领域,那大约有 20 年的历史了)。为了准备今年出版的第三版,我需要更新我的自然语言处理章节。当我坐下来阅读自己当时写的关于神经网络、序列到序列模型以及这个叫做“Transformers”的新技术时,我注意到一件值得注意的事:这一切都显得如此老派。那些关于统计机器学习方法的内容?真是过时了。而我写的小段代码……

YOLO — 手动实现

原文:towardsdatascience.com/yolo-by-hand-4c1ba2a9f72c?source=collection_archive---------2-----------------------#2024-06-07

机器学习 | 计算机视觉 | 物体检测

YOLO 中的数学分解

Daniel WarfieldTowards Data Science Daniel Warfield

·发表于Towards Data Science ·阅读时间 6 分钟·2024 年 6 月 7 日

--

“手动 YOLO”由 Daniel Warfield 使用 MidJourney 创作。除非另有说明,所有图像均由作者提供。

YOLO 是一个具有里程碑意义的物体检测模型,可以快速分类和定位图像中的多个物体。本文总结了 YOLO 模型中的所有关键数学操作。如果你想深入了解 YOLO 背后的直觉,查看 IAEE 文章。

## YOLO — 直观而全面的解释

最广泛使用的物体检测模型的起源。

towardsdatascience.com

第一步:定义输入

要使用 YOLO 模型,必须首先将 RGB 图像转换为 448 x 448 x 3 的张量。

图像可以拉伸到正确的维度,从而构建一个 448x448x3 的张量。狗的图片来源

我们将使用简化的 5 x 5 x 1 张量,以便数学表达式占用更少的空间。

输入被理想化为一个较小的 2D 矩阵。你可以参考我关于卷积的文章,以更好地理解这如何影响数学运算。

第二步:层归一化

通过 API 使用 Docker 进行 YOLO 推理

原文:towardsdatascience.com/yolo-inference-with-docker-via-api-cd6757ba614b?source=collection_archive---------2-----------------------#2024-07-19

学习如何通过 API 与 Docker 协同进行物体检测推理

Javier Martínez OjedaTowards Data Science Javier Martínez Ojeda

·发表于 Towards Data Science ·12 分钟阅读·2024 年 7 月 19 日

--

“通过 API 使用 Docker 进行 YOLO 推理”项目结构。图片来源:作者。

如果你想在没有 Premium Medium 账户的情况下阅读这篇文章,可以通过这个朋友链接进行阅读 😃

www.learnml.wiki/yolo-inference-with-docker-via-api/

引言

本文将解释如何使用 Docker 运行 YOLOv8 物体检测模型的推理,并如何创建一个 REST API 以便通过它来组织推理过程。为此,本文分为三个部分:如何运行 YOLOv8 推理、如何实现 API 以及如何在 Docker 容器中运行两者。

在文章中,将展示项目所需的所有概念和组件的代码实现。完整的代码也可以在我的 GitHub 仓库中找到。

为了深入了解代码及其结构,并能够轻松通过几个命令使用 Docker 运行 REST API 推理,仓库中的 README 文件详细解释了需要遵循的步骤、如何获取 API 文档以及项目的结构。

YOLOv8 推理

YOLO 的诞生旨在解决平衡训练时间与准确性的难题,并实现通过……

YOLO — 直观且详尽地解释

原文:towardsdatascience.com/yolo-intuitively-and-exhaustively-explained-83143925c7a9?source=collection_archive---------0-----------------------#2024-05-31

GorMachine Learning | 计算机视觉 | 目标检测

最广泛使用的目标检测模型的起源。

Daniel WarfieldTowards Data Science Daniel Warfield

·发布于 Towards Data Science ·阅读时间 21 分钟·2024 年 5 月 31 日

--

“Look Once”由 Daniel Warfield 使用 MidJourney 创作。所有图片均由作者提供,除非另有说明。

在这篇文章中,我们将讨论 YOLO,这篇开创性的论文为现代实时计算机视觉奠定了基础。我们将从一些相关概念的简要时间轴开始,然后逐步讲解 YOLO,以全面理解它是如何工作的。

谁会觉得这篇文章有用? 任何对计算机视觉或前沿 AI 技术感兴趣的人。

这篇文章的难度如何? 这篇文章适合技术爱好者,甚至最熟练的数据科学家也会觉得它有趣。

前提条件: 良好的标准神经网络工作原理理解。对卷积网络有一些初步的了解也会有所帮助。

YOLO 之前的计算机视觉简史

以下部分包含了在深入了解 YOLO 之前需要知道的有用概念和技术。如果你觉得自己已经很有信心,可以跳过。

计算机视觉问题的类型

你没有进行 A/B 测试。你仍然可以追溯性地模拟一次。

原文:towardsdatascience.com/you-didnt-conduct-an-a-b-test-you-can-still-simulate-one-retrospectively-21a2dd60f88f?source=collection_archive---------12-----------------------#2024-07-29

将合成(但高质量的)控制组建模为基准,以推断你在业务中所做的改变是否值得。

Tomas Jancovic (It's AI Thomas)Towards Data Science Tomas Jancovic (It's AI Thomas)

·发表于Towards Data Science ·15 分钟阅读·2024 年 7 月 29 日

--

作者:Tomas Jancovic (It's AI Thomas)

2024 年 7 月 28 日(更新于 2024 年 8 月 3 日)

B2B 业务中新定价策略的合成控制组实验(来源:Python 自制)

我们每个人都经历过这种情况。

尽管我们知道 A/B 测试是检验变化是否有效的最佳方式,但我们还是跳过了它。

幸运的是,你仍然可以通过创建合成控制组作为已实施治疗的基准,来进行所谓的准实验。

2015 年,哈佛和斯坦福的研究人员成功使用合成控制方法来估算 1990 年德国统一对西德的经济影响。

然而,这让我在思考——是否可以在商业环境中使用类似的方法?——可以。

谷歌公司研究人员已使用类似的技术,通过应用贝叶斯模型创建合成控制组,预测在没有他们…

你不知道 Jacc(ard)

原文:towardsdatascience.com/you-dont-know-jacc-ard-f2c05c7ea039?source=collection_archive---------3-----------------------#2024-07-01

当 Jaccard 相似度指数不适用于某些任务时,该怎么办

Eleanor HannaTowards Data Science Eleanor Hanna

·发表于 Towards Data Science ·10 分钟阅读·2024 年 7 月 1 日

--

最近我一直在思考我的一个常用数据科学工具,我们在 Aampe 经常使用:Jaccard 指数。它是一种相似性度量方法,你通过计算两个集合交集的大小并将其除以两个集合并集的大小来得到它。本质上,它是一个重叠度量。

给我的视觉型学习者们:

作者提供的图片

许多人(包括我自己在内)都称赞 Jaccard 指数,因为它在许多场景中非常有用,尤其是当你需要计算两个元素集合之间的相似性时。无论你是面对一个具体的应用场景,比如跨设备身份解析,还是一个更抽象的场景,比如根据历史用户行为刻画潜在的用户兴趣类别——能够量化两个事物之间共享的组件数量是非常有帮助的。

但 Jaccard 不是灵丹妙药。有时,它与其他度量结合使用比单独使用更具信息量。有时,它甚至可能会误导。

让我们仔细看看在一些情况下它为何不太合适,以及你可以选择做什么(或者同时做些什么)。

你的集合大小差异很大

问题: 当一个集合的大小比另一个集合大(假设交集大小相等)时,Jaccard 指数会受到更多的压制。

在某些情况下,你不关心两个集合是否相互相似。也许你只是想知道集合 A 是否主要与集合 B 相交。

假设你正在尝试根据浏览历史制定用户兴趣的分类法。你有一份所有访问了http://www.luxurygoodsemporium.com的用户日志,以及一份所有访问了http://superexpensiveyachts.com的用户日志(截至目前,这些链接并不活跃;希望未来没有不怀好意的人购买这些域名)。

假设在 1,000 名浏览超豪华游艇的用户中,有 900 人也浏览了一些奢侈品——但是有 50,000 名用户访问了奢侈品网站。从直觉上讲,你可能会把这两个领域视为相似。几乎所有访问游艇领域的人也去了奢侈品领域。看起来我们可能正在检测到一种潜在的“高端消费行为”维度。

但由于喜欢游艇的用户数量远小于喜欢奢侈品的用户数量,即使绝大多数购买游艇的用户也浏览了奢侈品,Jaccard 指数最终会非常小(0.018)!

该怎么做: 使用重叠系数

重叠系数是两个集合交集的大小除以较小集合的大小。正式定义为:

让我们通过可视化来看看为什么在某些情况下,使用这个方法可能比 Jaccard 方法更合适,假设问题的最极端版本:集合 A 是集合 B 的子集。

当集合 B 的大小与集合 A 非常接近时,你会得到一个相当不错的 Jaccard 相似度,因为交集的大小(即集合 A 的大小)接近并集的大小。但当你保持集合 A 的大小不变并增加集合 B 的大小时,并集的大小也会增加,结果是……Jaccard 指数急剧下降。

重叠系数并不会发生变化。它始终与最小集合的大小挂钩。这意味着即使集合 B 的大小增加,交集的大小(在这种情况下是集合 A 的整个大小)也将始终被集合 A 的大小所除。

图片来源:作者

让我们回到用户兴趣分类法的例子。重叠系数正好捕捉了我们在这里感兴趣的内容——购买游艇的用户群体与奢侈品用户群体是相关的。也许游艇网站的 SEO 做得不好,这就是为什么它不像奢侈品网站那样受到关注。使用重叠系数,你就不需要担心类似的问题会遮掩这些领域之间的关系。

小贴士:如果你只有每个集合的大小和交集的大小,你可以通过将每个集合的大小相加并减去交集的大小来求出并集的大小。像这样:

进一步阅读medium.com/rapids-ai/similarity-in-graphs-jaccard-versus-the-overlap-coefficient-610e083b877d

你的集合很小

问题:当集合大小非常小的时候,你的 Jaccard 指数分辨率较低,有时会过分强调集合之间的关系。

假设你在一家生产手机游戏的初创公司工作,你正在开发一个推荐系统,根据用户之前的游戏习惯为他们推荐新游戏。你有两个新游戏:机甲十字军:网络虚空 II:复仇囚徒,和 Freecell。

焦点小组可能不会认为这两款游戏非常相似,但你的分析显示 Jaccard 相似度为 0.4。虽然这并不显著,但它恰好在你所看到的其他成对 Jaccard 相似度的较高端——毕竟,《泡泡爆破》和《泡泡炸弹》的 Jaccard 相似度只有 0.39。 这是否意味着你的赛博朋克 RPG 和 Freecell 在推荐系统中比《泡泡爆破》和《泡泡炸弹》更为相关?

不一定。因为你仔细查看了数据,只有 3 个独特的设备 ID 记录了玩机甲十字军,只有 4 个记录了玩 Freecell,其中 2 个设备恰好都玩了这两款游戏。而《泡泡爆破》和《泡泡炸弹》每款游戏都被数百个设备访问。因为你对两个新游戏的样本量如此之小,可能的巧合重叠使得 Jaccard 相似度看起来比真实人口重叠要大得多。

图片由作者提供

该怎么做: 良好的数据卫生始终需要牢记——你可以设定一个启发式规则,等到你收集到一定样本量后,再考虑将一个集合纳入相似度矩阵。就像所有统计功效的估算一样,这其中有一定的判断成分,基于你正在处理的集合的典型大小,但请记住统计学中的一般最佳实践——较大的样本通常能更好地代表它们的总体。

但你还有另一个选择,对交集大小和并集大小进行对数转换。这种输出应仅在比较两个修改后的指数时解读。

如果你对上面的例子执行此操作,你会得到一个接近之前两个新游戏的分数(0.431)。但由于《泡泡》类型的游戏有更多的观察样本,对数转换后的交集和并集要更加接近——这意味着得分更高。

警告:这里的权衡是,当联合集包含大量元素时,你会失去一些分辨率。将一百个元素添加到一个包含千个元素的联合交集上,可能意味着 Jaccard 得分从 0.94 变为 0.99。而使用对数变换的方法可能意味着添加一百个元素后,得分仅从 0.998 变为 0.999。具体取决于你用例中的需求!

元素的频率很重要

问题: 你正在比较两组元素,但将元素合并成集合会导致信号丢失。

这就是为什么使用 Jaccard 指数来比较两篇文本并不总是一个好主意。人们可能会倾向于查看一对文档,并基于它们之间共享的标记来衡量它们的相似度。但 Jaccard 指数假设被比较的两组元素是唯一的,这样就会忽略词频的影响。而在自然语言分析中,标记的频率通常是非常重要的。

假设你在比较一本关于蔬菜园艺的书籍、《圣经》和一篇关于白尾鹿生命周期的论文。这三份文档可能都包含“deer”这个词,但“deer”这个词的相对频率在不同文档中会有显著差异。论文中“deer”一词的频率要高得多,这可能对语义的影响不同于其他文档中稀少的“deer”使用频率。你不希望相似度测量忽略掉这个信号。

该如何做: 使用余弦相似度。它不仅仅适用于自然语言处理!(但它也适用于自然语言处理。)

简而言之,余弦相似度是一种衡量两个向量在多维空间中相似度的方法(不考虑向量的大小)。一个向量在多维空间中的方向取决于用于定义空间的各维度的频率,因此频率信息是固有的。

为了便于可视化,假设我们只关心这三份文档中两个标记:“deer”和“bread”。每个文本中这些标记的出现次数不同。这些标记的频率成为我们绘制这三篇文本的维度,文本在这个二维平面上表示为向量。例如,蔬菜园艺书提到“deer”3 次,“bread”5 次,因此我们从原点绘制一条线到(3, 5)。

作者提供的图像

在这里,你需要观察向量之间的角度。θ1 表示论文与《圣经》之间的相似度;θ2,表示论文与蔬菜园艺书籍之间的相似度;θ3,表示《圣经》与蔬菜园艺书籍之间的相似度。

论文与其他两篇文本之间的角度相当大。我们认为这意味着论文在语义上与其他两篇文本相距较远——至少是相对而言。圣经和园艺书籍之间的角度相对较小,且比它们各自与论文的角度更小,所以我们认为这意味着它们之间的语义距离小于与论文之间的语义距离。

但我们这里讨论的是相似度,而不是距离。余弦相似度是将两个向量的夹角度量转化为一个从 0 到 1 的指数,具有与 Jaccard 指数相反的模式——1 表示两个组完全没有共同点,且越接近 0,两个组的相似度越高。

从技术角度讲,余弦相似度的范围可以从-1 到 1,但在这里我们使用的是频率,而频率不能小于零。所以我们限制在 0 到 1 的区间内。

余弦相似度通常应用于文本分析,就像我们上面所做的那样,但它可以推广到其他频率重要的应用场景。让我们回到奢侈品和游艇的应用场景。假设你不仅仅有一个日志,记录了每个独立用户访问了哪些网站,而且你还知道每个用户访问的次数。也许你发现,900 个同时访问过两个网站的用户中,每个用户只访问了奢侈品网站一两次,而访问游艇网站的次数却有几十次。如果我们把每个用户当作一个标记,进而视为多维空间中的一个不同维度,那么余弦相似度的方法可能会使那些关注游艇的用户与奢侈品消费者之间的距离稍微拉远一些。(注意,这里可能会遇到扩展性问题,具体取决于你考虑的用户数量。)

进一步阅读medium.com/geekculture/cosine-similarity-and-cosine-distance-48eed889a5c4

离别的思考

我仍然喜欢 Jaccard 指数。它计算简单,一般来说也很直观,而且我最终总是会使用它。那么,为什么要写一篇完全批评它的博客呢?

因为没有任何一个数据科学工具能提供关于数据的完整视图。这些不同的度量方式告诉你的是一些略有不同的信息。只要你明白这些工具实际传达的内容,你就能从这些工具输出的收敛与差异中获得有价值的信息。

从哲学上讲,我们反对“一刀切”的方法,Aampe也是如此。经过长时间对用户独特性的研究,我们意识到拥抱复杂性的价值。因此,我们认为,能够使用越多的工具越好——前提是你知道如何使用它们。

你不需要 LLM 代理

原文:towardsdatascience.com/you-dont-need-an-llm-agent-333bf0eb1019?source=collection_archive---------2-----------------------#2024-07-13

图像由作者使用 MidJourney 并购买了授权生成

观点

你可能实际上需要的是别的东西

Louis ChanTowards Data Science Louis Chan

·发布于 Towards Data Science ·阅读时长 6 分钟·2024 年 7 月 13 日

--

人们总是将目光盯住下一个闪亮的东西。FOMO(错失恐惧症)是人类天性的一部分,这同样适用于企业。就像数据科学成为每个企业分析职能的热潮一样,代理架构也是大多数 AI 雷达上的红热目标。

你有没有考虑过自己是否真的需要它?

你好,我是 Louis Chan,KPMG 全球灯塔项目的技术负责人。自从我共同创办了 KPMG 的企业级 GenAI 即服务平台——KPMG AVA——以来,已经过去一年多的时间,全球已有超过 18,000 名用户在使用我们提供的 GenAI 服务。看到企业和客户跟上最新流行语的步伐,真是个令人兴奋的时刻——从 AI、GenAI、Chat、RAG、Agent,到现在的代理架构。

这是一个新兴领域,我们大多数人(包括我)并不完全了解我们所讨论的内容。人们普遍乐观地认为,LLM 可以奇迹般地提高业务效率,而对前沿技术的影响和责任感的恐惧推动了人们渴望追求下一个被宣扬的、更好且更复杂的系统。

现实是,你并不需要代理架构,并且在你的业务中不使用它会更好。

LLM 代理与代理架构在…

当 Pandas 足够用于数据可视化时,你无需使用 Matplotlib

原文:towardsdatascience.com/you-dont-need-matplotlib-when-pandas-is-enough-for-data-visualisation-38d5680197a5?source=collection_archive---------2-----------------------#2024-07-22

由作者在 Canva 创建

一行代码即可绘制数据,使常规的 EDA 工作变得更加轻松

Christopher TaoTowards Data Science Christopher Tao

·发表于 Towards Data Science ·6 分钟阅读 ·2024 年 7 月 22 日

--

使用数据可视化库,如 Matplotlib、Seaborn 和 Plotly 是很常见的。然而,在日常的临时 EDA 分析中,我发现我们可能并不一定需要使用这些库。事实上,Pandas 库本身可能足以完成这些工作。

在本文中,我将介绍如何使用 Pandas Plot 在没有 Matplotlib 的情况下生成常见类型的图表。实际上,Pandas Plot 在背后利用了 Matplotlib 对象。然而,它的便利之处在于,我们可以通过一行代码非常轻松地从数据框中绘制图表。

当然,如果我们仅限于使用 Pandas Plot,还是有很多限制的。因此,我建议仅在足够时使用它。在最后一部分,我还会列举一些 Pandas Plot 无法解决的场景。希望本文对你有所帮助。

1. 示例数据集

由作者在 Canva 创建

通常,我的文章会从安装库开始。然而,针对 Pandas 我们可以跳过这一部分,因为它太常见了。此外,在大多数情况下……

你可能已经知道 Python 中的这个设计模式,但该何时使用它呢?

原文:towardsdatascience.com/you-may-know-this-design-pattern-in-python-but-when-to-use-it-e62c8ff7940c?source=collection_archive---------5-----------------------#2024-03-31

图片来自 PexelsPixabay

从教程到 Python 单例设计模式的实用示例

Christopher TaoTowards Data Science Christopher Tao

·发表于 Towards Data Science ·阅读时长 8 分钟·2024 年 3 月 31 日

--

如果你不再是 Python 的新手,那么有一个非常重要的编程技巧叫做“设计模式”,它是必须掌握的。设计模式通常是解决软件开发中典型问题和需求的最佳实践和最有效的方法。

在本文中,我将介绍一种最流行的设计模式之一——单例模式。它是一种特殊的类定义方式,确保一个类在任何时候只能有一个实例。

我将从如何以标准方式编写单例类开始。接下来,本文的主要重点是为你展示一些典型且实用的代码示例。因此,我们将了解什么时候使用它,以及这种设计模式的最佳实践是什么。

1. 如何编写一个基本的单例模式

图片来自 eko pramonoPixabay

在编写单例类之前,让我们先看看一个普通类。这样,稍后我们就能将其与单例进行比较。

1.1 一个普通类

《15 分钟了解如何在商业中使用因果推断(含安慰剂测试)》

原文:towardsdatascience.com/your-15-minute-guide-on-using-causal-inference-in-business-with-placebo-tests-102b5bed7c95?source=collection_archive---------3-----------------------#2024-07-15

“相关性不等于因果关系。”那么,让我们来计算因果关系吧。

Tomas Jancovic (It's AI Thomas)Towards Data Science Tomas Jancovic (It's AI Thomas)

·发表于 Towards Data Science ·18 分钟阅读·2024 年 7 月 15 日

--

作者:Tomas Jancovic (It's AI Thomas)

2024 年 7 月 15 日(更新于 2024 年 7 月 24 日,增加了风险因素示例)

包含所有变量的因果机器学习模型(来源:本人在 Python 中的制作)

医生使用临床因果推断和安慰剂等技术来判断药物是否真的有效。

然而,因果推断、因果机器学习和因果 AI,正被像 微软、TripAdvisor 和 Uber 这样的企业广泛应用于解决商业问题,因为它们帮助企业突破简单的相关性分析。

你可能以前听说过:“相关性不等于因果关系。”

相关性(r)是一个范围从 0 到 1 的值,用来显示两个或多个变量如何仅仅一起变化。

但如果相关性不足以说明问题,那么因果关系是什么,我们又该如何计算它呢?

这就是因果推断建模发挥作用的地方。

受临床研究和医学的启发,我们可以弄清楚到底是什么因素影响了我们的业务变量,比如 KPI 等

你的人工智能模型并非客观

原文:towardsdatascience.com/your-ai-model-is-not-objective-aaaf92d47f05?source=collection_archive---------13-----------------------#2024-06-28

观点

在这里我们探讨人工智能模型中的主观性问题,以及你为何应该关注这个问题

Paul HiemstraTowards Data Science Paul Hiemstra

·发表于 Towards Data Science ·阅读时间 4 分钟·2024 年 6 月 28 日

--

最近我参加了一个会议,会议的一张幻灯片让我印象深刻。幻灯片提到,他们正在开发一个人工智能模型来取代人类决策,并且该模型被称为“客观的”,与人类决策形成对比。经过一段时间的思考,我强烈反对这个说法,因为我觉得这会让我们与为其创建这些模型的人群产生隔阂,这反过来又限制了我们能够产生的影响。

在这篇观点文章中,我想解释我与人工智能和客观性之间的分歧来源,以及为何“客观性”的关注会对那些希望在现实世界产生影响的人工智能研究者构成问题。这反映了我最近通过研究得出的见解,解释了为什么许多人工智能模型未能有效实施。

图片由 Vlad Hilitanu 提供,来源于 Unsplash

数学如何与现实相接触

为了阐明我的观点,我们需要对“客观性”到底是什么意思达成一致。在这篇文章中,我使用以下 客观性 的定义:

表达或处理事实或条件时,应以未经过个人情感、偏见或解读的方式感知,无任何扭曲

对我来说,这一定义揭示了我对数学深深喜爱的一个方面:在数学系统的范围内,我们可以客观地推理出真相是什么,事物是如何运作的。这对我有很大的吸引力,因为我发现社交互动和情感非常具有挑战性。我觉得,如果我足够努力,我可以理解数学问题,而现实世界则显得更加令人畏惧。

由于机器学习和人工智能是基于数学(主要是代数)构建的,因此很容易将这种客观性延伸到这个领域。我确实认为,作为一个数学系统,机器学习可以被视为客观的。如果我降低学习率,我们应该能从数学上预测这对最终人工智能的影响。然而,随着我们的机器学习模型变得越来越大且更多是“黑箱”,配置它们已经越来越成为一门艺术而非科学。如何提升模型性能的直觉可能是人工智能研究人员的一种强大工具。这听起来非常接近“个人的感受、偏见或解释”。

但主观性真正体现的地方是在人工智能模型与现实世界的互动中。一个模型可以预测患者患癌症的概率,但如何与实际的医疗决策和治疗相互作用,却包含了大量的情感和解释。治疗对患者的影响是什么?治疗是否值得?患者的心理状态如何?他们能承受治疗吗?

但主观性并不仅仅体现在人工智能模型结果应用于现实世界时。在构建和配置模型的过程中,我们需要做出许多与现实相互作用的选择:

  • 我们应当将哪些数据包含在模型中,哪些不包含?我们决定哪些患者是异常值?

  • 我们应该使用哪种指标来评估我们的模型?这如何影响我们最终创建的模型?哪种指标能引导我们走向现实世界的解决方案?有没有一个指标能做到这一点?

  • 我们定义的实际问题是什么,我们的模型应该解决什么?这将影响我们在人工智能模型配置方面的决策。

因此,当现实世界与人工智能模型互动时,主观性就会大量介入。这不仅适用于我们做出的技术选择,也适用于模型结果与现实世界互动的方式。

那么,为什么这很重要呢?

根据我的经验,将人工智能模型应用于现实世界的一个关键限制因素是与利益相关者的密切合作。无论是医生、员工、伦理学家、法律专家还是消费者。这种缺乏合作的情况部分源于我在许多人工智能研究人员中看到的孤立倾向。他们专注于自己的模型,从互联网和论文中吸收知识,并尽力创建最好的人工智能模型。但他们专注于模型的技术层面,沉浸在他们的数学泡沫中。

我觉得,认为 AI 模型是客观的信念使得 AI 研究人员确信这种孤立主义是可以接受的,模型的客观性意味着它可以应用于现实世界。但现实世界充满了“情感、偏见和解读”,使得影响这个现实世界的 AI 模型也会与这些“情感、偏见和解读”产生互动。如果我们想要创建一个在现实世界中产生影响的模型,就需要融入现实世界的主观性。这需要围绕你的 AI 研究建立一个强大的利益相关者社区,探讨、交流和辩论所有这些“情感、偏见和解读”。这要求我们 AI 研究人员走出自我设限的数学壳。

注意: 如果你想了解更多关于以更加整体和协作的方式进行研究的内容,我强烈推荐 Tineke Abma 的研究作品,例如这篇论文

如果你喜欢这篇文章,你可能也会喜欢我其他的一些文章:

你的公司需要小型语言模型

原文:towardsdatascience.com/your-company-needs-small-language-models-d0a223e0b6d9?source=collection_archive---------0-----------------------#2024-12-26

由 Stable Diffusion 生成的图像

当专用模型超过通用模型时

Sergei SavvovTowards Data Science Sergei Savvov

·发表于 Towards Data Science ·12 分钟阅读·2024 年 12 月 26 日

--

“更大总是更好”——这一原则在 AI 领域根深蒂固。每个月,更多的参数和更大的模型被创造出来。公司甚至为此建立了$100 亿的 AI 数据中心。但是,这真的是唯一的方向吗?

NeurIPS 2024 会议上,OpenAI 的联合创始人 Ilya Sutskever分享了一个观点:“我们所知的预训练将无可避免地结束”。看起来规模化时代即将结束,这意味着现在是时候集中精力改进现有的方法和算法了。

最有前景的领域之一是使用最多 10B 参数的小型语言模型(SLMs)。这种方法在行业中真正开始起飞。例如,Hugging Face 的 CEO Clem Delangue,预测最多 99%的使用案例可以通过 SLMs 来解决。YC 的最新创业请求中也可以看到类似的趋势:

拥有大量参数的巨型通用模型非常令人印象深刻。但它们也非常昂贵,且往往面临延迟和隐私问题。

在我上一篇文章“你真的需要托管的 LLM 吗?”中,我曾经想过你是否需要自托管的模型。现在我更进一步,提出一个问题:你根本需要 LLM 吗?

文章的“简短”总结。

在本文中,我将讨论为什么小型模型可能是您企业所需的解决方案。我们将探讨它们如何减少成本、提高准确性,并保持对您数据的控制。当然,我们还将诚实地讨论它们的局限性。

成本效益

大型语言模型(LLM)的经济学可能是企业最痛苦的话题之一。然而,这个问题远不止如此:它包括对昂贵硬件的需求、基础设施成本、能源成本和环境后果。

是的,大型语言模型在其能力上令人印象深刻,但它们的维护成本也非常高。您可能已经注意到基于 LLM 的应用程序订阅价格的上涨?例如,OpenAI 最近宣布的每月$200专业版计划就是成本上升的信号。而且,很可能竞争对手也会将价格提高到这些水平。

专业版计划,$200

Moxie 机器人故事是这一观点的一个很好的例子。Embodied 为孩子们创造了一个优秀的伴侣机器人,售价为$800,使用了 OpenAI API。尽管产品取得了成功(孩子们每天发送 500 到 1000 条消息!),但由于 API 的高运营成本,公司正在关闭。现在,成千上万的机器人将变得无用,孩子们将失去他们的朋友。

一种方法是针对您的特定领域对小型语言模型进行微调。当然,它并不能解决“世界上所有的问题”,但它能完美地应对分配给它的任务。例如,分析客户文档或生成特定报告。与此同时,小型语言模型在维护上更具经济性,消耗的资源更少,所需的数据量更小,并且可以在更加简朴的硬件上运行(甚至是智能手机)。

不同参数量模型的使用对比。来源 1来源 2来源 3来源 4

最后,我们不能忽视环境因素。在 《碳排放与大规模神经网络训练》 文章中,我发现了一些让我惊讶的统计数据:训练 GPT-3(拥有 1750 亿参数)所消耗的电力相当于美国普通家庭 120 年的用电量。它还 排放了 502 吨 CO₂,相当于一百多辆汽油车一年的排放量。而这还不包括推理成本。相比之下,部署像 7B 这样的较小模型,仅需消耗大型模型 5% 的电力。那最新的 o3 版本呢?

模拟 o3 CO₂ 排放。来源.

💡提示: 不要盲目跟风。在解决任务之前,先计算使用 API 或自己的服务器的成本。考虑这样的系统扩展性,以及使用 LLM 的合理性。

专业任务表现

既然我们已经讨论了经济性,接下来谈谈质量。自然,几乎没有人愿意仅仅为了节省成本而在解决方案的准确性上做出妥协。但即便如此,SLM 也有其独特的优势。

行业内内容审核表现。比较 SLM 和 LLM 在行业内内容审核任务中的准确性、召回率和精度表现。在所有子版块中,表现最好的 SLM 在准确性和召回率上超越了 LLM,而 LLM 在精度上则超过了 SLM。来源

许多研究表明,对于高度专业化的任务,小型模型不仅能够与大型语言模型(LLMs)竞争,甚至往往超过它们。让我们来看几个有代表性的例子:

  1. 医学领域: Diabetica-7B 模型(基于 Qwen2–7B)在与糖尿病相关的测试中达到了 87.2% 的准确率,而 GPT-4 显示为 79.17%,Claude-3.5 则为 80.13%。尽管如此,Diabetica-7B 的体积比 GPT-4 小了几十倍,而且 可以在消费者级 GPU 上本地运行

  2. 法律领域: 一个仅有 0.2B 参数的 SLM 在合同分析中的准确率达到了 77.2%(GPT-4 为约 82.4%)。此外,对于识别用户协议中的“不公平”条款等任务,SLM 甚至在 F1 指标上超越了 GPT-3.5 和 GPT-4

  3. 数学任务: Google DeepMind 的研究表明,训练一个小型模型 Gemma2–9B,使用另一个小型模型生成的数据,比使用来自更大模型 Gemma2–27B 的数据训练效果更好。较小的模型往往能更好地专注于细节,而不会像大型模型那样“试图通过所有知识来显示自己”。

  4. 内容审核:LLaMA 3.1 8B 超越了GPT-3.5,在准确性(提高了 11.5%)和召回率(提高了 25.7%)方面表现更好,尤其是在审核 15 个热门子版块的内容时。即使在 4 位量化的情况下,也成功减少了模型的大小。

针对 PubMedQA 的指令调优领域 SLM 与 LLM 的比较。来源

我将更进一步,分享一个个人案例:我正在开发一个心理支持产品,我们每天处理来自用户的超过一千条消息。用户可以通过聊天发送消息并获得回复。每条消息首先会被分类到以下四类之一:

消息分类方案。

  • SUPPORT — 关于应用程序如何工作的提问;我们通过文档进行回答。

  • GRATITUDE — 用户感谢机器人;我们只需发送一个“点赞”。

  • TRY_TO_HACK — 用户请求的内容与应用程序的目的无关(例如,“写一个 Python 函数”)。

  • OTHER — 所有其他消息,我们会进一步处理。

之前,我使用了 GPT-3.5-turbo 进行分类,后来切换到 GPT-4o mini,花费了大量时间更改提示。但是,我仍然遇到错误。因此,我决定尝试经典方法:TF-IDF + 简单分类器。训练时间不到一分钟,宏观 F1 得分提高到了 0.95(相比之下,GPT-4o mini 为 0.92)。模型大小仅为 76MB,当应用于 200 万条处理过的消息(我们的实际数据)时,节省的成本非常可观:基于 GPT 的解决方案大约需要 500 美元,而经典方法几乎不需要费用

准确性、速度和成本比较表:GPT-4o mini 与 TF-IDF 模型。

我们的产品中有许多这样的“小”且简单的任务。我相信你们的公司也可能会发现类似的情况。当然,大模型适合快速启动,特别是在没有标注数据且需求不断变化的情况下。但对于那些定义明确、稳定的任务,准确性和最小成本是关键,专用且简单的模型(包括经典方法)往往能提供更有效的解决方案。

💡提示:使用 LLM 进行原型设计,当任务变得清晰且稳定时,再切换到更小、更便宜、更精确的模型。这种混合方法有助于保持高质量,显著降低成本,并避免通用模型的冗余。

安全性、隐私和合规性

通过 API 使用 LLMs,你实际上是将敏感数据交给外部提供商,增加了数据泄漏的风险,并使得遵守严格法规(如 HIPAA、GDPR 和 CCPA)变得更加复杂。OpenAI 最近关于引入广告的公告进一步凸显了这些风险。你的公司不仅失去了对数据的完全控制,还变得依赖于第三方的服务水平协议(SLA)。

当然,可以在本地运行大型语言模型(LLM),但其部署和扩展的成本(数百 GB 的内存、多个 GPU)往往超出合理的经济限制,并且使得快速适应新的监管要求变得困难。你可以忘记在低端硬件上启动它。

云 API 风险与设备上 SLM 优势比较

这正是“小型模型”重新发挥作用的地方:

1. 简化审计

SLM 较小的体积降低了进行审计、验证和定制以满足特定法规的门槛。更容易理解模型如何处理数据,实现自定义加密或日志记录,并向审计员展示信息从未离开过受信任的环境。作为一家医疗公司创始人,我深知这一任务有多么具有挑战性和重要性。

2. 在隔离和低端硬件上运行

大型语言模型(LLMs)在隔离的网络段或智能手机上高效“部署”十分困难。然而,考虑到其较低的计算需求,简化语言模型(SLMs)几乎可以在任何地方运行:从私有网络中的本地服务器到医生或检查员的设备。根据 IDC 的预测到 2028 年,超过 9 亿部智能手机将能够本地运行生成性 AI 模型

3. 新法规更新与适应

法规和法律经常变化——紧凑型模型可以在数小时内进行微调或调整,而不是几天。这使得能够快速响应新的要求,而不需要进行大规模的基础设施升级,这是大规模 LLMs 的常见特征。

4. 分布式安全架构

与 LLMs 的单体架构不同,LLMs 将所有安全组件“集成”到一个大型模型中,而 SLMs 则允许创建一个分布式安全系统。每个组件:

  • 专注于特定任务。

  • 可以独立更新和测试。

  • 与其他组件分开扩展。

例如,一个医疗应用可以使用三个模型的级联:

  1. 隐私守护者(2B)——掩盖个人数据。

  2. 医学验证器(3B)——确保医学准确性。

  3. 合规检查器(1B)——监控 HIPAA 合规性。

较小的模型更容易验证和更新,使整体架构更加灵活和可靠。

数据隐私特性比较

💡提示:如果你所在的领域受到严格监管,可以考虑使用 SLMs。密切关注数据传输政策和监管环境变化的频率。如果你的专业领域是医疗、金融或法律,我推荐使用 SLMs。

AI 代理:完美的应用场景

还记得旧的Unix 哲学:“做一件事,并把它做得很好”吗?现在似乎我们又回到了这一原则,只不过是在人工智能的背景下。

Ilya Sutskever 最近在 NeurIPS 上的声明——“我们所知道的预训练将毫无疑问地结束”以及下代模型将“以真实方式具备代理能力”——只会进一步确认这一趋势。Y Combinator 甚至预测,AI 代理可能创造一个比 SaaS 市场大 10 倍的市场

例如,目前已有12%的企业解决方案采用基于代理的架构。此外,分析师预测,代理将成为 AI 转型的下一个浪潮,不仅能影响 4000 亿美元的软件市场,还能影响10 万亿美元的美国服务经济

而 SMLs 是这个角色的理想候选者。也许单个模型非常有限,但这样的多个模型——可以逐步解决复杂的任务。更快、更高质量、更便宜。

让我们来看一个具体的例子:假设你正在构建一个系统来分析金融文档。你可以将任务拆分成多个专门的代理,而不是使用一个大模型:

专门代理之间的信息流动示例。

而这种方法不仅更具成本效益,还更可靠:每个代理专注于自己最擅长的领域。更便宜、更快、更好。是的,我再次重复。

为了支持这一点,让我列举几个公司:

  1. H 公司在种子轮融资中筹集了 1 亿美元,旨在开发基于 SLMs 的多代理系统(2-3B 参数)。他们的代理 Runner H(3B)完成任务的成功率为 67%,相比之下,Anthropic 的 Computer Use 为 52%,且成本显著更低

  2. Liquid AI最近获得了 2.5 亿美元的融资,专注于构建高效的企业模型。他们的模型(1.3B 参数)超越了所有类似规模的现有模型。同时,他们的 LFM-3B 在性能上与 7B 甚至 13B 模型不相上下,同时需要更少的内存

  3. Cohere推出了 Command R7B,这是一款专门针对 RAG 应用的模型,甚至可以在 CPU 上运行。该模型支持 23 种语言,并与外部工具集成,在推理和问答任务中表现出最顶级的结果。

  4. 贵公司名称也可以加入这个名单。我不仅仅是这么说的——在我工作的公司Reforma Health,我们正在开发针对各种医疗领域的专用 SLM。做出这一决定是因为需要遵守 HIPAA 规定以及医疗信息处理的具体要求。我们的经验表明,高度专用的 SLM 可以成为显著的竞争优势,尤其是在受监管的领域。

这些例子突显了以下几点:

  • 投资者相信专用小型模型的未来。

  • 企业客户愿意支付高效的解决方案,而不需要将数据发送给外部供应商。

  • 市场正在转向“智能”专用代理,而不再依赖于“通用”大型模型。

💡提示:从识别项目中的重复任务开始。这些任务最适合开发专用的 SLM 代理。通过这种方式,你将避免为 LLM 的过度能力支付过多费用,并能更好地掌控流程。

SLM 与 LLM 相比的潜在局限性

虽然我在整篇文章中都在赞扬小型模型,但公平地说,也应指出它们的局限性。

1. 任务灵活性的局限

SLM 的最大限制是其狭窄的专用性。与可以处理广泛任务的 LLM 不同,SLM 仅在它们经过训练的特定任务中表现出色。例如,在医学领域,Diabetica-7B 在糖尿病相关测试中优于 LLM,但其他医学领域则需要额外的微调或全新的架构。

LLM 与 SLM:灵活性与专用性。

2. 上下文窗口的限制

与可以处理高达 1M tokens 的较大模型(如Gemini 2.0)不同,SLM 的上下文长度较短。尽管近期小型 LLaMA 3.2 模型(3B, 1B)已具有 128k tokens 的上下文长度,但有效的上下文长度往往并非如宣传所称:模型通常无法保持文本开头与结尾之间的“联系”。例如,SLM 无法高效处理多年的病人医疗历史或大量法律文件。

不同模型最大上下文长度的比较。

3. 新兴能力差距

许多“新兴能力”只有在模型达到某个规模门槛时才会显现。SLM通常无法达到进行高级逻辑推理或深度上下文理解所需的参数水平谷歌研究的一项研究通过数学问题展示了这一点:小型模型在基础算术方面存在困难,而较大模型则能突然展示出复杂的数学推理能力。

然而,Hugging Face 最近的研究表明 测试时计算扩展可以部分弥合这一差距。通过使用迭代自我优化或采用奖励模型等策略,小型模型可以在复杂问题上“思考更长时间”。例如,在延长生成时间的情况下,小型模型(1B 和 3B)在 MATH-500 基准测试中超过了它们的大型模型(8B 和 70B)。

💡提示: 如果您在一个任务每周都在变化、需要分析大量文档或涉及解决复杂逻辑问题的环境中工作,较大的 LLM 通常更可靠和多功能。

结束语

与我在上一篇文章中讨论的选择OpenAI 与自托管 LLM 之间的平衡一样,这里也没有“一刀切”的解决方案。如果您的任务涉及持续变化、缺乏精确的专业化,或需要快速原型开发,LLM 将提供一个轻松的起点。

然而,随着时间的推移,当您的目标变得更加明确时,转向紧凑、专业化的SLM 代理可以显著降低成本、提高准确性,并简化合规性要求

从 LLM 的快速原型开发转向优化的 SLM 代理生态系统。

SLM 并非为了跟随潮流而改变范式,而是一种务实的方法,使您能够更准确、经济地解决特定问题,而无需为不必要的功能支付过多费用。您不需要完全放弃 LLM——您可以逐步用 SLM或甚至经典的 NLP 方法替换其中的某些组件。所有这些取决于您的指标、预算和任务的性质。

一个很好的例子是 IBM,它采用了多模型策略,将较小的模型用于不同的任务。正如他们所指出的:

更大并不总是更好,因为专业化模型在基础设施要求较低的情况下,通常超过通用模型的表现。

最终,成功的关键是适应。从一个大型模型开始,评估它在何处表现最佳,然后优化您的架构,以避免为不必要的能力支付过高费用,并确保数据隐私不受影响。这种方法使您能够结合两者的优势:在初期阶段,LLM 的灵活性和多功能性,以及在成熟产品阶段,SLM 的精确和成本效益。

如果您有任何问题或建议,请随时在LinkedIn上与我联系。

免责声明:本文中的信息截至 2024 年 12 月,但请注意此后可能会发生变化。

除非另有说明,所有图片均由作者提供。

你的数据质量检查远没有你想象的那么有效

原文:towardsdatascience.com/your-data-quality-checks-are-worth-less-than-you-think-c8bd181a1327?source=collection_archive---------7-----------------------#2024-11-20

如何在你的数据质量项目中创造超额价值

Chad IsenbergTowards Data Science Chad Isenberg

·发表于 Towards Data Science ·5 分钟阅读·2024 年 11 月 20 日

--

图片来源:Wolfgang WeiserUnsplash

在过去的几年里,数据质量和可观察性成为了热门话题。这个领域有着大量的解决方案(按顺序排列,不完全列举):

无论这些工具的具体特性如何,它们都有一个共同的目标:提高数据质量问题的可视化,减少数据事件的数量,并增加信任。然而,尽管进入门槛较低,数据质量程序仍然很难成功实施。我相信有三个简单的改进措施可以提升你的成果。让我们深入了解!

提示 1:专注于流程失败,而不是坏记录(在可以的情况下)

对于工程思维的人来说,可能很难接受一些“坏”记录不仅会流入你的系统,甚至会穿过你的系统,而这可能是可以接受的!请考虑以下几点:

  1. 坏记录在源头修正后会被清除吗…

你的文档正在告诉你什么是相关的:通过链接实现更好的 RAG

原文:towardsdatascience.com/your-documents-are-trying-to-tell-you-whats-relevant-better-rag-using-links-386b7433d0f2?source=collection_archive---------3-----------------------#2024-09-21

文档数据集本身已经具有结构,应该加以利用。

Brian GodseyTowards Data Science Brian Godsey

·发表于 Towards Data Science ·13 分钟阅读·2024 年 9 月 21 日

--

图片由 Jayne Harris 提供,来源于 Unsplash

构建增强检索生成(RAG)应用程序存在多层次的挑战。文档检索是 RAG 工作流中的重要部分,它本身就是一个复杂的过程,可以根据具体应用场景采用不同的方法。

RAG 系统很难找到与微妙输入提示相关的最佳文档集,特别是在完全依赖向量搜索来寻找最佳候选文档时。然而,往往是文档本身在告诉我们在哪里可以找到更多相关信息——通过引用、交叉引用、脚注、超链接等。在本文中,我们将展示一种新的数据模型——关联文档——如何通过使我们能够解析并保留这些直接指向其他文本的引用,从而解锁性能改进,并使它们可以同时被检索,无论这些引用是否被向量搜索忽视。

AI 捕捉复杂性,但无法捕捉结构

在回答需要来自不同文档的支持性细节的复杂或微妙问题时,RAG 系统通常难以找到所有相关的文档,从而无法提供充分且完整的回答。然而,我们仍几乎完全依赖文本嵌入和向量相似度来定位和检索相关文档。

一个常被低估的事实:在解析、分块和嵌入文本的过程中,很多文档信息都会丢失。文档结构——包括章节层级、标题、脚注、交叉引用、引文和超链接——几乎在典型的文本到向量工作流程中完全丧失,除非我们采取特定的措施来保留它们。当结构和元数据告诉我们哪些文档与我们正在阅读的内容直接相关时,为什么我们不保留这些信息?

特别地,在典型的分块和嵌入过程中,链接和引用通常会被忽略,这意味着它们无法被 AI 用来帮助回答查询。但是,链接和引用是有价值的信息片段,通常指向更有用的文档和文本——那么,为什么我们不在查询时检查这些目标文档,以防它们有用呢?

程序化解析和跟随链接与引用并不困难,在本文中我们展示了一种简单而强大的实现,专为 RAG 系统设计。我们展示了如何使用文档链接来保留文档片段之间已知的连接,而这些连接通常是向量嵌入和检索无法实现的。

文档连接在向量空间中丢失

向量存储中的文档本质上是嵌入到高维向量空间中的知识片段。这些向量本质上是 LLM 的内部“语言”——给定一个 LLM 及其所有的内部参数值,包括先前的上下文和状态,一个向量是模型生成文本的起点。因此,向量存储中的所有向量都是 LLM 可能用来生成响应的嵌入文档,同样,我们也将提示嵌入到向量中,然后用它们在语义向量空间中搜索最近的邻居。这些最近的邻居对应的文档很可能包含能够回答提示的信息。

在向量存储中,向量的相似度在语义上表示文档的相似性,但除了相似性之外,并没有真正的连接概念。然而,彼此接近的文档(通常是一起检索的)可以被视为这些知识片段之间的一种连接,形成一个隐式的知识图谱,其中每个文本片段与其最近的邻居相连接。从这个意义上构建的图谱不会像大多数知识图谱那样是静态或僵化的;它会随着新文档的添加或搜索参数的调整而变化。因此,这并不是一个完美的比较,但这个隐式图谱可以作为一个有用的概念框架,帮助我们理解在 RAG 系统中,文档检索是如何运作的。

就现实世界的知识而言——与向量表示相比——语义相似性只是文本片段可能相关的许多方式之一。即使在计算机和数字数据表示出现之前,我们也已经将知识连接了几个世纪:词汇表、索引、目录、目录表、字典和交叉引用都是连接知识片段的方式。在软件中实现这些非常简单,但它们通常没有包含在向量存储、RAG 系统和其他生成 AI 应用中。我们的文档正在告诉我们其他哪些知识是重要且相关的;我们只需要为我们的知识库提供理解和跟随这些连接的能力。

通过文档链接连接知识

我们已经开发了文档链接,以应对文档告诉我们哪些其他知识相关,但我们的向量存储未能捕捉到这一点,导致文档检索过程出现问题。文档链接是一种简单而强大的方法,用于表示文档之间的定向连接。它概括了我们发现和浏览知识的所有传统方式,无论是通过目录、词汇表、关键字——当然,最容易让程序化解析器跟随的:超链接。这种文档链接的概念允许创建不对称的关系,或者可以用定性元数据标记,供过滤或其他目的使用。链接不仅易于构思和操作,而且能有效扩展到大型动态数据集,支持强大且高效的检索。

链接的数据模型

作为一种数据类型,文档链接非常简单。链接信息与文档向量一起作为元数据存储。这意味着,检索给定文档时,自动检索与该文档相关的链接信息。外部链接指向在文档上下文中可能有用的更多信息,内部链接则显示哪些其他文档可能受到给定文档的支持,双向(或无向)链接可以表示其他类型的连接。链接还可以标记附加的元数据,提供定性信息,用于链接或文档的过滤、排名和图遍历算法。

如在文章《通过消除边缘扩展知识图谱》中更详细地描述,我们并不像典型的图数据库实现那样单独存储每个链接,而是采用链接类型和链接组作为中间数据类型,这大大减少了在图遍历过程中对存储和计算的需求。这种实现方式在例如两个文档组密切相关时具有很大优势。

假设我们有一组关于西雅图市的文档(称为 A 组),还有另一组提到西雅图的文档(B 组)。我们希望确保提到西雅图的文档能够找到所有关于西雅图市的文档,因此我们希望将它们链接起来。我们可以将 B 组中的所有文档链接到 A 组中的所有文档,但除非这两组很小,否则这样做会产生大量的连接!我们处理这个问题的方法是创建一个表示关键词“西雅图”(kw:seattle)的链接类型对象,然后创建从 B 组中的文档到这个 kw:seattle 对象的有向链接,同时创建从 kw:seattle 对象到 A 组中文档的链接。这样,每个文档只需要存储一个链接,大大减少了需要存储的链接数,而且没有丢失任何信息。

在检索过程中使用文档链接

RAG 系统中检索过程的主要目标是找到一组足够回答给定查询的文档。标准的向量搜索和检索方法会找到与查询在语义上最“相关”的文档,但如果文档的整体内容与查询内容不紧密匹配,可能会遗漏一些支持性文档。

例如,假设我们有一组与西雅图相关的文档集合,如上所述。我们有以下关于太空针塔的问题,这是西雅图的一个著名地标:

“太空针塔附近有什么?”

从这个提示开始的向量搜索将直接检索提到太空针塔的文档,因为从语义内容角度来看,太空针塔是提示文本中最突出的特征。提到太空针塔的文档很可能也会提到它在西雅图的位置。如果不使用任何文档链接,RAG 系统将不得不主要使用提到太空针塔的文档来回答该提示,无法保证没有直接提到太空针塔的其他有用文档也会被检索并使用。

接下来,我们基于这个太空针塔数据集和查询构建一个实际示例(有代码!)。继续阅读以了解在没有使用链接时,RAG 系统如何遗漏有用文档,然后仅通过遵循原始文档中包含的链接信息再次“找到”有用文档。

文档链接的实际应用

为了说明文档链接是如何工作的,以及它如何在其他情况下可能会被遗漏的情况下,建立文档与知识之间的联系,我们来看一个简单的例子。

我们将从包含维基百科页面文本的两个相关文档开始:一个是太空针塔页面的文档,另一个是太空针塔所在的Lower Queen Anne社区页面的文档。太空针塔文档中有一个指向 Lower Queen Anne 文档的 HTML 链接,但反过来没有链接。太空针塔文档的内容如下:

'url': 'https://en.wikipedia.org/wiki/Space_Needle'

The Space Needle is an observation tower in Seattle, Washington, 
United States. Considered to be an icon of the city, it has been 
designated a Seattle landmark. Located in the Lower Queen Anne 
neighborhood, it was built in the Seattle Center for the 1962 
World's Fair, which drew over 2.3 million visitors...

除了这两个来自真实、信息丰富的源文档外,我们还添加了四个非常简短、无信息量的文档 —— 两个提到太空针塔,两个没有提到。这些文档(及其虚假的 URL)旨在成为无关或不具信息量的文档,例如仅仅评论太空针塔和西雅图的社交媒体帖子,内容如下:

“太空针塔很高。”

并且

“Queen Anne 是一个人。”

完整的文档集包含在Colab 笔记本中。这些是 HTML 文档,我们使用BeautifulSoup4以及LangChain 的HtmlLinkExtractor进行处理,将这些链接通过add_links函数添加回Document对象,专门用于在GraphVectorStore中使用它们,这是LangChain 代码库中的相对较新功能,由我在 DataStax 的同事们贡献。所有这些都是开源的。

每个文档的处理流程如下:

from langchain_core.documents import Document
from langchain_core.graph_vectorstores.links import add_links
from langchain_community.graph_vectorstores.extractors.html_link_extractor import HtmlInput, HtmlLinkExtractor

soup_doc = BeautifulSoup(html_doc, 'html.parser')
doc = Document(
        page_content=soup_doc.get_text(),
        metadata={"source": url}
    )
doc.metadata['content_id'] = url  # the ID for Links to point to this document
html_link_extractor = HtmlLinkExtractor()add_links(doc, html_link_extractor.extract_one(HtmlInput(soup_doc, url)))

使用cassio,我们如下初始化GraphVectorStore

from langchain_openai import OpenAIEmbeddings
from langchain_community.graph_vectorstores.cassandra import CassandraGraphVectorStore

# Create a GraphVectorStore, combining Vector nodes and Graph edges.
EMBEDDING = 'text-embedding-3-small'
gvstore = CassandraGraphVectorStore(OpenAIEmbeddings(model=EMBEDDING)) 

我们以标准方式为 RAG 链设置了 LLM 和其他助手 — 查看笔记本以了解详细信息。请注意,虽然这里使用的几乎所有内容都是开源的,但在笔记本中我们使用了两个 SaaS 产品,OpenAI 和 DataStax 的Astra — 分别是 LLM 和向量数据存储 — 它们都有免费的使用层级。详情请参考LangChain 文档以了解替代方案。

使用默认设置运行 RAG

我们可以使用depth=0的图形检索器端到端运行 RAG 系统 —— 这意味着完全不进行图遍历 —— 并使用其他默认参数如下:

retriever = gvstore.as_retriever(
    search_kwargs={
        "depth": 0,  # depth of graph traversal; 0 is no traversal at all
    }
)

这将产生如下输出:

Question:
 What is close to the Space Needle? 

Retrieved documents:
['https://TheSpaceNeedleisGreat',
 'https://TheSpaceNeedleisTALL',
 'https://en.wikipedia.org/wiki/Space_Needle',
 'https://SeattleIsOutWest',
 'https://en.wikipedia.org/wiki/Lower_Queen_Anne,_Seattle',
 'https://QueenAnneWasAPerson']

LLM response:
('The Space Needle is close to several locations in the Lower Queen Anne '
 'neighborhood, including Climate Pledge Arena, the Exhibition Hall, McCaw '
 'Hall, Cornish Playhouse, Bagley Wright Theater, the studios for KEXP radio, '
 'SIFF Cinema Uptown, and On the Boards.')

当然,在实际场景中,RAG 系统不会像我们这里一样检索完整的文档集。

一个更现实的场景:我们无法检索所有文档。

对每个查询检索所有文档在一些情况下既不实际也不可能。这也违背了使用向量搜索的初衷。在所有实际场景中,每次查询只能检索到一小部分文档,这就是为什么将最相关和最有帮助的文档放在列表前面如此重要的原因。

为了让我们的示例更加贴近现实,我们将检索器的设置更改为k=3,这意味着每次向量搜索最多返回三份文档。这意味着在六份文档中——根据向量相似性,最不相似或最不相关的三份文档将被排除在返回的文档集之外。我们可以像这样更改检索器的设置:

retriever = gvstore.as_retriever(
    search_kwargs={
        "depth": 0,  # depth of graph traversal; 0 is no traversal at all
        "k": 3       # number of docs returned by initial vector search---not including graph Links
    }
)

使用这些设置查询系统时,会得到以下输出:

Question:
 What is close to the Space Needle? 

Retrieved documents:
['https://TheSpaceNeedleisGreat',
 'https://TheSpaceNeedleisTALL',
 'https://en.wikipedia.org/wiki/Space_Needle']

LLM response:
('The context does not provide specific information about what is close to the '
 'Space Needle. It only mentions that it is located in the Lower Queen Anne '
 'neighborhood and built for the Seattle Center for the 1962 World's Fair.')

我们可以看到,这个最终的响应比之前的响应要少得多的信息,因为我们现在只能访问到一半的文档集,而不是能够使用六份文档来生成回应。

这里有一些重要的注意点。

  1. 一份被遗漏的文档是Lower Queen Anne 文档,它是唯一一份描述太空针塔所在附近一些重要地点的文档。

  2. Lower Queen Anne 文档并未特别提及太空针塔,而另外三份文档则提到了。因此,最初的查询“太空针塔附近有什么?”返回这三份文档是有道理的。

  3. 关于太空针塔的主要文档直接链接到Lower Queen Anne,任何好奇的人可能都会点击这个链接来了解该地区。

  4. 如果没有任何链接或图遍历的意识,这个 RAG 系统会检索最语义相似的文档——包括两份信息量较少的文档——并错过了那篇包含最多信息来回答查询的文章。

现在,让我们看看文档链接如何影响结果。

跟踪链接可以找到缺失的信息。

对我们的检索器设置进行简单的更改——将depth=1——使得检索器能够跟踪初步通过向量搜索检索到的文档中的任何链接。(作为参考,设置depth=2不仅会跟踪初始文档集中的链接,还会跟踪结果文档集中下一组链接——但我们暂时不往这个方向走。)

我们像这样更改了检索器的depth参数:

retriever = gvstore.as_retriever(
    search_kwargs={
        "depth": 1,  # depth of graph traversal; 0 is no traversal at all
        "k": 3       # number of docs returned by initial vector search---not including graph Links
    }
)

这将产生以下输出:

Question:
 What is close to the Space Needle? 

Retrieved documents:
['https://TheSpaceNeedleisGreat',
 'https://TheSpaceNeedleisTALL',
 'https://en.wikipedia.org/wiki/Space_Needle',
 'https://en.wikipedia.org/wiki/Lower_Queen_Anne,_Seattle']

LLM response:
('The Space Needle is located in the Lower Queen Anne neighborhood, which '
 'includes Climate Pledge Arena, Exhibition Hall, McCaw Hall, Cornish '
 'Playhouse, Bagley Wright Theater, the studios for KEXP radio, a three-screen '
 'movie theater (SIFF Cinema Uptown), and On the Boards, a center for '
 'avant-garde theater and music.')

我们可以看到,通过向量搜索检索到的前k个文档与之前一样是那三篇文档,但设置depth=1指示系统跟踪这三篇文档的链接,并将这些链接的文档也包含进来。因此,从太空针塔文档到Lower Queen Anne的直接链接也包括了该文档,这使得 LLM 能够获得其正确回答查询所需的邻近信息。

文档链接可以提升 RAG 应用程序的效果。

这种向量和图检索的混合方法可以显著增强 RAG 应用程序结果的上下文相关性和多样性。通过确保系统检索到最符合上下文且多样化的内容,能够减少幻觉现象,并提高结果的质量。

除了提高 RAG 系统的响应质量外,文档链接在生产系统中的实现还具有一些优势。其有利的特性包括:

  1. 无损 — 原始内容在节点中保持完整,确保在图形创建过程中不会丢失任何信息。这保留了数据的完整性,减少了随着需求变化而频繁重新索引的需要,并且利用了 LLM 从上下文线索中提取答案的优势。

  2. 无需人工干预 — 该方法不需要专家介入来完善知识提取。相反,通过在现有的向量搜索管道中添加基于关键词、超链接或其他文档属性的边缘提取功能,可以实现自动添加链接。

  3. 可扩展 — 图形创建过程涉及对内容的直接操作,而无需使用 LLM 来生成知识图谱。

性能基准和更详细的文档链接扩展分析可参考之前提到的文章

一如既往地,这里也存在一些限制。如果您的文档集确实没有链接或其他结构,本文所提出的策略效果会很有限。此外,尽管构建和遍历图形连接可以非常强大,但它也会增加检索过程的复杂性,可能会带来调试和优化上的挑战,尤其是在图形遍历深度达到 2 层或更多时。

总体而言,将文档链接纳入 RAG 系统结合了传统的确定性软件方法、图算法和现代 AI 技术的优势。通过明确地定义文档之间的链接,我们增强了 AI 像人类研究者一样浏览知识的能力,不仅提高了检索的准确性,还增加了响应的上下文深度。这种方法创造了更为强大、能够更好适应复杂人类求知方式的系统。

开始使用文档链接

本文的完整代码可以在此 Colab 笔记本中找到。另外,查看我在 DataStax 的同事发布的这篇介绍性博客文章,或者查看 LangChain 中GraphVectorStore文档,了解详细的 API 信息以及如何使用文档链接增强你的 RAG 应用,并推动知识系统的能力边界。

作者:Brian Godsey,博士(LinkedIn)——数学家、数据科学家和工程师 // 在 DataStax 从事人工智能产品工作 // 编写了书籍* 像数据科学家一样思考

您的电子商务产品表现报告可能会误导您

原文:towardsdatascience.com/your-ecommerce-product-performance-reports-are-probably-misleading-you-d6146734639c?source=collection_archive---------9-----------------------#2024-10-14

为什么单一指标无法全面反映问题,以及加权复合评分如何转变您的商业洞察

Hattie BiddlecombeTowards Data Science Hattie Biddlecombe

·发布于 Towards Data Science ·阅读时间 7 分钟·2024 年 10 月 14 日

--

单一指标评估的问题

在电子商务的世界中,单独依赖某一指标来评估产品和品牌的表现可能会产生误导。单一指标在孤立的情况下,可能会制造出一种虚假的成功感,导致对看似盈利但实际上在消耗企业资源的产品过度投资,或者相反,低估了那些具有潜力但尚未被发掘的商品。

要保持领先,您需要一个整体视角——一种评估产品和品牌表现的方式,考虑多个关键指标,如“总收入”、“转化率”、“毛利率”、“客户获取成本”、“复购率”、“履行成本”和“退货率”。

以下是我许多客户使用的一些典型电子商务数据示例。为了保护客户的隐私并确保保密性,这里显示的数据是合成的,通过 AI 生成的。尽管这些数据包含了许多重要指标,但团队通常只关注与其目标最相关的指标,这可能会掩盖整体情况。例如,按 sales_gross_amount 排序时,“Towel 17”看起来是表现最好的产品:

表格 1:按总销售额排序的电子商务产品

然而, 当我们按一个考虑到所有指标的自定义评分进行排序时,我们发现“Cushion 152”成为表现最好的产品,而“Towel 17”显著下降,位列 500 个产品中的第 213 位:

表 2:按加权综合评分排序的电子商务产品

附注: 在实践中,我可能不会同时使用这么多指标,因为这会使决策过程过于复杂。不过,我想给你一个完整的视角,展示你可以考虑的不同因素。此外,你可能已经注意到,我没有在表格中包含“加入购物车”作为指标。虽然它是客户兴趣的早期指标,但并不总能转化为最终销售或长期产品表现。然而,有些人可能仍然会发现追踪这个指标有价值。

引入加权综合评分: 一种更智能的绩效评估方法

为了避免单一指标评估的局限性,并获得更准确的跨多个指标的产品和品牌表现评估,我们使用一种方法叫做加权综合评分

加权综合评分将多个指标合并成一个有洞察力的指标,提供每个产品在各个维度上的全面价值。可以把它想象成你在学校的最终成绩——每个科目可能采用不同的评分标准,但最终它们会合并成一个整体成绩。

这个综合评分也可以加权,以强调特定的指标,从而使你能够对齐特定的业务目标,比如优先考虑盈利性而非增长,或是降低退货率。

接下来,让我们探索如何使用 Python 实现加权综合评分:

1. 导入 Python 库和数据框:

import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler

product_df= pd.read_csv('product_data.csv') # This is a set of artificially generated data
product_df.head()

表 3:电子商务产品数据 CSV

2. 数据标准化:Z-Score 标准化

有许多标准化技术可以应用,但对于这个数据集而言,Z-Score 标准化是最有效的标准化方法。以下是原因:

  • 平衡不同的尺度:Z-Score 标准化将每个指标转换为均值为 0,标准差为 1 的值。这平衡了那些在尺度上差异较大的指标——无论是几千的收入,还是个位数的转化率。最终,这使得比较不同维度的产品变得更容易。

  • 更好地处理异常值:与 Min-Max 标准化不同,Z-Score 标准化不会被极端值扭曲,它减少了异常值的影响,确保了所有指标的公平表现。

  • 识别高于/低于平均值的表现:Z-Score 使我们能够看到一个值是高于还是低于均值,使用正值或负值(如表 4 所示)。正如我们将看到的,这个洞察力将对理解各个产品相对于均值的表现有所帮助。

使用 Min-Max 标准化进行优化

虽然单独使用最小-最大缩放(Min-Max scaling)对于缩放此数据集中的原始数据并不适用,但我们在 Z 分数归一化之后应用了它,将所有值转换为-1 到 1 之间的一个一致范围。通过这样做,可以公平地比较各个指标,因为所有值现在都在同一尺度上,确保每个指标在最终分析中均等地贡献。

以下代码演示了如何将缩放方法应用于我们的数据框:

# Select numeric columns and create corresponding scaled column names
numeric_cols = product_df.select_dtypes(include=['float64', 'int64']).columns
scaled_cols = ['scaled_' + col for col in numeric_cols]

# Apply Z-Score Normalisation and then Min-Max scaling in one go
scaler = MinMaxScaler(feature_range=(-1, 1))
product_df[scaled_cols] = scaler.fit_transform(StandardScaler().fit_transform(product_df[numeric_cols]))

product_df.head()

表 4:显示缩放后指标的产品数据框

3. 创建加权综合得分

接下来,我们希望为最终用户提供选项,允许他们对某些指标进行加权。这使得用户可以根据业务优先级或目标对某些指标赋予更高的权重。不同部门可能会根据自己的重点对不同的指标赋予不同的优先级。例如,市场营销团队可能更关注客户获取和转化率,其中转化率客户获取成本(CAC)重复购买率是成功的关键指标。

履约成本CAC退货率这样的指标代表了产品表现的负面因素。通过应用负权重,我们确保这些指标的较高值会降低整体综合得分,从而反映出它们的不利影响:

# Example user-provided weights (this can be dynamic based on user input)
user_weights = {
    'scaled_conversion_rate': 0.14,
    'scaled_sales_gross_amount': 0.14,
    'scaled_gross_margin': 0.14,
    'scaled_customer_acquisition_cost': -0.14, #notice negative weight here
    'scaled_fulfillment_costs_per_unit': -0.14, #notice negative weight here
    'scaled_return_rate': -0.14, #notice negative weight here
    'scaled_repeat_purchase_rate': 0.14
}

# Calculate weighted composite score
product_df['weighted_composite_score'] = sum(product_df[col] * weight for col, weight in user_weights.items()) / sum(user_weights.values())

使用回归分析加权指标

另外值得一提的是,一种更数据驱动的加权分数方法是使用回归分析。这种方法根据每个指标对关键结果的实际影响分配权重,如整体盈利能力或客户保持率。通过这种方式,最具影响力的指标在最终综合得分中自然占据更大比重。

4. 结果

如下表所示(也在本博客的开头展示),当我们按scaled_sales_gross_amount排序时,产品‘Towel 17’排在第一位:

表 1:按总销售额排序的电子商务产品

然而,当我们按照新的weighted_composite_score排序时,‘Cushion 152’排在第一位,而 Towel 17 则跌至 500 个产品中的第 213 位:

表 2:按加权综合得分排序的电子商务产品

得益于正负 Z 分数,我们可以在表 1 中清晰地看到,尽管Towel 17在销售和盈利能力方面表现突出,但它在重复购买方面存在问题,并且退货率较高——这可能是质量或客户满意度问题的潜在指标。解决这些挑战可能会显著提高盈利能力和客户忠诚度。

在表格 2 中,我们可以看到,Cushion 152在盈利能力方面表现异常出色(高毛利和低成本),具有稳固的转化率和低退货率。虽然它的销售额不是最高的,但由于其效率和客户满意度,它在整体表现中脱颖而出。我建议该网站通过定向营销活动提高此产品的可见度,并在网站上更加突出地展示它,以推动更多的销售。

品牌评估

我还分析了数据集中的品牌,通过加权综合得分的方法再次得出了不同的结论。

乍一看,EcoLiving 似乎仅凭销售总额就是表现最好的品牌。然而,我们的加权综合得分方法平衡了所有关键指标,揭示了 PureDecor 是整体最有价值的品牌。这种方法使我们能够识别出提供最大整体价值的品牌,而不是仅关注单一指标或绩效维度:

表格 5: 按加权综合得分排序的电子商务产品

总之, 实施加权综合得分是一种简单但非常有效的方法,用于分析复杂的数据集,并且可以轻松集成到现有的报告工具中。

对我的客户来说,这种方法产生了显著影响——它避免了对那些被错误认为表现不佳的产品和品牌做出不必要的削减。它还帮助将资源从那些消耗预算却未能提供相应价值的产品和品牌中重新分配出去。

加权综合评分可以应用于任何需要平衡多个重要指标的领域。例如,它可以帮助优化网站内容、增强 SEO 策略和改善客户细分,从而成为推动您业务多个领域转型的有力工具。

如果您需要帮助实施加权评分系统,或只是想聊聊您的数据问题,欢迎通过电子邮件、我的网站或 LinkedIn 与我联系。

除非另有说明,所有图片均为作者提供

你的端到端产品分析策略

原文:towardsdatascience.com/your-end-to-end-product-analytics-strategy-648ecfa586c2?source=collection_archive---------2-----------------------#2024-05-28

Robbie GeogheganTowards Data Science Robbie Geoghegan

·发表于 Towards Data Science ·阅读时间:8 分钟·2024 年 5 月 28 日

--

你所测量的,便是你所管理的

“你所测量的,便是你所管理的”这一说法由现代管理学之父彼得·德鲁克(Peter Drucker)于 1954 年提出。这是一句经常被引用的名言,但实际上它是更长、更有力的一句话的一部分:“你所测量的,便是你所管理的——即使测量和管理它是没有意义的,甚至可能会损害组织的目标。”

德鲁克的洞察力强调了,虽然收集和衡量数据至关重要,但真正的挑战在于识别和优先考虑那些能够将业务引向正确方向的关键指标。通过专注于并优先考虑正确的指标,你可以确保所测量和管理的内容是真正有影响力的。

本文关注的是科技公司中的产品分析,然而这一思想对于所有企业和各种分析类型都同样适用。以下是我在不同公司(初创公司Digivizer、成长型公司Immutable以及大型科技公司Facebook)担任数据专业人员期间所学到并应用的经验总结。

你应该如何优先考虑指标?

对于一个公司来说,最重要的指标会随着时间变化而变化。Uber 大约 15 年未实现盈利,但该公司仍被认为是近年来最成功的企业之一。为什么?Uber 在初期集中精力于快速增长,而不是立刻追求盈利。公司优先关注用户增长和用户留存等指标,以便在共享出行市场中建立主导地位。然后,当 Uber 成为主导的共享出行公司后,它的重点转向盈利和财务可持续性。像许多其他公司一样,它们将指标与产品生命周期的阶段紧密挂钩。

你应该根据产品生命周期阶段来优先考虑指标。

产品生命周期阶段(图片来自作者)

在每个阶段,你关注的指标应当帮助解决每个阶段所面临的紧迫问题。战术性问题可能各异,但将源自以下几个高层次的问题:

  • 阶段 1 — 引入:我们是否达到了产品与市场的契合?

  • 阶段 2 — 增长:我们如何有效扩展?

  • 阶段 3 — 成熟:我们如何实现盈利?

  • 阶段 4 — 衰退:我们如何保持用户兴趣并减缓衰退?

阶段 1 — 引入:我们是否达到了产品与市场的契合?

产品生命周期中的第一个也是最关键的阶段是引入阶段,主要关注的是实现产品与市场的契合。在这个阶段,产品负责人必须确定他们的产品是否满足了市场的真正需求,并且与目标用户产生共鸣。理解产品与市场的契合需要评估早期用户是否不仅在使用产品,而且在其中找到了价值。对产品与市场契合的信心为未来的增长和可扩展性奠定了基础。

有三个指标可以帮助你清晰地判断是否达到了产品与市场的契合。这些指标按重要性排序如下:

  1. 留存: 用户是否从产品中找到价值?示例指标: D30 留存,用户群体留存曲线。

  2. 活跃用户: 产品拥有多少用户?这个数字在增加吗?示例指标: 日活跃用户(DAU),月活跃用户(MAU),增长会计。

  3. 粘性: 产品是否具有吸引力且经常被使用?示例指标: DAU/MAU,活动频率直方图(有时称为 L28 直方图)。

这三项指标结合使用,可以定量衡量是否存在产品与市场的契合,或者指出最关键的产品问题。你可能会遇到以下五种情境:

  1. 没有长期留存和低用户增长(最糟情况): 在这种情境下,没有产品与市场的契合。用户没有回归使用产品,且市场规模小。这需要对产品和/或目标市场进行大幅度的调整。

  2. 没有长期留存但高用户增长: 这是漏斗问题。用户被获取后,使用产品一段时间后最终流失。此时的重点是解决留存问题并减缓增长。

  3. 长期留存但用户增长缓慢: 在这种情况下,重点是调整用户获取漏斗以促进用户增长,或者如果市场规模证明较小,则转向更大的市场。

  4. 长期留存、高用户增长,但低粘性: 这是一个用户认为有价值但使用频率较低的工具型产品。例子包括税务准备应用、旅游网站和票务网站。重点应放在探索新功能,使产品更具吸引力。

  5. 长期留存、高用户增长和高粘性(理想状态): 用户频繁返回并使用产品,用户数量也在增长。这表明产品与市场契合。

一旦一个组织对产品与市场的契合充满信心,注意力就可以转向增长。这个方法避免了在用户获取上投入大量资金,然后却不得不调整产品或市场,或者大多数用户流失的情况。

第二阶段 — 增长:我们如何有效扩展?

增长阶段是产品从有前景走向主导地位的潜力所在。Facebook 著名的“10 天内交 8 个朋友”规则是有效扩展的完美例子。通过漏斗分析和实验,Facebook 发现,首次 10 天内与至少 8 个朋友建立联系的新用户更可能保持活跃。这一洞察力促使 Facebook 集中精力优化用户引导并鼓励朋友间建立联系,显著提高了用户留存率和粘性。在这个阶段,关键问题是:我们如何在保持产品质量和用户满意度的同时有效扩展?

这一阶段的分析应扩大,包括三种类型:

  1. 用户旅程分析: 我们如何优化用户体验?示例指标: 转化率、转化时间、漏斗分析。

  2. 实验: 我们如何确定某个变化是否能积极改善关键指标?示例方法: A/B 测试,多变量测试。

  3. ‘恍然大悟’分析: 什么时刻导致用户留存和粘性发生突变?示例指标: 用户旅程分析、实验和产品与市场契合指标的组合。

在实施用户旅程分析时,少即是多。诱惑可能是给产品的每个页面和每个按钮都安装追踪工具,但这通常会让工程团队感到繁重,并且难以维护。相反,从一个开始事件和一个结束事件入手 —— 这两个事件将允许你计算转化率和转化时间。除了这两个事件之外,只包括用户旅程中的关键步骤。确保事件能够捕捉到设备、操作系统和位置等用户细分。

实验是需要练习的技能。你应该在产品和公司生命周期的早期就开始建立这一能力,因为它比一组指标更难实施。通过让产品、工程和数据团队参与实验设计来建立这一能力。实验不仅在“第二阶段 — 成长”中至关重要,还应贯穿整个产品生命周期,始终作为分析的基础部分。

“Aha”分析帮助识别可以加速增长的关键时刻。这些是用户意识到产品价值的关键互动时刻,从而带来忠诚度和粘性。Facebook 的“10 天内结交 8 个朋友”就是他们用户的‘aha’时刻。此分析要求分析师探索多种潜在特征,并且可能很难识别并提炼出一个简单的‘aha’时刻。务必使用假设驱动的方法以避免一开始就全面展开。

第三阶段 — 成熟期:我们如何实现盈利?

在成熟阶段,重点从快速增长转向优化盈利能力和长期可持续性。这个阶段关注的是精炼产品、最大化效率,并确保企业保持竞争力。像苹果、Netflix 和亚马逊这样的公司,通过专注于成本管理、增加用户收入和探索新的收入来源,成功地度过了这一阶段。

本阶段的关注点转向:

  1. 盈利指标: 我们如何在保持高质量产品和满意的客户基础的同时实现盈利?示例指标: 客户获取成本(CAC)、客户生命周期价值(LTV)、LTV:CAC 比率、月度经常性收入(MRR)。

盈利指标有明确的目标,旨在增加收入和减少成本。市场营销和市场推广团队通常负责降低 CAC,产品团队通常负责提高 LTV 和 MRR。策略可以包括优化广告支出、缩短销售交易完成时间,甚至通过交叉销售和捆绑产品来服务现有用户。一般来说,B2B 软件公司的 LTV:CAC 比率目标常设为 3:1 到 4:1,而 B2C 的目标则接近 2.5:1。

第四阶段 — 衰退期:我们如何保持用户兴趣并减缓衰退?

“你的利润是我的机会” —— Jeff Bezos。随着产品的成熟,盈利能力不可避免地会下降。竞争对手识别到你的机会并增加竞争,现有用户迁移到替代品和新技术,市场趋于饱和,增长空间有限。在这个阶段,保持现有用户群体变得尤为重要。

在第四阶段,有一套广泛的有用指标可以采用。以下是一些关键类型:

  • 流失预测建模: 我们能否识别可能流失的用户并进行干预?示例模型: 逻辑回归、树模型、神经网络。

  • 核心用户分析: 我们能从最活跃的用户那里学到什么? 示例指标: 粘性、功能使用、交易量。

  • 根本原因分析: 关键指标的根本原因是什么? 示例分析: 季度业务回顾、问题驱动树。

通过创建流失预测模型并分析特征重要性,可以识别出可能流失的用户特征,并采取干预措施。由于新用户增长放缓,保留现有用户变得尤为重要。这项分析还可能帮助挽回那些曾经流失的用户。

核心用户分析旨在了解最活跃的用户及其特征。这些用户是最优先需要保留的群体,并且他们的产品使用行为应该是所有用户都理想地共享的行为。寻找那些每天活跃的用户,他们在产品中停留的时间最长,使用最多功能,并且花费最多的用户。可以采取忠诚度计划等措施来留住这些用户,并寻找增加核心用户数量的途径。

根本原因分析对于深入探讨成熟产品中的具体问题至关重要。考虑到此生命周期阶段产品的复杂性和规模,具备进行定制化深入分析问题的能力至关重要。这类分析有助于揭示关键指标的潜在驱动因素,增强对那些实施成本高昂的产品变动的信心,并帮助理清产品生态系统中相互依赖的度量标准。

处于最后阶段的产品或公司可能会选择创建新产品并进入新市场。此时,周期将重新开始,重点回到博客开头提到的产品市场契合度。

结论

“专注就是拒绝。” — 史蒂夫·乔布斯。产品分析是一个无底洞,包含了潜在的指标、维度和可视化元素。为了有效利用产品分析,公司必须在任何时候将重点指标优先级压缩到少数几个领域。这些指标可以通过其他多种度量方式来支持,但必须具备以下特征:

  • 团队对应该优先关注的指标达成一致

  • 深刻理解关键指标定义的团队

  • 与关键产品问题相关的指标

  • 可采取的实际行动,以改进该指标

这可以通过在每个产品生命周期阶段优先考虑正确的指标来实现——引入期、增长期、成熟期和衰退期。从实现产品市场契合到有效扩展、优化盈利能力,并保持用户兴趣,每个阶段都要求明确专注于最相关的待解决问题。

记住,这不仅仅是关于衡量一切;而是关于衡量重要的内容。用史蒂夫·乔布斯的话来说,就是对噪音说不,对真正推动产品前进的事物说是。

附录

我在上面的章节中避免列出过多具体的指标,只为每个产品生命周期阶段提供了一些示例指标。相反,我专注于一些总体主题,以便对其进行分析。不过,如果你在寻找更详细的指标列表,下面有一些不错的资源链接。

作为数据科学家的第一年:生存指南

原文:towardsdatascience.com/your-first-year-as-a-data-scientist-a-survival-guide-f1d48fef2352?source=collection_archive---------3-----------------------#2024-05-10

作为初学者,我将从以下 5 个技巧中受益匪浅

Haden PelletierTowards Data Science Haden Pelletier

·发表于 Towards Data Science ·阅读时长 9 分钟·2024 年 5 月 10 日

--

到了 8 月,我将迎来作为全职数据科学家的第二个年头!(严格来说是第三年,因为我第一年是在这个领域做实习生的。)

图片来自 Campaign CreatorsUnsplash

在过去的几年里,我学到了很多东西。虽然我确实去大学学习了数据科学,收获颇丰,但大学所能为你进入职场做好准备的程度是有限的。

没有什么比获得大量的第一手经验更有价值的了。

能够独立犯错、修正错误,并反复做同样的任务,使我能够更加充分地发展和巩固我的技能。

无论你是否拥有数据科学学位,第一年总是充满挑战。工作环境节奏快,有时压力大,而且令人感到有些不知所措。

幸运的是,你可以采取一些措施让你的第一年更加轻松和愉快。在本文中,我想为你提供一些生存技巧——最终让你在第一年中不仅能够生存下来,还能茁壮成长。

找一个导师

成功之路:如何获得机器学习和数据科学实习机会

原文:towardsdatascience.com/your-pathway-to-success-how-you-can-land-a-machine-learning-and-data-science-internship-c14825b58420?source=collection_archive---------6-----------------------#2024-09-04

来自一位在一年内成功获得两次实习机会的数据科学家的建议和技巧

Sara NóbregaTowards Data Science Sara Nóbrega

·发表于Towards Data Science ·14 分钟阅读·2024 年 9 月 4 日

--

来源:Dall-E。

(如果你没有会员资格,可以在 这里) 阅读文章。

在今天竞争激烈的就业市场中,获得数据科学实习机会可以成为你在科技行业蓬勃发展的通行证。

但在这么多申请者中, 你该如何脱颖而出呢?

无论你是学生、刚毕业的新人,还是想转行进入数据科学领域的人,这篇 文章将为你提供可操作的策略,帮助你获得那份实习机会。

作为一名在一年内成功完成两次实习的人, 我很高兴分享对我有效的技巧。

让我们开始吧,一起为你的数据科学职业生涯打下基础!😊

但在此之前,让我先自我介绍一下:

你好!

我叫Sara,是一名数据科学家。我拥有物理学硕士学位,后来转行进入了令人兴奋的数据科学领域。

我撰写有关数据科学、人工智能和数据科学职业建议的文章。确保关注我 并且 订阅 以获取更新……

你有一个时间序列。那接下来该做什么?

原文:towardsdatascience.com/youve-got-a-time-series-now-what-38803e079175?source=collection_archive---------1-----------------------#2024-04-20

如何进行时间序列的探索性数据分析

Aleksei RozanovTowards Data Science Aleksei Rozanov

·发布于 Towards Data Science ·阅读时长 8 分钟·2024 年 4 月 20 日

--

图片由 作者 提供。

最常见的数据类型之一就是时间序列。视频、图片、像素、信号,任何带有时间成分的东西都可以转化为时间序列。形式上,时间序列是对可观察变量在等时间间隔下的历史测量序列。

在本文中,我想建议一个小型的流程,任何人在分析时间序列时都可以使用它。它可以帮助你从数据本身提取有意义的洞察,准备数据进行建模,并得出一些初步结论。

由于我最喜欢的词是“地理空间”🌏,今天我们将分析一组气象时间序列。具体来说,我们将探讨位于东南西伯利亚的某点在 2023 年期间的 2 米气温、总降水量、地表净太阳辐射和地表气压,这些数据来自每小时的 ERA5 Land [1] 气候重分析。

一如既往,要跟进本教程,你可以下载并运行这个笔记本 在这里

为了完成分析,我们需要导入几个库:

import pandas as pd
import seaborn as sns
import numpy as np

import matplotlib.pyplot as plt
import xarray as xr

import statsmodels.api as sm
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from scipy import stats

我还决定尝试使用来自两个库的新 matplotlib 风格,分别是 opinionatedambivalent

from ambivalent import STYLES
import opinionated
plt.style.use(STYLES['ambivalent'])
plt.style.use("dark_background")

1. 折线图

首先,让我们上传并可视化我们拥有的数据。为了处理地理空间多维数组,我们将使用 xarray 库。

data = xr.open_dataset('Medium_data.nc')
data

图片由作者提供。

现在我们需要根据选择的位置切割数据,转换为 pandas 数据框,并创建一个折线图:

df = data.sel(latitude=52.53, longitude=101.63, method='pad').to_pandas().drop(['latitude', 'longitude'], axis=1)
fig, ax = plt.subplots(ncols = 2, nrows = 2, figsize=(16,9))
df['t2m'].plot(ax=ax[0,0])
ax[0,0].set_title('Air Temperature')
df['ssr'].plot(ax=ax[0,1])
ax[0,1].set_title('Surface Net Solar Radiation')
df['sp'].plot(ax=ax[1,0])
ax[1,0].set_title('Surface Pressure')
df['tp'].plot(ax=ax[1,1])
ax[1,1].set_title('Total Precipitation')
plt.tight_layout()
plt.show()

图片由作者提供。

从折线图中已经可以看出,所有四个时间序列具有不同的特征,因此让我们使用数学工具进一步分析它们。

2. 分解与平稳性

任何时间序列都有三个重要属性需要考虑:

  • 趋势,即时间序列中平滑的长期变化;

  • 季节性,指的是时间序列中均值具有规律性周期性变化的特征;

  • 噪声(残差),即信号中的随机成分,其均值为零。

要单独获取这些组件,可以进行经典分解(加法型或乘法型)。此操作通过应用卷积滤波器来执行,因此每个时间序列组件定义为:

加法分解。图片由作者提供。

乘法分解。图片由作者提供。

其中 y — 为时间序列中的值,S — 为季节性成分,T — 为趋势成分,n — 为噪声。

要进行分解,除了选择分解类型外,还需要设置季节性周期(例如 p=1 表示年度,p=4 表示季度,p=12 表示月度数据等)。

需要特别提到的是,上述的经典分解方法非常简单且朴素。它有显著的局限性,如其线性假设、无法捕捉动态季节性以及在处理时间序列的非平稳性时的困难。然而,就本文的目的而言,这种方法足够了。

为了进行经典分解,我们将使用来自 statsmodels 库的 seasonal_decompose 函数,周期设置为 24,因为我们处理的是小时数据:

vars = {'t2m': 'Air Temperature', 'tp': 'Total Precipitation', 'sp': 'Surface Pressure', 'ssr': 'Surface Net Solar Radiation'}
for var in df.columns:
  result = sm.tsa.seasonal_decompose(df[var], model='additive', period = 24)
  results_df = pd.DataFrame({'trend': result.trend, 'seasonal': result.seasonal, 'resid': result.resid, 'observed': result.observed})
  fig, ax = plt.subplots(ncols = 2, nrows = 2,figsize=(16,9))
  ax[0,0].plot(df.index, results_df.trend)
  ax[0,0].set_title('Trend')
  ax[0,0].set_ylabel('Value')

  ax[0,1].plot(df.index, results_df.seasonal)
  ax[0,1].set_title('Seasonal')

  ax[1,0].plot(df.index, results_df.resid)
  ax[1,0].set_title('Residual')
  ax[1,0].set_ylabel('Value')
  ax[1,0].set_xlabel('time')

  ax[1,1].plot(df.index, results_df.observed)
  ax[1,1].set_title('Observed')
  ax[1,1].set_xlabel('time')

  opinionated.set_title_and_suptitle(vars[var], f"Dickey-Fuller test: {round(sm.tsa.stattools.adfuller(df[var])[1],5)}", position_title=[0.45,1],
                                     position_sub_title=[0.95, 1])
  plt.tight_layout()
  plt.savefig(f'Seasonal_{var}.png')
  plt.show()

图片由作者提供。

图片由作者提供。

图片由作者提供。

图片由作者提供。

你可以看到,对于所有变量,季节性成分看起来很杂乱。由于我们分析的是小时数据,这些季节性变化出现在一天之内,因此并没有提供太多信息。在这种情况下,值得尝试将数据重新采样为日分辨率,并进行一天周期的分解。

df_d = df.resample('1d').mean()

图片由作者提供。

到目前为止,你们中的一些人可能已经注意到图表右上角的迪基-富勒检验标签。这是一个平稳性检验,使用了同一库中的adfuller函数。在时间序列的情况下,平稳性意味着时间序列的属性随时间不发生变化。这里的属性包括方差、季节性、趋势和自相关性。

在对时间序列应用增强型迪基-富勒(ADF)检验时,我们提出原假设,即时间序列是非平稳的。然后我们选择显著性水平α,通常为 5%。本质上,α是错误拒绝原假设(实际上原假设为真)的概率。因此,在我们的案例中,α=5%,意味着有 5%的风险得出结论认为时间序列是平稳的,实际上它并非如此。

测试结果将给出一个 p 值。如果 p 值小于 0.05,我们可以拒绝原假设。

正如你所看到的,所有四个变量根据 ADF 检验都是平稳的。

通常,为了应用一些时间序列预测模型,如 ARIMA 等,平稳性是必需的,因此我们在这里很幸运。一般来说,气象和气候数据通常在各种时间序列相关的学习材料中被分析,因为它们在大多数情况下是平稳的。

3. 分布

在得出所有时间序列都是平稳的结论后,让我们来看看它们是如何分布的。为此,我们将使用著名的 seaborn 库及其pairplot函数,该函数允许创建包含直方图和核密度估计的有信息量的图表。

ax = sns.pairplot(df, diag_kind='kde')
ax.map_upper(sns.histplot, bins=20)
ax.map_lower(sns.kdeplot, levels=5, color='.1')
plt.show()

图片由作者提供。

让我们考虑 t2m(1 行 1 列)的例子。当分析核密度估计(kde)图时,显然这个变量的分布是多峰的,这意味着它有两个或更多的“钟形曲线”。因此,在本文的后续阶段,我们将尝试将该变量转化为正态分布

第一列和第一行中的其他图表在提供的信息上是相同的,但它们的可视化方式不同。基本上,这些是散点图,允许我们识别两个变量之间的相关性。因此,点的颜色越深,或点越接近中央圆圈,说明该区域内的点密度越高。

4. Box-Cox 变换

由于我们已经发现空气温度时间序列是平稳的,但不是正态分布的,让我们尝试使用 Box-Cox 变换来解决这个问题。为此,我们将使用 scipy 包及其boxcox函数。

df_d['t2m_box'], _ = stats.boxcox(df_d.t2m)
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(15,7))
sns.histplot(df_d.t2m_box, kde=True, ax=ax[0])
sns.histplot(df_d.t2m, kde=True, ax=ax[1])

图片由作者提供。

图的左侧是我们经过 BoxCox 变换后的时间序列分布,正如你所看到的,它仍然远未达到“正态”分布。但如果与右侧的分布进行比较,我们可以说它肯定已经更接近正态分布了。

我们可以做的另一件事来确保所执行的变换是有用的,就是创建一个概率图。本质上,我们将一个理论分布的分位数(在我们的例子中是正态分布)与我们的经验数据(即我们所考虑的时间序列)的样本进行比较。点越接近白线,效果越好。

fig = plt.figure()

ax1 = fig.add_subplot(211)
prob = stats.probplot(df_d.t2m, dist=stats.norm, plot=ax1)
ax1.get_lines()[1].set_color('w')
ax1.get_lines()[0].set_color('#8dd3c7')
ax1.set_title('Probplot against normal distribution')

ax2 = fig.add_subplot(212)
prob = stats.probplot(df_d.t2m_box, dist=stats.norm, plot=ax2)
ax2.get_lines()[1].set_color('w')
ax2.get_lines()[0].set_color('#8dd3c7')
ax2.set_title('Probplot after Box-Cox transformation')
plt.tight_layout()fig = plt.figure()

ax1 = fig.add_subplot(211)
prob = stats.probplot(df_d.t2m, dist=stats.norm, plot=ax1)
ax1.set_title('Probplot against normal distribution')

ax2 = fig.add_subplot(212)
prob = stats.probplot(df_d.t2m_box, dist=stats.norm, plot=ax2)
ax2.set_title('Probplot after Box-Cox transformation')
plt.tight_layout()

图片来源:作者

如果你打算将变换后的时间序列用于机器学习建模,请不要忘记应用逆 BoxCox 变换,否则你将不得不处理不适当的数值!

5. 自相关

我们分析的最后一步是自相关。自相关函数(ACF)估计时间序列与其滞后版本之间的相关性。换句话说,它描述了时间序列的某一特定值与在不同时间间隔内其他先前值的相关性。

绘制部分自相关函数(PACF)也可能会很有帮助,PACF 与自相关相同,但移除了短期滞后的相关性。因此,它估计的是在某个时间戳内的值之间的相关性,同时控制其他值的影响。

for var in df.columns[:-1]:
  fig, (ax1, ax2) = plt.subplots(2,1,figsize=(10,8))
  plot_acf(df_d.t2m, ax = ax1)
  plot_pacf(df_d.t2m, ax = ax2)
  opinionated.set_title_and_suptitle(vars[var], '',position_title=[0.38,1],
                                     position_sub_title=[0.95, 1])
  plt.tight_layout()
  plt.show()

图片来源:作者

正如你所看到的,地面气压时间序列在 1 天滞后时存在非常强的部分自相关。然后自相关显著减弱,经过 3 天滞后后几乎消失。这样的分析可以帮助你更好地理解所处理数据的性质,从而得出更有意义的结论。

就这样,这是一个非常简短且直接的管道,用于在处理时间序列时进行探索性数据分析。重要的是要记住,你应该使用的方法高度依赖于你需要解决的问题。

希望这篇文章对你有所启发!

===========================================

参考文献:

[1] Muñoz Sabater, J. (2019):ERA5-Land 每小时数据,时间范围从 1950 年至今。哥白尼气候变化服务(C3S)气候数据存储(CDS)。DOI:10.24381/cds.e2161bac(访问日期:2024 年 4 月 16 日)

===========================================

我在 Medium 上的所有出版物都是免费的,公开访问的,因此如果你在这里关注我,我将非常感激!

P.S. 我对(地理)数据科学、机器学习/人工智能以及气候变化非常热衷。如果你想一起合作进行某个项目,请在LinkedIn上联系我。

🛰️关注我获取更多内容🛰️

基于 CLIP 风格编码器的零-shot 定位

原文:towardsdatascience.com/zero-shot-localization-with-clip-style-encoders-2ac3cea172a8?source=collection_archive---------4-----------------------#2024-09-24

我们如何看到视觉编码器所看到的内容?

Ruth CrastoTowards Data Science Ruth Crasto

·发布于Towards Data Science ·10 分钟阅读·2024 年 9 月 24 日

--

图片由Stephan Widua拍摄,来源于Unsplash

想象一下你最喜欢的预训练视觉编码器。我假设你选择的是某种 CNN(卷积神经网络)或 ViT(视觉 Transformer)的变体。编码器是一个将图像映射到d维向量空间的函数。在这个过程中,图像被转换为一系列特征图:

作者提供的图片。

特征图(w × h × k)可以被看作是一个由k维度的 patch 嵌入组成的 2D 数组,或者等价地说,它是一个具有k个通道f₁, … f的粗略图像(w* × h)。无论是 CNN 还是 ViT,它们都以各自的方式将输入图像转换为一系列特征图。

我们如何看到一个图像在经过视觉编码器的各层时,编码器所看到的内容?零-shot 定位方法旨在从编码器的特征图中生成可供人类解读的可视化效果。这些可视化效果,看起来像热图或粗略的分割掩码,能够区分输入图像中语义相关的区域。术语“零-shot”指的是模型没有明确地在感兴趣的语义类别的掩码注释上进行训练。例如,像 CLIP 这样的视觉编码器,仅仅在图像级的文本描述上进行了训练。

在本文中,我们首先概述了一些早期的技术,用于从监督学习的 CNN 分类器生成可解释的热图,无需额外训练。然后,我们探讨了使用 CLIP 风格编码器实现零-shot 定位的挑战。最后,我们简要介绍了 GEM(Grounding Everything Module)[1]背后的关键思想,GEM 是一种最近提出的用于 CLIP ViT 的无训练、开放词汇定位的方法。

1. 使用监督 CNN 分类器进行定位

类激活图(2016)

让我们通过考虑一个简单的图像分类监督训练的视觉编码器,来构建关于定位概念的直觉。假设 CNN 使用:

  1. 全局平均池化(GAP)将最终特征图通道 f₁(x, y), …, fₖ(x, y) 转换为一个 k 维向量。换句话说,每个 fᵢ 在宽度和高度维度上进行平均。

  2. 一个单一的线性层 W 将这个 k 维向量映射到一个类别 logit 的向量。

给定类别 c 的 logit 可以写为:

其中 W(c) 表示特征通道 i 在 logit c 上的(标量)权重,Zᵢ 是用于平均池化的归一化常数。

类激活图背后的关键观察是[2],上述求和可以重新写为:

换句话说,logit 可以表示为最终特征通道的加权平均,然后在宽度和高度维度上进行平均。

结果表明,仅仅对 fᵢ 的加权平均就能为类别 c 提供一个可解释的热图,其中较大的值对应于图像中与该类别语义相关的区域。这个粗略的热图可以上采样以匹配输入图像的维度,它被称为类激活图(CAM):

直观地,每个 fᵢ 本身已经是图像中某个潜在概念(或“特征”)的热图——尽管这些特征不一定以任何明显的方式区分人类可解释的类别。权重 W(c) 捕获了 fᵢ 在预测类别 c 时的重要性。因此,加权平均值突出了与类别 c 最相关的图像特征。通过这种方式,我们可以在没有额外训练的情况下实现类别 c 的区分性定位。

Grad-CAM(2017)

类激活图的挑战在于,它们只有在假设 CNN 编码器架构满足某些条件下才有意义。2019 年提出的 Grad-CAM [3] 是类激活图的一种优雅推广,可以应用于任何 CNN 架构,只要最终特征图通道 f₁, …, fₖ 到 logit 向量的映射是可微分的。

与 CAM 方法类似,Grad-CAM 计算特征通道 fᵢ 的加权和,以生成类别 c 的可解释热图,但每个 fᵢ 的权重是通过以下方式计算的:

Grad-CAM 将每个 fᵢ 的重要性与预测类别 c 的 logit 进行成比例加权的思想进行了推广,这个重要性由 logit 相对于元素 fᵢ (x, y) 的平均池化梯度来衡量。实际上,可以证明,对于一个符合前一节假设 1–2 的卷积神经网络(CNN),计算 Grad-CAM 权重将得到与我们之前看到的 CAM(c) 表达式相同,直到一个归一化常数(证明见 [3])。

Grad-CAM 进一步通过在加权特征通道 fᵢ 的平均值上应用 ReLU 来进一步改进。其理念是,仅可视化那些若其强度 增加,会增强对类别 c 预测信心的特征。再次地,输出结果可以上采样,以生成与原始输入图像尺寸匹配的热图。

2. 使用 CLIP 进行定位

这些早期的方法能推广到 CLIP 风格的编码器吗?考虑 CLIP 时需要考虑两个额外的复杂因素:

  1. CLIP 采用对比学习在一个大规模的开放词汇集上进行训练,因此没有固定的类别集。

  2. CLIP 图像编码器可以是 ViT 或 CNN。

也就是说,如果我们能够通过 CLIP 实现零-shot 定位,那么我们就能解锁执行零-shot、开放词汇 定位的能力:换句话说,我们可以为任意语义类别生成热图。这也是为 CLIP 风格编码器开发定位方法的动机。

让我们首先尝试一些看似合理的方法来解决这个问题,基于我们使用监督式 CNN 进行定位的知识。

对于给定的输入图像,类别 c 的 logit 可以通过计算类别名称的 CLIP 文本嵌入与 CLIP 图像嵌入之间的余弦相似度来获得。该 logit 相对于图像编码器最终特征图的梯度是可处理的。因此,一种可能的方法是直接应用 Grad-CAM —— 不论图像编码器是 ViT 还是 CNN,这种方法都可以有效。

图片来自作者。

另一种看似合理的方法可能是考虑图像补丁嵌入与类别文本嵌入之间的对齐。回想一下,CLIP 是通过最大化 图像级 嵌入(特别是 CLS token 嵌入)与相应文本嵌入之间的对齐进行训练的。那么,是否有可能该目标在嵌入空间中隐式地将 图像补丁 与与其相关的文本对齐得更紧密呢?如果是这种情况,我们可以通过简单地可视化类别文本嵌入与每个图像补丁嵌入之间的相似度,来生成一个判别性热图。

图片由作者提供。

对立的可视化

有趣的是,这两种方法不仅都失败了,而且生成的热力图与我们的预期完全相反。这一现象首次在论文“Exploring Visual Explanations for Contrastive Language-Image Pre-training”[4]中描述,并且在不同的 CLIP 架构和不同的类别中被一致观察到。要查看这些“对立可视化”的示例,包括图像块-文本相似度图和 Grad-CAM,可参考预印本《A Closer Look at the Explainability of Contrastive Language-Image Pre-training》[5]的第 19 页。截至目前,尚未有完整的解释这一现象的单一理论,尽管已经提出了一些部分假设。

自注意力图

其中一个假设在前述论文[5]中有详细描述。该研究将范围限定在 ViT 架构,并检查 CLIP ViT 最后一个自注意力模块中的注意力图。对于给定的输入图像和文本类别,这些注意力图(w × h)的计算方式如下:

  1. 具有最高余弦相似度的图像块嵌入(一个d维向量——与图像级嵌入的输出维度相同)被选为锚点图像块。

  2. 注意力图通过计算锚点图像块查询嵌入Q和所有键嵌入K的查询-键注意力权重来获得,这些权重可以被重塑为一个* w * × * h *大小的热力图。注意力权重计算公式如下:

你可能会期望锚点图像块主要关注与感兴趣类别语义相关的图像块。然而,这些查询-键注意力图表明,锚点图像块与其他无关图像块的关注程度相同。因此,查询-键注意力图呈现斑驳状,难以解释(有关示例,请参见论文[5])。作者提出,这或许能够解释在 CLIP ViT 中观察到的噪声图像块-文本相似度图。

另一方面,作者发现值-值注意力图更有前景。通过实验证明,值-值注意力权重仅在与锚点语义相关的图像块附近较大。值-值注意力图并不是完整的判别性热力图,但它们是一个更有前景的起点。

3. 基础一切模块(2024)

希望你现在能明白为什么对于 CLIP,训练无关的定位不像在有监督的 CNN 中那样直观——而且目前还不完全理解为什么。也就是说,2024 年提出的 CLIP ViT 的新定位方法,称为万物定位模块(GEM)[1],取得了显著的成功。GEM 本质上是一种无训练的方法,用于修正我们在前一节中看到的噪声查询-键注意力图。通过这种方式,GEM 修改后的 CLIP 编码器可以用于零-shot、开放词汇的定位。让我们来看看它是如何工作的。

自我自我注意力

GEM 背后的主要思想称为自我自我注意力,它是值-值注意力概念的推广。

给定查询 Q、键 K 和值 V,自我自我注意力模块的输出是通过对 t = 0, …, n 进行查询-查询、键-键和值-值的注意力迭代计算得到的:

其中 p₀ ∈{Q, K, V} 和 n,迭代次数,是一个超参数。这个迭代过程可以被认为是基于点积相似性对初始 tokens p₀进行聚类。在这个过程的末尾,生成的 tokens pₙ 是初始 tokens p₀的“中心”集。

生成的自我自我注意力权重然后被集合起来,以产生自我自我注意力模块的输出:

其中:

这与传统的查询-键注意力模块不同,后者的输出仅通过以下方式计算:

万物定位模块

现在考虑我们在前一节中生成值-值注意力图的方法,首先我们根据与类文本嵌入的相似性选择了一个锚点补丁,然后计算了值-值注意力图。GEM 可以看作是这个过程的逆过程,其中:

  1. 第一步是对 ViT 中最后 m 个注意力块应用 qkv- 集成的自我自我注意力,而不是常规的注意力(m 是另一个超参数)。直观地说,这是一种计算值嵌入 V 的集成聚类分配的方法,从而修正原始的查询-键注意力图。

  2. 第二步是通过计算从修改后的 ViT 输出的补丁嵌入与类文本嵌入之间的余弦相似性来生成热图。这实际上为每个集群提供了一个类别 logit。

这组 logits 可以被重新形状化,以生成所选类别的判别热图,该热图可以采用任何任意文本的形式!以下是针对不同类别提示的 GEM 热图示例(红色表示与类别提示的相似性较高):

作者生成的不同文本类别的 GEM 热图 | (顶部) 图片由Nirzar Pangarkar提供,来源于Unsplash | (底部) 图片由Arnav Das提供,来源于Unsplash

区分性定位可以将图像级编码器转变为一种可以用于语义分割的模型,无需昂贵的标注掩膜。此外,无需训练的定位是一种强大的方法,使得视觉编码器更具可解释性,允许我们看到它们所看到的内容。

对于监督式视觉模型,零-shot 定位最早是通过类激活图(class activation maps)这一针对特定类型 CNN 架构的技术开始的。随后,提出了这一方法的推广,使其适用于任何监督式 CNN 架构。然而,对于 CLIP 风格的编码器,训练-free 定位则不那么直接:相反的可视化现象仍然未被充分解释,并且在不同的 CLIP 编码器架构中普遍存在。到今天为止,像 GEM 这样的 CLIP ViT 定位技术已取得成功。是否有一种更广泛的技术等待被发现?

参考文献

  1. W. Bousselham, F. Petersen, V. Ferrari, H. Kuehne, 全面定位:视觉-语言变换器中的新兴定位特性 (2024),2024 年 IEEE 计算机视觉与模式识别大会(CVPR)

  2. B. Zhou, A. Khosla, A. Lapedriza, A. Oliva, A. Torralba, 学习深度特征用于区分性定位 (2016),2016 年 IEEE 计算机视觉与模式识别大会(CVPR)

  3. R. R. Selvaraju, M. Cogswell, A. Das, R. Vedantam, D. Parikh, D. Batra, Grad-CAM:通过基于梯度的定位从深度网络获得视觉解释 (2017),2017 年 IEEE 国际计算机视觉大会(ICCV)

  4. Y. Li, H. Wang, Y. Duan, H. Xu, X. Li, 探索对比语言-图像预训练的视觉解释 (2022)

  5. Y. Li, H. Wang, Y. Duan, J. Zhang, X. Li, 更深入地探讨对比语言-图像预训练的可解释性 (2024)

posted @ 2025-01-09 18:55  绝不原创的飞龙  阅读(65)  评论(0)    收藏  举报