原文:Domino Blog
协议:CC BY-NC-SA 4.0
原文:https://www.dominodatalab.com/blog/bias-policing-analysis-traffic-stop-data
Mollie Pettit ,Metis 的数据科学家和 D3.js 数据可视化讲师,带领数据科学家分析伊利诺伊州警察交通停车数据,呈现 2016 年芝加哥的故事叙事。Pettit 还讨论了数据科学家在分析数据和呈现故事叙述时,如何以及为什么需要深思熟虑并意识到假设。
在芝加哥举行的数据科学 PopUp 上,Mollie Pettit 介绍了对 2016 年伊利诺伊州警察交通拦截数据进行的数据分析。佩迪特回顾了数据是如何收集的,如何在分析数据时挑战假设,以及在 2016 年芝加哥的数据中发现或没有发现偏差的情况。
会议的主要亮点包括
- 在芝加哥,黑人和西班牙裔司机的搜索率明显高于其他群体,但违禁品“命中”率最低
- 在芝加哥,黑人司机比其他种族的司机更不容易收到传票
- 在伊利诺伊州,黑人和西班牙裔司机通常更有可能被搜查,亚裔司机不太可能被搜查,而西班牙裔司机更有可能被引用
- 数据科学是一个迭代过程,包括通过不断提问来挑战假设
佩迪特在会议结束时提醒数据科学家考虑假设
“我只是想提醒人们,在做分析时,应该非常仔细地考虑他们对数据所做的假设。如果假设被忽略,那么讲述一个数据本身并不完全支持的故事是非常容易的,这是所有行业都要记住的事情,无论是与非营利组织还是保险公司合作。”
如需从会议中获得更多见解,请观看视频或通读演示文稿。

大家好。我叫莫莉·佩迪特。我的推特账号是@MollzMP。如果你想对我发微博,请自便。我目前是 Metis 的 D3.js 数据可视化讲师。我也是一名数据科学家。我以前在 Datascope Analytics 工作,现在是 IDEO 的一部分。实际上,我就是用 Datascope 做了一个项目,今天我将向你们介绍这个项目。我们将关注警务中的种族偏见,特别是在分析伊利诺伊州的交通站数据时。
2016 年,伊利诺伊州发生了超过 200 万次警察交通拦截。每停一次,就有一名官员填写这张表格。我将带您浏览一下这个表格,因为它将帮助您了解我们正在处理的数据是什么样的。他们[军官]填了这张表格。他们猜到了比赛的车手;记录下司机被拦下的原因——超速行驶、系安全带、违反设备规定等等——警官是否进行了搜查;如果搜查,是否发现违禁品-违禁品可能是毒品、武器、赃物-然后采取什么行动。他们收到传票了吗?他们得到口头警告还是书面警告?这是我们必须处理的数据。
其他城市也研究了类似的数据——纽约时报、华盛顿邮报、德克萨斯论坛报、迈阿密新时报——来自其他城市的报告显示了交通堵塞的偏见。伊利诺伊州的数据反映了这一点吗?交通站数据中有种族偏见的证据吗?换句话说,少数族裔司机比白人司机更容易被拦下、搜查或传讯吗?我们对整个伊利诺伊州进行了分析,但对于这次演讲,我将专注于芝加哥,特别是 2016 年的数据。我们也考虑了其他年份,但是现在我们只考虑 2016 年。
同样,这个问题——实际上你可以把它想象成——这个图表——我们的议程。我们首先要看看谁被拦住了。稍后,我们将查看搜索和引用。那么,2016 年谁被停了?在此之前,我们先来看看芝加哥的人口。
在这个图形中,每种颜色代表一个不同的种族或民族。这里看到的比例反映了芝加哥人口的比例。在一个没有偏见的完美世界中,如果我们假设驾车人口反映了城市人口,我们会希望这两者看起来一样,停靠点会反映这一点。下图中看到的比例反映了停止人口的比例。停靠站人口中黑人司机的比例是城市中黑人司机比例的两倍……对不起,城市中的黑人居民。停靠站人口中白人司机的比例是该市白人居民比例的一半。
这里可能会出现一个问题——因为这本身就是一个有趣的图形,对吗?在底部,黑人司机停车加油的数量相比之下非常大…但是仅仅看这个就意味着偏见吗?我们认为,就其本身而言,并不完全是这样,我们将讨论为什么不是这样。
这里有几样东西。首先,我们看的是城市人口和停靠点人口。现在,为了暗示偏见,我们假设芝加哥的居住人口的人口统计数据与芝加哥的驾车人口的人口统计数据相同。事实是,我们实际上并不知道驾驶人口是多少。我们可以猜测,有很多种方法可以让这些猜测更准确,但这里有很多事情要考虑。
首先,谁使用公交?谁开车去上班?谁住得离工作地点近,谁住得离工作地点远,因此花在路上的时间更多?当查看芝加哥以外的城镇时,一个相关的问题可能是,这是一个免下车城镇吗?
也许这个城镇的大部分人口是白人,但经常有少数民族人口较多的邻近城镇的居民在上下班途中经过。这些因素使得驾驶人口很难确切知道,也很难直接与城市人口进行比较。此外,需要指出的另一点是,这些交通站点数据是由官员而不是司机报告的。人口普查数据由每个人报告,每个人是驾驶人口的子集。所以,因为这两个数据集是由完全不同的人群记录的,你不可能完全知道它们有多好或者没有关联。
更令人困惑的是,这两种形式对种族的定义略有不同。西班牙裔和拉丁裔是交通站表格上的种族,在人口普查表格上是种族。这使得数据匹配更加复杂。
好的。所以,当然,我到目前为止所说的是,就我到目前为止向你们展示的内容而言,还不足以暗示任何形式的偏见。当然,我们不知道确切的驾驶人数,这使得仅凭停车次数来推断偏见是不明智的。然而,我们确实有被拦下的人,我们知道警察对每个被拦下的人采取的策略,以及他们被拦下后发生了什么。
他们被搜查了吗?他们没有被搜查吗?他们被开罚单了吗?某个特定的群体更有可能被搜查或被开罚单吗?这就是我们认为可以更准确地检测出偏差并具有更大意义的地方。
我们将深入调查,看看谁被搜索过。从现在开始,当我谈论种族时,这是警官假设的种族。正如我们在这里看到的,在被拦下的黑人司机中,1.7%被搜查,西班牙裔司机 4.3%,白人司机 0.8%,亚裔司机 0.6%。
当一名警察在 2016 年让一个人靠边停车时,如果一个人是西班牙裔或黑人,他们肯定更有可能搜查他。
我想用另一种方式来描绘它,这样我们就可以和伊利诺伊州的其他地方进行比较。在 x 轴上,你会看到白色搜索率。在 y 轴上,少数民族搜索率,如果当我画一个部门时一切都相等,首先我们会显示芝加哥,然后如果一切都相等,那么它会落在相等的线上。如果高于这条线,少数族裔司机会被搜索到更高的搜索率,低于这条线,他们会被搜索到更低的搜索率。
芝加哥在哪里?芝加哥和这些价值观,特别是针对西班牙裔和黑人的价值观,确实表明了芝加哥警方在选择搜查对象时的种族偏见。是的,在你问之前,我们确实检查了统计显著性。黑人和西班牙人的搜索率明显不同于零,而亚洲人的搜索率差异较小,更接近你在公平系统中的预期。所以,让我们把整个芝加哥都吐出来。抱歉,整个伊利诺伊州。正如你所看到的,几乎所有警察部门搜查黑人和西班牙裔司机的比率都高于白人和亚裔司机。
对这种特殊测试的一个普遍批评是,它没有考虑是否有任何发现。一些批评家可能会说,如果这个群体的点击率也更高,那么这些更高的点击率是合理的,这是一些人可能会说的。我所说的命中率是指是否发现了违禁品。我们可以看看哪里发现了违禁品。
黑人和西班牙裔司机的违禁品发现率较低,尽管 2016 年黑人和西班牙裔司机更有可能被搜查。我会把它和伊利诺伊州的其他数据放在一起。它比我给你看的上一组稍微少了一点戏剧性,更多的部门聚集在平等线周围,但值得注意的是,伊利诺伊州的大多数部门在搜索黑人和西班牙裔司机时发现违禁品的比率确实低于白人司机。
最后一个我想探究的是谁被引用了。西班牙裔和白人司机更有可能被传讯,亚裔司机紧随其后。在被拦下的黑人司机中,他们不太可能收到传票。但仍然值得注意的是,由于黑人司机靠边停车的数量,他们收到了芝加哥超过一半的传票。如果我们把这些放在和以前一样的地块上,看看整个伊利诺伊州,总的来说,这里的情况更接近相等。在整个伊利诺伊州,西班牙裔司机是被引用最多的,芝加哥在这方面比其他部门更接近平等。
我今天给大家的主要总结是,2016 年在芝加哥,黑人司机在停车站人口中的比例是黑人居民在城市人口中比例的两倍。对黑人司机的搜查比任何其他群体都多,但违禁品命中率最低。与其他种族的司机相比,黑人司机收到的罚单比例要低得多。西班牙裔司机在芝加哥被搜索的可能性明显更大,在伊利诺伊州被引用的可能性也明显更大。还有很多其他的因素需要探索,其中很多我们都有,我只是没有展示给你们,还有一些我们希望继续挖掘的。
结论,我只是想提醒人们,在做分析时,应该非常仔细地考虑他们对数据所做的假设。如果假设被忽略,讲述一个数据本身并不完全支持的故事是非常容易的,这是所有行业都要记住的事情,无论是与非营利组织还是保险公司合作。这并不是说永远不应该做假设——有时候假设是必要的。见鬼,它们经常是必要的——但是明确它们是非常重要的。如果你想了解更多这方面的工作,这里有几个地方你可以找到——斯坦福开放政策项目和开放数据政策。这些是在这个领域做事情的其他人。如果你想查看伊利诺伊州的数据或了解更多,请随时联系我。感谢伊利诺伊州美国公民自由联盟为我们提供数据,并在这方面与我们合作。感谢 Datascope 的帮助和反馈。谢谢你听我说。
Domino 编辑注意:为了可读性,这篇文字经过了轻微的编辑。
原文:https://www.dominodatalab.com/blog/big-data-big-problems-nate-silver-of-fivethirtyeight-shares-tips-for-navigating-today-s-data-science-challenges
说到数据,我们认为越大越好。事实上,大数据时代带来了一系列与数据科学建模相关的新挑战,今天的从业者必须正面应对,统计学家内特·西尔弗(Nate Silver)表示,他是 FiveThirtyEight.com 的创始人,并因其对政治民调的分析而闻名。
“我们拥有更好的信息和更多的数据,我们一直在变得越来越聪明,但世界仍然经常对我们来说非常不可预测,”Silver 在 5 月份在旧金山举行的为期两天的峰会上的主题演讲中说,该峰会聚集了 300 名数据科学领袖。
据 IBM 称,我们手边的信息量呈指数级增长,世界上 90%的数据是在过去两年中创建的。Silver 指出了数据爆炸带来的三个主要问题:
- 人们更有可能以不同的方式解释同样的证据。西尔弗提到了 2016 年总统选举的例子,当时同样的数据产生了导致大相径庭的预测的模型。
- **信噪比更高,增加了发现假阳性的风险。**大量的数据点意味着你可以测试大量的关系,但这并不意味着表面上的相关性在推动预测或描述系统方面实际上是可靠的(这是学术界复制危机背后的一个原因)。例如,美联储实时跟踪 509,000 个经济统计数据,产生超过 2,580 亿个潜在的双向关系。只有一小部分可能是有意义的。“大海捞针是当今数据科学的重要组成部分,”Silver 说。
- 很难区分功能和缺陷。在竞争激烈的环境中,数据科学家不断试图发现竞争对手错过了什么或他们错在哪里。当他们降落在某个东西上时,很难知道这个发现是重要的还是转移注意力的,也很难知道是相信算法还是经验和直觉。“在那些边缘情况下……我们确实需要人力资本,”西尔弗说。“这不全是自动化的问题。”
随着对这些新出现的问题的认识不断提高,Silver 对试图在建立预测模型时应对大数据争论的潜在陷阱的数据科学家提出了建议。他的见解借鉴了贝叶斯定理,这是一种广泛使用的统计理论,有助于确定新信息如何改变事件发生的概率:
- 从概率的角度思考。从明确定义某件事发生的可能性开始(称为先验概率),并在收集新信息时更新这一预测。确保传达不确定性——误差幅度可能和预测一样重要。
- 从源于强势文化的先验概率开始。提出一个先前的信念本质上是主观的,是基于经验的。但是你可以避免群体思维的问题,并且建立一个更强的假设,如果你的先验概率来自不同的团队,就人口统计学和技能集而言;自由独立思考和说话;分散的,可以看到地面的情况。
- **从事试错。**改进模型的方法是测试、从经验中学习并随着时间的推移不断迭代。最初,学习曲线很陡,你进步很快。但是“当你处于一个竞争的环境中…你通过相对边际和增量收益获得竞争优势,”西尔弗说。天气预报员在预测方面比其他领域做得更好的原因之一是,他们每天都在练习,并不断地将输入反馈到他们的算法中。但是试错法有其局限性:当错误的近似可能导致危机时,需要更多的时间来完善你的模型。
有了正确的流程,数据科学领导者就有机会在大数据时代铺平前进的道路。谈到数据科学,“我们并没有处于黑暗时代,”西尔弗说。“我们处在一个发现的时代。”
原文:https://www.dominodatalab.com/blog/black-lives-matter
By Natalie McCullough, President & COO, Domino on June 19, 2020 in Company Updates
作为一家公司,我们感到痛苦、沮丧和其他复杂情绪的混合,以应对我们在过去几周看到的令人震惊的种族主义表现。我们已经就我们作为一个组织能够和将要做什么来推动变革进行了几次内部讨论。
达美乐的核心价值观之一是“求真,讲真话”。因此,我们想公开宣布达美乐对黑人的命也是命的支持,以及我们对需要发生的变化的支持。
我们还决定作为一家公司采取具体行动,尽我们所能来改善这种情况。首先,作为一套原则,我们希望采取具有最大影响力、与我们的价值观一致并且我们能够长期坚持的行动。牢记这些原则,我们认为多米诺可以通过两种主要方式为打击系统性种族主义做出有意义的贡献。
第一个也是最直接的行动是确保 Domino 是一个多样化、包容和公平的组织。世界需要发生的变化从我们个人开始,从 Domino 作为一个组织开始。我们是我们领域的领导者,我们也有机会成为这方面的领导者。具体而言,我们承诺实施以下内容:
- 到第三季度末,所有职位都有不同的招聘小组
- 在 Q2 和第三季度,Domino 增强了面试官培训
- 针对代表性不足的少数族裔,在工作公告板上张贴多米诺角色
- 在历史上的黑人学院和大学进行有针对性的校园招聘
- Domino 员工多元化指标的透明度,包括我们的位置和目标
其次,作为一个企业数据科学平台,我们有一个独特的机会来提供一个环境,让数据科学家可以用来分析犯罪和执法统计数据。就像我们为新冠肺炎研究提供的环境一样,我们可以使用我们独特的技术产品,让公众更容易获得犯罪和执法统计数据,并鼓励使用数据来推动政策和其他决策,从而改善现状。我们计划在接下来的几周内推出这一产品,并已要求我们的员工帮助实现这一目标。
我们还想对致力于在全球范围内消除种族主义的组织表示我们的财政支持。达美乐的高管团队已经个人出资 5000 美元,以匹配员工对致力于多样性、平等和包容(DEI)的非营利组织的贡献,即克服种族主义和支持当地社区行动。捐款最多可匹配 100 美元,直到用完为止。
最后,我们将今天定为全球公司休息日。六月二十一日是美国废除奴隶制历史上的重要一天,尤其是今年,在世界许多地方,这是一个有计划的社区行动日。我们鼓励员工利用这段时间进行反思,并在一天中抽出一部分时间来了解或采取行动打击社区中的系统性种族主义。
这不是将要完成的一切,而是我们承诺的旅程的开始。请继续向我们提供反馈和想法,并请相信我们致力于使 Domino 成为一个所有种族、性别和背景的人都能茁壮成长的组织。
Twitter Facebook Gmail Share
原文:https://www.dominodatalab.com/blog/bnp-paribas-cardif-innovating-in-a-changing-world
我们都面临着这个问题:需要做得更多、更快。
作为保险业的主要参与者,法国巴黎银行卡迪夫银行希望加快每一次客户互动——从签发保单和处理索赔到了解他们的反馈——以满足不断变化的客户期望。我们需要加快新产品的交付,以在不断变化的时代保护我们的客户。我们需要在快速识别和管理风险及法规遵从性的同时做到这一切。对于我们的数据科学团队来说,这要求我们提高我们的 模型速度 以加速我们工作的每一个部分,从模型研发到部署并持续改进那些模型。

数据科学黑客马拉松,或数据挑战,一直被认为是激发创造力和协作的工具。在 BNP Paribas Cardif,我们对员工进行内部和集团范围的数据挑战。去年,我们在拉丁美洲的同事甚至与来自智利、哥伦比亚、墨西哥和秘鲁的大学和合作公司的 100 名数据科学家一起举办了首次外部虚拟数据挑战赛。
在我们最近的数据挑战赛中,我们举办了一场雄心勃勃的全集团数据挑战赛,在为期三天的比赛中,来自法国巴黎银行集团的 70 名数据科学家齐聚一堂,以团队合作的方式解决了一项复杂的业务挑战。
本次数据挑战赛由 与法国巴黎银行零售银行&服务数据&分析团队联合举办,负责挑战设计,NiCKEL 负责数据和业务案例。NiCKEL 拥有超过 6500 个销售点,是法国第二大客户分销网络,为 250 万客户提供服务。作为一项业务挑战,他们要求团队使用高级自然语言处理(NLP)技术分析真实世界客户的逐字文本记录,以便查明主题、观点和推动每个客户体验的因素。我们很高兴提议由我们的技术专家来主持这次挑战。我们基于 Domino 平台的 设置允许我们为每个团队提供图形处理单元(GPU ),使数据科学家能够探索最先进的基于目标的情感分析 模型 需要这种级别的强大计算资源。
完成这样的挑战,三天时间并不算长。在黑客马拉松这么短的时间内必须创新,这为如何管理数据科学项目以在我们的日常工作中更快地创新提供了几个重要的提醒。
像这样的复杂挑战通常需要复杂的解决方案。在数据科学中,我们的倾向可能是深入研究,从一开始就映射所有的特性和功能的想法,这应该使我们能够预测最准确的答案。然而,获胜的团队通过一步一步地构建他们的解决方案,从几个关键功能开始,在仪表板上可视化这一早期工作,然后一点一点地升级它,从而产生了最佳结果。那些以更复杂的解决方案开始的团队通常很难实现它。
法国巴黎银行集团是一个分布式组织,拥有十多个业务实体,分属于三个主要业务领域——商业和个人银行及服务;投资和保护服务;和企业机构银行业务。来自法国巴黎银行不同实体的代表参加了此次数据挑战,其中许多人之前从未见过面。在为期三天的比赛中,团队可以使用 Domino 平台在代码上进行合作,并迅速利用彼此的想法来推动可能的极限。在我们在巴黎银行卡迪夫的日常工作中,我们的 100 名数据科学家每天都使用 Domino 来分享他们的工作,所以我们并不总是从零开始。这种合作还可以加强我们的数据科学社区,为数据科学家创造职业流动机会,并留住员工。
对于测试许多不同理论的团队来说,他们必须能够快速轻松地扩展他们所需的计算资源。这是我的团队和我们的 IT 同事被要求支持这项挑战的原因之一。在 BNP Paribas Cardif 中,我们使用 DominoEnterprise MLOps platform作为我们的工作台。它使我们的数据科学家只需点击几下鼠标,就能启动他们需要的工具和计算,因此他们可以更快地迭代更多想法,并在更短的时间内构建、部署和重新训练模型。这帮助我们更快地取得进展,变得更加人工智能驱动。今天,我们有数百个项目在 Domino 上运行——从最初的勘探到工业开发和生产。对于数据挑战,我们与我们的 IT 部门合作,让 40 个 GPU可用,每个团队一个。使用 Domino 平台,参与者可以很容易地访问 GPU 来测试他们的想法。高性能计算的使用一直是我们战略的核心,使我们能够利用先进的人工智能技术,如最先进的自然语言处理。
我们已经在计划下一次数据挑战,这次挑战将和上次挑战一样雄心勃勃,这样我们的专家就可以继续提高他们在高级数据科学方面的技能。对于即将到来的挑战,BNP Paribas Cardif 将提供平台(使用 Domino 提供对 GPU 的访问)和业务挑战,与我们的二手手机盗窃和损坏保险相关。该保险产品旨在延长设备的生命周期,并对环境产生积极影响。我们将要求参与者使用最先进的计算机视觉技术来评估二手智能手机屏幕的照片。面对这一挑战,我们可能会提出新的服务来改进订阅和索赔流程。这是我们路线图上的众多用例之一。
我们都面临着做得更多、更快的需求。追求如此雄心勃勃的数据挑战有助于我们评估我们作为一个群体的现状,并提醒我们我们已经有能力做什么。
-
观看法国巴黎银行 Cardif 的 Sebastien Conort 在他的演讲中分享他们如何使用 Domino 平台开发和管理其人工智能算法,“ 催化您的转型,感谢模型风险治理 。”
-
访问 法国巴黎银行 Cardif 网站 ,看看法国巴黎银行是如何让保险变得更容易获得的。
-
阅读 Forrester 报告, “多米诺企业 MLOps 平台的总体经济影响”, 了解更多关于多米诺提供的价值。
原文:https://www.dominodatalab.com/blog/bringing-ml-to-agriculture
在气候公司,我们的目标是帮助农民更好地理解他们的经营,做出更好的决策,以可持续的方式提高他们的作物产量。我们开发了一个模型驱动的软件平台,名为 Climate FieldView ,它可以为农民捕获、可视化和分析大量数据,并提供新的见解和个性化建议,以最大限度地提高作物产量。FieldView 可以整合特定于种植者的数据,例如从特殊设备流入的历史收获数据和操作数据,包括安装在拖拉机、联合收割机和其他农业设备上的(我们的 FieldView Drive )。它整合了公共和第三方数据集,如天气、土壤、卫星、海拔数据和专有数据,如我们从母公司拜耳获得的杂交种子的遗传信息。
通过我们的平台,农民可以了解特定施肥策略的影响,并根据需要进行调整。他们可以更早地发现潜在的问题区域,比如一块受到作物病害影响的土地,这样他们就可以迅速采取行动。农民可以确定他们应该在农场的哪个区域种植哪些种子,以获得每英亩的最大收益。
这些建议不仅对农民的钱包有好处;它们对环境也有好处。例如,我们的模型可以向农民展示如何在使用更少化肥的同时提高产量。
将机器学习引入农业领域是相对较新的事情。为了实现农业的数字化转型,我们必须在整个模型生命周期中快速试验和学习。为此,我们制定了公司战略和架构,以加速从概念到商业化的整个模型流程。

^(图 1:模型生命周期)
- 数据 -为公司的数据资产带来结构和组织,以支持 EDA(探索性数据分析)
- 特性工程 -通过一套可重用的工具、库和基础设施,在整个公司范围内创建、共享和发现特性。
- 模型构建 -高效、有效地训练和验证大规模模型
- 执行 -通过尽快完成从发现到生产的过渡,深入了解客户的想法
- 监控 -确保模型的行为符合预期,并了解何时需要改进
本文主要关注加速模型开发。
加速机器学习模型开发围绕两个主要因素:获取新知识的能力和发现他人产生的知识的能力。通过使发现新的见解和利用他人的见解变得简单和容易,网络效应被创建以加速未来的发现。
我们进行的每个实验、生成的每个功能和构建的每个模型都必须是公司的每个科学家都可以发现和使用的。其次,由于我们必须汇集的数据的多样性和数量,从种子的基因组、天气、土壤类型、管理实践、卫星和无人机图像(见图 2)的一切。)-数据和培训基础设施必须灵活、可扩展,同时消除不会增加知识获取周期的耗时任务。我们的目标是让数据科学家成为数据科学家,而不是数据或基础架构工程师。

^(图 2:气候公司的各种数据)
我们选择利用 Domino Data Lab、Amazon Web Services (AWS)和开源社区的最佳特性来解决这个知识加速问题。
在 Climate Corporation,我们采用了预构建的 Domino 容器,并将其扩展到我们的环境中。从身份和访问管理(IAM)策略到通用包安装,再到 Amazon EMR 上 Spark 的连接,一切都可供科学家使用。只需点击一个按钮,他们就有了一个准备就绪的环境,Domino 为科学家提供了一个简单的扩展点来定制环境,而不需要了解 Docker 的复杂性。
多米诺在再现性和发现性方面大放异彩。一个项目的每一次运行都被记录和调用。实验和协作是该平台的核心。然而,真正的知识加速是通过发现平台上其他人的研究来实现的。通过简单的关键字搜索,科学家可以扫描项目、文件、合作评论、以前的运行、用户创建的标签等,以找到其他相关的研究或主题专家。
如前所述,我们的领域包含大量各种形状和大小的数据,我们需要一种能够处理这种复杂性和规模的数据格式和培训平台。我们希望这个平台简单,能够与多种框架和我们现有的基础设施协同工作。我们需要一个“可进化架构”,它将与下一个深度学习框架或计算平台一起工作。模型框架的选择或者在 1 台机器或 50 台机器之间的选择不需要任何额外的工作,对于科学家来说应该是相对无缝的。同样,一组特性应该可以被其他框架和技术重用,而不需要昂贵的格式转换。
为什么是 Sagemaker?
- 准备运行和可扩展的培训容器
如果您曾经尝试从头构建 TensorFlow 环境,您就会知道让所有依赖项和驱动程序的正确版本正常工作是多么困难。现在我们可以简单地选择一个预建环境或者甚至扩展一个容器来添加petastom或者其他库,就像我们在这里做的那样。
- 即时培训基础设施
通过简单地更改对 SageMaker 的 API 调用中的配置,您可以创建具有不同 CPU、GPU、内存和网络容量组合的培训基础设施,从而为您提供选择适当资源组合的灵活性。这种能力提高了运营管理的效率,优化了实验成本。
- 超参数调谐
并行尝试超参数的多种组合而不是串行执行这些测试的内置能力通过提高实验效率极大地加速了模型构建过程。
为什么是 Petastorm?
我们的科学家和团队熟悉在 Spark 中处理 EMR,以及使用我们现有的功能存储和数据仓库中的数据。Petastorm 使创建可互操作的数据集变得容易,这些数据集可以用于多种目的,而不必学习一套新的工具或以多种格式编写数据集(即 TFRecord 和 Parquet)。通过在 parquet 上创建一个薄层,Petastorm 数据可以用于 Spark SQL 查询或在深度学习培训工作流中工作,无需修改。因为它是 parquet,我们获得了 parquet 的所有好处,包括自描述模式和 IO 优化。为了全面了解 Petastorm 的好处,请查看这个博客。
下面是使用 Domino、Petastorm 和 SageMaker 并使用 MNIST 数据集的示例工作流的摘录。完整示例可在此处获得。

- 在 Domino 中创建一个项目并启动一个工作区:

- 创建我们的 Petastorm 功能:
|
# Get training and test data
if mnist_data is None:
mnist_data = {'train': download_mnist_data(download_dir, train=True),
'test': download_mnist_data(download_dir, train=False)}
# The MNIST data is small enough to do everything here in Pythonfor dset, data in mnist_data.items():
dset_output_url = '{}/{}'.format(output_url, dset)
# Using row_group_size_mb=1 to avoid having just a single rowgroup in this example. In a real store, the value
# should be similar to an HDFS block size.
with materialize_dataset(spark, dset_output_url, MnistSchema, row_group_size_mb=1):
# List of [(idx, image, digit), ...]
# where image is shaped as a 28x28 numpy matrix
idx_image_digit_list = map(lambda idx_image_digit: , enumerate(data))
# Convert to pyspark.sql.Row
sql_rows = map(lambda r: dict_to_spark_row(MnistSchema, r), idx_image_digit_list)
# Write out the result
spark.createDataFrame(sql_rows, MnistSchema.as_spark_schema())
.coalesce(parquet_files_count)
.write
.option('compression', 'none')
.parquet(dset_output_url)
|
- 使用五台机器在 SageMaker 上训练:
|
kwargs = dict(entry_point=entry_point,
image_name=IMAGE_NAME,
role=IAM_ROLE,
sagemaker_session=sagemaker.Session(boto_session=boto_session),
train_instance_count=5,train_instance_type='ml.m5.xlarge',
framework_version='1.13',
hyperparameters=,
py_version = 'py3',
output_path = output_path,
code_location=code_location,
distributions={'parameter_server': {'enabled': True}})
mnist_estimator = TensorFlow(**kwargs)
# we're bypassing the conventional sagemaker input methods because we are using petastorm. We will show this in a moment.
mnist_estimator.fit(inputs=None)
|
- 我们的 entry_point 脚本的关键部分,在这里我们读取 petastorm 数据集并将其转换为张量。
|
def streaming_parser(serialized_example):
"""Parses a single tf.Example into image and label tensors."""
# 28 x 28 is size of MNIST example
image = tf.cast(tf.reshape(serialized_example.image, [28 * 28]), tf.float32)
label = serialized_example.digit
return {"image": image}, label
def _input_fn<(reader, batch_size, num_parallel_batches):
dataset = (make_petastorm_dataset(reader)
# Per Petastorm docs, do not add a .repeat(num_epochs) here
# Petastorm will cycle indefinitely through the data given `num_epochs=None`
# provided to make_reader
.apply(tf.contrib.data.map_and_batch(streaming_parser,
batch_size=batch_size,
num_parallel_batches=num_parallel_batches)))
return dataset
|
- 运行的结果自动保存在我的 Domino workspace 中,以实现可重复性,模型保存到亚马逊 S3,以便以后由我们的基础设施堆栈的其他部分推广到生产中。
通过遵循这种使基础设施与模型生命周期保持一致的模式,并通过数据、特性、模型和实验的民主化来关注加速知识获取过程,我们已经能够快速增加部署模型的数量以及年复一年部署它们所需的时间。对我们来说,下一个大胆的步骤将是减少围绕组合各种类型的时间、空间和非空间数据的特征工程挑战,以便我们的科学家在训练模型中使用。一旦创建了训练集,我们就有了在模型上快速迭代的基础设施,但是我们希望进一步从数据科学家的角色中消除数据工程任务,让他们成为数据科学家。
附加链接
- 花瓣风暴
- https://github.com/TheClimateCorporation/peta-sage
原文:https://www.dominodatalab.com/blog/building-a-high-throughput-data-science-machine
这篇文章最初发表在奥赖利雷达博客上。
缩放很难。扩展数据科学非常困难。运营一个复杂的数据科学组织需要什么?当您扩展到可重复、高吞吐量的数据科学机器时,您需要考虑哪些事情?
气候公司的科学副总裁埃里克·安德列科多年来一直专注于这个问题,建立和发展多学科数据科学团队。在本帖中,我们让你深入了解他认为对继续为他的组织建立世界级团队至关重要的是什么。最近,我与 Erik 讨论了数据科学的实践、组织的扩展以及数据科学项目的关键组件和最佳实践。
我们还谈到了 2016 年数据科学家必备的技能— 它们可能不是你所想的那样。
我鼓励您观看完整的采访—我们涵盖了广泛的主题,这是一次关于如何将数据科学提升到一个新水平的有趣对话。下面是我想强调的一系列谈话要点。
科学有一个再现性的问题。
众所周知,科学存在可重复性问题。最近的一项研究表明,药物研发项目中近 90%的研究无法重现。鉴于现代数据科学管道的复杂性质,再现性是一项要求,而信任结果和生成结果的流程的能力对于寻求超越简单模型的组织来说至关重要。
支持大规模的组织需要您能够信任他人的工作,并依赖它来重用和扩展。埃里克·安德列科
Erik 和我谈到了数据科学过程在信任方面具有分形自相似性的一些有趣方面。Erik 注意到,在探索性数据分析过程中,您正在建立对数据的信任,这使您有信心使用它来建立模型。Erik 和我讨论了这对数据科学组织意味着什么,包括关注信任、自动化和可再现性。
https://player.vimeo.com/video/159147612?title=0&byline=0&portrait=0
好的数据科学需要过程。
在我帮助组织的聚会中,我听到许多数据科学家抱怨他们组织中的正式流程制度。社区中有一种信念,认为流程会扼杀创新,并试图“控制和测量”数据科学家。任何人都不应该忽视数据科学家不希望被跟踪和衡量的讽刺意味,因为他们处于一个特权地位,知道被跟踪的东西会受到怎样的影响。不管你喜不喜欢,扩展组织需要额外的过程,但是并不是所有的过程都是不好的!
我看到它以错误的方式完成——没有过程——它肯定没有人们希望的那么快。尤其是你解错题的时候。埃里克·安德列科
Erik 和我讨论了正式流程在数据科学中的作用。尽管已经有许多创建行业标准和特定于供应商的流程框架的尝试,如 CRISP-DM 和 SEMMA,但数据科学并没有一系列占主导地位的方法。数据科学中没有一个过程像敏捷之于软件工程或精益之于制造。一个好的过程会让你走得更快,并有更高质量的结果。在这个片段中,Erik 和我讨论了 process 如何支持良好的数据科学,以及它如何帮助捕捉常见错误。
https://player.vimeo.com/video/159147624?title=0&byline=0&portrait=0
有许多方法可以将数据科学家整合到一个组织中。
数据科学家属于组织中的哪个部门?如果你和 10 家公司谈论他们如何组织他们的数据科学家,你会得到 11 个不同的答案。事实是,大多数组织都有出于“历史原因”组织起来的数据科学家数据科学家在实施数据战略时所处的位置,对于如何让数据科学家能够跨越障碍提供对关键数据的访问,没有给予足够的考虑。
卓越中心模型提供了跨团队的协调,但仍然给你专业化的好处。埃里克·安德列科
拥有一名数据科学家的组织通常会让他们自由漫游,为项目提供建议。然而,这种方法很难规模化。从分析部门,到嵌入式,再到卓越中心,对于将数据科学家整合到业务中的正确方式,还没有达成共识。在这个片段中,Erik 和我讨论了不同的方法,以及我们所看到的可行和不可行的方法。
https://player.vimeo.com/video/159147607?title=0&byline=0&portrait=0
无需等待即可将模型投入生产。
组织面临的最大挑战之一是让模型足够快地投入生产。在 Domino Data Lab,我们经常听到潜在客户讲述从数据科学团队生成模型到工程团队部署模型之间 12 到 18 个月的时间表。数据工程师和数据科学家之间的这种任务划分,是试图采用基于数据的方法的组织的基本障碍之一。当您意识到模型的输出只是更多的数据时,问题就变得更加复杂了。
最终,商业价值来自于[模型]的部署。部署前的时间越长,实现商业价值的时间就越长。如果你用净现值来衡量的话,折扣会更大。埃里克·安德列科
组织如何管理这些复杂的管道并保护自己免受谷歌论文机器学习:技术债务的高息信用卡中概述的危险?Erik 和我讨论了数据工程和数据科学之间的连续性,以及促进这些功能之间的协作如何能够提供令人惊讶的好处。
https://player.vimeo.com/video/159147613?title=0&byline=0&portrait=0
将“科学”融入数据科学。
Erik 在圣何塞 Strata+Hadoop World 大会上的演讲将更详细地介绍气候公司如何将科学研究中的最佳实践整合到其数据科学工作中。Erik 将描述团队从应用这些最佳实践中获得的好处,以及在他们的组织中采用它们时可能遇到的挑战。
访问气候职业了解更多关于气候公司数据科学职业的信息。
原文:https://www.dominodatalab.com/blog/building-a-speaker-recognition-model
系统通过声音识别一个人的能力是一种收集其生物特征信息的非侵入性方式。与指纹检测、视网膜扫描或面部识别不同,说话人识别只是使用麦克风来记录一个人的声音,从而避免了对昂贵硬件的需求。此外,在疫情这样的表面可能存在传染病的情况下,语音识别可以很容易地部署在涉及某种形式接触的其他生物识别系统的位置。现有的身份认证应用包括:
- 信用卡验证,
- 通过电话安全进入呼叫中心,
- 通过声音识别嫌疑人,
- 利用声音定位和追踪恐怖分子来打击恐怖主义的国家安全措施
- 在远程位置检测讲话者的存在
- 音频数据中说话人的注释和索引
- 基于语音的签名和安全的楼宇访问
说话人确认是更广泛的说话人识别任务中的一个子领域。说话人识别是通过声音来识别说话人的过程。说话人的识别通常是以下使用情况之一所需要的:
-
说话人识别 -给定一个现有的说话人列表,将一个未知说话人的声音分配给列表中最接近的匹配。这里的系统将通过某种有意义的感觉来识别话语与哪个现有说话者的模型相匹配。例如,将生成一个对数概率列表,并且具有最高值的讲话者(在现有讲话者列表中)将被分类为说出“未知”话语的讲话者。
- 这个用例的一个可能的应用是识别音频会议室的单个成员发言的时间戳。
- 如果未知话语是由现有说话者列表之外的说话者说出的,则该模型仍然会将其映射到该列表中的某个说话者。因此,假设传入的语音 具有 来自现有列表中存在的说话者。
-
说话人验证 -给定一个说话人模型,系统验证输入的语音是否来自训练该模型的同一说话人。它决定了个人是否是他们所声称的那个人。
- 这个用例的一个可能应用是使用说话者的声音作为生物认证令牌。
重要注意事项:
-
虽然个人的声音可以被克隆,但声音生物特征的目的是作为多因素认证方案中的“因素”之一。
-
虽然存在更先进的说话人确认模型,但本博客将构成语音信号处理的基础。此外,深度学习方法建立在信号处理的基础上。神经网络的输入应该是从语音信号中提取的特征(MFCCs、LPCCS、40-log mel 滤波器组能量),而不是整个语音信号。
-
在这个项目中,我们关注第二个用例。因此,我们的目标是通过他们的声音来验证一个人,前提是他们以前在系统中注册过。
-
开发是学习与说话人无关的参数的过程,这些参数是捕获特定语音特征所需要的。在开发期间,UBM(通用背景模型)训练发生在通过大样本说话人来学习说话人独立参数的情况下。
-
登记是学习说话者声音的独特特征的过程,并且用于在验证期间创建声称的模型来代表登记的说话者。这里,说话者声音的独特特征被用于创建特定于说话者的模型。说话者说话持续一段时间(通常约 30 秒),在此期间,系统会模拟他的声音并将其保存在一个. npy 文件中。
-
在验证中,将声明者的声音的独特特征与先前登记的声明说话者模型进行比较,以确定声明的身份是否正确。这里,将讲话者的输入音频与先前保存的讲话者模型进行比较。
说话人确认通常以两种方式进行
-
TISV -(文本独立说话人验证)-语音的词汇和语音内容没有限制,说话人在注册和验证期间可以说出任何短语或句子。
-
TDSV -(文本相关说话人验证)-语音的词典和语音内容受到限制,并且如果用于登记的词典用于验证,则系统只能返回登记和验证之间的匹配。
-
如果您不熟悉数字信号处理的基础知识,强烈建议您阅读信号处理基础知识。
-
I 向量是在注册和验证期间从语音话语中提取的嵌入或向量。正是基于这种嵌入来评估余弦相似性,以预测登记和验证话语中说话者之间的匹配或不匹配。
-
为了理解 i-Vector 方法,深入研究 GMM(高斯混合模型)是必要的。自然界中随机变量的许多概率分布可以建模为高斯分布或高斯混合分布。它们是很好理解的,并且参数估计是迭代完成的。GMMs 作为一种生成方法,有效地为说话人确认系统建模说话人,在说话人确认系统中,返回输入话语是由训练的高斯生成的概率。GMM 的参数是高斯平均值、协方差和混合物的权重。
M 个分量高斯密度的加权和的 GMM,如下式所示
$ $ begin { equation } p(x | lambda)= sum_{k=1}^{m} w _ { k } 乘以 g(x|mu {k},Sigma{k} )end{equation}$$
其中(x)是一个 D 维特征向量(在我们的例子中是 39 维 MFCCs),(w_{k},mu_{k},适马 _ { k };k = 1,2,…M),是混合权重、均值和协方差。(g(x | mu_k,适马 _k),k = 1,2,3…M)是分量高斯密度。
每个分量密度是一个 D 变量高斯函数,
$ begin { equation } g( boldssymbol { x } | boldssymbol } _ k, boldssymbol } _ k)= left[1 mathbin {/} left(2 mathbin {/} 2 } right) text { exp } 0.5( boldssymbol { x }- boldssymbol } _ k })} end { equation } $)
其中均值向量(boldsymbol{mu}k)和协方差矩阵(boldsymbol{Sigma}{k}),混合权重满足约束( sum_{k=1}^M w_i = 1)。完整的 GMM 由来自所有分量密度的平均向量、协方差矩阵和混合权重来参数化,并且这些参数共同表示为(lambda = {w_k,boldsymbol{mu}k, bold symbol { 适马}{k} },k = 1,2,3…M )。
期望最大化
-
期望最大化(EM)算法基于最大化训练数据的期望对数似然来学习 GMM 参数。
-
随机变量相对于分布的期望值是求和(离散分布)或积分(连续分布)到无穷大时的算术平均值。
-
对于未知参数的给定值,似然函数测量统计模型与数据样本的拟合优度。在这种情况下,均值、方差和混合权重。它由样本的联合概率分布形成。
-
EM 算法的动机是使用训练话语特征从当前模型估计新的和改进的模型,使得新模型生成训练特征的概率大于或等于旧模型。这是一种迭代技术,新模型成为下一次迭代的当前模型。
$ $ begin { equation } prod_{n=1}^n p( bold symbol { x } _ n | lambda) geq prod_{n=1}^n p( bold symbol { x } _ n | lambda^{ ext{old}}) end { equation } $ $
当输入的提取特征即 MFCCs 具有潜在变量时,最大似然估计 GMM 参数。EM 算法通过选择随机值或初始化来寻找模型参数,并使用这些参数来推测第二组数据。
k 均值算法用于迭代初始化 GMM 参数,其中通过评估混合均值来执行 MFCCs 特征向量的混合。
电子步骤
$ $ begin { equation } p(k | bold symbol { x })= bold symbol { w } _ k g( bold symbol { x } | bold symbol { mu } _ k, bold symbol { sigma } _ k) mathbin {/} p( bold symbol { x } | lambda^{ ext{old}}) end { equation } $ $
最大化导致 GMM 参数被估计
m 步
$ begin { aligned } boldssymbol { w } _ k & =(n _ k mathbin {/} t)∞p(k | boldssymbol { x } _ n }) 【t 0 } boldssymbol } mu } _ k }&=(1 mathbin {/} n _ k)? p(k | boldssymbol { x } _ n }) boldssymbol { x }
因此,我们评估了 GMM 的三个参数,即权重、均值和协方差。
在典型的说话人确认任务中,由于可用于训练说话人模型的数据量有限,所以不能使用期望最大化以可靠的方式直接估计说话人模型。由于这个原因,最大后验概率(MAP)自适应经常被用于训练说话人确认系统的说话人模型。这种方法从通用背景模型中估计说话人模型。UBM 是一种高阶 GMM,在从感兴趣的说话人群体的广泛样本中获得的大量语音数据上进行训练。它被设计成捕捉说话者模型的一般形式,并表示与说话者无关的特征分布。使用 EM 算法来估计 UBM 参数。
-
GMM 所基于的低层特征是 MFCCs。此外,在 GMM-UBM 模型中,MFCC 声学特征被用作输入特征。GMM 平均超向量是 GMM 平均向量的串联。I 向量方法提供了高维 GMM 超向量和传统低维 MFCC 特征表示之间的中间说话人表示。
-
注册过程包括从说话者注册过程中的 30 秒长的话语中提取的 I 向量。这个 I 向量作为说话者模型保存在数据库中。稍后在验证期间,通过余弦相似性得分,将从测试话语(大约 15 秒长)中提取的 I 向量与登记的 I 向量进行比较。如果该分数超过阈值,则它被声明为匹配或不匹配。
用于语音处理的一些流行数据集是 LibriSpeech、LibriVox、vox Cele 1、vox Cele 2、TIMIT 等。
本演示中用于预训练 UBM 的数据集是 VoxCeleb1。该数据集文件分布如下:
验证分割
| vox Cele 1 | 开发 | 测试 |
| 、扬声器数量 | One thousand two hundred and eleven | Forty |
| 、视频数量 | Twenty-one thousand eight hundred and nineteen | Six hundred and seventy-seven |
| 、话语数量 | One hundred and forty-eight thousand six hundred and forty-two | Four thousand eight hundred and seventy-four |
基于名为关于说话人确认中通用背景模型训练的研究的论文,可以基于来自大约 60 个说话人的数据,即大约 1.5 小时长的数据来训练 UBM。预训练模型基于说话者的这个子集。
上述数据集远远超过所需的说话人数量,已被用作评估说话人确认性能的基准数据集。
由于 UBM 的培训甚至是针对部分演讲者的培训也需要一段时间,因此在本博客中展示了针对 5 位演讲者的培训。相同的代码可以用于更多的扬声器。
从子集 VoxCeleb1 提取 MFCCs 并训练 iVector 提取器
-
对于这个博客的范围,来自 dev 的 5 名测试人员和来自 test 的 5 名测试人员来自 VoxCeleb1 数据集。UBM 训练,I 向量训练是在 dev 集上执行的。测试集用于评估模型性能指标。实际上,用于训练 UBM 的扬声器数量要高得多。
-
无声检测 – 包含人类语音的. wav 文件通常由语音和无声片段组成。提取的 MFCCs 应该来自检测到话音活动/语音活动的语音帧,而不是无声段。如果 MFCCs 是从来源于无声段的帧中提取的,则不是目标说话人特征的特征将在 GMM 中建模。可以训练隐马尔可夫模型(HMM)来学习语音文件中的静音和语音片段(参考pyaudionanalysis)。为了训练 HMM,将语音段和静音段的时间戳馈送给模型。
-
鲍勃留下来
- MFCCs 由函数[4]提取
bob.kaldi.mfcc(data, rate=8000, preemphasis_coefficient=0.97, raw_energy=True, frame_length=25, frame_shift=10, num_ceps=13, num_mel_bins=23, cepstral_lifter=22, low_freq=20, high_freq=0, dither=1.0, snip_edges=True, normalization=True)
- 训练通用背景模型。通过以下函数[4]在 Voxceleb1 的 5 说话人开发集上训练 UBM 模型
对于全局对角 GMM 模型
bob.kaldi.ubm_train(feats, ubmname, num_threads=4, num_frames=500000, min_gaussian_weight=0.0001, num_gauss=2048, num_gauss_init=0, num_gselect=30, num_iters_init=20, num_iters=4, remove_low_count_gaussians=True)
全协方差 UBM 模型
bob.kaldi.ubm_full_train(feats, dubm, fubmfile, num_gselect=20, num_iters=4, min_gaussian_weight=0.0001)
- 训练 i-Vector (extractor) (dev)集-I-Vector 训练是通过使用 dev 集和 UBM 模型的 MFCC 特征来完成的。这导致来自语音发声的 600 维阵列/嵌入。用于训练 I 向量的函数是
bob.kaldi.ivector_train(feats, fubm, ivector_extractor, num_gselect=20, ivector_dim=600, use_weights=False, num_iters=5, min_post=0.025, num_samples_for_weights=3, posterior_scale=1.0)
- 提取 I 向量——一旦 I 向量训练完成,就可以通过下面的函数在任何语音上提取 I 向量。wav 文件[4]
bob.kaldi.ivector_extract(feats, fubm, ivector_extractor, num_gselect=20, min_post=0.025, posterior_scale=1.0)
通过计算真阳性率(TPR)和假阳性率(FPR)在测试集上评估模型性能。TPR 和 FPR 按以下方式确定:
每个说话者都有一定数量的话语,与之对应的是 I 向量。I 向量通过余弦相似性得分相互比较。如果分数高于某个阈值,则说话者被认为是匹配的。匹配被归类为阳性,不匹配被归类为阴性。CSS 通过比较测试 I 向量(w_{ ext{test}})和目标 I 向量(w_})之间的角度来工作
$ $ begin { equation } bold symbol { S }( hat { bold symbol { w } } _ )= 乐浪 hat { bold symbol { w } } _ }, hat { bold symbol { w } } _ { text { test } } rangle math bin {/} left(| | hat { bold symbol { w } } _ } | | \\\\\| | hat { bold symbol { w } } _ { text { test } } | | right) end { equation } $ $
在这种情况下,为每个说话者确定真阳性率和假阳性率,并计算总平均值。这反映了分类器的性能。
本文有一个附带的项目,包含数据和 Python 代码。此外,伴随项目的的 README.md 文件中的指令提供了关于下载预训练模型的指导,其中 UBM 针对更多数量的扬声器进行训练。正如所料,该模型的性能优于本博客中使用的较小模型。你可以通过注册一个 免费多米诺骨牌试用 来获得它。

参考文献:
https://www . allaboutcircuits . com/technical-articles/an-introduction-to-digital-signal-processing/
*https://www . researchgate . net/publication/268277174 _ Speaker _ Verification _ using _ I-vector _ Features
**【3】*
**【4】*https://www . idiap . ch/software/bob/docs/bob/bob . kaldi/master/py _ API . html # module-bob . kaldi
**【6】https://www . idiap . ch/software/bob/docs/bob/bob . kaldi/master/py _ API . html # module-bob . kaldi
https://www . researchgate . net/publication/268277174 _ Speaker _ Verification _ using _ I-vector _ Features
【8】https://engineering . purdue . edu/~ ee 538/DSP _ Text _ 3rd edition . pdf【9】Kamil,Oday。(2018).帧分块加窗语音信号。4.87-94.***
原文:https://www.dominodatalab.com/blog/building-an-open-product-for-power-users
这篇文章描述了我们构建“开放”产品的工程哲学,即支持现有工具和库的产品,而不是构建我们自己的现有功能的定制版本。除了让我们的开发人员更有效率,我们还发现这种方法让我们的用户更有效率——尤其是超级用户,他们对我们来说尤其重要。
Domino 是数据科学家的工作台:它允许你在可伸缩的基础设施上运行分析(用 Python、R、Julia 等语言),保持你的工作被跟踪和集中,因此它可以被容易地共享和复制,并且允许你通过 web 表单或 web 服务公开模型。
从一开始,我们就有意识地构建 Domino 来集成现有的语言、库和工具,而不是构建一种实现常用功能的专有方式。例如,我们没有建立一种新的方式来创建和共享可视化,而是让数据科学家使用现有的库,如matplotlib或ggplot或任何其他库,我们只是通过我们的 web 界面提供文件(HTML、javascript、图像等)。
从技术上讲,这种方法通过两个主要的架构决策体现出来:
我们在 Docker 容器中运行用户代码,这让他们可以灵活地做任何他们想做的事情。我们的默认环境包含对大多数语言(R、Python、Java、C/++、Julia、Matlab via Octave 等)的支持,如果用户需要其他东西,我们允许他们定制自己的环境。他们甚至可以安全地存储 VPN 凭证,因此他们的代码可以连接到他们自己的数据库。
一个项目和它的结果只是文件,我们知道如何通过 web 用户界面提供服务。没有专有的存储或输出格式;不需要使用特殊的 Domino 库或包。
这给了我们和我们的用户极大的灵活性,特别是在可视化能力方面。
以下是我们在过去几个月中支持的一些使用案例:
-
使用 HTML 小部件和编织器实现交互式可视化。我们没有实现自己的可视化功能,而是能够立即使用一个新的 R 包
htmlwidgets,它提供了强大的功能。类似地,与其从 R 中创建我们自己的报告生成/降价功能,现有的knitr包就可以工作——而且工作得很好。 -
与 IPython Notebook 的集成—针对 Python 或 R(与 R Notebook )的集成。用户可以在他们想要的任何硬件上点击一下就启动笔记本会话。我们不需要发明或构建一个新的“交互式分析”用户界面。
-
与 Plotly 的集成。当我们看到 Plotly 与 IPython 笔记本一起工作时,很容易就可以在 Domino 上演示这种开箱即用的工作方式。现在,我们的任何用户都可以从 Plotly 的 Python 或 r 语言的交互式小部件中获益。
Knitr、htmlwidgets、IPython Notebook、Plotly——这些都是人们已经研究了多年的神奇工具,许多人已经在使用和喜爱它们。通过让用户将他们带到 Domino,而不是适应一些新的专有工作方式,我认为我们自己正在拥抱一种“站在巨人的肩膀上”的哲学——既然已经存在这样伟大的解决方案,为什么还要重新发明轮子。
我们“开放”方法的好处是巨大的,体现在两个不同的方面。
首先,用户采用率和用户满意度更高,因为数据科学家可以灵活地使用他们已经知道并喜欢的库和工具。如果他们想制作漂亮的图表或报告,他们只需使用他们通常会使用的任何软件包。没有什么新东西需要学习——没有新的语言、语法或 UI。
用户喜欢这一点,而更老练的技术用户往往对此特别兴奋,因为他们有充分的自由去做他们需要做的事情。需要制作精确格式的报告?只需编写代码——不需要在一些受约束的 UI 中瞎折腾。
第二,工程能力和效率。在构建产品的早期阶段,工程团队需要非常积极地帮助用户解决他们的需求。通过灵活使用现有的库和工具,我们已经能够为用户提供满足他们需求的解决方案—快速且不消耗我们的工程资源。(除了前期开发时间之外,这还为我们节省了测试、文档和支持从工程角度来看通常微妙而复杂的功能所需的额外开发时间。)
这是一个双赢的局面:我们的工程师专注于我们产品的核心功能,发挥我们的比较优势;我们的用户可以使用他们喜欢的语言、工具和库。
如果我们选择开发自己的语言,或者可视化软件包,或者笔记本用户界面,或者降价/报告语法,我相信我们的用户会少得多,他们会更不高兴,我们会浪费工程时间来构建已经存在的东西。
到目前为止,我认为我们方法的好处大于坏处——但是像所有的决定一样,这也不是没有缺点的。
第一个缺点是不熟练的/低技术的用户有更陡峭的学习曲线。Domino 通过编写代码为您提供了做任何事情的灵活性,但这意味着没有向导和简化的 ui 来控制复杂的功能。因此,Domino 不是一个“自动化数据科学过程”或让非技术用户构建丰富可视化的平台。换句话说,多米诺更像一把电锯,而不是安全剪刀。我们对此没意见——就目前而言——但这值得明确提出来。
第二个缺点是,我们必须容忍现有的第三方工具带来的缺点。可以肯定的是,如果我们开始从头开始构建一个新的交互式分析笔记本,我们可以想象出许多比 IPython 笔记本更好的方式。但与此同时,我们不希望完美成为美好的敌人——尤其是当美好已经存在,而完美需要很多年才能创造出来的时候。
我们决定构建一个开放的产品,而不是为常见的分析用例(尤其是可视化)创建专有功能,这加速了我们用户群的增长以及我们工程团队的速度。我很难想象采取不同的方法,但我们看到许多产品选择构建自己的新方式来交付现有功能(例如,笔记本电脑)。
我们的方法在很大程度上也是我们使用软件组件的“购买与构建”哲学的延伸。如果现有的库或软件包提供了我们需要的功能,一般来说,我们更喜欢使用它,而不是自己构建(除非它是我们竞争优势的核心功能,我们需要完全控制它——在以后的帖子中会有更多关于这个主题的内容。)类似地,如果我们可以通过与现有解决方案集成来为用户提供完整的功能和特性,这似乎比构建我们自己的新特性更可取。
原文:https://www.dominodatalab.com/blog/building-domino-web-app-dash
Randi R. Ludwig ,戴尔 EMC 的数据科学家和ATX 数据科学女性的组织者,在这篇文章中介绍了如何使用 Dash 构建 Domino web 应用程序。
假设您是一名数据科学家,使用 Domino 作为您的探索和开发平台。你做了一个分析,突出了一些真正有用的结果!您知道,随着新数据的出现,您的团队将需要检查这一分析并探索结果。这是为您的分析和结果构建交互式界面的完美案例。
Dash 是一个用于构建交互式 web 应用的框架,特别有助于开发像仪表板这样的分析界面。R 用户有闪亮,Pythonistas 有破折号。Dash 是由 plot.ly 团队开发的,是基于 Flask 框架构建的,所以 Flask 在哪里工作,Dash 也应该在哪里工作。在提供交互式图形界面的同时,Dash 还提供了对许多功能的支持。如果你有兴趣了解更多,Dash 团队提供了优秀教程。想了解 Dash 能做什么的更多例子,请查看这套广泛的资源。
多米诺骨牌上的 Dash
要在 Domino 数据实验室中部署 Dash,您需要做一些事情。首先,您需要在启用 Python 的环境中安装 Dash 依赖项。截至 2018 年 1 月,您需要将以下命令添加到 Domino 环境的 Docker 文件中:
pip install dash==0.19.0 # The core dash backend
pip install dash-renderer==0.11.1 # The dash front-end
pip install dash-html-components==0.8.0 # HTML components
pip install dash-core-components==0.15.2 # Supercharged components
pip install plotly --upgrade # Latest Plotly graphing library
检查https://plot.ly/dash/getting-started的最新软件包版本。
部署在 Domino 上的所有应用程序都使用通用的结构。虽然您的应用程序代码可以是您想要的任何代码,但是在您打算部署的同一个项目中,您需要包含一个 app.sh 文件。对于 Dash 应用程序,这个文件非常简单,只需要包含一行:
> python app.py
如果您在本地开发应用程序,您将使用相同的命令来运行该应用程序。(顺便说一下,在你的本地机器上开发一个应用程序来测试内容、界面等的许多调整。然后将 app.py 文件上传到 Domino 是一个很好的开发策略。)
一旦您有了一个应用程序并准备在 Domino 上部署,与您在本地机器上的配置相比,在 app.py 文件中还需要三个额外的配置。首先,您必须让 Domino 能够找到您安装的 Dash 依赖项。默认情况下,Dash 会在“/”处的根文件夹中查找您的所有文件。因为 Domino 使用反向代理和子文件夹,所以您必须告诉 Domino 在当前工作目录中查找所有相关的文件和资源。为此,您需要为 Dash 提供所需的配置:
# Configure path for dependencies. This is required for Domino.
app.config.update({
#### as the proxy server may remove the prefix
'routes_pathname_prefix': '',
#### the front-end will prefix this string to the requests
#### that are made to the proxy server
'requests_pathname_prefix': ''
})
^(注意:此 app.config 语法仅适用于 dash 0.18.3 及更新版本。)
下一步是通过添加以下行使 Flask 服务器对 Domino web app 服务器可见:
# This enables the Flask server to be visible to the Domino server
server = app.server
最后,在 app.py 文件的末尾,您需要显式地包含 web 应用服务器的主机和端口。对于所有的 Domino 应用程序,这都是一样的。
# host & port need to be explicitly defined for Domino
if __name__ == '__main__':
#app.run_server() # if running locally
app.run_server(host='0.0.0.0',port=8888) # on Domino
有了这三个变化,您的应用程序应该可以在 Domino 上运行,并且对更广阔的世界可见!要在上下文中查看这段代码,请查看 my GitHub 。要了解更多关于在 Domino 上部署 Shiny 或 Flask 应用程序的信息,请查看文档。
原文:https://www.dominodatalab.com/blog/building-model-least-important-part
在这个数据科学弹出式会议中,多米诺数据实验室的数据科学解决方案总监 Kimberly Shenk 解释了为什么构建模型是数据科学家工作中最不重要的部分,以及他们必须关注什么。
原文:https://www.dominodatalab.com/blog/buzzfeed-uses-real-time-machine-learning-choose-viral-content
这个演讲于 2016 年 9 月 14 日在加利福尼亚州洛杉矶的 Domino 数据科学弹出窗口举行。
在本演示中,Buzzfeed 数据产品总监简·凯利(Jane Kelly)讲述了这家流行的在线媒体公司如何在内容传播之前,使用实时机器学习来通知要推广的内容。
http://dominodatalab.wistia.com/medias/4d36gyinru?embedType=async&videoFoam=true&videoWidth=640
收听了解 Buzzfeed 开发的创新平台:
- 捕获数据,并将其传送到一个集中的中枢进行实时分析;
- 支持工程师、数据科学家和内容创作者之间的协作;
- 选择正确的功能,以确定应该翻译成其他语言的帖子;
- 平衡快速实验和产品稳定性,并有效地向内部不同的消费者发布他们的数据。
Jane 演示的幻灯片可以在这里找到。
原文:https://www.dominodatalab.com/blog/can-data-science-help-us-make-sense-of-the-mueller-report
这篇博文提供了关于如何应用自然语言处理(NLP)技术的见解。
穆勒报告,官方称为 关于调查 R 俄罗斯干涉 2016 年总统选举 的报告,最近发布,给了公众比他们可能预期的更多的空间来得出自己的结论。在这篇博文中,我们提出了这个问题:“数据科学能帮助我们理解穆勒报告吗?”
丹尼尔·卡内曼, Rev 主旨发言人,诺奖得主,思考,快与慢 *的作者,指出:“我们对世界有意义的令人欣慰的信念建立在一个安全的基础上:我们几乎无限的忽略自己无知的能力。”*以科学的方式收集和分析数据是战胜无知并得出自己结论的好方法。
顺便说一下,仍然有个海报时段为 Rev. Rev 开放,欢迎提交涵盖从这份重要报告中提取的 NLP 见解的海报。还有,有兴趣参加 Rev 的可以在报名时使用折扣代码 Rev2019_100。
让我们通过遍历项目的 R 文件 boilerplate.R 开始我们的分析。那些喜欢 Python 的人可以使用 Domino 启动 Jupyter 会话,并使用 Mueller Report.ipynb 访问 Python 入门。特别感谢 Garrick Aden-Buie 的 GitHub repo 提供的数据和一些数据科学同事提供的代码。
这里我们使用 R 及其 tidytext 和 tidyverse 库来开始我们的分析。首先,阅读通过这里的 R 代码预处理过的 csv 文件。处理后,每行代表报告中的一行文本。
install.packages(c('tidytext', 'wordcloud', 'ggraph'))
library(tidytext)
library(tidyverse)
library(stringr)
library(wordcloud)
library(igraph)
muller_report <- read_csv("mueller_report.csv")
接下来,加载我们将从要分析的单词总列表中排除的常见停用词的数据集。将“trump”和“intelligence”添加到自定义停用词列表中,我们将在以后需要时使用。
data("stop_words")
custom_stop_words <- bind_rows(data_frame(word=c("trump", "intelligence"),
lexicon=c("custom")),
stop_words)
通过 unnest_tokens()创建整洁的数据帧,该函数将带有文本列的数据帧转换为每行一个标记。也删除原来的停用词,并使用正则表达式过滤掉坏的行。
tidy_muller <- muller_report %>% unnest_tokens(word, text) %>%
anti_join(stop_words) %>%
filter(!str_detect(word, "^\d+$"))

创建前 50 个单词的数据框架和单词云。
top_words <- tidy_muller %>% count(word, sort=TRUE)
top_words %>% with(wordcloud(word, n, max.words=50))
使用通用情感词典来获取报告中单个单词的情感,并显示排名靠前的负面和正面单词的图表。
bing_word_counts <- tidy_muller %>% inner_join(get_sentiments("bing")) %>%
count(word, sentiment, sort=TRUE) %>%
ungroup()
bing_word_counts %>%
anti_join(custom_stop_words) %>%
group_by(sentiment) %>%
top_n(10) %>%
ungroup() %>%
mutate(word=reorder(word, n)) %>%
ggplot(aes(word, n, fill=sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales="free_y") +
labs(y="Contribution to sentiment",
x=NULL) +
coord_flip() + theme_minimal() +
ggtitle("Sentiment Analysis of Words in the Muller Report",
"Basic Single Word Method, using Bing Lexicon")

通过从原始 csv 文件开始并再次调用 unnest_tokens()来创建二元图。这一次使用 ngrams 选项和 n=2 来给出二元模型。删除原来的停用词,并再次使用 regex 过滤坏行。添加计数列。建立图表。
muller_bigrams <- muller_report %>%
unnest_tokens(bigram, text, token="ngrams", n=2) %>%
separate(bigram, c("word1", "word2"), sep = " ") %>%
filter(!word1 %in% stop_words$word) %>%
filter(!word2 %in% stop_words$word) %>%
filter(!str_detect(word1, "^\d+$")) %>%
filter(!str_detect(word2, "^\d+$"))
muller_bigrams_count <- muller_bigrams %>%
count(word1, word2, sort=TRUE)
bigram_graph <- muller_bigrams_count %>%
filter(n > 20) %>%
graph_from_data_frame()
bigram_graph
library(ggraph)
a <- grid::arrow(type="closed", length=unit(.15, "inches"))
ggraph(bigram_graph, layout="fr") +
geom_edge_link(aes(edge_alpha=n), show.legend=FALSE,
arrow=a, end_cap=circle(.07, "inches")) +
geom_node_point() +
geom_node_text(aes(label=name), vjust=1, hjust=1) +
theme_void()

接下来,我们通过页码来查看一个单词情绪的趋势。使用相同的单个单词情感词典,将每页的正面单词减去负面单词的总数相加,默认值为 0,并根据该页面的总数进行着色。
muller_sentiment <- tidy_muller %>%
anti_join(custom_stop_words) %>%
inner_join(get_sentiments("bing")) %>%
count(page,index = line %/% 80, sentiment) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative)
ggplot(muller_sentiment, aes(page, sentiment, fill=sentiment)) +
geom_col(show.legend = FALSE) +
xlab("Page Number") +
ylab("Sentiment Score") +
ggtitle("Per Page Sentiment of Muller Report",
"Single word sentiment, Bing lexicon") +
theme_minimal()

最后看一下每个单词的 tf-idf 来确定哪些是最重要的。我们将根据报告的章节和卷进行细分,使用 regex 查找章节分隔符。
muller_volume_1 <- muller_report %>% filter(page >= 19) %>% filter(page < 208)
muller_volume_2 <- muller_report %>% filter(page >= 221) %>% filter(page < 395)
muller_v1_tfidf <- muller_volume_1 %>%
filter(!is.na(text)) %>%
mutate(chapter=cumsum(str_detect(text,regex("^[IVX]+\.", ignore_case=FALSE)))) %>%
unnest_tokens(word, text) %>%
filter(!str_detect(word, "^\d+$")) %>%
count(chapter, word, sort=TRUE) %>%
bind_tf_idf(word, chapter, n)
muller_v1_tfidf %>%
filter(chapter != 0) %>%
group_by(chapter) %>%
top_n(7, tf_idf) %>%
ungroup() %>%
mutate(word=reorder(word, tf_idf)) %>%
ggplot(aes(word, tf_idf)) +
geom_col(show.legend=FALSE, fill = 'steelblue') +
labs(x=NULL, y="tf-idf") +
facet_wrap(~chapter, ncol=3, scales="free") +
coord_flip() +
ggtitle("7 Highest tf-idf words in each section of Volume 1 of Muller's Report",
"Partitioned by Chapter") + theme_minimal()
muller_v2_tfidf <- muller_volume_2 %>%
filter(!is.na(text)) %>%
mutate(chapter=cumsum(str_detect(text,regex("^[IVX]+\.", ignore_case=FALSE)))) %>%
unnest_tokens(word, text) %>%
filter(!str_detect(word, "^\d+$")) %>%
count(chapter, word, sort=TRUE) %>%
bind_tf_idf(word, chapter, n)
muller_v2_tfidf %>%
filter(chapter != 0) %>%
group_by(chapter) %>%
top_n(7, tf_idf) %>%
ungroup() %>%
mutate(word=reorder(word, tf_idf)) %>%
ggplot(aes(word, tf_idf)) +
geom_col(show.legend=FALSE, fill = 'steelblue') +
labs(x=NULL, y="tf-idf") +
facet_wrap(~chapter, ncol=3, scales="free") +
coord_flip() +
ggtitle("7 Highest tf-idf words in each section of Volume 2 of Muller's Report",
"Partitioned by Section") + theme_minimal()

这应该让你开始调查穆勒报告。如果你在寻找进一步分析的建议,考虑寻找公众心中问题的答案。例如,分析总结报告作者对特定主题的看法,如特朗普总统参与了公认的俄罗斯竞选干预。这是第二卷的重点。也许数据科学可以揭示报告作者在这个热门话题上的倾向。开心挖矿!
^(多米诺编者按:寻求真理,讲真话是多米诺的核心价值观之一,这也体现在我们严谨的内容分析上。如果对与本帖内容类似的其他见解和内容感兴趣,请考虑使用折扣代码 Rev2019_100 注册参加 Rev、我们的数据科学领导者峰会。)
原文:https://www.dominodatalab.com/blog/celebrate-py-day
圆周率日就要到了,当我们用馅饼庆祝圆周率的时候,我们不能忘记生活中另一个伟大的圆周率,那就是 Python!这种编程语言已经成为生产级数据科学的事实上的标准,被大多数生产级数据科学家使用。
花点时间思考一下 Python。我们为什么爱它?对于数据科学来说,为什么它变得如此流行,如此迅速?原因有很多,但有三个特别突出。
-
**Python 就是协作。**是的,这包括数据科学家、数据工程师和将它作为共同语言的开发人员之间的协作,以及 Python 是开源的事实。更重要的是它促进了不同工具之间的协作。Python 是一个极好的包装器,不仅是因为它自己的以数据科学为中心的库,也因为每一个新的 ML 或 AI 工具或框架。很有可能,如果你不能使用 Python 来利用一些东西,要么它正在开发中,要么它不适合生产数据科学。
-
**Python 就是迭代。**数据科学就是迭代。你必须迭代模型生命周期的每个部分:特征工程、算法选择、超参数调整、验证,甚至模型监控。Python 击败了数据科学的可视化工具,因为它天生更容易使用代码进行迭代。随便问个开发商就知道了。然而,Python 也胜过其他编程语言,因为它是一种解释型编程语言。因此,它可以在开发过程中的任何地方停下来进行实验(或调试)。
-
Python 正在生产。 Python 不仅仅是不同数据科学工具的包装器,它还是模型生命周期中系统的包装器。它就像一把瑞士军刀,使您能够将来自数据湖或数据仓库的数据、来自您选择的框架的方法以及您将用来部署您的模型的系统(无论是在本地还是在云中)缝合在一起。Python 允许您将这些粘合在一起,同时填补任何缺失的空白。
这并不是说 Python 是完美的。您需要使用企业级平台(例如代表使用 Python 的企业数据科学黄金标准的Domino Enterprise MLOps Platform)通过安全性、治理、生产力工具和可扩展基础设施来支持它。但如果没有 Python,我们就不会处于一场“人工智能革命”中。所以,我的数据科学家同事们,借此机会让圆周率成为你们自己的一天,并思考 Python 是如何对世界产生影响的——更不用说你们对组织的价值了——这就是今天的情况。

原文:https://www.dominodatalab.com/blog/check-your-intentions
众所周知,文化对一家公司的成功至关重要,关于如何在初创企业定义和培育文化,也不乏建议。这篇文章表达了我们希望在多米诺骨牌上形成的文化的一个关键特征:直接批评,同时努力使批评真正具有建设性。
“如果你没有关于某人的任何好话,那就什么都不要说”是老师和家长灌输给孩子的一条常见格言,不幸的是,这条规则支配了太多的工作场所互动(至少是公开的面对面的互动)。问题在于“好”这个词是肤浅的:一个评论是否“好”完全取决于一个人使用的词,而不考虑说话者的效果、结果或意图。
但是,正如大多数高绩效组织将证明的那样,“关键的”或“负面的”反馈是推动改进的必要工具。说“新网站看起来很糟糕”不是一个“好”的评论很容易,但如果我发表这种评论的动机是为了引起对设计问题的注意,这会对公司的形象产生负面影响,那么保留这种反馈将是非常不理智的。我认为,如果组织想要出类拔萃,就需要接受批评,并不断发现需要改进的地方。
在创办达美乐之前,我所在的公司以直率的文化而闻名,这种文化将批评发挥到了极致。鼓励批评的文化有一个潜在的问题,那就是它会导致反馈为了批评而批评——本质上是虐待。
在构建 Domino 的过程中,我一直在努力平衡这两个不可持续的极端:一方面,我们需要批评来推动改进;另一方面,目光短浅地强调批评是其本身的目的,对我们的进步的损害与完全没有批评是一样的。
以下是我用来调和上述紧张关系的原则;这是我坚持的标准,也是我们 Domino 文化的定义特征之一:
提供反馈时,检查你的意图,并确保你是在尽力提供帮助或建设性。
我说的“有帮助的或有建设性的”只是指:你的评论可能会让某人过得更好,或改善某些情况吗?你的评论会给世界带来什么样的新局面,会比现在的世界更好吗?
我说的“意图”是指你的评论到底想达到什么目的?当然,这与乐于助人和建设性有关:如果你真正的动机是让某人感觉不好,那么光说可能会发生好的事情是不够的。
“意图”条件也有助于避免类似的问题——原始格言所遭受的问题(“好”是什么意思?).我们不需要担心让世界变得“好”或“更好”意味着什么——只是,在你的主观解释中,你真正的动机是实现这样的改变。
有时候善意的评论会造成短期的痛苦。例如,听到你的经理说你似乎不具备完成交给你的任务所需的能力时,你可能会很难过;或者听到你的教练说你因为技术不够好而被球队除名。但是,除非你的经理或教练是虐待狂,否则他们告诉你是因为你(和其他人)最终可能会变得更好,或者承认现实。“这会伤害他的感情”并不是拒绝发表评论的充分理由,只要你的意图是有益的或建设性的。有时候真相会让人伤心,但这并不意味着我们应该忽视它。
人们是合理化和自欺欺人的大师,所以在分享“批评”或“负面”评论时,自省、留心你的意图是很重要的。问问你自己,“我要做的评论的目标是什么?会不会有人因此过得更好?”如果不是,你为什么这么说?
如果你是一名经理,你对你的一份报告提出了一些批评性的反馈,你是真心实意地想帮助你的报告吗(为此,要注意你的语气和反馈的内容)?还是对建立自己的优越感或智力更感兴趣?留意你的意图可以帮助你以一种产生最积极影响的方式阐明和表达你的反馈。
就我个人而言,我也努力在工作之外遵循这个原则,我认为如果更多的人这样做,这个世界会变得更好。
一些个人生活中的例子,可能有点做作:
-
如果我的朋友或者其他重要的人需要理发,或者牙齿上有东西,很可能(取决于个人)他们想知道这些。提醒他们这一事实需要对他们的外表说一些负面的话——但潜在的意图是帮助他们,而不是贬低他们。
-
如果你在恋爱中,你对你的另一半所做的事情感到不安,当你告诉他或她时,你的目标是什么?是为了让他们难受吗?还是为了改善你们的关系?
-
如果你在餐馆吃了一顿令人失望的饭,服务员问你是否喜欢这道菜,你会清楚地表达你的失望,还是假装一切都很好?你是真的想帮忙,还是只是在发泄,或者是想让服务员感觉不好,或者是希望在账单上得到折扣?如果你是真心实意地想帮助餐馆的厨师改进(也许是为了把未来的顾客从你的糟糕经历中拯救出来),并且你把你的注意力吸引到你的意图上,你很可能会发现你的语气、你的评论的细节和措辞都会改变,以反映你的意图的清晰性。
人类是情绪化、自我的生物,很容易让情绪和自我来引导我们的行为。作为达美乐文化的一个基本方面,这一建设性批评的原则推动了我们的快速改进,同时保持了相互尊重的高度协作氛围。除此之外,我发现留心我的意图,已经导致了工作之外与他人更好的互动,并且实际上促进了进步,而不仅仅是向世界发泄负面能量。
原文:https://www.dominodatalab.com/blog/choosing-a-data-governance-framework
数据治理是指管理企业数据的过程,目的是使数据在整个组织中更易访问、可靠、可用、安全和合规。这是组织数据管理的一个关键特性,可提升数据质量和数据民主化。
一个精心规划的 数据治理框架 对于任何旨在利用其数据的商业价值和下游能力来推动稳健决策的数据驱动型组织来说都是至关重要的。它涵盖并详细介绍了数据流程、角色、策略、标准和指标的最佳实践。
自然,数据治理框架因组织而异。这里有几个强有力的数据治理框架的例子,这些框架是像普华永道、T2、Hubspot 和 T4 ING 这样的公司推荐的。
但是,有一组普遍接受的最佳实践,如下所列:
- 从小处着手,但要对数据治理有一个宽广的视角和长远的看法。
- 构建强大的业务案例,包括组织收益,如更高的收入、更好的跨职能效率和客户体验。
- 就一组指标达成一致,以随着时间的推移跟踪采用、实施和价值。
- 尽早并经常沟通,并在组织范围内建立意识和一致性。
- 获得领导层的认可,对数据治理进行长期投资,并理解其好处可能不会在短期内显现出来。
- 为数据治理框架的创建、实施和执行确定相关的以数据为中心的角色和职责。
有关推荐最佳实践的更多示例,请查看来自和 雪花 的这些数据治理技巧。
在本文中,您将了解更多关于数据治理框架及其基本组件的信息,探索为您的组织选择数据治理框架的用例及最佳实践。
如果没有有效的数据治理,组织的数据科学团队将无法充分挖掘数据的价值。薄弱的数据治理导致糟糕的数据实践和决策,导致组织在日益数据驱动的企业环境中失去竞争优势。
至关重要的是,糟糕的治理还会损害对监管标准(如 GDPR、HIPAA、SOX、CCPA 法案等)的遵从,这会给企业带来巨大的后果。违反此类法律的巨额罚款可能会削弱公司的底线。例如,2021 年,亚马逊收到了高达 8.77 亿美元的 GDPR 罚款 。
强大的数据治理可确保数据的可用性、可靠性、一致性和高质量,使企业能够从数据中创造价值。它包括流程、人员、组织机构和一组策略,它们共同决定管理数据的最佳实践。
数据治理的好处是多方面的,其中包括:
- 数据质量提高,下游分析和数据科学更加高效可靠
- 更强大的数据驱动的业务决策
- 提高组织对跨部门数据的可访问性和使用的认识
- 更好地符合当地、国家和国际监管制度
- 增强对数据的信任,促进数据驱动的组织文化
投资一个强大的数据治理框架会产生巨大的回报,并有助于加快组织的数字化和数据转型之旅。
现代数据治理框架有几个基础。主要关注领域包括数据质量、可访问性、安全性和法规遵从性。然而,只有将人员、流程和技术有效地结合起来,数据治理框架才能取得成功。
设计有效的数据治理框架 还包括创建一组清晰的组织角色、职责和数据利益相关者,用于实施和管理治理策略。在本节中,您将了解构建最佳数据治理框架的核心方面。
数据准确性
数据准确性是数据质量的核心支柱,指的是无错误和可靠的信息。数据不准确通常是由于数据输入方法不当、数据可访问性监管不力以及数据质量标准不佳造成的。提高数据准确性标准至关重要,因为干净、统一和准确的数据可以将投资回报提高两倍。
有许多方法可以测试和改进现有的数据准确性标准。实时数据质量审计可以发现重复、缺失值、信息不完整、数据存储在多个位置等问题。其中一些常见问题可以通过自动化数据质量和准确性检查的工具来解决,而其他问题则需要数据团队的手动干预。
数据相关性
数据相关性指的是数据对于获取业务价值是否相关和适用(即,它是否适合其最初的目的)。例如,在表格中,客户的性取向和军事记录等信息经常被要求与客户姓名、电子邮件和其他联系方式等相关数据字段一起填写。然而,在许多情况下,像性取向和军事记录这样的数据字段对业务没有实质性的影响。
就数据治理而言,需要对每个数据集的相关性和对组织的潜在价值进行严格评估。随着组织积累越来越多的数据,数据存储、维护、隐私和安全的成本也在增加。因此,没有可靠的数据相关性检查也会产生重大的财务影响。
政策范围
在现代数据驱动的组织环境中,数据治理有一个 的宽泛范围 ,涵盖了从元数据和数据存储到可访问性、质量、安全性、所有权以及各种流程、人员和技术的组织角色和策略的所有内容。
制定涵盖如此广泛范围的全面的数据治理政策需要各种数据利益相关方和执行领导层的共同努力。由于这需要在人才和技术方面进行大量投资——短期内投资回报可能不明显——领导层的认同和支持至关重要。
数据合规标准
遵守数据合规性标准,如【GDPR】HIPAASOX等,是数据治理的另一个重要元素。由于组织存储了大量机密的用户和业务数据,包括个人身份信息,如姓名、联系方式和地址、密码、信用卡信息等,如果不能充分保护这些数据免受恶意攻击和数据泄露,甚至是错误的内部访问,都会带来严重的业务后果。
不遵守数据隐私和安全法规会导致巨额 罚款 。也许更重要的是,未能保护其客户和企业数据的组织的声誉会受到损害,从而导致更大的支出以及收入和未来业务的重大损失。
数据访问策略
数据访问策略规定了哪些员工可以访问组织的数据,以便他们在依赖数据的日常工作中不会面临太多的摩擦和干扰。根据数据访问策略,只有特定的一组员工被授权访问和使用特定用例的数据。
该政策适用于跨业务部门的所有数据资产,包括所有类型和格式的数据。关于谁有权访问、谁无权访问的明确指导原则还有助于提高数据安全性,促进更好地遵守数据合规性法规,并减少组织时间和资源的浪费。
管理数据治理策略的组织角色
数据治理是多个利益相关方的任务,例如:
- 首席数据官:这是负责数据治理框架的实现和执行的高级管理人员。他们负责审批、资金、招聘、技术的采用,最重要的是,在整个组织内提高对数据治理的认识。
- 指导委员会:由业务领导和数据利益相关者组成,负责创建数据治理策略和数据标准。它对政策批准有最终决定权,并帮助解决数据或业务团队之间的任何争议或冲突。
- 数据管家:他们负责数据的日常管理。他们通常有很强的领域专业知识,并监督数据集的管理,扮演实际操作的角色。他们还确保指导委员会倡导的政策在整个组织得到切实执行和遵守。
实现一个精心规划的全面的数据治理框架需要时间和资源。它涉及 多个步骤 ,通常包括以下内容:
- 确定角色和职责
- 定义数据域
- 设置数据工作流
- 建立数据控制
- 识别数据源
- 定义政策和标准
重要的是从小处着手,慢慢建立牵引力,在流程的每一步都赢得领导层和各种数据利益相关方的信任。如上所述,让各种各样的利益相关者参与进来,并在一个小规模的团队中测试治理框架,有助于确定关键的实践和标准,然后可以扩展到整个组织的级别。
在本文中,您了解了组织的数据治理框架。数据治理是数据驱动型公司的基本要求,有助于他们有效管理内部数据资产并创造一致的商业价值。
数据治理对于现代组织来说非常重要,糟糕的治理实践会带来严重的负面后果。选择数据治理框架并不简单,但探索强大数据治理的核心支柱,包括数据准确性、相关性、合规性和安全性,是实现组织数字化转型之旅现代化的重要第一步。
在数据科学和机器学习的背景下,强大的数据治理框架对于维护用于训练机器学习模型的数据的质量、相关性、及时性、完整性、准确性和有效性至关重要。
您的组织是否需要一个与您的数据治理框架协同工作的解决方案来将模型投入生产?了解更多关于 Domino 企业 MLOps 平台 如何加速 ML 模型的开发和部署。
原文:https://www.dominodatalab.com/blog/choosing-content-for-netflix-how-data-leads-the-way
这个演讲发生在 2016 年 9 月 14 日加利福尼亚州洛杉矶的多米诺数据科学弹出窗口
在本演示中,网飞数据工程与分析副总裁 Paul Ellwood 讲述了这家领先的数据驱动型娱乐公司如何利用数据科学为全球 8000 多万用户选择内容。
http://dominodatalab.wistia.com/medias/6nt7utf0pg?embedType=async&videoFoam=true&videoWidth=640
推广推荐算法的公司将技术和数据作为“网飞的 DNA”,帮助他们:
- 为国际用户提供本地化内容;
- 比评级服务更早发现有价值的内容;
- 为他们的创意人员提供他们在其他地方得不到的指标和仪表盘;
- 获得相对于其他网络和内容购买者的竞争优势。
你可以在 Twitter 上关注保罗·埃尔伍德@佩尔伍德,如果你想了解更多关于网飞在数据科学和机器学习方面的进展,一定要关注 @NetflixData 。
Paul 演示的幻灯片可在此处获得。
原文:https://www.dominodatalab.com/blog/choosing-the-right-machine-learning-framework
机器学习(ML)框架是允许数据科学家和开发人员更快更容易地构建和部署机器学习模型的接口。机器学习几乎被用于每个行业,特别是金融、保险、医疗和营销。使用这些工具,企业可以扩展他们的机器学习工作,同时保持高效的 ML 生命周期。
公司可以选择构建自己的定制机器学习框架,但大多数组织都会选择适合自己需求的现有框架。在本文中,我们将展示为您的项目选择正确的机器学习框架的关键考虑因素,并简要回顾四个流行的 ML 框架。
在为您的项目选择机器学习框架时,您应该考虑以下几个关键因素。
评估您的需求
当你开始寻找一个机器学习框架时,问这三个问题:
- 你会使用深度学习的框架还是经典的机器学习算法?
- 对于人工智能(AI)模型开发,你首选的编程语言是什么?
- 哪些硬件、软件和云服务用于扩展?
Python 和 R 是机器学习中广泛使用的语言,但其他语言如 C、Java 和 Scala 也是可用的。今天,大多数机器学习应用程序都是用 Python 编写的,并且正在从 R 过渡,因为 R 是由统计学家设计的,使用起来有些笨拙。Python 是一种更现代的编程语言,它提供了简单明了的语法,并且更易于使用。
参数最优化
机器学习算法使用不同的方法来分析训练数据,并将所学应用于新的例子。
算法有参数,你可以把它想象成一个仪表板,上面有控制算法如何运行的开关和转盘。他们调整要考虑的变量的权重,定义在多大程度上考虑离群值,并对算法进行其他调整。在选择机器学习框架时,重要的是要考虑这种调整应该是自动的还是手动的。
扩展培训和部署
在 AI 算法开发的训练阶段,可扩展性就是可以分析的数据量和分析的速度。通过分布式算法和处理,以及通过使用硬件加速,主要是图形处理单元(GPU),可以提高性能。
在 AI 项目的部署阶段,可伸缩性与可以同时访问模型的并发用户或应用程序的数量有关。
因为在培训和部署阶段有不同的要求,所以组织倾向于在一种类型的环境中开发模型(例如,在云中运行的基于 Python 的机器学习框架),并在对性能和高可用性有严格要求的不同环境中运行它们,例如,在本地数据中心。
在选择一个框架时,考虑它是否支持这两种类型的可伸缩性,并查看它是否支持您计划的开发和生产环境是很重要的。
让我们来看看目前使用的一些最流行的机器学习框架:
- TensorFlow
- PyTorch
- Sci-Kit 学习
- H2O
TensorFlow
TensorFlow 由 Google 创建,并作为开源项目发布。它是一个多功能和强大的机器学习工具,具有广泛和灵活的函数库,允许您构建分类模型、回归模型、神经网络和大多数其他类型的机器学习模型。这还包括根据您的特定要求定制机器学习算法的能力。TensorFlow 在 CPU 和 GPU 上都可以运行。TensorFlow 的主要挑战是它对于初学者来说不容易使用。
TensorFlow 的主要特性:
- 计算图形的可见性 —TensorFlow 可以轻松地可视化算法计算过程的任何部分(称为图形),这是 Numpy 或 SciKit 等旧框架所不支持的。
- 模块化 —TensorFlow 高度模块化,您可以独立使用其组件,而不必使用整个框架。
- 分布式训练 —TensorFlow 为 CPU 和 GPU 上的分布式训练提供了强大的支持。
- 并行神经网络训练 —TensorFlow 提供管道,让你并行训练多个神经网络和多个 GPU,在大型分布式系统上非常高效。
随着 TensorFlow 2.0 的发布,TensorFlow 增加了几个重要的新功能:
- 在多种平台上部署 -使用 SavedModel 格式提高移动设备、物联网和其他环境的兼容性,使您可以将 Tensorflow 模型导出到几乎任何平台。
- 急切执行 -在 Tensorflow 1.x 中,用户需要构建整个计算图并运行它,以便测试和调试他们的工作。Tensorflow 2.0 和 PyTorch 一样,支持热切执行。这意味着模型可以在构建时被修改和调试,而不需要运行整个模型。
- Keras 的更紧密集成 -以前,Keras 受 TensorFlow 支持,但不作为库的一部分集成。在 TensorFlow 2.x 中,Keras 是 TensorFlow 附带的官方高级 API。
- 改进了对分布式计算的支持 -改进了使用 GPU 的训练性能,比 Tensorflow 1.x 快三倍,以及与多个 GPU 和 Google TensorFlow 处理单元(TPU)配合工作的能力。
PyTorch
PyTorch 是一个基于 Torch 和 Caffe2 的机器学习框架,非常适合神经网络设计。PyTorch 是开源的,支持基于云的软件开发。它支持用户界面开发的 Lua 语言。它与 Python 集成,并与 Numba 和 Cython 等流行库兼容。与 Tensorflow 不同,PyTorch 更直观并且初学者掌握起来更快。
PyTorch 的主要特点:
- 通过使用本地 Python 代码进行模型开发,支持快速执行和更大的灵活性。
- 从开发模式快速切换到图形模式,在 C++运行时环境中提供高性能和更快的开发。
- 使用异步执行和对等通信来提高模型训练和生产环境中的性能。
- 提供端到端的工作流,允许您使用 Python 开发模型并在 iOS 和 Android 上部署。PyTorch API 的扩展处理将机器学习模型嵌入移动应用程序所需的常见预处理和集成任务。
Sci-Kit 学习
SciKit Learn 是开源的,对于机器学习的新手来说非常用户友好,并且附带了详细的文档。它允许开发人员在使用中或运行时更改算法的预设参数,从而易于调整和排除模型故障。
SciKit-Learn 通过广泛的 Python 库支持机器学习开发。它是数据挖掘和分析的最佳工具之一。Sci-Kit Learn 具有广泛的预处理能力,并支持用于聚类、分类、回归、维度减少和模型选择的算法和模型设计。
Scikit-Learn 的主要功能:
- 支持大多数监督学习算法—线性回归、支持向量机(SVM)、决策树、贝叶斯等。
- 支持无监督学习算法—聚类分析、因子分解、主成分分析(PCA)和无监督神经网络。
- 执行特征提取和交叉验证—从可以提取的文本和图像中提取特征,并在新的看不见的数据上测试模型的准确性。
- 支持聚类和集成技术—可以组合来自多个模型的预测,并且可以对未标记的数据进行分组。
H2O
H2O 是一个开源的 ML 框架,旨在解决决策支持系统流程的组织问题。它与其他框架集成,包括我们上面讨论的框架,来处理实际的模型开发和训练。H2O 广泛应用于风险和欺诈趋势分析、保险客户分析、医疗保健行业的患者分析、广告成本和投资回报以及客户智能。
H2O 组件包括:
- 深水—将 H2O 与 TensorFlow 和 Caffe 等其他框架集成在一起。
- 苏打水—将 H2O 与大数据处理平台 Spark 整合。
- Steam—企业版,支持训练和部署机器学习模型,通过 API 使其可用,并将它们集成到应用程序中。
- 无人驾驶 AI—使非技术人员能够准备数据、调整参数,并使用 ML 来确定解决特定业务问题的最佳算法。
通过 Domino 的环境管理特性,为您的用例选择正确的 ML 框架比以往任何时候都更容易。您可以轻松构建环境,并让它们在最佳计算资源上运行,无论是 CPU、GPU 还是 APU。
Domino 中的环境很容易配置,并且包括以下主要特性
- 版本控制 -召回升级可能破坏模型代码或显著改变结果的环境的先前版本
- 选择您自己的 IDE GUI——包括在 Domino workbench 解决方案中使用的任何基于 HTML 浏览器的 GUI
- 与数据科学家同事轻松共享您的环境 -在服务器托管实例中,获得与笔记本电脑相同的灵活性,能够与同事即时共享代码和环境
- 针对不同用例的不同环境 -为了获得最佳的服务器利用率,只安装对您的代码需要运行的工作流至关重要的包,拥有多个环境以充分利用您的服务器资源
关于机器学习框架如何在 Domino 中运行的示例,请查看我们下面展示 PyTorch、Tensorflow 和 Ludwig 的一些文章。
- 用 36 行代码改进 Zillow 的 Zestimate】
- 图像分类器的数据漂移检测
- 路德维希深度学习实践指南
原文:https://www.dominodatalab.com/blog/classify-things-multiple-labels
美国家庭保险公司的 Derrick Higgins 在 Rev. Higgins 上发表了一篇题为“对所有事物进行分类(使用多个标签):没有人谈论的最常见类型的建模任务”的演讲,其中涵盖了多标签分类、用于多类预测的几种方法以及现有的工具包。这篇博文提供了演讲的亮点、视频和文字记录。
在德里克·希金斯(Derrick Higgins)的演讲中,“对所有事物(带有多个标签)进行分类:没有人谈论的最常见的建模任务类型”,他提倡数据科学家考虑“为他们的多标签任务工具包添加适当的工具”。他介绍了多标记和多类分类之间的区别,介绍了几种用于多标记预测的方法,并提供了有用工具包的链接。会议的主要亮点包括
- 探索公共领域的多标签数据集,包括 BibTeX 、美味、鸟类、医学和场景
- 探究多标签与极端多标签与协同过滤
- 数据科学家可以采用的多标签任务建模策略,包括标签功效集、RAKEL、条件伯努利混合以及结构化预测
- 涵盖了 sk-multilearn、pyramid、svm-struct、pyStruct 等工具包。
想从这次演讲中获得更多的见解,请观看视频或通读文字记录。
https://fast.wistia.net/embed/iframe/fz7hnu6axs
原文:https://www.dominodatalab.com/blog/cloud-security-the-right-way-to-worry
这里有一个我们经常听到的问题:从安全的角度来看,我们对云并不满意——您能在本地安装 Domino 吗?答案是肯定的(我们有 Domino 数据科学平台的本地和云托管版本,因为这是客户想要的),但我们认为这个问题的核心假设值得进一步考虑,因为它通常是错误的。
问题不是“我的数据在云中安全吗?”问题是:“我的数据在哪里更安全,是在云中还是在我管理的基础架构上?”
当考虑云时,一些公司会问一系列深思熟虑的问题,谨慎对待,并仔细考虑具体的风险。但是数量惊人的公司顽固地完全拒绝云,理由听起来像是偏执狂、教条或一般的 FUD。
无论是在创办 Domino 的过程中,还是我之前在一家大型对冲基金担任高管的工作中,我都在安全问题上做了大量工作,确保两家公司都有一个强大的战略来应对日益复杂的威胁。
从这个角度来看,云的安全优势对我来说是显而易见的。除非你是一家非常复杂的大型公司(甚至可能是这样),否则你的数据在云中可能比在你自己的基础设施上更安全。问题不是“我的数据在云中安全吗?”问题是:“我的数据在哪里更安全:在云中还是在我管理的基础架构上?”
让我提供两个理由来说明为什么云可能对您的公司更安全。
首先,系统原因:对于云基础设施提供商来说,安全可能比您的公司更重要,这意味着当您将他们用作服务提供商时,您会从更高的安全优先级中受益。以索尼为例。网络安全可能是该公司的十大要务,但几乎肯定不在前三或前五名。除此之外,还要挑选优秀的电影,制作电影,雇用人才,发行和营销电影,谈判交易等等。现在想想亚马逊网络服务。安全可能是其第二或第三优先考虑的问题,因为安全漏洞代表着对其业务的生存威胁,而在索尼的案例中,正如最近的黑客攻击(尽管令人绝望)所证明的,情况并非如此。因此,亚马逊将在安全方面投入巨资——这是必须的。
其次,让我们看一下公司数据面临的一些主要威胁,以及从安全角度来看,我们的两种基础架构选项有何不同。(这种基于威胁的分析实际上是所有安全决策的制定方式。)在每种情况下,从安全角度来看,云要么更好,要么是中性的。
你的人民
内部威胁是任何公司面临的最大风险之一。根据 2014 年威瑞森数据泄露调查报告,2013 年,内部攻击占所有数据泄露事件的 18%。员工经常会拿走知识产权——为了经济利益,出于怨恨,为了好玩,有时甚至是出于意外。
除此之外,“物理盗窃或丢失”占 2013 年事件的 14%,当然,其中大多数发生在员工手中。“杂项事件”占事件的 25%,威瑞森报告指出,这些错误的来源“当然,几乎完全是内部人员”。最终用户、系统管理员和开发人员在把事情搞砸的问题上处于领先地位。”
换句话说,在明显的内部攻击、盗窃或丢失以及内部错误之间,超过 50%的数据泄露事件是内部人员造成的。对于一个心怀不满的员工来说,泄露您的一些安全数据有多困难?您的员工是否接受过避免钓鱼邮件的适当培训?你确定吗?他们中有多少人通不过网络钓鱼测试?你怎么知道你的员工是善意的呢?
这和云有什么关系?在最坏的情况下,使用云不会使内部威胁(可能是您最大的风险)变得更糟。但实际上,我们经常发现使用云可以减少这种威胁,因为将云用于其基础架构的公司会对其网络进行更多细分,这意味着员工更难从他们应该去的地方转移到他们不应该去的地方。此外,云网络往往会受到更多的监控。
您的软件更新过程
您是否正在运行带有任何已知漏洞的过期软件?你怎么知道的?当发布安全补丁时,您部署它们的速度有多快?
大多数云提供商,包括亚马逊,都极其积极地解决其底层基础设施中的关键漏洞。例如,在 2014 年早些时候,亚马逊在公布后的几天内就处理了严重的 Heartbleed 漏洞。
对于那些认为自己的安全性优于云提供商的公司来说,Heartbleed 是一个很好的基准。询问您的 IT 团队,您的公司用了多长时间才完全修补了 Heartbleed,并将其与 Amazon Web Services 用了多长时间进行比较。
人身安全
您的服务器在哪里?在你的办公楼里?在数据中心?谁能接触到这些机器?对于一个人来说,简单地捡起一个并带走它有多难?进入你们大楼的安全措施有多严密?
抛开威胁和攻击不谈,面对可能导致停机或数据丢失的灾难,您有多脆弱?这些威胁到你的可用性,另一个层面的安全。您的物理基础架构在火灾、加热和冷却问题、电气故障方面是否安全?
你可以读到很多关于 AWS 的物理安全的文章,但可以说它在访问控制和安全措施方面是世界一流的。大多数组织会发现这是不可能匹配的。
加密
你所有的内部流量都加密了吗?如果有人——一名员工或任何走进你办公室的人——将一个数据包嗅探器插入以太网插孔,他们能从电线上扯下什么?密码?用户数据?财务数据?许多公司要求对外部流量进行加密,但对其网络内的流量加密却相当宽松(这意味着他们的网络安全性与物理安全性一样好)。
您的服务器和员工机器上的硬盘是否加密?否则,如果有人带走了其中一个设备,后果会更加严重。
云基础架构即服务提供商通常具有一些功能,可以轻松实现静态和传输中数据的加密,或者在默认情况下提供此类配置。许多建立在云提供商之上的服务(包括 Domino 的云托管服务)自动使用加密。
这是一个很好的例子,说明了与比你更重视安全的合作伙伴合作所带来的安全好处。许多公司不在内部加密他们的数据。但是云提供商甚至不会考虑不提供这一功能。你要做的就是打开它。
当然,即使你使用云,上面的一些风险也是存在的(你的员工的计算机上可能仍然有易受攻击的敏感数据)。与此同时,一家成熟的大公司完全可以实施一套完整的安全机制,与 AWS 相媲美。
关键是云可能更安全,因为云提供商不得不在安全方面投入巨资,以使他们的业务更加。
我已经描述了一小部分准备进攻的地区。重要的是要记住,聪明的攻击者会利用这些漏洞的组合。为了好玩,这里有一些让你晚上睡不着觉的假设场景,如果你使用云基础设施,其中大多数都不太可能发生:
- 有人闯入您的办公室或数据中心,偷走了您的机器。
- 一名天真的员工被一封在他的机器上安装了恶意软件的网络钓鱼邮件所迷惑,这反过来利用了您的一台服务器上的一个未打补丁的漏洞。
- 攻击者假扮成一名求职者,获得了贵公司的面试机会。当面试官不在房间时,攻击者将一个设备插入您的网络,从网络中获取密码和其他安全数据。
- 一天晚上,一名心怀不满的员工来到办公室,偷走了装有安全数据的物理机。
- 攻击者冒充您的电话公司的电工或修理工,讲述一个故事,说服接待员带他去电气室或服务器室。在那里,他把一个 u 盘插到你的服务器上,这个 u 盘可以做很多破坏性的事情。
良好的安全性是基于威胁的:您应该确保对威胁进行优先排序,并且对每种威胁都有良好的策略。在对云还是本地基础架构做出决策时,或者任何其他决策时,您都应该逐个威胁地比较每个选项的风险。无论您的决定如何,以下是一些保护您资产安全的建议:
- 系统地、分析性地思考威胁。哪些资产对攻击者来说最有价值,攻击者可以通过哪些不同的方式来获取这些资产?您的系统的不同层(包括人员和物理基础设施)中最薄弱的环节是什么?
- 请专业公司进行安全审计和渗透测试,找出你的安全弱点。您需要找出问题,以便解决它们。
- 让安全成为你员工培训的一部分。所有员工都应该了解常见的社会工程技术和网络钓鱼技术,以便他们能够识别它们。警惕应该成为你文化的一部分。
- 关注你的人。雇佣他们的时候要做背景调查。注意员工不满的迹象。如果您的安全团队有资源,监控员工的电子邮件和行为,寻找可疑活动。
- 锁定您的人身安全。锁电脑,锁门,使用警卫,摄像头等。
- 加密您基础设施中的静态和传输数据。
- 设计并实现一个补丁程序,当漏洞被修复时,让你的软件保持最新。
原文:https://www.dominodatalab.com/blog/clustering-in-r
聚类是一种机器学习技术,使研究人员和数据科学家能够划分和分割数据。进行探索性分析时,将数据分成适当的组是一项核心任务。当 Domino 寻求支持加速数据科学工作(包括核心任务)时,Domino 联系了 Addison-Wesley Professional(AWP)Pearson,以获得适当的权限,从书中摘录“集群化”,R for every one:Advanced Analytics and Graphics,Second Edition 。AWP·皮尔逊提供了适当的许可来摘录这本书,并提供了一个补充的 Domino 项目。

聚类在现代机器学习中起着重要作用,它是将数据划分成组。这可以通过多种方式实现,最流行的两种方式是 K-means 和层次聚类。就数据帧而言,聚类算法找出哪些行彼此相似。被分组在一起的行应该彼此具有高相似性,而与分组之外的行具有低相似性。
一种比较流行的聚类算法是 K-means。它根据某种距离度量将观察结果分成离散的组。对于这个例子,我们使用来自加州大学欧文分校机器学习知识库的葡萄酒数据集,该数据集可在http://archive.ics.uci.edu/ml/datasets/Wine获得。
> wineUrl <- 'http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'
> wine <- read.table(wineUrl, header=FALSE, sep=',',
+ stringsAsFactors=FALSE,
+ col.names=c('Cultivar', 'Alcohol', 'Malic.acid',
+ 'Ash', 'Alcalinity.of.ash',
+ 'Magnesium', 'Total.phenols',
+ 'Flavanoids', 'Nonflavanoid.phenols',
+ 'Proanthocyanin', 'Color.intensity',
+ 'Hue', 'OD280.OD315.of.diluted.wines',
+ 'Proline'
+ ))
> head(wine)

因为第一列是栽培品种,这可能与群体成员关系太密切,所以我们将其排除在分析之外。
> wineTrain <- wine[, which(names(wine) != "Cultivar")]
对于 K-means,我们需要指定聚类的数量,然后算法将观察值分配到这些聚类中。有一些启发式规则可以用来确定聚类的数量,我们将在后面讨论。现在我们将选择三个。在R中,K-means 是通过名副其实的 kmeans 函数完成的。它的前两个参数是要聚类的数据,必须全部是numeric (K-means 不适用于分类数据),以及中心(聚类)的数量。因为聚类中有随机成分,所以我们设置种子来生成可重复的结果。
> set.seed(278613)
> wineK3 <- kmeans(x=wineTrain, centers=3)
打印 K-means 对象会显示分类的大小、每列的分类平均值、每行的分类成员以及相似性度量。
> wineK3

绘制 K-means 聚类的结果可能很困难,因为数据的维数很高。为了克服这个问题,有用的中的plot.kmeans函数执行多维缩放,将数据投影到二维空间中,然后根据聚类成员对点进行颜色编码。这如图 25.1 所示。
> library(useful)
> plot(wineK3, data=wineTrain)

如果我们传递原始的葡萄酒数据,并指定Cultivar是真正的会员资格列,点的形状将由Cultivar编码,因此我们可以看到它与图 25.2 中的颜色相比如何。颜色和形状之间的强相关性将指示良好的聚类。
> plot(wineK3, data=wine, class="Cultivar")

K-means 可能会受到随机启动条件的影响,因此使用多次随机启动来运行 k-means 被认为是一种很好的做法。这是通过nstart参数实现的。
> set.seed(278613)
> wineK3N25 <- kmeans(wineTrain, centers=3, nstart=25) > # see the cluster sizes with 1 start
> wineK3$size
[1] 62 47 69
> # see the cluster sizes with 25 starts
> wineK3N25$size
[1] 62 47 69
对于我们的数据,结果没有变化。对于其他数据集,启动次数会产生显著影响。
选择正确数量的簇对于获得良好的数据分区非常重要。根据哥伦比亚大学统计系主任、现任文理学院院长和统计学教授大卫·马迪根(David Madigan)的说法,确定最佳聚类数的一个很好的指标是哈迪根规则(J. A .哈迪根是最流行的 K-means 算法的作者之一)。它本质上是比较具有 k 个聚类和具有 k + 1 个聚类的类内平方和的比率,说明行和类的数量。如果这个数字大于 10,那么就值得使用 k + 1 个集群。如果做得不正确,重复拟合可能是一件苦差事,而且计算效率很低。有用的包有FitKMeans功能来做这件事。结果绘制在图 25.3 中。
> wineBest <- FitKMeans(wineTrain, max.clusters=20, nstart=25, + seed=278613) > wineBest

> PlotHartigan(wineBest)

根据这一指标,我们应该使用 13 个集群。同样,这只是一个经验法则,不应该严格遵守。因为我们知道有三个品种,所以选择三个品种群是很自然的,因为有三个品种。然而,三个聚类的聚类结果只是很好地将聚类与栽培品种进行了对比,因此可能不太适合。图 25.4 显示了左侧向下的聚类分配和顶部的品种。栽培品种 1 在它自己的簇中大多是单独的,栽培品种 2 只是稍微差一点,而栽培品种 3 一点也不聚在一起。如果这真是一个很好的拟合,对角线将是最大的部分。
> table(wine$Cultivar, wineK3N25$cluster)

> plot(table(wine$Cultivar, wineK3N25$cluster),
+ main="Confusion Matrix for Wine Clustering",
+ xlab="Cultivar", ylab="Cluster")

哈蒂根规则的替代方法是间隙统计,它将数据聚类的类内相异度与数据自举样本的类内相异度进行比较。它在衡量现实和期望之间的差距。这可以使用集群中的 clusGap 来计算(仅适用于数字数据)。这需要一点时间来运行,因为它正在做大量的模拟。
> library(cluster)
> theGap <- clusGap(wineTrain, FUNcluster=pam, K.max=20) > gapDF <- as.data.frame(theGap$Tab) > gapDF

图 25.5 显示了一些不同集群的差距统计。最佳聚类数是在最小化间隙的聚类数的一个标准误差内产生间隙的最小数。

> # logW curves
> ggplot(gapDF, aes(x=1:nrow(gapDF))) +
+ geom_line(aes(y=logW), color="blue") +
+ geom_point(aes(y=logW), color="blue") +
+ geom_line(aes(y=E.logW), color="green") +
+ geom_point(aes(y=E.logW), color="green") +
+ labs(x="Number of Clusters")
>
> # gap curve
> ggplot(gapDF, aes(x=1:nrow(gapDF))) +
+ geom_line(aes(y=gap), color="red") +
+ geom_point(aes(y=gap), color="red") +
+ geom_errorbar(aes(ymin=gap-SE.sim, ymax=gap+SE.sim), color="red") +
+ labs(x="Number of Clusters", y="Gap")
对于该数据,0.1952376 的最小间隙是用于具有五个聚类的聚类。在这种情况下,在最小值的一个标准误差内不存在具有较少聚类的聚类。因此,根据差距统计,五个聚类对于该数据集是最佳的。
K-means 聚类的两个问题是它不能处理分类数据,并且容易受到离群值的影响。另一种选择是 K-medoids。聚类的中心不是聚类的平均值,而是聚类中的一个实际观测值。这类似于中位数,中位数同样对异常值具有鲁棒性。
最常见的 K-medoids 算法是围绕 medoids 划分(PAM)。集群包包含 pam 函数,用于在 Medoids 周围执行分区。在这个例子中,我们查看了世界银行的一些数据,既包括 GDP 等数字指标,也包括地区和收入水平等分类信息。
现在,我们使用国家代码从世界银行下载一些使用 WDI 的指标。
> indicators <- c("BX.KLT.DVNV.WD.GD.ZS", "NY.GDP.DEFL.KD.ZG", + "NY.GDP.MKTP.CD", "NY.GDP.MKTP.KD.ZG" + "NY.GDP.MKTP.CD", "NY.GDP.MKTP.KD.ZG" + "TG.VAL.TOTL.GD.ZS") > library(WDI)
>
> # pull info on these indicators for all countries in our list
> # not all countries have information for every indicator
> # some countries do not have any data
> wbInfo <- WDI(country="all", indicator=indicators, start=2011, + end=2011, extra=TRUE) > # get rid of aggregated info
> wbInfo <- wbInfo[wbInfo$region != "Aggregates", ] > # get rid of countries where all the indicators are NA
> wbInfo <- wbInfo[which(rowSums(!is.na(wbInfo[, indicators])) > 0), ]
> # get rid of any rows where the iso is missing
> wbInfo <- wbInfo[!is.na(wbInfo$iso2c), ]
数据有一些缺失值,但幸运的是 pam 很好地处理了缺失值。在运行聚类算法之前,我们进一步清理数据,使用国家名称作为data.frame的行名,并确保分类变量是具有适当levels的factors。
> # set rownames so we know the country without using that for clustering
> rownames(wbInfo) <- wbInfo$iso2c > # refactorize region, income and lending
> # this accounts for any changes in the levels
> wbInfo$region <- factor(wbInfo$region) > wbInfo$income <- factor(wbInfo$income) > wbInfo$lending <- factor(wbInfo$lending)
现在,我们使用集群包中的 pam 来拟合集群。图 25.6 显示了结果的轮廓图。与 K-means 一样,使用 PAM 时需要指定聚类数。我们可以使用 Gap statistic 之类的方法,尽管我们将选择 12 个聚类,因为这略小于数据行数的平方根,这是聚类数的一个简单启发式方法。每条线代表一个观察值,每组线就是一个聚类。很好地符合聚类的观察值具有大的正线,而不太符合聚类的观察值具有小的或负的线。聚类的平均宽度越大,意味着聚类越好。
> # find which columns to keep
> # not those in this vector
> keep.cols <- which(!names(wbInfo) %in% c("iso2c", "country", "year", + "capital", "iso3c")) > # fit the clustering
> wbPam <- pam(x=wbInfo[, keep.cols], k=12, + keep.diss=TRUE, keep.data=TRUE) >
> # show the medoid observations
> wbPam$medoids


> # make a silhouette plot
> plot(wbPam, which.plots=2, main="")

因为我们处理的是国家级别的信息,所以在世界地图上查看聚类会很有帮助。由于我们正在使用世界银行的数据,我们将使用世界银行的世界形状文件。它可以像下载其他文件一样在浏览器中下载,也可以使用R下载。虽然这可能比使用浏览器慢,但如果我们必须以编程方式下载许多文件,这可能会很好。
> download.file(url="http://jaredlander.com/data/worldmap.zip",
+ destfile="data/worldmap.zip", method="curl")
文件需要解压,可以通过操作系统或者在R中完成。
> unzip(zipfile="data/worldmap.zip", exdir="data")
在这四个文件中,我们只需要担心以.shp结尾的那一个,因为 R 会处理其余的。我们使用来自 maptools 的readshapespacific来读取它。

> library(maptools)
> world <- readShapeSpatial( + "data/world_country_admin_boundary_shapefile_with_fips_codes.shp" + ) > head(world@data)
世界银行 shapefile 中的两位数代码和使用 WDI 提取的世界银行数据中的两位数代码之间存在明显的差异。值得注意的是,奥地利应该是“AT”,澳大利亚应该是“AU”,缅甸应该是“MM”,越南应该是“VN”等等。
> library(dplyr)
> world@data$FipsCntry <- as.character(
+ recode(world@data$FipsCntry,
+ AU="AT", AS="AU", VM="VN", BM="MM", SP="ES",
+ PO="PT", IC="IL", SF="ZA", TU="TR", IZ="IQ",
+ UK="GB", EI="IE", SU="SD", MA="MG", MO="MA",
+ JA="JP", SW="SE", SN="SG")
+ )
为了使用 ggplot2 我们需要将这个 shapefile 对象转换成一个data.frame,这需要几个步骤。首先,我们根据数据的行名创建一个名为id的新列。然后我们使用大卫·罗宾逊写的扫帚包中的整洁函数,将它转换成一个data.frame。扫帚包是一个伟大的通用工具,用于将 R 对象,如lm模型和kmeans簇,转换成漂亮的矩形data.frames。
> # make an id column using the rownames
> world@data$id <- rownames(world@data) > # convert into a data.frame
> library(broom)
> world.df <- tidy(world, region="id") > head(world.df)

现在,我们可以采取步骤加入来自聚类和原始世界银行数据的数据。
> clusterMembership <- data.frame(FipsCntry=names(wbPam$clustering), + Cluster=wbPam$clustering, + stringsAsFactors=FALSE) > head(clusterMembership)

> world.df <- left_join(world.df, clusterMembership, by="FipsCntry") > world.df$Cluster <- as.character(world.df$Cluster) > world.df$Cluster <- factor(world.df$Cluster, levels=1:12)
构建绘图本身需要一些 ggplot2 命令来正确格式化。图 25.7 显示了地图,颜色编码的集群成员;灰色国家要么没有世界银行的信息,要么没有正确匹配
的两个数据集。

> ggplot() +
+ geom_polygon(data=world.df, aes(x=long, y=lat, group=group,
+ fill=Cluster, color=Cluster))
+ labs(x=NULL, y=NULL) + coord_equal() +
+ theme(panel.grid.major=element_blank(),
+ panel.grid.minor=element_blank(),
+ axis.text.x=element_blank(), axis.text.y=element_blank(),
+ axis.ticks=element_blank(), panel.background=element_blank())
与 K-means 非常相似,必须指定 K-medoids 聚类中的聚类数。使用由 pam 返回的相异信息,可以构建类似于哈迪根规则的东西。

层次聚类在聚类中构建聚类,不像 K-means 和 K-medoids 那样需要预先指定数量的聚类。分层聚类可以被认为是一棵树,并显示为一个树状图;在顶部,只有一个由所有观察值组成的聚类,而在底部,每个观察值都是一个完整的聚类。介于两者之间的是不同层次的聚类。
使用葡萄酒数据,我们可以建立与 hclust 的聚类。结果如图 25.8 中的树状图所示。虽然文本很难看到,但它在末端节点标记了观察结果。
> wineH <- hclust(d=dist(wineTrain)) > plot(wineH)

层次聚类也适用于分类数据,如国家信息数据。但是,它的相异度matrix必须有不同的计算方法。树状图如图 25.9 所示。
> # calculate distance
> keep.cols <- which(!names(wbInfo) %in% c("iso2c", "country", "year", + "capital", "iso3c")) > wbDaisy <- daisy(x=wbInfo[, keep.cols]) >
> wbH <- hclust(wbDaisy) > plot(wbH)

有许多不同的方法可以计算聚类之间的距离,它们会对层次聚类的结果产生重大影响。图 25.10 显示了四种不同连接方法的结果树:单一、完全、平均和质心。一般认为平均联系是最合适的。
> wineH1 <- hclust(dist(wineTrain), method="single") > wineH2 <- hclust(dist(wineTrain), method="complete") > wineH3 <- hclust(dist(wineTrain), method="average") > wineH4 <- hclust(dist(wineTrain), method="centroid") >
> plot(wineH1, labels=FALSE, main="Single")
> plot(wineH2, labels=FALSE, main="Complete")
> plot(wineH3, labels=FALSE, main="Average")
> plot(wineH4, labels=FALSE, main="Centroid")

切割由分层聚类产生的结果树将观察结果分成定义的组。有两种方法可以剪切它:要么指定簇的数量,这决定了剪切发生的位置,要么指定在哪里进行剪切,这决定了簇的数量。图 25.11 演示了通过指定聚类数来切割树。
> # plot the tree
> plot(wineH)
> # split into 3 clusters
> rect.hclust(wineH, k=3, border="red") > # split into 13 clusters
> rect.hclust(wineH, k=13, border="blue")

> # plot the tree
> plot(wineH)
> # split into 3 clusters
> rect.hclust(wineH, h=200, border="red") > # split into 13 clusters
> rect.hclust(wineH, h=800, border="blue")

聚类是一种用于分割数据的流行技术。R中用于聚类的主要选项是用于 K-means 的 kmeans ,用于 K-medoids 的 cluster 中的 pam ,以及用于层次聚类的 hclust 。速度有时会成为集群的一个问题,特别是分层集群,因此值得考虑像fastcluster这样的替换包,它有一个插入替换功能, hclust ,它的操作就像标准的 hclust 一样,只是更快。
原文:https://www.dominodatalab.com/blog/coatue-management-leads-27-million-investment-round-domino
我们很高兴地宣布, Coatue Management 已经为 Domino 领导了一轮 2700 万美元的融资,其中包括我们以前的投资者红杉资本、Zetta Venture Partners 和彭博贝塔。
我们一直注意不要过分庆祝筹款。筹集一轮融资——虽然有很多艰苦的工作和令人兴奋的事情——本身并不是目的。相反,新的一轮使我们能够达到我们的最终目标:建立领先的数据科学平台以帮助公司最大限度地发挥定量研究的影响。
对于为什么这对我们来说是一个重要的里程碑,我有两个主要的看法。第一个是关于这一轮,第二个是关于我们正在建立的业务类型。
这一轮感觉不一样,因为 Coatue 不仅是世界顶级投资公司之一,也是我们的客户。
Coatue 拥有一个庞大的量化研究团队,利用数据和高级分析来确定新的投资策略。两年来,该团队一直使用 Domino 的平台来协作和复制研究。
同时,Coatue 的风险投资团队确定,未来几年最重要的投资趋势之一是数据科学的进步。他们(和我们一样)认为数据科学正在重塑几乎每个行业。
Coatue 抢先领导了我们最近的一轮融资。由于我们在行业中的地位以及分析师对该产品的喜爱程度,Coatue 的团队发现了这个机会并进行了投资。作为一个创始人,我可以告诉你,当你的一个客户非常喜欢你的产品,以至于他们想投资你的公司时,这是非常令人高兴的。
这项投资将使 Domino 能够追求更大的机会,我们比以往任何时候都更兴奋地加速我们已经开始的工作。
自去年红杉资本投资以来,我们的用户增加了两倍,客户和收入都翻了一番。但这还不是最有趣的。
更有趣的是,所有这些用户在行业方面是多么的多样化。这些领域从保险到制药,从先进制造业到互联网技术。大多数行业现在都将数据科学视为成功的关键因素。
此外,我们看到数据科学的成功已经成为 CEO 级别的问题。首席执行官们越来越想了解 Domino 能为他们的公司做些什么。
2700 万美元将使我们能够加快这一切。我们将使用它来扩展工程,以便我们可以构建更广泛的产品功能,将我们的销售足迹扩展到纽约市和伦敦,并增加我们的营销工作,以便更多的人了解数据科学和 Domino 的力量。
所有这些努力将使世界更加接近我们在 2013 年创立 Domino 时的设想。正如我们之前所写的,我们设想一个预测分析成为企业核心的世界。这正是我们所看到的情况。
我们看到越来越多的公司将定量研究和数据科学作为核心组织能力进行投资。随着这项工作越来越接近业务的核心,人们越来越多地通过协作来完成。公司比以往任何时候都更加关注知识的复合,尤其是在受监管的行业,人们越来越意识到数据科学工作需要可审计和可复制。这正是多米诺设想的世界,既令人欣慰又令人激动。
如果你想了解更多关于 Coatue 如何使用 Domino 平台的信息,以及为什么 Domino 对他们的定量研究团队如此有价值,你可以阅读更多关于他们工作的信息。
现在回到创业的有趣部分。
原文:https://www.dominodatalab.com/blog/coatue-sequoia-invest-domino
我们很高兴地宣布红杉资本和 Coatue 管理公司已经为多米诺公司领投了 4000 万美元的资金,其中也包括以前的投资者 Zetta Venture Partners 和彭博贝塔公司。我们将利用这笔投资来加速新数据科学平台功能的开发,获取人才,进行全球扩张,并巩固和深化与 SAS 和亚马逊等公司的战略合作伙伴关系。
在对所有可能性的兴奋之下,有两件事真正让我对这项投资感到振奋:第一:它对我们的客户说了些什么;第二:它反映了市场的什么。
首先,这突出了我们的长期客户正在经历的成功,以及许多新客户对模型驱动的渴望。Allstate、Bayer、Bristol Myers-Squibb 和其他公司等长期客户和行业领导者基于其推动强大商业价值的模式,迅速加强了与 Domino 的合作关系。此外,EasyJet、BNP Paribas Cardif、SunCorp Group 和 Lloyds Banking Group 等新的领导者最近都与 Domino 合作,以加速他们成为模型驱动的道路。我们很高兴加深与行业领导者的关系,并看到对 Domino 的需求加速增长。
其次,这一轮反映了帮助公司成为模式驱动型企业的机会的规模和重要性。正如软件在以前的计算时代区分赢家和输家一样,公司越来越意识到,变得由模型驱动不是一件好事,而是一种生存需要。此外,他们认识到数据科学的成功来自于建立新的组织能力,而不仅仅是购买一些过度宣传的人工智能工具。
今年 5 月,在旧金山举行的首届大会 Rev 上,我们与 300 多名数据科学领导者、高管和从业者讨论了这个问题。我们展示了我们对模型管理的愿景——一种新的技术和流程类别,帮助组织一致且安全地开发、验证、交付和监控创建竞争优势的模型。业界的反应是压倒性的积极和谦逊。
这一轮融资将帮助我们扩大员工基础和生态系统,以满足公司快速增长的模型驱动型需求。如果你有兴趣在这个旅程中帮助你的公司,看看我们最近的论文。如果你有兴趣帮助我们使其他公司成为模型驱动的,请查看我们的职业页面。虽然我们已经感受到了模型的变革性影响,但我们相信这仅仅是个开始。
原文:https://www.dominodatalab.com/blog/collaboration-at-scale-doesnt-just-happen
大多数数据科学领导者可能都记得这样一个例子:几个数据科学家之间的合作激发了一个新想法,加速了新团队成员的加入,或者帮助加快了新模型的开发或部署。
他们还可能指出缺乏协作会损害他们团队的生产力和进展的实例,数据科学家重新创建其他人已经创建的代码、实验和流程。
这导致一些数据科学领导者开始以编程方式思考协作。这是数据科学领导者 Matt Cornett(来自一家领先的保险解决方案提供商)、Patrick Harrison(来自一家全球金融情报公司)和 Brian Loyal(来自 Bayer Crop Science)在他们的网络研讨会中讨论的几个主题之一:利用数据科学推动成果的最佳实践。
在他们的谈话中,他们分享了一些加强数据科学家之间合作的最佳实践。其中包括:
-
开发数据科学支持网络,促进数据科学家在业务和软件团队之间的协作。Patrick Harrison 解释说,将这些团队的数据科学家联系起来,使他们能够获得所需的支持和指导,分享技巧和诀窍,讨论共同的挑战,并倡导共同的兴趣。他说:“使用通用工具和平台确实有助于这一点,所以如果你能够,即使在联合或中心辐射模型中,标准化完成工作的通用方法和使用的通用工具,可以真正铺平通往有效数据科学支持网络的道路。”
-
牢记可重用性来构建。在拜耳,数据科学领导者要求团队在开始项目时牢记重用。“我们已经多次看到,一个成功的数据科学项目可以多么迅速地在意想不到的地方找到应用,”Brian Loyal 说。“通过尽早设定和强化最佳实践,您可以让潜在合作者的生活变得轻松许多。像 Domino 这样的标准化工具可以从一开始就帮助提高可重用性。”
-
定期进行同行评审。【Matt Cornett 和他的团队喜欢做的一项活动是鼓励数据科学家分享正在进行的工作。“这将培养更大的创造力,并真正有助于消除容易偏离轨道的孤立工作,”他说。“在工作过程中,你分享的越多,你得到的反馈就越多,我认为最终的结果就越好。”
他在每周的员工会议 — 上为这些评审安排了时间,每周指派一名数据科学家讨论他们的项目,并从团队的其他成员那里获得反馈。科内特说,多米诺骨牌在这方面也帮了大忙。“Domino 中有许多不同的协作特性,”他解释道。“如果你只是在自己的电脑上运行 RStudio 或 Jupyter Notebook,如果你想让别人运行你的代码,他们的电脑必须和你的电脑配置得差不多。Domino 有助于解决这一问题,这样人们就可以跳到其他人的代码中,并在协作时与代码进行交互,同时思考“我下一步需要做什么?”"
-
将多个数据科学家分配到一个项目中。Matt Cornett 说:“我在过去的几个角色中发现的一件事是,每当有一个以上的数据科学家在一个项目上工作时,你的成果真的会成倍增加。“这不一定是一条直线路径。我认为这是一种指数式的增长,你发现的洞察力、你能够提出的东西和你能够开发的东西都是如此。”
听 Matt Cornett、Patrick Harrison 和 Brian Loyal 讨论如何促进数据科学家之间的合作。
https://youtube.com/watch?v=AFt3wsjDAnI
聆听全面讨论以听取 Matt、Patrick 和 Brian 关于加强协作和推动成果的最佳实践的更多信息。正如这些领导者所展示的,大规模的合作不会凭空发生。无论现有的组织模式是集中式、分布式还是使用轴辐式模式,数据科学领导者都需要在模型开发的日常节奏中建立实践,以促进思想和知识的共享,从而成功创新。
了解更多信息
观看由数据科学领导者 Matt Cornett、Patrick Harrison 和 Brian Loyal 主讲的名为“利用最佳科学推动成果的最佳实践”的网络研讨会。
阅读报告“组织企业数据科学”,了解数据科学领导者用于构建企业数据科学战略的最佳实践的更多信息。
利用我们的模型速度评估来确定您的组织在成熟道路上的位置。
Twitter Facebook Gmail Share
原文:https://www.dominodatalab.com/blog/collaboration-data-science-data-engineering-true-false
这篇博文包含了关于解决人们在协作开发和部署模型时出现的紧张点的坦率见解。Domino 的内容主管与唐·迈纳和马歇尔·普雷斯坐下来讨论数据科学和数据工程之间的合作状态。这篇博文提供了精粹的见解、音频剪辑、摘录的引文以及完整的音频和书面文字记录。其他行业专家将提供有关该主题的更多内容。
在过去的五年、中,我们已经从的数据科学团队那里听到了许多关于他们在构建、部署和监控模型时的成功和挑战的故事。不幸的是,我们也听说许多公司已经内化了模型神话,或者数据科学应该像软件开发或数据资产一样被对待的误解。这种误解完全可以理解。数据科学涉及代码和数据。然而,人们利用数据科学来发现以前无法解决的问题的答案。因此,数据科学工作比软件开发更具实验性、迭代性和探索性。数据科学工作涉及受益于可扩展计算的计算密集型算法,有时需要专门的硬件,如 GPU。数据科学工作也需要数据,比典型的软件产品需要的数据多得多。所有这些需求(以及更多)凸显了数据科学工作与软件开发的不同之处。这些需求也凸显了数据科学和工程之间合作的至关重要性,特别是对于寻求保持或发展竞争优势的创新型模型驱动型公司而言。
然而,数据科学和工程之间的协作是一个众所周知的挑战。
由于“寻求真相,说出真相”只是达美乐的核心价值观之一,达美乐的内容负责人与 Don Miner 和 Marshall Presser 坐下来,就不同的优先事项、已知的协作挑战以及应对这些挑战的潜在方法进行了尊重和坦诚的对话。Miner 和 Presser 都在数据科学和工程领域拥有丰富的实践经验。Miner 是一家数据科学和人工智能公司的创始合伙人,代表了数据科学的观点。Presser 是 Pivotal 数据工程团队的成员,他代表了数据工程的观点。这篇博客文章涵盖了精华、关键摘录、音频剪辑,以及对话的完整回放和文字记录。其他行业专家也将提供关于该主题的其他内容。这篇博客文章和未来内容的目的是为围绕协作挑战的公共对话做出贡献,这一挑战一直缺乏从多个角度进行的深入分析性论述。
坦诚的讨论以对当前状态的检查开始,我们在数据科学中是如何达到当前状态的?似乎有无数的术语来描述与模型互动的人。目前使用的几个术语包括研究人员、数据科学家、机器学习研究人员、机器学习工程师、数据工程师、基础设施工程师、DataOps、DevOps 等。矿工和记者都评论并同意,在任何期限的任何转让之前,工作本身就已经存在。Presser 将数据工程定义为包含获取数据、构建数据存储、管理数据流(包括 ETL)以及将数据提供给数据科学家进行分析的技能。Presser 还指出,大型企业组织中的数据工程师也必须精通从乍看之下可能不会提供数据的部门“哄骗”数据。Miner 同意并指出,围绕数据科学与数据工程的定义有更多的思想领导力,这导致了市场中的模糊性。
Marshall Presser: “我认为,在我们有数据科学家之前,我们就有了数据工程师。数据工程师做的事情包括建立数据仓库,人们可以从这些数据仓库中获得基本的商业智能,切片和切块,对过去的状态进行分析,以及对未来状态进行某种最低限度的分析,了解业务昨天是什么样的,不管是什么业务。然后人们得出了一个聪明的结论,我们实际上可以用数据做更多的事情,而不仅仅是报告过去。从我的角度来看,数据科学家进入了现代分析思维,如果你愿意,10 年或 15 年前,我想我甚至没有听说过数据科学家这个术语。我不记得我第一次听到它是什么时候,但那是很久以前了。我甚至不确定我当时是否听过数据工程师这个词。我们发展出了这两种不同的专业,Don,我马上就要告诉你,但我对这两者区别的理解是,数据工程师的工作是从各种来源获取数据。按摩它,让它进入一个地方,然后数据科学家可以用它做有趣的机器学习。所以,我认为目前的状态是这样的。
唐·迈纳:“我基本上同意马歇尔所说的一切……仅仅因为我们创造了数据工程师、数据科学家这些术语,并不意味着它以前就不存在。[这些术语达到了]一个临界质量,人们在某个点上,“你知道,我们可能应该叫它什么。“有足够多的数据科学家跑来跑去,”哦,你知道吗?那应该有个名字。“或者,现在有足够多的数据工程师在工作,他们应该有一个名字…人们花更多的时间来定义数据科学的含义,而不是定义数据工程的含义。从大学课程开始,我从未听说过有人开设数据工程本科课程,但你开始听到数据科学课程的出现。…我知道这是为什么,但我认为我们现在所处的位置是,数据科学是一个非常明确的职业道路和职业。人们通常知道这意味着什么。…炒作的影响仍然很大,现在已经开始有所减弱。但是在数据工程方面…已经远离了典型的固执己见的人,他们会帮助定义这些东西,在会议上谈论它。这仍然给那里的市场留下了许多不确定性。所以,我认为这就是我们现在的处境。”

由于矿工和记者的观点都基于实践经验,讨论转向了数据科学家和数据工程师之间的差异如何转化为在雇用和招聘中优先考虑哪些措施和技能。Miner 表示,当他招募数据科学家时,他会寻找技术能力(即机器学习)以及潜在的领域专业知识。Miner 还反驳说,当他招聘数据工程师时,他经常会寻找那些碰巧拥有数据库经验、各种技术通用性信号(即与 Kaftka 合作)以及“某种类型的态度”的软件工程师
“这对于不同的组织来说是不同的,但是……数据工程师需要真正的多面手,他们需要有能力在许多不同类型的角色中工作。他们需要能够编写软件,他们需要能够使用数据库,他们需要能够做 DBA 的事情,他们需要关心安全性,他们需要关心网络。这是一个非常跨学科的角色,所以当我寻找一名优秀的数据工程师时,我最看重的是他们技术技能的灵活性和多面性。此外,就像你提到的,你需要有某种态度才能在数据组织内部成功工作。在处理令人沮丧的问题时,他们需要非常有弹性。与此同时,作为一名数据科学家,我通常会寻找机器学习经验等技术技能。我正在寻找的特定技能,也许是他们过去工作过的某些领域。所以,实际上我会说,现在对于数据科学家来说,我通常在寻找特定的技术能力。对于数据工程师来说,更多的是态度和多面性,而不是具体的技术技能。”
Presser 和 Miner 都认为数据工程的功能很重要,尤其是获取数据的导航技能。Miner 特别指出
“在我们的咨询项目中,以及我认识并与之合作的另外两家数据科学咨询公司中,如果我们有一个纯粹的数据科学项目,这意味着数据工程不在范围内,客户说他们将负责此事,在我们有证据证明数据已经加载之前,我们不会开始工作。我们已经被他们烧伤很多次了,他们说,“哦,你知道吗?你们可以周一开始。我们将在下周的某个时候加载数据。“在数据出来之前,我们甚至不会开始……这也是数据工程师的另一个问题。我真的碰到了这个问题…在年轻的数据工程师方面,我们遇到的一个问题是,他们没有足够的资历来对抗那些不愿意友好相处的 Oracle 数据库管理员。…这是一个很难胜任的角色,因为,你是对的,…人际交往技能和政治导航技能对数据工程师来说非常重要。”

在探讨了技能、技术能力和工作流优先级的差异之后,对话转向了关于数据科学和数据工程之间协作的非常坦率的见解。在对话过程中出现的挑战包括一般沟通方面的挑战、缺乏双向尊重、可能缺乏良好的项目管理,以及期望数据科学工作流像软件开发工作流一样。当被问及“协作的当前状态如何?Miner 指出:“鉴于各个方面都在不断涌现,并且可能因组织而异。”
“对此我有两个答案。一个是,我不认为我工作的大多数组织中的数据科学家和数据工程师已经知道如何与任何人沟通。因此,甚至不是相互之间,而是数据科学家和数据工程师如何融入正在构建一些新系统的现代系统,他们如何与不同的业务线进行交互?他们如何与营销、销售互动?他们如何与产品设计互动?….即使从根本上来说,这个行业也存在重大问题。以及它们是如何相互作用的?…这很难说,因为我真的不能说,至少在过去几年里,我和他有过很多交流,比如,他是数据科学家,他是数据工程师。我们的角色被明确定义,他们在沟通。所以我想我会给出一个否定的答案,说,我不知道,现在说还为时过早……从我的角度来看,我可以说一些关于不同的人在不同的场景中扮演不同的角色以及他们如何沟通的事情。
但总的来说,我认为角色还没有明确定义,还不能真正说出他们是如何沟通的……
在一些地方,我看到它非常实用,有负责数据的职能数据工程师,也有数据科学家……在很多情况下,双方都没有得到足够的尊重……数据工程师就像是,“这个数据科学家不知道他在做什么。他不知道如何处理数据。数据科学家不知道数据工程有多难。”另一方面,数据科学家对数据工程师不能足够快地完成工作感到沮丧。没有以他们想要的方式完成…我在两个方向上合作过的最好的数据人员都对其他人的情况感同身受。数据工程师对数据科学家在寻找什么和他们需要什么有直觉。数据科学家对数据工程师来说什么是困难的,什么是不合理的有直觉…这是我见过的最好的情况。最糟糕的情况,也是我通常看到的情况,是数据工程师只是处理数据,而不担心重复数据、编码错误的数据以及不适合数据科学的电缆布置方式。然后数据科学家看到这些东西,他们就像,“这是垃圾。你在做什么?我现在就要自己动手了。”他们会遇到一大堆问题,因为他们不知道如何访问数据和其他东西。我认为真正重要的是理解彼此的处境,理解他们都很艰难,并努力克服。"
Presser 还提供了关于在项目开始时让人们团结一致是建立同理心和解决协作紧张的重要方式的见解,以及矿工的观点
“一点也不罕见,[它]是真正糟糕的项目管理的症状。在我看来,解决这个问题的方法是在设计项目时让每个人都在房间里…这有点像人寿保险。你知道,直到你需要它的时候你才真正需要它,但是你必须一直拥有它,即使你不需要它。我见过的最成功的项目是这样的项目,数据科学家、数据工程师和应用程序开发人员从一开始就在房间里,与客户谈论他们想要解决的问题是什么,最小产品是什么,最终解决方案应该是什么,用户对此有什么期望。如果你从那个地方开始,你更有可能产生共鸣。…这是第一件事。
第二件事是,我发现唐描述的困难并不存在,至少在我从事的许多项目中,数据科学家和数据工程师之间的困难与数据科学家、数据工程师和应用程序开发人员之间的困难一样多。因为应用程序开发人员,我不想说对数据的蔑视,这太强烈了,但我想说的是,他们没有我和 don 那么多的经验和对数据的热爱。
对他们来说,数据库就是数据库,数据就是数据,石油就是石油。你知道,都一样。总的来说,他们对思考数据收集的种类和解决问题所需的问题不感兴趣。他们是这样的,“让我很快拿出一个最小的、可行的应用程序。”顺便说一句,我真的听过一个项目经理说,“你知道,我的开发人员写的任何一行代码,用来审计他们正在做的事情,把东西放进数据库,都是他们在开发应用程序时没有放进去的一行代码。”因此,他们经常鼓励巨额技术债务,因为他们现在已经有了这个伟大的应用程序,但当项目的第二阶段到来时,要用这个应用程序应该存储在某个地方但没有存储的数据做一些有趣的事情,我们有点像是在背黑锅,因为应用程序开发人员有点目光短浅。在我看来,这种短期思维阻碍了真正优秀的数据科学。"
Miner 指出,另一个潜在的紧张点包括将数据科学类似于软件开发的组织
“我们一直建议我们的客户,并且我认为有时会让人们感到惊讶的一个主要部分是,大多数组织默认将他们的数据科学项目视为他们目前正在组织中运行的软件工程项目。因此,如果他们希望他们的数据科学家填写吉拉门票,进行冲刺。不仅是数据科学家,数据工程也不是类似的任务。平台架构也是类似的。他们都有一些共同点。在数据科学、数据工程和平台架构中,这是那些你可以永远花在某件事情上而不会完成的事情之一。所以,这就是“我什么时候想停下来?或者,“我什么时候没钱了?”而不是,“好了,这个应用程序完成了。我会运送它,它在一个盒子里。去了就好了。我们把它发布给全世界,然后销售出去。太棒了。“从数据科学的角度来看,除非你去做,否则很难判断一件事要花多长时间。所以有这个鸡和蛋的问题。我不能写吉拉机票,这需要两个星期,直到我真的花了两个星期,并意识到它实际上需要四个星期。所以当你试图在这些项目上应用这些传统的软件工程项目管理的东西时,它不起作用。事实上,在很多情况下,它会造成伤害。实际上,有一门新的学科需要诞生。”
数据科学和数据工程之间的合作是一个很难解决的问题。虽然人们一致认为问题的难度导致缺乏广泛的公共讨论,但 Miner 和 Presser 深入研究了有可能缓解围绕合作的紧张点的各个方面。在对话之前,支持自然产生的协作的方面包括早期的利益相关者联盟,以及关于各种责任的相互尊重和直觉。此外,当被直接问及解决协作紧张点的潜在方法时,会出现关于企业文化、协作工具和“数据联络”的其他建议,协作紧张点是开发和部署模型的障碍。
普莱塞指出,企业文化有助于协作,特别是
“我认为在很多方面,这是一种企业文化。有些组织合作得很好,有些则不然,我在联邦政府部门工作了很长时间,这个项目由来自不同组织的人组成,这些组织不属于联邦政府。外包项目管理,外包数据库管理,外包这个,外包那个。这里有一点关于封地的争斗,客户要么因为合同原因不能做任何事情,要么选择不做任何事情。但这与 Don 所说的移情和尊重是相反的,在很多方面,这是由收入来源决定的。所以,我发现有些组织我喜欢一起工作,有些组织我不喜欢一起工作,因为企业文化不是分享、同情和尊重的文化。所以好好选择你的伴侣。”
Miner 也认同企业文化的贡献:
“我认为我工作过的最好的组织是那些鼓励公开交流,而不是内部竞争的组织。没有太多的自我…你可以在很多其他事情上逃脱,数据项目不是其中之一。这就是问题所在,……一个组织可能发现[许多自我]在他们所做的其他类型的工作中取得了成功,但在这种情况下,它并不是非常成功……对于我所看到的哪些工作很好的问题,我认为对我来说最重要的一个问题是,每个人都精力充沛,知道目标是什么。我认为这也与企业文化有关。一个企业文化有非常明确的目标,或者一个领导者有非常明确的目标,这些目标是非常透明的,允许每个人调整自己,他们一天中的微小互动,成为这些目标的一部分。此外,数据科学的目标通常很奇怪。有时他们并不直截了当。”
虽然 Presser 提倡优先考虑面对面协作以加快工作和解决协作问题,但 Miner 提倡配备“数据联络员”以及协作工具,因为数据科学工作的性质决定了这一点:
“关于马歇尔所说的基本沟通,我想补充的另一件事是,因为我确实同意,并非所有的利益相关者和所有的人都会以不同的身份在早期参与讨论。这实际上是首席数据科学联络员这种角色在公司中的合适位置,在公司中,您不一定需要您的数据科学家(如在大型组织中)参与每个决策,但有一位数据科学领导者,即首席数据官或首席数据科学家,或者不管头衔是什么,我不认为这是真正确定的,会参与这些范围界定会议。我们已经看到这是成功的。从沟通的角度来看,另一件事可能也是如此,实际上,我将为工作中的实时远程协作工具投票……我同意,在项目开始时,让每个人都在房间里真的很好,因为需要进行大量的沟通。但同样,对于这些项目来说,电子邮件感觉太慢了。数据科学家正在慢慢地获得见解,数据工程师也一样,在他们积极工作时,会以一种特别的方式遇到不同的问题。所以我们经常使用 Slack,我认为现在很多人都在使用它,而且它非常成功,因为你不必把一堆东西塞进一封电子邮件,比如,“这是我今天的问题清单。“也许你可能有两个数据科学家在谈论一个问题,而数据工程师正在偷听,并说,“哦,嘿,顺便说一句,这是我如何设计它的,”或者说,“哦,嘿,是的,我可以很快为你解决这个问题。不会花我太多时间。“所以这种更实时的交流是好的,我也认为,在某些情况下,这几乎比在物理办公室里更好。即使你坐在办公桌前,离数据工程师有三张桌子远,你还是要起身去打扰那个人。在这里,我想我实际上是在论证,随着项目的进行,我认为 Slack 和其他类似的东西实际上可能是目前最好的工具之一。”
当被问及如何进一步解释“数据联络员”的概念,并提供额外的澄清,以及这个人是否可以成为“项目经理”时,Miner 指出
“…在一些大型项目中,我和尼尔斯[联合创始人]都提供咨询服务。这是一个非常必要的角色,我们与其他一些客户合作,我们建议他们这样做,这实际上有两个原因。一个是,数据科学需要大量的关注。当你在处理数据科学问题时,你正在摸索一些机器学习的东西,你正在处理数据,一个中断可能会打破你头脑中几个小时建立的卡片房子,如果你负责参加随机会议来讨论用例和事情,你永远不会完成任何事情…你需要做的是,你需要选择一些人。我的意思是,老实说,这些人的个性比其他人更好,但真的需要有人在必要时能够做到这一点,了解真正的问题,能够代表数据科学家在这些会议上实际开展工作。但是由于专注的要求,你需要选择一个人作为牺牲者来做这件事,四处走动并根据经验说话是可以的,这样其他人就可以专注了。这是一个非常重要的角色……在一个拥有庞大团队的大组织中。”

在解决了可能有助于缓解协作紧张的潜在问题后,讨论转移到了协作的潜在未来状态。讨论的潜在未来状态场景包括角色的日益专业化,以及对帮助管理协作的规程或过程的需求。
马歇尔出版社:“……从未来国家的角度来看,我认为角色的专业化只会增加。我们将会有纯粹的数据科学家、纯粹的应用程序开发人员、纯粹的数据工程师、纯粹的平台架构师、纯粹的联络人员、纯粹的项目管理人员,这些人可能会与联络角色联系在一起,并保持这些人的协调,以便他们可以说共同的语言,并相互同情和尊重,我认为这是未来的挑战。但是一旦我们解决了这个问题,那就太好了。”
唐·迈纳:“我认为就马歇尔的观点而言,……这里最大的问题是缺乏围绕管理、围绕数据工程、数据工程和数据科学之间的沟通的过程,缺乏管理,如果你想专业化,你就需要一个数据联络员…你想有一个数据工程师专家吗,因为最早的数据科学项目,像最小的项目,数据科学家也在做数据工程工作。可能还有平台架构工作,以及应用程序开发。
一旦开始专业化,这也是我们现在有数据工程师和数据科学家的原因,这两个人需要有一个沟通的过程。
当你有了一个应用程序开发人员,现在他们需要一个过程来沟通和一起工作。
你有平台架构,你有管理层,你有顾问联络员,你有业务的其余部分,所有的都是关于过程,老实说,我认为没有人真正知道他们在做什么。我认为阻碍我们在这个行业发展的第一件事是建立大型数据科学团队和组织。我现在看到的最成功的数据科学团队就像三个人……这可能是一个巨大的组织,但这三个人要做很多工作,如果他们想扩大到 20 人或 40 人,那是行不通的。事实上,我有一天看到了一个特殊的异常现象,我正在丹佛招聘一名新的数据科学家。我特别想要一名丹佛的高级数据科学家,所以我在 LinkedIn 上发布了一个丹佛数据科学家的职位空缺。几天之内我收到了大约 30 份申请。11 个来自一家公司…我问一些在丹佛的同事,“X 公司怎么了?我刚刚收到了这家公司数据科学家的 11 份申请。”首先,我甚至不知道他们有很多数据科学家,他们说…因为[他们]是数据科学家,他们[说]“是的,他们到处都是职位空缺。他们雇佣了数量惊人的…过去两年里,数百名数据科学家。”…现在很明显他们在大出血,因为他们可能没有真正考虑如何沟通。我认为这是我希望看到的世界走向,如果我们有更好的过程,就像我们在软件工程方面所做的那样,持续集成和测试,良好的 UX 原则等等。我们现在可以建立真正可扩展的软件团队。
数据科学还没有出现……不过,数据工程和数据科学的主题只是这支矛的尖端。"

唐·迈纳:“没有多少从业者会问:“我如何管理好一个数据科学项目?"….总得有人在某个时候谈论它。”
安斯潘塞:“你认为是为什么?你认为人们为什么不谈论它,或者不解决它?”
马歇尔出版社:“嗯,对一个人来说,很难。”
达美乐的核心价值观之一包括“寻求真理,说出真理”。我们在内容中利用这一核心价值来支持人们解决数据科学中难以解决的问题。这篇博客文章涵盖了当人们围绕模型的开发和部署进行合作时出现的紧张点的坦率讨论中提炼出的见解、音频剪辑和摘录。如果对更深入的见解感兴趣,可以考虑听 45 分钟以上的录音或通读全文。两者都在下面提供。我们也意识到,关于合作还有其他的情况、细微差别和纹理没有在这篇博文中涉及,我们正在与其他行业专家合作阐述不同的观点。我们将继续提供更多即将推出的内容,涵盖数据科学和工程之间的合作。如果你有兴趣为这一公共讨论做出贡献,请联系我们。
如果感兴趣,这部分提供了超过 45 分钟的讨论。

原文:https://www.dominodatalab.com/blog/collaboration-data-science-product-engineering-teams
超导健康的产品负责人尤金·曼德尔,最近拜访了多米诺总部,坦率地讨论了数据科学领域的跨团队合作。Mandel 之前在多家公司的数据工程、产品和数据科学团队中担任领导职务,这为他识别和解决潜在的紧张点提供了独特的视角。
尤金·曼德尔,超导健康的产品负责人,最近拜访了多米诺总部,讨论数据科学领域的跨团队合作。虽然 Mandel 的背景是工程,但他曾在多家公司的数据工程、数据科学和产品团队中担任领导职务。Mandel 在这些角色中的实践经验为他提供了一个关于数据科学内部合作状态以及“为什么”会出现一些潜在的跨团队紧张点的独特视角。在坦率的讨论中,他指出了数据科学工作的概率性质与“普通软件工程”的不同。他还指出,这种差异可能会给数据科学、产品和工程团队在构建数据产品时带来一些挑战。然而,曼德尔主张通过从多个角度理解潜在的紧张点以及“产品意识”来建立信任。例如,各方可以通过后退一步,考虑目标用户将如何体验他们的最终产品来“关注产品”。Mandel 还推测,我们将看到的行业潜在趋势之一是“数据科学将变得更像数据产品开发,并成为产品组织的核心部分。”
这篇博客文章提供了一些讨论的摘录、录音以及完整的对话文字记录。这篇文章是正在进行的系列文章的一部分,在该系列文章中,我与和的各种行业成员坐下来,捕捉他们对数据科学合作现状、合作紧张点以及如何解决这些问题的不同观点。这一系列的目的是促进关于数据科学内部跨团队协作的公开讨论,以加速数据科学工作。
在我们在 Domino 总部进行讨论之前,我已经知道曼德尔已经就将产品管理原则应用于数据科学发表了演讲和写作。我请他解释一下他是如何达到这一观点的。Mandel 提到,他开始注意到数据科学团队如何从顾问转变为构建数据产品,如推荐引擎
“当您看到数据科学团队如何从纯粹的顾问角色转变为产品构建角色时,您就会看到产品管理原则是如何应用的。因为,起初,人们认为我们正在构建的是软件,所以很可能,它只是普通的软件。然后我们开始意识到有很多相似之处,但也有很多不同之处。当然,另一件事是,与“普通软件工程”不同,从事数据科学工作的人的背景更加多样化。我和物理学家一起工作过。我和心理学家合作过。我和社会学家一起工作过。我和普通的软件工程师一起工作过,他们来自商业背景。如果你在一家正规的软件公司工作,你不能假设大多数人都有这种共享的软件产品管理文化。当去数据科学团队或构建数据产品的公司时,最好不要这样假设,要明确得多。”
Mandel 后来也转述了“普通软件开发”和开发数据产品之间的关键区别
“我工作的上一家公司也是一个非常有趣的故事,因为我加入的那家公司有着非常好的软件开发文化…有测试,有 CI/CD,有经验的工程师,有经验的工程管理和产品管理。但是没有多少构建数据产品的经验。当我开始确定可以构建什么样的数据产品以及如何构建时,我们确实经历了几次迭代,首先,获得信任,然后就开发产品的过程达成一致。这是一个要点,因为,假设在“普通软件开发”中,很多公司会使用 Scrum 或 Scrum 的一个变体,他们有很多关于部署、故事点和故事的对话,对吗?当你开发数据产品时,你不能完全采用相同的过程,仅仅因为不确定性的水平要高得多。你的过程应该集中在不确定性和原型的迭代减少上。因此,弥合工程和数据科学中的这种理解差距是一项挑战。一旦我们过了这一关,我们就开始讨论产品本质上…(products 是复数,因为有一个核心产品,然后是开发数据科学产品)…他们会怎么说话?对吗?我发现,首先,在你获得信任后,这很重要,这确实有助于在主要非数据产品和数据产品之间就非常具体但足够宽泛的 KPI 达成一致。然后,它允许我们更快地迭代数据产品,而不会给核心产品带来很多风险。这实际上是我们一直遵循的模式,而且非常成功。”
当被要求概括一个例子,并提出一个产品经理在与数据科学家合作时需要考虑的特别棘手的问题时,Mandel 转述道
“那么,产品经理如何与数据科学家合作呢?当一个产品经理原型化一个常规的软件产品,回到过程,这个过程与数据产品略有不同。为什么?因为当你设计一个常规软件产品的原型时,我们可能已经讨论过用户故事,用例,你已经开始做一些 UI 的原型,把它带给人们并得到反馈。都非常有价值。
当你在制作一个数据产品的原型时,你必须完成所有这些工作,而且,你必须实际访问将参与这个数据产品的数据,理解它,分析它,并把它插入到原型中。为什么?因为在不知道数据的情况下,我所看到的产品经理所做的就是在产品能削减什么和不能削减什么上犯错误。
有时你可以假设产品,他们可以访问的数据,可以告诉你更多。您正在基于这一假设创建一个原型。当然,对用户来说,这一切看起来很神奇,因为它给你一个推荐,它知道你是谁,你喜欢什么,你做什么,对吗?但当它从原型阶段过渡到实际产品时,你会发现你拥有的数据集不太可靠,更加稀疏,当根据这些数据创建的推荐向用户展示时,它们并不完全是神奇的。对吗?这是一个例子。除非你的原型中包含数据,否则这是一个问题。没有数据产品管理经验的产品经理容易犯这个错误。"
在讨论中,Mandel 还强调了数据科学工作在本质上是如何具有概率性的,以及他的工作如何会导致紧张点,特别是在工程方面
“现在谈谈工程师和数据科学家之间的合作…我所看到的是,在常规的软件工程中,这可能过于一般化,但事情往往是“真”或“假”的。当你看软件产品的单元测试、集成测试时,所有这些来源…比如:值是五,这是真的,这是假的,这个列表的长度是 573。当处理数据产品时,你从确定性世界转移到概率性世界,这意味着你期望的是范围,然后你必须判断什么有意义,什么没有意义。
因此,你的测试开始变得不同,这意味着当你…当然,你知道,和工程师一起工作,你总是谈论测试。所以,测试框架和你可能使用相同的框架,但是你如何组织测试是不同的。什么被认为是错误,或者坏的,即使这样,那也是一件非常基本的事情…但即使这样也有待讨论。
在我工作过的一个团队中,我们有这样的极端情况…我仍然认为这很有趣…每当分类器产生错误的预测时。起初,团队想在 JIRA 归档,每一个单独的案例。现在,如果你从软件工程的角度来考虑,实际上这并不是一个疯狂的想法。嗯,是个 bug。每一个错误的预测都是一个错误。虫子去了 JIRA。他们是被管理的。它们是优先的。这听起来几乎合乎逻辑。但是如果你是从数据科学的角度来看,这就没有什么意义了。因为我们知道它(分类器)在工作,一个是某种不同的过程。"
曼德尔也有相关的见解
“…。当谈论普通软件工程和数据产品之间的区别时,软件工程也在谈论风险。在正常的软件工程中,所有的风险都存在于代码中。错误的代码。未记录的代码。改变代码。正常的软件工程组织在处理代码方面有很好的文化和流程。任何工程师加入你的团队,他们可能都不会感到惊讶。对吗?你知道的。单元测试,集成测试,CI/CD,文档。对吗?
在数据产品中,这些都存在。但是除此之外,还有一个风险,不是来自代码,而是来自数据。因为每次数据进入数据产品时,我们都无法控制这些数据,所以数据的变化可能会对产品的下游造成严重破坏。即使源代码没有一点改变。这实际上是正常软件工程中不存在的东西。
我最喜欢的事情之一是,每次我与数据产品人员、数据科学家交谈时,我都在收集可怕的数据故事。关于远离产品上游的某个地方的一些无害的数据变化如何开始对下游造成严重破坏的故事。如果你幸运的话,它只会打破你的产品。但是如果你运气不好,它会悄悄地开始表现不同。这意味着在正常的软件工程中,代码是,我猜,一等公民。在数据产品中,有两个参与者:代码本身和数据。这种,你知道,我们试图做的是让数据集成为一等对象,数据世界的一等公民,可以测试,可以描述,可以谈论。"
这些摘录只是最近在 Domino HQ 关于数据科学中跨团队协作的讨论中的一些见解。如果您对其他见解感兴趣,我们将提供录音和完整的讨论记录。为了可读性,已对书面记录进行了编辑。

为了可读性,下面的文字经过了编辑。
**安·斯潘塞,Domino 数据实验室内容主管:**非常感谢您同意这样做。我非常感激。我知道我们已经认识一年左右了,但是如果你能提供一些关于你最近在忙些什么的见解,那就太好了。
超导健康产品主管尤金·曼德尔:好的。只是一点背景。15 年来,我一直在不同的行业为不同的用例做软件产品,从 IP 语音到营销服务软件。但是贯穿这些产品的主线是数据。具体来说,就是如何利用数据让产品变得更好,即使在数据不是产品本身的情况下。
我的上一份工作是在一家名为 Directly 的公司工作,在那里我们帮助其他公司利用他们的客户和资源提供客户支持。我加入公司是为了帮助弄清楚数据如何让产品变得更好。我们最终建立了模型和管道,从本质上确定了常见的数学方程,并提供了合理的响应。
在过去的半年多,我加入了另一家公司超导健康。我们与医疗保健和生命科学领域的客户合作。我们为他们做各种各样的数据项目,并为更大的事情建立一个面向外部的产品。不仅对于生命科学,而且对于任何处理数据集和数据管道的公司都是如此。
**安·斯潘塞:**在过去的几年里,你撰写并展示了关于在数据科学基础上应用产品管理原则的文章。你能解释一下是什么让你产生了这种观点,以及你的旅程吗?
尤金曼德尔:是的。所以,我的背景是工科。这很可能说明了这一切。大概在七年前,当数据科学开始被贴上“数据科学”的标签时,我开始意识到这是我一直在做的事情的很大一部分。这真的引发了我的思考,“有什么不同?”我认为有趣的是,公司中的许多数据科学团队,许多数据科学项目,以及数据科学家的许多职业生涯,都是从顾问角色开始的。
当我们获得数据,我们理解它,我们做一些非常酷的事情,我们工作的最终产品,也许,它是一个模型。也许是某种报告。可能是推荐吧。但它本身并不是一个运行的产品。
以我的工程背景…嗯,那对我来说不是最自然的事。所以,我总是被一些东西所吸引,比如,你建立一些可以运行的东西,用户可以把它放在哪里。对我来说,我开始看到数据科学团队正在进行这种转变,从工作成为某种设备,到工作产品成为实际产品。
比方说,如果我们在谈论某种营销用例…数据科学可以提出建议,解决“与特定用户群交流的最佳方式是什么?”这很好。但是,还有绝对的最后一英里…好的,让我们以这种方式与这些用户交流,这通常涉及到构建一个产品、某种推荐引擎、分类器或其他东西。
当您看到数据科学团队如何从纯粹的咨询角色转变为产品构建角色时,您就会看到产品管理原则是如何应用的。因为,起初,人们认为我们正在构建的是软件,所以很可能,它只是普通的软件。然后我们开始意识到有很多相似之处,但也有很多不同之处。当然,另一件事是,与“普通软件工程”不同,从事数据科学工作的人的背景更加多样化。我和物理学家一起工作过。我和心理学家合作过。我和社会学家一起工作过。我和普通的软件工程师一起工作过,他们来自商业背景。如果你在一家正规的软件公司工作,你不能假设大多数人都有这种共享的软件产品管理文化。当去数据科学团队或构建数据产品的公司时,最好不要这样假设,要明确得多。
安·斯潘塞:当你谈到…你是如何注意到数据科学家如何转变为顾问角色,然后建议变成了你的产品,以及数据科学家如何来自所有这些不同的背景,物理学家、心理学家等等…你认为这有助于合作吗?你认为数据科学的合作现状如何?
Eugene Mandel: 我认为我更了解的是数据科学、工程和产品团队之间的协作。在我工作过的每一家公司…这是一个非常有趣的进化故事…例如,在 Jawbone,数据科学团队开始制作数据故事和有趣的见解,最终…最终,我拥有了一件产品。
在这种情况下,该产品位于应用程序或 Jawbone 的应用程序中,可以跟踪您的步数和饮食,并为您提供一些建议。然后是数据科学团队和产品/软件工程团队之间的谈判。结果是我们都是应用程序的一部分,UI 只是支持解释格式化的见解和建议。但是数据科学团队将拥有正在显示的内容。数据科学将实现产生这种报价和建议的管道。
但这种合作一开始并不顺利。因为,尤其是如果数据科学团队中没有工程师的话,会有很多挑战。第一个挑战是如何获得工程团队的信任。因为如果你告诉一个工程师,你知道,如果你不是工程师,你告诉一个工程师“我只是要把东西推进你的导向产品…你有测试,你有 CI/CD,我没有。”那么,你知道,你真的不能指望一个类似的接受。对吗?这是一个颚骨的例子。
我工作的上一家公司也是一个非常有趣的故事,因为我加入的公司有非常好的软件开发文化…有测试,有 CI/CD,有经验的工程师,有经验的工程管理和产品管理。但是没有多少构建数据产品的经验。当我开始确定可以构建什么样的数据产品以及如何构建时,我们确实经历了几次迭代,首先,获得信任,然后就开发产品的过程达成一致。
这是一个要点,因为,假设在普通软件开发中,很多公司会使用 Scrum 或 Scrum 的一个变种,他们有很多关于部署、故事点和故事的对话,对吗?
当你开发数据产品时,你不能完全采用相同的过程,仅仅因为不确定性的水平要高得多。你的过程应该集中在不确定性和原型的迭代减少上。这有点像敏捷,但不完全是敏捷,不像软件开发中的 scrum。
因此,弥合工程和数据科学中的这种理解差距是一项挑战。
我们讨论过这个问题后,我们开始讨论产品的本质…(products 是复数,因为有一个核心产品,然后是开发数据科学产品)…他们会怎么说话?
对吗?我发现,首先,在你获得信任后,这很重要,这确实有助于在主要非数据产品和数据产品之间就非常具体但足够宽泛的 KPI 达成一致。然后,它允许我们更快地迭代数据产品,而不会给核心产品带来很多风险。这实际上是我们一直遵循的模式,而且相当成功。
**安·斯潘塞:**在你的两个例子中,你都提到了赢得信任和在过程中努力。当数据科学家与工程人员合作时,您认为还有什么其他最棘手或最常见的问题吗?或者产品,当他们与数据科学家合作时。我不知道这些是否是最常见或最棘手的问题,但我只是想把它放在那里,以便您可以解开您认为协作中最棘手或最常见的问题。
尤金·曼德尔:很多问题都可以打包成流程,因为它暗示了我们如何工作,不工作,我们如何谈论工作,以及我们如何合作,对吗?但是说得具体一点?
好的,那么产品经理如何与数据科学家合作呢?当一个产品经理原型化一个常规的软件产品,回到过程,这个过程与数据产品略有不同。为什么?因为当你设计一个常规软件产品的原型时,我们可能已经讨论过用户故事,用例,你已经开始做一些 UI 的原型,把它带给人们并得到反馈。都非常有价值。
当你在制作一个数据产品的原型时,你必须做所有的事情,而且,你必须实际访问将参与这个数据产品的数据,理解它,分析它,并且实际上把它插入到原型中。为什么?因为在不知道数据的情况下,我所看到的产品经理所做的就是在产品能削减什么和不能削减什么上犯错误。
有时你可以假设产品,他们可以访问的数据,可以告诉你更多。您正在基于这一假设创建一个原型。当然,对用户来说,这一切看起来很神奇,因为它给你一个推荐,它知道你是谁,你喜欢什么,你做什么,对吗?但当它从原型阶段过渡到实际产品时,你会发现你拥有的数据集不太可靠,更加稀疏,当根据这些数据创建的推荐向用户展示时,它们并不完全是神奇的。对吗?这是一个例子。除非你的原型中包含数据,否则这是一个问题。没有数据产品管理经验的产品经理容易犯这个错误。
现在谈谈工程师和数据科学家之间的合作…我所看到的是,在常规的软件工程中,这可能过于一般化,但事情往往是“真”或“假”的。当你看软件产品的单元测试、集成测试时,所有这些来源…比如:值是五,这是真的,这是假的,这个列表的长度是 573。当处理数据产品时,你从确定性世界转移到概率性世界,这意味着你期望的是范围,然后你必须判断什么有意义,什么没有意义。
所以,你的测试开始变得不同,这意味着当你…当然,你知道,和工程师一起工作,你总是谈论测试。所以,测试框架和你可能使用相同的框架,但是你如何组织测试是不同的。什么被认为是错误,或者坏的,即使这样,那也是一件非常基本的事情…但即使这样也有待讨论。
在我工作过的一个团队中,我们有这样的极端…我仍然认为这很有趣…每当分类器产生错误的预测时。起初,团队想在 JIRA 归档,每一个单独的案例。现在,如果你从软件工程的角度来考虑,实际上这并不是一个疯狂的想法。嗯,是个 bug。每一个错误的预测都是一个错误。虫子去了 JIRA。他们是被管理的。它们是优先的。这听起来几乎合乎逻辑。但是如果你是从数据科学的角度来看,这就没有什么意义了。因为我们知道它(分类器)在工作,一个是某种不同的过程。
对吗?所以,那不是…因此,测试你如何处理错误,原型制作,这可能是我想到的潜在[合作]问题的第一个例子,但这只是许多例子中的一个。
安·斯潘塞:绝对是。有什么实用的建议可以分享给大家吗?因为你在多家公司都经历过这种情况,并且身兼数职…在产品、工程或数据科学领域。我认为你有非常独特的观点,因为你戴过所有的帽子。在解决可能出现的一些紧张点或获得信任或建立流程的一些方法方面,你对人们有什么样的实用建议?
**尤金·曼德尔:**所以,获得信任和建立流程,当然,这纯粹是一种观点,对吗?所以,你知道,不同的公司以不同的方式构建他们的数据科学团队。我认为,数据科学团队尽可能接近全栈产品组非常重要。这意味着,在团队中,要么有可能是工程师并具有产品意识的数据科学家,要么有纯粹的数据科学家、工程师和产品经理混合组成的数据科学团队。因此,拥有工程师有助于建立与其他工程师的信任,因为你们说相同的语言。当你谈到持续集成、持续部署、测试、质量甚至代码风格时,对吗?如果你是一名数据科学家,这不一定是你首先关心的问题。
这很重要,你必须在团队中有产品人员,或者有产品意识。因为,你可以谈论分类器和模型以及任何一种数据产品的出口,但你必须更进一步。你必须考虑用户如何体验这些产品。他们觉得他们可信吗?他们会觉得困惑吗?如何削减产品?
我认为,在工作中,数据科学团队应该尽可能地接近产品团队…成为全栈产品团队…在获得其他工程师、其他工程组织和产品组织的信任,并真正完成工作方面,有很大的成功机会。
**安·斯潘塞:**你提供了很多见解,比如你去过的不同公司、不同的例子、你见过的一些最棘手、最常见的问题以及实用的建议。你对数据科学的未来状态有什么看法?或者你希望未来的状态是什么样的?
尤金·曼德尔:这当然是纯粹的推测,对吗?因为-
安·斯潘塞:是的,没错。没错。
尤金·曼德尔:因为没人知道未来,对吧?
安·斯潘塞:这是一片蓝天
尤金·曼德尔:假设我们确实知道未来,这很幽默,对吧?但是,好吧,这是我认为我看到的。这也是纯粹的观点和推测,对吗?因此,没有数据科学的公司开始做数据科学,而开始做数据科学的公司开始转向数据产品,成为其核心产品的一部分。
我认为,对我来说,这是正在发生的主要趋势。当我直接使用时,它实际上是一个很好的例子。因为,你知道,这是一个初创公司,但这是一个正在走向成熟的初创公司…真实的产品,真实的客户,真实的团队,真实的流程,但是没有数据方面的经验,对吗?所以,第一阶段只是理解,哦,我们拥有的数据是非常有价值的。组织它。只是建造管道来组装它。记录下来。对吗?所以,你知道,莫妮卡·罗加蒂的数据科学金字塔需要什么。你知道,相当于马斯洛金字塔,但对于数据科学。
知道你有数据。组织数据。建设基础设施。然后推理什么可以相信,什么不可以相信。然后你会想,我能用这个做什么呢?所以,见识。对吗?但是一旦你有了见解,你开始,你几乎必须开始思考,嗯,这是一份报告。一份报告可能每月产生一次。我如何才能获得这些见解?利用这些见解来构建和改变我的核心产品的逻辑。对吗?这需要建立数据管道。这需要建立实际的模型、分类器等等…当然,一旦你将数据科学引入你的产品,它就变成了一个数据产品,然后你必须进行测试。你必须是产品经理。你必须记录。你必须创建用户界面。对吗?因此,我看到的主要趋势是数据科学变得越来越像数据产品开发…也是产品组织核心的一部分。安·斯潘塞:非常感谢你的真知灼见。我感觉这对我们的读者会非常非常有用。你还有什么要补充的吗?
尤金·曼德尔:我想,可能只有一件事和我现在做的事情有关,这两件事都有。当谈论普通软件工程和数据产品之间的区别时,软件工程就是在谈论风险。在正常的软件工程中,所有的风险都存在于代码中。错误的代码。未记录的代码。改变代码。正常的软件工程组织在处理代码方面有很好的文化和流程。任何工程师加入你的团队,他们可能都不会感到惊讶。对吗?你知道的。单元测试,集成测试,CI/CD,文档。
在数据产品中,所有这些都存在。但是除此之外,还有一个风险,不是来自代码,而是来自数据。因为每次数据进入数据产品时,我们都无法控制这些数据,所以数据的变化可能会对产品的下游造成严重破坏。即使源代码没有一点改变。这实际上是正常软件工程中不存在的东西。
我最喜欢的事情之一是,每次我与数据产品人员、数据科学家交谈时,我都在收集可怕的数据故事。关于远离产品上游的某个地方的一些无害的数据变化如何开始对下游造成严重破坏的故事。如果你幸运的话,它只会打破你的产品。但是如果你运气不好,它会悄悄地开始表现不同。这意味着在正常的软件工程中,代码是,我猜,一等公民。在数据产品中,有两个参与者:代码本身和数据。这种,你知道,我们试图做的是让数据集成为一等对象,数据世界的一等公民,可以测试,可以描述,可以谈论。
**安·斯潘塞:**这又回到了你的期望…在那里你看到最有效的结果是如此的接近。数据科学家、产品和工程师。
尤金·曼德尔:是的。
安·斯潘塞:这似乎引起了共鸣。
尤金曼德尔:是的。还有一件事要补充…这是一个有趣的模式,当合作做某件事时,比如每次我们一起做某件事时,他们会用他们盯着的东西。如果我们在谈论,你知道,即将开业的大办公室的商业计划,嗯,我想我们会谈论和盯着分心,对不对?如果我们在讨论修改代码,问题就在于 github 上的 pull 请求接口。我们可能在谈论测试,或者别的什么。谈到产品规格,你可能会盯着 word 文档或 PM 工具,对吗?然而,今天,当你谈论数据集时,它应该是什么样子,它真正是什么样子,它是做什么的,实际上没有一件事是你在谈论时盯着看的。这是一个问题,因为这向你展示了数据集…他们在这一发展中没有获得一等公民的角色。
安·斯潘塞:这很有道理。尤其是试图围绕这一点建立一个过程。
尤金曼德尔:是的。没错。因为任何过程都涉及协作。与代码不同,你可以冻结代码。太好了。但是你不能真正冻结数据。好吧,也许有一个例外。如果您使用的是不依赖于外墙的内部数据,您可以冻结数据。但在大多数情况下,在许多最易变的数据产品中,不处理来自团队之外,甚至可能来自部门之外的数据流。如果它不出来,如果它不是内在的,你不能控制它,这意味着它可以改变。
原文:https://www.dominodatalab.com/blog/collaboration-data-science
数据科学不再是一个人或一个小团体的专业。它现在是竞争优势的一个关键来源,因此,项目的规模继续增长。协作至关重要,因为它使团队能够比任何个人承担更大的问题。它还允许专业化和共享环境,减少对“独角兽”员工的依赖,这些员工无法扩展,是关键人员风险的主要来源。问题是协作是一个模糊的术语,模糊了多个概念和最佳实践。在本帖中,我们澄清了重复性、再现性以及尽可能的再现性的黄金标准之间的区别。通过建立无摩擦团队内和跨团队协作的最佳实践,您可以显著提高数据科学工作的效率和影响。
从基础开始,可重复性是协作数据科学流程的关键组成部分。可重复性是指给定的过程(无论是数据清理脚本、功能工程管道还是建模算法)在给定相似输入的情况下将产生相同(或几乎相同)的输出。为了让数据科学家能够协作,他们必须能够依赖他们一直保持一致的工具和程序。这通常表现为环境和数据不稳定性对数据科学协作的挑战。
我经常和有“它在我的电脑上工作”问题的科学家和研究人员交谈更糟糕的是,一些底层系统库或依赖关系会导致算法在一个科学家的机器上产生一个信号,而当在另一个科学家的机器或生产环境中运行时,它会产生完全不同的信号。
在金融领域一家公司的定量研究会议上,我分享了一个我们见过的最可怕的例子,说明没有保证可重复性的环境是多么危险。他们建立了一个产生交易策略的模型,并对其进行了广泛的回溯测试。该模型在原作者的笔记本电脑上运行时,给出了一个信号,即某一特定证券不应交易,因为这几乎肯定会导致重大资本损失。当研究人员将代码交给一名负责实际交易的分析师时,他们在笔记本电脑上运行代码,代码为许多资产生成了强烈的买入信号。由于信号存在根本缺陷,这最终导致该组织花费了大量资金。
经过大量的相互指责之后,他们发现这两位数据科学家发布了一个不同的底层数据解析库。对于第一个科学家,格式错误的日期被解析为 NA,而对于第二个科学家,它们被解析为 1970-01-01。这意味着他们生成的模型在行为上是不同的,甚至对相同的数据生成完全不同的输出。
尝试诊断计算堆栈是否可重复可能是一项重大挑战。现代计算环境是一个难以想象的庞大的抽象层堆栈,要找到一个更新到不同版本的库依赖项(即使有像 conda 这样试图确定性地构建精确环境的工具)可能是一项徒劳的任务。
任何没有完全可重复环境的协作实践都不太可能证明自己有价值或被采用,因为这些行为和期望的细微差异和变化会削弱对系统的信心,并为采用提供很高的障碍。
下一步是再现性。伊利诺伊大学信息科学学院的副教授维多利亚·斯托登描述了一个强大的再现性分类法,它描述了它的三个方面:统计再现性、经验再现性和计算再现性。
统计再现性
当提供关于统计检验、模型参数、阈值等选择的详细信息时,分析在统计上是可重复的。这主要与研究设计的预注册有关,以防止 p 值黑客攻击和其他操纵。统计再现性应该通过自上而下的命令,以及通过同行评审和文档来强制执行。团队应该能够访问关于统计选项的组织最佳实践的知识库,并获得关于什么是适当的指导。当选择改进验证程序或统计测试时,为研究中心提供与组织内部同行的联系,可以提供关于在实验和统计设计中所做选择的“探测板”,通常可以缩短数百小时的浪费。
经验再现性
当提供了关于非计算性的经验科学实验和观察的详细信息时,分析在经验上是可重复的。在实践中,这是通过免费提供数据以及如何收集数据的细节来实现的。在数据科学中,这通常与研究的底层业务驱动因素以及用于构建模型和分析的数据源的真实数据生成过程相关的知识相关。
在 Domino,我们经常说数据科学过程始于并止于来自业务驱动因素的问题和数据,因此团队记录这些原始问题和想法是什么、它们是如何产生的、是谁提出的,并以完全确定和可重复的方式提供分析中使用的数据集的数字出处是非常重要的。我们的“数据项目”架构支持许多这种功能,允许团队定义完全修订和组件化的规范数据集,允许合作者确切了解哪些分析从哪些数据集获得灵感,以及在数据收集过程中这些数据集中编码了哪些偏见。
计算再现性
如果有一组特定的计算函数/分析(在数据科学中,几乎总是以源代码的形式指定)精确地再现了分析中的所有结果,则分析在计算上是可再现的。我倾向于将可再现性理解为一系列可重复步骤以确定的方式编排。
值得注意的是,这不仅仅是源代码,然而,对于计算上可重复的分析,序列化的“元组”远远大于源文件的磁盘上字节数。计算可再现性包括底层数据、软件、操作序列以及执行它的底层硬件的可再现性。rOpensci 组织的可再现性研究的良好特性列表有助于理解什么构成了良好的计算可再现性。
以下是从 Sandve、Nekrutenko、Taylor 和 Hovig 的可复制计算研究规则中摘录的关于良好可复制性以及团队内和跨团队合作的八条原则:
- 跟踪结果 -每当一个结果可能是潜在的利益,保持跟踪它是如何产生的。至少,你应该记录足够多的程序、参数和手工操作的细节,这样你就可以在一年左右的时间里大致重现结果。
- 编写脚本 -只要有可能,依靠程序的执行而不是手动程序来修改数据。如果无法避免手动操作,您至少应该记下修改或移动了哪些数据文件,以及出于什么目的。
- 创建可再现的环境 -为了准确地再现给定的结果,可能需要使用与最初使用的版本完全相同的程序。利用像 Docker 和配置管理系统这样的工具来保证可重复性。至少,你应该记下你使用的主要程序的确切名称和版本。
- 使用版本控制——即使是对计算机程序最微小的改变也会产生意想不到的后果。至少,您应该不时地存档脚本的副本,这样您就可以粗略地记录代码在开发过程中所经历的各种状态。然而,我们发现最低限度往往是不够的。自动化版本控制系统的使用消除了围绕版本控制最佳实践的许多摩擦。您应该努力拥有一个系统,保证任何程序执行都有一个完全可再现的快照。当您有一个想要重现的情节,但在生成可视化时碰巧没有提交代码时,会有一种特别的挫败感。
- 存储数据和中间结果 -原则上,只要用于产生给定结果的整个过程被跟踪,所有中间数据也可以重新生成。在实践中,容易获得的中间结果可能具有很大的价值。make 和 drake 等系统可以管理复杂的结果依赖图。至少,对运行分析时产生的任何中间结果文件进行存档。然而,最好使用一个系统,可以很容易地记录所有的中间结果,并向您展示它们进行分析,而不会产生明显的摩擦。
- 设置一个随机数种子 -许多分析和预测都包含一些随机性元素,这意味着同一程序每次执行时通常会给出略微不同的结果。例如,聚类算法通常可以找到不同的聚类,并且对初始条件很敏感。作为最低要求,请注意哪些分析步骤包含随机性,以便在重现结果时可以预计到一定程度的差异。
- 存储数据可视化输入 -从图形首次生成到成为分析的一部分,存储数据和生成数据的过程至关重要。随着数据可视化变得越来越复杂,不仅仅是一个图表,而是整个应用程序或交互式仪表板,将可视化管道作为完全可再现的工件进行管理非常重要。作为最低要求,应注意哪些数据构成了给定绘图的基础,以及如何重建这些数据。
- 允许分析层次 -为了验证和完全理解主要结果,检查摘要下的详细值通常是有用的。使这些数据具有流动性和可探索性,至少一次生成、检查和验证摘要背后的详细值。数据科学是一项团队运动,通常你的团队中会有一些非常有才华的人,他们拥有与构建模型所需的编码或数学不一定重叠的专业知识。在这种情况下,为那些非技术用户提供易接近的界面。理想的方法是启用这些接口和分析级别,以便团队中技术含量较低的成员可以参与分析,并根据他们的专业知识帮助纠正过程。
再现性让数据科学团队充满信心。如果没有真正的无摩擦再现性,在生产中推进算法或模型的艺术状态通常会非常具有挑战性。衡量一个模型的新迭代是否实际上是对生产中的模型的改进,或者仅仅是根据更近的数据训练的等效模型,甚至可能是一个挑战。
在 Domino,我们相信知识的无摩擦再现和复合是良好协作过程的基石,并围绕这一观点构建了我们的平台。关于这方面的更多想法,请观看我关于在用户处提供数字出处的演讲!2016 在斯坦福。
一旦你建立了可重复性和再现性的实践,协作数据科学过程的黄金标准就是可复制性。可复制性强于可复制性。一项研究只有在你进行完全相同的实验(至少)两次,两次都以相同的方式收集数据,进行相同的数据分析,并得出相同的结论时才是可复制的。可复制性是一种实践,它允许生产中的模型由审计员独立验证,由工程组织重新实现以用于实时系统,并且最重要的是,它可以让我们相信,随着协变量的变化,用新数据随时更新模型仍会提供与原始工作方向和实质上一致的结果。
数据科学中的可复制性经常被误解,因为当涉及到前沿突破时,它的作用主要被认为是在物理和生物科学中。由于一项研究的不可复制性,整个职业生涯都毁了,从著名的弗莱施曼-庞斯崩溃到失败的复制鲍梅斯特和沃斯关于自我损耗的工作的 T2 和其他许多研究。
然而,在协作数据科学中,可复制性往往是数据科学真正推动模型或洞察力发展的原因。数据科学家必须能够采用预先存在的管道或模型,在没有重大摩擦的情况下将其组件化,并使用新数据、新算法或新方法重新运行整个实验或其中的重要部分。要做到这一点,必须能够与原始分析(或当前数据的重新运行)进行并排比较,以获得对实验设计的信心,以及所述设计中的变化如何影响测试期间的行为以及可能影响生产期间的行为。
数据科学团队拥有:
- 受过重复性、再现性和可复制性实践培训的人员
- 鼓励使用这些最佳实践的适当流程
- 允许这些最佳实践被无摩擦地利用的工具
在团队中,分析、模型、指标或见解方面的协作成为第二天性和“捷径”,而不是难以实施的自上而下的命令。数据科学家,即使是单独工作的,也至少在与两方合作,他们过去的自己和未来的自己。
为可再现的数据科学构建 Domino 数据实验室平台让我们与几乎所有行业的数据科学客户进行了大量的互动。我们一次又一次地看到协作对数据科学团队的成功是多么重要,以及无摩擦地建立共享环境对促成这种协作是多么重要。事实上,我们基于对客户的研究开发了数据科学成熟度模型框架。为数据科学家提供一个平台,使他们能够进行“良好的”协作数据科学,这不仅可以在短期内提高他们的工作效率,还可以为组织提供复合知识的优势,以及更可预测的透明成果和量化研究投资的投资回报。

原文:https://www.dominodatalab.com/blog/community-principles-ethical-data-sharing-presented-bloombergs-data-good-exchange
随着这个世界变得越来越受模型驱动,数据伦理是一个日益重要的问题,必须始终放在首位。Domino 积极参与了多项数据伦理计划,这些计划让我们能够贡献我们的专业知识,并与其他有相同热情的领导者交流想法。
本着这种精神,我们很荣幸能够帮助创建关于道德数据共享的社区原则 (CPEDS):这是一项众包工作,旨在为整个数据科学界的数据共享制定道德准则。
这是到目前为止已经完成的工作的简要总结。
-
CPEDS 于 2017 年 9 月在纽约举行的第三届年度彭博良好交换数据 (D4GX)会议上拉开帷幕。
-
在那次事件之后,我们一群人合作起草了第一份原则草案。我很荣幸能成为这个团队的一员,和这些了不起的人一起工作。
-
2 月 6 日,彭博举办了另一场 D4GX 活动——这是第一次在他们的三藩市办公室举办——我们几十人亲自聚集在一起,还有数百人收听直播节目,聆听鼓舞人心的演讲者,如吉迪恩·曼、 DJ 帕蒂尔、娜塔莉·埃文斯·哈里斯、乔伊·博纳古罗和宝拉·戈德曼。但那次活动的亮点,至少对我来说,是我们能够与社区分享 CPEDS 的第一稿,并通过面对面的研讨会和与远程观众的闲聊来征求他们的实时反馈。你可以在这里观看录制的视频。第一套原则涉及七个主题,您可以在 CPEDS 网站上了解更多信息:
-
思想多样性*
-
偏见
-
隐私和安全
-
负责任的沟通*
-
出处和所有权
-
透明度和公开性*
-
问题和答案*
-
Domino contributed to four of the seven. So what’s next? The CPEDS work is ongoing and we need you! Please join the conversation by joining #p-code-of-ethics conversation on Slack or sign up to contribute to the next version of principles. It is important that a large number of people from the data science community collaborate to shape the principles that will ensure ethical use and sharing of data.

原文:https://www.dominodatalab.com/blog/comparing-nlp-libraries-in-python
在这篇客座博文中,马齐亚尔·帕纳西和大卫·塔尔比提供了一份选择开源 NLP 库的备忘单。
自然语言处理(NLP)在越来越多的人工智能应用中是必不可少的。如果你正在建立一个聊天机器人,搜索专利数据库,将病人与临床试验相匹配,给客户服务或销售电话评分,从财务报告中提取事实或解决 17 个行业的 44 个用例中的任何一个,从自由文本中提取准确的信息是必不可少的。
要构建这样的系统,你的软件必须理解文本中人类语言的词汇、语法和语义。它需要知道句子是如何组成的——以便“每小时 7.25 美元”中的句号不会开始一个新句子。它需要知道动词是如何变化的——以推断违约是否已经发生、将要发生或可能发生。它需要知道否定是如何表达的——以了解患者是否患有糖尿病。它甚至需要理解社会背景——推断出一条写着“滚开”的信息是暴力威胁还是朋友间友好的戳戳。
例如,一个好的 NLP 库将正确地将自由文本句子转换为结构化特征(如每小时成本和糖尿病),这些特征很容易进入机器学习(ML)或深度学习(DL)管道(如预测每月成本和对高风险患者进行分类)。其他用例可能涉及返回问题的最合适的答案、为查询找到最相关的文档或对输入文档本身进行分类。一个好的 NLP 库将使训练你自己的 NLP 模型和与下游的 ML 或 DL 管道集成变得容易。
一个好的 NLP 库还应该实现最新最棒的算法和模型——这并不容易,因为 NLP 正在经历它的 ImageNet 时刻并且最先进的模型正被一个月两次超越。它应该有一个简单易学的 API,可以使用你最喜欢的编程语言,支持你需要的人类语言,非常快,并且可以扩展到大型数据集,包括流和分布式用例。
我们提到过它也应该是免费和开源的吗?
这篇文章旨在帮助你为你的下一个项目选择合适的开源 NLP 库。我们假设您需要构建生产级软件。如果你在做研究,像 Allen NLP 和 NLP Architect 这样优秀的库可以让实验变得更容易,尽管代价是功能的完整性、速度和健壮性。
我们假设您正在寻找广泛使用的、业经验证的生产中的 NLP 库——因为许多其他人已经测试过它,所以这些代码就可以工作。你也在寻找一个有活跃社区的图书馆——一个可以回答你的问题,解决错误,最重要的是不断增加功能,提高准确性和速度的图书馆。因此,我们将候选名单缩小到这五个库:
- 火花 NLP
- 空间
- NLTK
- OpenNLP
- 斯坦福大学核心课程
显然,在 NLP 的一般领域中有更多的库——但是我们在这里关注的是通用库,而不是迎合特定用例的库。例如, gensim 是一个流行的 NLP 库,最初是为主题建模而创建的,不能用于构建完整的 NLP 管道。
更具体地说,我们的候选名单只包括提供这一核心功能集的库:
- 句子检测
- 标记化
- 堵塞物
- 词汇化
- 词性
- 命名实体识别 (NER)
- 依存解析器
- 训练特定领域模型
它们还提供以下部分或全部功能:
- 拼写检查
- 情感分析
- 文字匹配
- 日期匹配
- 组块
- 其他功能
这里比较的所有五个库都有一些可以定义的 NLP 管道的概念——因为大多数 NLP 任务需要组合这些特性中的几个来获得有用的结果。这些可以是经典的或基于深度学习的管道。
Image Credit: Parsa Ghaffari on the Aylien Blog
最流行的 NLP 库的功能比较如下:

以下是技术功能的对比——对现代计算平台和流行编程语言的支持:

开源并不意味着在任何地方都是一样的——例如,斯坦福大学的 CoreNLP 要求商业使用的付费许可证,而该许可证仍然不提供具有定义的 SLA 的商业支持。希望构建商业、生产级 NLP 解决方案的团队既需要一个不断改进核心库的活跃社区,也需要付费的企业级支持选项。
以下是这些库在许可和支持方面的比较:

斯坦福为 CoreNLP 出售商业许可证,这是商业使用该库所必需的。spaCy 的商业许可和支持由 explosion.ai 提供,它还许可 prodigy 进行快速注释和迭代循环,以及 thinc 机器学习库。John Snow Labs 提供了 Spark NLP Enterprise ,其中包括 onboarding、24×7 支持和高级功能,如实体解析、断言状态检测和取消标识。它还为医疗保健行业提供了Spark NLP,其中包括一套针对医疗保健行业的先进模型和生物医学 NLP 数据集。
尽管大多数 NLP 库支持用户训练新模型,但对于任何 NLP 库来说,提供现有的预训练的高质量模型都是很重要的。然而,大多数 NLP 库只支持通用的预训练模型(POS,NER 等)。).由于模型的许可方式,一些人不允许他们的预训练模型用于商业目的。

以下是每个库附带的通用预训练模型:

并非所有开源 NLP 库都是平等的。考虑到您的编程语言、平台、许可和支持需求,并非所有这些都可以用于您的项目。这篇文章旨在成为缩小选择范围的有用的备忘单。当您了解到新的库或版本应该反映在这里时,请告诉我们,以帮助我们保持更新。
除了功能性,您的下一个标准是比较准确性、速度和可扩展性。祝你在 NLP 的努力中好运!
原文:https://www.dominodatalab.com/blog/connecting-the-dots-domino-data-lab-drops-into-data-science-wave
最初发表于 Nvidia 的博客。感谢 Nvidia 团队允许我们在这里联合发布。
当华尔街正在演变成一场宽客游戏时,尼克·埃尔普林、克里斯托弗·杨和马修·格兰纳德看到了一件大事即将发生:一场数据科学浪潮正在各行各业兴起。
因此,三人离开了世界上最大的对冲基金 Bridgewater Associates,并在此后不久创办了 Domino 数据实验室,这是一个开放的数据科学平台,现在在全球人工智能开发者中引起了轰动。
该公司首席执行官埃尔普林说:“我和我的联合创始人建立了许多内部平台和技术,这些宽客在布里奇沃特用来进行定量研究——现在世界其他地方称之为数据科学。”
这家旧金山公司是帮助初创公司扩大规模的 NVIDIA Inception 项目的成员之一,在 8 月份登上了《T2》杂志的年度增长最快的私营公司名单。
在 2013 年离开布里奇沃特后,三人发现公司最缺乏的是数据科学团队的工业化平台,因此他们创办了 Domino 数据实验室来填补这一空白。
“在布里奇沃特的经验和视角让我们看到了市场的空白,看到了技术和产品可以做什么,”Elprin 说。
Domino 的软件平台为数据科学家自动化了基础设施,使用户能够加速研究、部署模型和跟踪项目。
作为数据科学增压器,Domino 的可定制环境为用户提供了数据科学工具来加速工作流。
它的 Domino Analytics 发行版为 Python、R、Julia 和其他流行语言的编程提供了一个科学计算栈。Domino 提供对常用交互工具和笔记本的访问,包括 Jupyter、RStudio、Zeppelin 和 Beaker。
Domino 还提供深度学习包和 GPU 驱动,包括访问 TensorFlow、Theano 和 Keras 等框架。该平台支持访问云中的任何 NVIDIA GPUs。
Elprin 说:“与 NVIDIA 合作帮助 Domino 开发产品,让我们共同的客户能够自动将工作负载部署到 GPU 上。“NVIDIA Inception 还通过播客和会议讨论帮助我们扩大了财富 500 强客户群。”
公司正在排队。Red Hat、戴尔、拜耳、好事达、Gap 和百时美施贵宝都在使用 Domino 来加速他们的数据科学工作流。
Red Hat 企业数据和分析副总裁 Heidi Lanford 在一段视频中表示:“我们在 Domino 上的投资确实取得了回报,可能是我们数据科学社区效率的 10 倍左右。
图片来源:图片由 Shalom Jacobovitz 拍摄,经知识共享许可。
原文:https://www.dominodatalab.com/blog/considerations-for-using-spark-in-your-data-science-stack
This article covers the considerations to assess if Spark is the right technology for your data science needs. It also covers Spark’s architecture, alternative frameworks, and Domino’s support for on-demand Spark.
您可能听说过 Apache Spark,甚至可能使用过它。Spark 是一个用于并行数据处理的框架和一组库。它创建于 2014 年,旨在解决 Apache Hadoop 的许多缺点,在分析工作负载方面比 Hadoop 快得多,因为它将数据存储在内存(RAM)中,而不是磁盘上。它还有许多内置的库,将机器学习算法实现为 MapReduce 作业(稍后描述),使它们易于在许多计算资源上并行化。Spark 是开发最活跃的用于大规模数据处理的开源框架。
亚伯拉罕·马斯洛有一句名言:“如果你只有一把锤子,那么一切看起来都像钉子。”就 Spark 而言,许多用户最初被它在非常大的非结构化数据集上进行数据工程/ ETL 工作的能力所吸引。在 Spark 取得初步成功后,他们获得了将它用于其他任务的信心,并很快遇到了它的局限性。例如,许多数据科学家报告说,Spark 在其分布式计算框架中消耗了大量资源,与使用更传统的方法处理多个用例相比,实际上会降低数据处理速度。
本博客探讨了 Spark 的优势和劣势,特别是在现代数据科学和机器学习工作流的背景下,以帮助企业明智地将 Spark 纳入其分析技术战略。
为了理解适当的 Spark 用例的细节,首先理解基本的 Spark 架构是很重要的。Spark 应用程序由一个驱动程序进程和一组执行程序进程组成。驱动程序进程负责三件事:
- 维护关于 Spark 应用的信息;
- 响应用户的程序或输入;
- 在执行者之间分析、分配和调度工作。
执行器负责执行驱动程序分配给它的代码,并向驱动程序节点报告该执行器上的计算状态。

来源:阿帕奇火花
Spark 的计算模型基于弹性分布式数据集(RDDs),这是一个跨集群的对象集合,具有用户控制的分区和存储。Spark 构建 rdd 的方法大量借鉴了 Hadoop 的 MapReduce 设计。“映射”任务将输入数据集分割成独立的块,这些块以完全并行的方式进行处理,然后“缩减”任务对映射的数据进行分组和分区。Spark 的 MapReduce 方法基于一种更先进的模型,称为有向无环图(DAG),它比 Hadoop 中的 MapReduce 更有效地支持迭代。但是它仍然并行处理数据,其中有一个阻塞步骤,然后是一个等待步骤,在这个步骤中所有的东西都同步。

来源:斯坦福大学
什么时候使用 Spark 是“正确的”答案,并没有固定的公式。通常,您首先需要确定在使用您选择的编程语言的非 Spark 环境中需要什么处理逻辑以及需要多少时间和资源。然后,您需要权衡添加 Spark 等分布式计算框架的利弊(例如,更多开销、更复杂的设置)。一般来说,当您的数据无法放入单台机器的内存中时,Spark 将是最合适的选择——例如,数据超过数百 GB。
Spark 最受欢迎的一些用例包括:
- 流数据: Spark Streaming 统一了不同的数据处理能力,允许开发人员使用单一框架在将数据推入数据存储之前不断清理和聚合数据。Spark Streaming 还支持触发事件检测、数据丰富和复杂的会话分析。
- 交互分析: Spark 的速度足够快,可以在非常大的数据集上进行探索性查询,无需采样。通过将 Spark 与可视化工具相结合,可以交互式地处理和可视化复杂的数据集。
- 机器学习: Spark 附带了一个用于执行高级分析的集成框架,可以帮助用户对数据集进行重复查询。该框架中的组件包括 Spark 的可扩展机器学习库(MLlib)。MLlib 可以在聚类、分类和降维等领域工作。
与其他数据处理选项相比,Spark 涉及更多的处理开销和更复杂的设置。以下是关于为什么 Spark 可能不是某些用例的正确框架的一些考虑因素:
MapReduce 范例的有效性。
Spark 基本上基于 Hadoop 的设计架构,并利用 MapReduce 方法(DAG)在内存中创建数据块(rdd)。当每个块/任务需要大约相同的处理时间时,这种设计模式可能非常有效,但是对于许多由非常异构的任务组成的机器学习工作流来说,这种设计模式可能会很慢。例如,使用 MapReduce 方法训练深度神经网络可能非常低效,因为每一步的算法复杂性都可能存在极大的差异。¹
激发您的数据科学团队的复杂性。
Spark 是用 Scala 编写的,有 Scala、Python、Java 和 r 的 API。Scala 开发人员可以很快学会 Spark 的基础知识,但是要让 Spark 正常工作,他们还需要学习与内存和性能相关的主题,例如:
- 划分
- 节点
- 序列化
- 执行者、JVM 等等…
采用 Spark 通常需要重新培训您的数据科学组织。
团队的调试能力。
调试 Spark 可能会令人沮丧,因为内存错误和用户定义函数中发生的错误可能很难跟踪。分布式计算系统天生复杂,Spark 也是如此。错误消息可能具有误导性或被隐藏,有时通过本地测试的函数在集群上运行时会失败。找出这些情况的根本原因是具有挑战性的。此外,由于 Spark 是用 Scala 编写的,而大多数数据科学家只知道 Python 和/或 R,因此调试一个 PySpark 应用程序可能相当困难。PySpark 错误将显示 Java 堆栈跟踪错误以及对 Python 代码的引用。
保持活力是 IT 面临的挑战。
众所周知,Spark 很难调整和维护。IT 部门通常在 Spark 专用内存和集群管理方面没有深厚的专业知识,因此确保集群不会在繁重的数据科学工作负载和许多并发用户的情况下崩溃是一项挑战。如果您的集群没有得到专业的管理,性能可能会非常糟糕,并且经常会出现因内存不足而导致的作业失败。
就在五年前,Hadoop 还是分布式数据处理的首选框架。世界上最大的分析会议甚至以它命名。如今,随着许多企业迁移出 Hadoop,集群处于闲置状态。
Hadoop 的迅速崛起和衰落是企业分析技术趋势变化速度的绝佳例子。考虑到这一点,今天有思想的 IT 领导者必须问,“Spark 会留下来吗,或者它会在几年内走上 Hadoop 的道路吗?”
已经有多种分布式计算框架为 Spark 提供了引人注目的成熟替代方案。
2018 年,Dask 发布,创建了一个强大的并行计算框架,对 Python 用户来说非常有用,可以在单台笔记本电脑或集群上很好地运行。Dask 比 Spark 重量更轻,更容易集成到现有代码和硬件中。
Spark 增加了一个重要的学习曲线,涉及新的 API 和执行模型, Dask 是一个纯 Python 框架,因此大多数数据科学家几乎可以立即开始使用 Dask。Dask 支持 Pandas dataframes 和 Numpy 数组数据结构,因此数据科学家可以继续使用他们熟悉和喜爱的工具。Dask 还与 Scikit-learn 的 JobLib 并行计算库紧密集成,能够以最小的代码更改并行处理 Scikit-learn 代码。
加州大学伯克利分校 RISELab 的研究人员与 Spark 的最初开发有关联,他们指出,现有的数据处理和分布式计算框架无法满足今天复杂的机器学习要求。例如,Spark 和 Hadoop 不支持毫秒级的细粒度计算或动态执行。他们正在从头开始创建 Ray以支持主要的机器学习用例,包括模拟、分布式训练、即时/快速计算以及在交互式场景中的部署,同时保留 Hadoop 和 Spark 的所有可取功能。
最初的基准测试结果非常积极,表明 Ray 在某些应用中胜过 Spark 和 Dask。例如, Ray 和 Dask 在常见自然语言处理任务的基准测试中均优于 Spark ,从文本规范化和词干提取到计算词频表。

来源:走向数据科学
数据科学的创新发生得很快。十年前,每个人都在谈论 Hadoop 的潜力。五年前是火花。今天,我们正处于另一个十字路口,新的分布式计算框架变得越来越普遍。就像你的工具箱中需要的不仅仅是一把锤子,你还需要使用正确的语言、IDE、环境等的灵活性。手头的项目。选择一条道路至关重要,它允许您采用当今最强大的工具,同时具有支持未来新工具的灵活性。
Domino 是一个专门为大型组织的 IT 和数据科学部门构建的平台。它允许数据科学组织使用他们熟悉和喜爱的工具来构建、部署和共享模型。在底层,Domino 直接管理您首选的分布式计算框架,以及您的基础设施资源、工具和 ide。这使得数据科学团队能够以最小的 IT 开销使用他们想要的工具,同时满足 IT 需求。专门针对分布式计算和高性能机器学习,Domino 支持几个框架,包括 Spark 和 TensorFlow,并计划在它们变得更加突出时支持 Dask、Ray 和其他框架。
与一些基于 Spark 的平台不同,Domino 可以将 Spark 和非 Spark 工作负载统一在一个平台上——创建一种技术无关的方法,支持跨内核的并行处理。例如,一名在 Domino 工作的数据科学家可以为分布式计算工作负载(如图像转换)启动 Spark 集群;他们的同事可以使用 GPU 来进行机器学习训练,从而构建 TensorFlow 实例。他们的工作将统一在同一个 Domino 平台上,这样他们就可以协作、评论和复制彼此的工作。
Domino 还简化了集群和实例的设置,因此数据科学家不需要争夺 IT 资源。他们所要做的就是选择所需的计算能力,只需点击一下,Domino 就会自动将集群连接到他们的工作区(例如 Jupyter)或批处理脚本。没有开发运维或依赖性管理的痛苦;使用 Domino 在集群中自动加载包。

有了 Domino 对按需 Spark 集群的支持,数据科学家现在可以获得运行突发工作负载所需的能力、速度和灵活性,IT 团队也可以更轻松地支持他们,而无需承担管理单独 Spark 集群的负担。效率和治理已融入其中,IT 可以通过自动取消集群配置来降低计算成本。只需管理一个空间,不需要多个集群或特别请求。它可以消除依赖关系管理的麻烦,这种麻烦会随着不同的包和 Spark 二进制文件而来;Domino 完全管理集群中的包。最重要的是,您可以放心地知道 Domino 是技术无关的,并且将支持硬件集群上并行数据处理的最佳技术。
Spark 有其优势,但它并不是一些供应商让您相信的数据科学的全部。了解它的优点和缺点是很重要的,这样你就可以在有意义的时候使用 Spark,在没有意义的时候避免使用它。但更重要的是,投资那些让你有更多选择的平台,这样你就不会被局限在一个生态系统中,并且可以在新的数据处理框架成熟时采用它们。

¹ 参见“大规模分布式深度网络”Jeffrey Dean 等人
Twitter Facebook Gmail Share










