权重和偏差有什么作用?
支持协作式 MLOps 文化的平台
照片由 Unsplash 上的 Piret Ilver 拍摄
TL;速度三角形定位法(dead reckoning)
- Weights&bias(W&B)是一个面向开发者的机器学习平台,用于更快地构建更好的模型。
- 它旨在支持和自动化 MLOps 生命周期中的关键步骤,如实验跟踪、数据集版本和模型管理。
🧠唤起了你的记忆-> MLOps
创建一个 ML 模型是容易的部分——操作化和管理 ML 模型、数据和实验的生命周期是事情变得复杂的地方。这就是为什么我们需要一套系统的方法和实践来应对这一挑战。
在深入研究 W&B 之前,🧐还想知道更多关于 MLOps 的事情吗?这里有一个我以前写的帖子:什么是 MLOps
🧠 唤起你的记忆- > MLOps
🚀入门指南
正如我之前的产品和平台相关的帖子一样,我决定在一个下午卷起袖子,给 W&B 一个旋转!
W&B 本质上是一个基于网络的订阅服务,个人账户是免费的,并提供 100 GB 的数据集存储和工件跟踪。你可以在这里报名:https://wandb.ai/site
W&B 由两个主要组件组成,工作空间和 Python API。事实上,下面是通过这两个组件提供的功能的一个很好的总结。
图 0: W & B —平台,来源:W & B 网站。
框的顶行代表 MLOps 的使能器,底行显示相应的 W&B 特性,我将在这篇文章中涉及它们。
工作空间
当您登录 W&B 时,您通常会看到一个类似下图的仪表盘,它的左侧有一个简单干净的导航栏,您可以在这里访问最近的项目或创建一个新项目。您还可以查看您所属的团队、资源和设置。
图 1: W & B —工作空间
导航栏右侧的主窗格包含最近的“运行”列表,稍后会详细介绍。
Python API
这就是 W&B 如何与您现有的模型代码集成,并能够在工作空间中展示您的实验见解。
根据你喜欢的框架,有一些快速入门指南,在这篇文章中,我选择了 PyTorch。我使用 W&B github repo 中的 PyTorch 示例之一,使用时尚 MNIST 数据集训练一个 CNN 模型。这是一个类似于MNIST的数据集,但不是用它来训练一个对数字进行分类的神经网络模型,而是旨在识别服装、配饰和鞋类的常见类别,如靴子、运动鞋、外套和包。
用几行代码集成 W&B 真的很简单。我不会在这里重复快速入门,而是通过几个步骤:
- 在您的环境中安装 W&B Python API 库,并登录到您的 W&B 帐户(快速入门中提供了身份验证令牌)。
pip install wandbwandb login
2.在您现有的模型训练代码中为 W&B 库添加一个导入行,定义您想要在其中跟踪实验运行的项目,并配置超参数。
import wandbwandb.init(project="medium-post", entity="omerm")wandb.config = {"learning_rate": 0.01,"epochs": 10,...}
3.最后,在您的训练循环中添加一行代码,记录您希望在工作空间中跟踪和可视化的指标。
wandb.log({"loss": loss})
🧪(跑)宁和跟踪实验
MLOps 的关键支柱之一是能够进行各种实验,并有某种方式跟踪每个不同的配置如何影响您最感兴趣的模型度量。
当您运行包含给定实验的训练过程的代码时,项目中的 Runs 部分是 W&B 展示所有这些好的实验数据的地方,如下面的屏幕截图所示。
图 2: W & B —工作空间,项目运行
Runs 视图在左侧显示实验运行的列表,右侧的图表代表您选择记录的每个实验的指标。
例如,您可以搜索跑步、过滤并方便地按团队或指标分组。
多次实验中常见的指标由每次实验的不同颜色图表示。
单击一个单独的运行,您可以深入了解与实验相关的更详细的配置、指标和各种其他统计信息,如下面的屏幕截图所示。
图 3: W & B —工作区,运行
🧹扫描,又名模型优化
另一个属于模型实验和开发的常见 MLOps 任务是超参数调整。
我对超参数调优的类比是烘焙蛋糕🍰。请考虑一下,您为构建模型而编写的框架、训练数据和代码是您组合在一起制作蛋糕混合物的配料。
然后运行代码来训练一个模型,或者将蛋糕混合料放入烤箱烘烤。
您可以将超参数视为烤箱上控制蛋糕烘烤方式的旋钮,例如定时器、温度、对流类型等。改变这些旋钮会对你的蛋糕产生很大的影响;太热,它会燃烧,如果你不煮足够长的时间,它可能不会上升。
对于模型来说也是如此——超参数值,如学习率和批量大小,会对模型需要多长时间收敛(或最小化损失)产生很大影响。
失败是对错误预测的惩罚。也就是说,损失是一个数字,表示模型对单个示例的预测有多差。[2]
如果模型的预测是完美的,损失为零;否则损失更大。训练模型的目标是找到一组权重和偏差😏在所有示例中,平均损失较低。[2]
在 W&B 中,我们可以使用“扫描”来执行超参数调优工作,并轻松地将它们分布到多台机器上以加快进程。
很容易从工作区(如图 4 和 5 所示)或者通过代码中的 API 调用来创建和配置扫描。
图 4: W & B —工作区,创建/查看扫描
图 5: W & B —工作空间,扫描配置
一旦您设置了扫描的参数,您就可以用一个单行命令启动它,然后监视它的进度,特别是到目前为止已经完成的运行。
你得到了一些很好的视觉效果,总结了你的扫描结果。例如,一个图表突出显示了参数对于特定指标(如损失或准确性)的重要性。
我个人最喜欢的是平行坐标图,例如,它可以显示每次扫描的参数值及其对特定标签精度的影响,如下所示:
图 6: W & B —工作空间,扫描,可视化结果
最终,您可以使用扫描的输出为您的模型训练选择最佳超参数值。
💡专业提示,正如我在玩的时候发现的,贝叶斯或随机参数搜索的扫描将永远运行,除非你从命令行或工作区 UI 强制停止(ctrl-c)这个过程。或者,您可以使用计数标志指定代理应该提前尝试的运行次数:
NUM=10SWEEPID="ex56dcvv"wandb agent --count $NUM $SWEEPID
📊报告和协作分析
我不打算花太多时间来介绍这套功能,因为 W & B 文档已经很好地向您介绍了这些功能。
报告是让 W&B 对分享发现和跨团队协作有用的基础部分。
您得到了一个超级丰富和灵活的概念——比如创建报告的“命令的类型”/“UI。它由面板组成,可以包含从文本和降价到预建图表的任何内容,这些图表直接从项目中的各种运行中提取数据。
图 7: W & B —工作区,报告
我最喜欢的报表元素之一是“文本表格”面板。这是一个非常有用的方法来可视化你通过 wandb.log()函数记录的数据,比如你的模型 评估的结果。
以时尚 MNIST 为例,我可以查看我的模型对数据集中的每张图片所做的预测。我还可以交互式地过滤该表,以显示不正确的预测、猜测与事实,如下所示:
图 8: W & B —工作区、报告、模型评估—文本表格
它确实消除了必须快速策划、总结和分享数据科学项目发现的挫折感,并且以一种非常干净的方式做到了这一点。
📝工件:数据集、模型修订和管理
W&B 工作区包括一个工件注册表。在这里,您可以看到与特定项目相关的所有工件,您可以通过实例化 W&B 工件对象并将其保存在您的代码中,将数据集和模型添加到该视图中,例如:
artifact = wandb.Artifact(name, “model”)artifact.save()
您保存的任何内容都可以在项目工作区中看到,如下所示:
图 9: W & B —工作空间,工件
简而言之,W&B API 使得存储关于数据集和模型的元数据变得很容易。还有一个有用的图形视图,它展示了您的工件的血统。
跟踪工件的能力是有用的,但是当涉及到监控和部署到生产中时,这如何帮助支持我们的 MLOps 管道呢?这就是 W & B 的模型管理特性派上用场的地方!
在撰写本文时,W&B 的模型管理特性还处于测试阶段,他们正在“积极地构建模型注册和模型评估用例”。[1]
W & B 用于模型管理功能的设计是为了跟踪和报告模型的完整生命周期:
- 数据集:模型在其上训练的数据集的精确版本
- 代码:模型训练中使用的代码
- 模型:训练模型本身的权重
- 度量:模型在不同黄金数据集上的评估结果
- 状态:每个模型在管道中的位置(例如“暂存”或“生产”)[1]
当涉及到实现 MLOps 管道时,这个列表无疑勾选了很多框。我在文档中使用了 github 的例子,让测试版的功能快速旋转了一下。
示例代码基本涵盖以下步骤:
- 为模型训练和评估生成数据集(下载 MNIST 数据),并将其发布到工件存储。
- 使用步骤 1 中的数据集训练几个模型,改变超参数以区分每个模型。该步骤还按照创建顺序将每个候选模型及其度量发布到工件存储中。
- 评估每个模型以确定其损失;损失最低的模型然后被“提升”到生产中。
⚠️请记住,当我说“升级”时,您的生产环境中并没有实际的模型部署。这纯粹是一个元数据标记,可以应用于工件以实现监控和跟踪的目的——但这并不是说您不能触发脚本来执行基于元数据更改的实际操作。
然后,您可以使用报告和包含编织组件的面板来可视化结果,如下所示:
图 10: W & B —工作区、报表、模型管理—编织
weave 组件类似于文本表,只是它用于从工件存储中提取数据。然后,您可以将其作为报告的一部分,显示有用的信息,如创建日期、损失、状态等。
⚖️初步印象
我从未打算写一篇全面的产品评论😅。但是我想至少说明一下 W&B 是做什么的,并分享我使用它的简短经验!这里有一个总结…
设置:
使用谷歌账户创建免费账户非常简单。我在使用 Google Colab 笔记本进行测试时,没有遇到向 W&B 认证的问题。
我没有深入研究更高级的特性,比如分布式清扫或者向一个项目添加多个贡献者。
易用性:
W&B 绝对不是绝对新手的平台。您不会在这里找到任何预构建的模型,或者用于构建模型的无代码/AutoML 选项。
然而,如果你在(或管理)一个由编写 python 代码的数据科学家/工程师组成的成熟团队中,并且一直在寻找一种更结构化的方式来跨项目协作,同时也推动 MLOps 文化,那么 W&B 可能是一个不错的选择。
开始从 W&B 获得价值是如此容易,这令人吃惊。只需几行代码和对最流行的 ML 框架的广泛支持,您应该能够非常快速地将其与您现有的 python 数据科学工作流集成。
我还想说文档非常好,有很多视频,在 Google Colab 笔记本上的工作示例和一个很棒的用户社区。
成本:
免费的个人账户为项目相关的存储和工件提供了 100 GB 的空间;使 W&B 工作空间工作所需的计算资源似乎也包括在内。
对学术和开源团队有优惠。除此之外,他们还根据你想存储的数据量和你想追踪的物品数量,按“现收现付”的方式收费。
请记住,您仍然需要一个运行代码的环境,这意味着在模型训练或评估的过程中,您需要消耗任何资源。
总体:
我真的很喜欢为这篇文章测试 W&B。我认为随着产品的发展,它可能会成为一个更加端到端的平台,用于自动化 MLOps 流程,但目前它在实现 MLOps 文化方面做得非常好。
如果你已经看完了,那么谢谢你的阅读,我们下一集再见!👋
📇参考
[1] W&B,文档,[Beta]模型管理:https://docs.wandb.ai/guides/models
[2]谷歌机器学习速成班,降入 ML:训练与损失:https://developers . Google . com/Machine-Learning/Crash-Course/降入 ML/训练与损失
word2vec 实际学的是什么?
思想和理论
以及如何从相似性函数中训练嵌入
用连续向量表示离散对象,即所谓的嵌入,是许多成功的机器学习解决方案的核心。这种优越性来自于这样一个事实,即与原始的离散对象不同,嵌入向量提供了一种紧凑的表示,它捕捉了原始对象之间的相似性。
在本文中,我们考虑著名的 word2vec 算法。Word2vec 简单直观。在高层次上,它认为频繁出现的彼此接近的单词应该具有相似的向量表示。具体来说,该示例
嵌入(男人)-嵌入(国王)~嵌入(女人)-嵌入(女王)
已经成为单词嵌入捕捉单词语义能力的典型代表。
然而,优化目标不能由明确定义的量来表示。作为比较,考虑使用矩阵分解学习单词嵌入。设 D 是由 m 个文档和一个 n 个唯一词的词汇组成的文本语料库。我们计算 n 乘 M 字,文档矩阵 M ,其中*M【u,v】*记录了字 u 在文档 v 中出现的次数,见图 1。
图 1: Word 文档矩阵。克里斯托弗·卡尔·克林拍摄。来源:维基媒体
矩阵分解被定义为
在下文中,我们将稍微滥用符号,并用 u 表示单词 u 及其嵌入向量。
在这种情况下,我们知道对于一个嵌入了 u 的单词,和一个嵌入了 v 的文档, u 和 v 的内积保存了单词 u 在文档 v 中出现了多少次的信息。嵌入维数 d 越大,逼近性越好。不幸的是,word2vec 模型的优化目标没有如此清晰的表述。word2vec 中两个字向量的内积到底保存了什么?并且通过增加维度 d 嵌入一定会变得更好吗?
Levy 和 Goldberg 的一篇研究论文回答了这个问题[1]。在这篇文章中,我给出了[1]中的理论结果,然后展示了如何用它们来设计更一般的嵌入类。
训练单词嵌入:word2vec
让我们简单考虑一下负采样的 word2vec 是如何工作的。更全面的描述,我们参考这篇文章。设 D 是由单词、语境对组成的语料库。在 word2vec 中,单词 w 的上下文被定义为围绕 w 的 k 单词,其中 k 通常是在 5 和 15 之间变化的小常数。我们想要学习单词嵌入,使得如果两个单词在语料库中频繁地同时出现,则它们的内积很大。
考虑一个单词 w 并且让 c 是其上下文中的一个单词。对于语料库中一起出现的词对 (w,c) ,我们希望嵌入的内积最大化 (w,c) 确实出现在语料库中的概率(表示为 D=1)。概率由 sigmoid 函数建模:
上面有一个琐碎的解决方案,我们可以简单地把所有的内积任意变大。因此,我们也引入否定对,即在语料库中不共现的对,其目的是:
该算法可以总结如下:
Algorithm word2vec1\. Assign a random *d*-dimensional vector to each word that appears in the corpus.2\. Traverse the corpus and generate pairs of words that appear in it. These are the positive pairs.3\. For each positive pair, generate *k* random pairs of words. These are the negative pairs.4\. Feed the inner products of the embedding vectors of positive and negative pairs into a binary classification model where the learnable parameters are the word embeddings.
我们在语料库上运行上述算法几个时期,以保证学习过程收敛到最优。
理论分析
固定一个单词 w 并考虑所有出现 w 的配对的目标。设 #(w,c) 为语料库中 (w,c) 对的出现次数。我们可以把目标写成
其中第二个乘积在我们生成的负对之上。
通过取目标的对数并观察每个否定词 cN 有机会被采样,我们得到:
我们来解释一下上面的内容。单词 w 是固定的,我们考虑语料库中出现的所有单词上下文对( w,c) ,并且我们对 k 否定对 (w,cN) 进行采样,使得每个单词 c 以概率#©/|D|被采样。我们希望正对的内积是一个大的正数。对于负对,我们希望内积是一个绝对值很大的负数。
注意,语料库中的对数|D|是恒定的。因此,通过将上述表达式除以|D|,目标变为
这已经给我们提供了一些直觉。目标是优化嵌入,使得它们反映正配对被采样的概率,而不是随机采样的配对。正对是以概率产生的
对于负对,两个词被独立地随机抽样,每个词都有概率
通过将内积设置为未知参数并求解相应的优化问题,我们可以找到内积的最优值:
在上面的 P(w,c)是单词对(w,c)出现的概率,P(w)是单词 w 在语料库中出现的边际概率。以上原来是一个在自然语言处理中广泛使用的词语关联度量,即 【点态互信息(PMI) 度量。
这真是太神奇了!事实证明,word2vec 本质上相当于矩阵分解,其中矩阵条目是词对之间的 PMI 得分。自 80 年代以来,PMI 作为一种距离度量被用于 NLP 相关的任务[2],远远早于单词嵌入概念的出现。
基于任意相似度函数的嵌入
现在很容易看出,我们可以简单地替换采样正负对的概率。我们只需要更新上面给出的 word2vec 算法中的第二步和第三步:
Algorithm sim2vec:1\. Assign a random *d*-dimensional vector to each word that appears in the corpus.2\. **Generate pairs of words according to a words similarity measure.** These are the positive pairs.3\. For each positive pair, **generate *k* random pairs of words by the independent sampling of word pairs**. These are the negative pairs.4\. Feed the inner products of the embedding vectors of positive and negative pairs into a binary classification model where the learnable parameters are the word embeddings.
为什么这很有帮助?这给了我们更多的自由来分配配对的重要性。我们可以变得有创造性,考虑不同的相似性度量。例如,单词之间的 Jaccard 相似度定义如下:
因此,如果 w 的存在意味着 c 也可能出现在文档中,则我们可以学习优化单词 w 和 c 彼此相似的目标的嵌入,反之亦然。在这种情况下,这一对(“凯拉”、“奈特莉”)的得分可能会高于(“数据”、“科学”)。目标变成了:
我们也可以模拟产生负对的概率。例如,Pr(w)可以是均匀分布,其中所有单词具有相同的被选择概率,而不管它们出现的频率如何。
从分布中取样
如果我们可以计算并存储所有对(u,v)的相似性,那么根据相似性进行采样就变得简单了:只需将相似性分数作为权重来存储对,并使用类似于 numpy.random.choice 的算法进行采样。然而,这在计算上可能是不可行的。
有不同的方法来处理具有大量线对的问题。一般来说,我们希望仅使用那些具有高相似性得分的配对作为阳性配对。
- 如果您的相似性度量主要基于计数,那么数据的子样本将保留最频繁的对,但许多不频繁的对将被过滤掉。例如,我们可以只考虑语料库中文档的子集。诸如(“数据”、“科学”)之类的常用词对将可能保留下来。但这可能不是这种情况(“凯拉”,“奈特利”)。
- 对于每个对象,只考虑最近的 t 个邻居。例如,我们可以使用 scikit-learn 的公开实现,它使用 kd-trees 这样的算法来加速相似性搜索。这些算法适用于维度不是很高的数据。否则,人们可以考虑像这样的方法,本地敏感散列将产生相似的单词。对于像 Jaccard 相似性这样的度量来说尤其如此。
实用的实现
为了便于说明,我们实现了一个简单的解决方案,用于从文本语料库中学习文档嵌入。这个问题与训练单词嵌入的问题是正交的:我们根据文档包含的单词训练文档的向量表示。
我们考虑 IMDB 情感分析数据集。该数据集由用户的电影评论组成,每个评论都标有积极或消极的情绪。
- 在对文本进行预处理之后,我们使用 tf-idf 编码将文档转换成向量,这样每个文档
from sklearn.feature_extraction.text import TfidfVectorizer
tfv=TfidfVectorizer(min_df=0.00,ngram_range=(1,1))
tf_reviews = tfv.fit_transform(reviews)
参数 min_df 表示我们只考虑出现在至少 0.1%的文档中的单词。本质上,这防止我们使用可能只出现在几个文档中的非常具体的单词。
- 对于每个输入向量,找到其最近的邻居。这可以通过使用现成的软件包来实现,例如 scikit-learn 的 K-nearest neighborhood,它返回以下各项的最近邻居:
from sklearn.neighbors import NearestNeighbors
nn_model = NearestNeighbors(n_neighbors=t, algorithm='auto')
nn_model.fit(tf_reviews)
distances, indices = nn_model.kneighbors(tf_reviews[idx])
- 计算生成的 nt* 正对的相似度,在一个数组中对它们进行排序,并使用 numpy.random.choice()根据它们的权重进行采样:
eps = 1e-3
weights = [(1.0/(d+eps))**2 for d in distances[0][1:]]
weights = [w/sum(weights) for w in weights]
pos = np.random.choice(indices[0][1:], nr_pos_samples, p=weights)
neg = np.random.choice(nr_reviews, nr_neg_samples)
- 使用 Keras 生成器生成正负对:
class PairsGen(tf.keras.utils.Sequence):
def __init__(self, data, nr_pos, nr_neg, ...):
"""Initialization
:param data: the sparse matrix containing
:param nr_pos: the number of positive samples per word
:param nr_neg: the number of negative samples per pos. pair
...
"""
... def __getitem__(self, idx):
"""
Sample self.nr_pos word pairs and self.nr_neg word pairs
"""
.....
- 将生成的对输入到具有嵌入层、计算内积的点层和具有 sigmoid 激活函数的输出层的浅层神经网络中:
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_2 (InputLayer) [(None, 2)] 0
__________________________________________________________________________________________________
context_embedding (Embedding) (None, 50) 2500000 tf.__operators__.getitem_3[0][0]
__________________________________________________________________________________________________
word_embedding (Embedding) (None, 50) 2500000 tf.__operators__.getitem_2[0][0]
__________________________________________________________________________________________________
dot_1 (Dot) (None, 1) 0 context_embedding[0][0]
word_embedding[0][0]
__________________________________________________________________________________________________
flatten_1 (Flatten) (None, 1) 0 dot_1[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 1) 2 flatten_1[0][0]
=====================================================================
Total params: 5,000,002
Trainable params: 5,000,002
Non-trainable params: 0
上述方法将训练嵌入:
model.compile(optimizer='adam', loss= 'binary_crossentropy',
metrics=['accuracy', 'AUC'])
model.fit(generator, epochs=10)
Epoch 1/10
10000/10000 [==============================] - 153s 15ms/step - loss: 0.6354 - accuracy: 0.6667 - auc: 0.5359
Epoch 2/10
10000/10000 [==============================] - 152s 15ms/step - loss: 0.6129 - accuracy: 0.6868 - auc: 0.6151
Epoch 3/10
10000/10000 [==============================] - 151s 15ms/step - loss: 0.5680 - accuracy: 0.7292 - auc: 0.6963
...........
Epoch 10/10
10000/10000 [==============================] - 151s 15ms/step - loss: 0.3891 - accuracy: 0.8323 - auc: 0.8865
然后,我们可以提取每个单词的嵌入层,并对文档进行聚类(类似于图 1 中的 gif 所示)。我们观察到两个集群中的情感分布非常不同:
两个集群中的情感分布。图片作者。
密码
上述内容的 Python 实现可在以下网站公开获得:https://github.com/konstantinkutzkov/sim2vec
[1]奥马尔·利维,约夫·戈德堡。神经字嵌入为隐式矩阵分解。国家实施计划 2014 年:2177-2185
[2]肯尼斯·沃德·丘奇和帕特里克·汉克斯词语联想规范、互信息和词典编纂。计算语言学,16(1):22–29,1990。
你的 AI 想要什么?
播客
瑞安·凯里对理解人工智能系统动机的探索
编者按:这一集是我们关于数据科学和机器学习新兴问题的播客系列的一部分,由 Jeremie Harris 主持。除了主持播客,Jeremie 还帮助运营一家名为sharpes minds的数据科学导师初创公司。
人工智能安全研究人员越来越专注于理解人工智能系统想要什么。这听起来可能是一件奇怪的事情:毕竟,我们不就是通过为人工智能提供一个损失函数或一个要优化的数字来编程人工智能以获得某些东西吗?
嗯,不一定。事实证明,人工智能系统可以有基于其初始编程不一定显而易见的激励。例如,Twitter 运行一个推荐系统,其名义上的工作是找出你最有可能参与的推文。虽然这可能会让你认为它应该为匹配推文和人进行优化,Twitter 可以实现其目标的另一种方式是通过匹配人和推文——也就是说,通过将他们推向简单和党派的世界观,使人们更容易预测。一些人认为这是社交媒体对在线政治话语产生如此分裂性影响的一个关键原因。
因此,许多当前人工智能的激励已经在重要和显著的方面偏离了它们的程序员——这些方面实际上正在塑造社会。但它们之所以重要,还有一个更大的原因:随着人工智能系统继续开发更多能力,它们的激励和我们自己的激励之间的不一致将变得越来越重要。这就是为什么这一集的嘉宾瑞安·凯里将他的大部分研究集中在识别和控制人工智能的激励上。Ryan 是一名前医学博士,现在在牛津大学人类未来研究所攻读机器学习博士学位,从事人工智能安全研究。
以下是我在对话中最喜欢的一些观点:
- 大多数从事人工智能安全工作的人都来自有效利他主义(EA)社区。EA 是一个哲学运动,专注于找出一个时间和金钱有限的人如何在世界上做得最好。EA 社区中的许多人都有一个长期的展望,随之而来的是对人类未来的关注,以及人工智能等技术的未来,许多人认为这些技术将决定人类在遥远的未来是繁荣还是失败。
- Ryan 在人工智能激励方面的工作适用于许多当前系统,对于长期的人工智能校准工作也很重要。出于这个原因,这是一个长期和近期人工智能安全研究人员可以清楚地达成一致的领域。这种事情并不像你想象的那样经常发生,因为在人工智能安全社区内部正在就长期或近期安全问题是否应该优先进行积极的辩论。
- 长期人工智能安全研究人员面临的挑战之一是抽象泄漏。这就是我们赖以描述世界的基本概念——比如“苹果”、“GPU”和“算法”——实际上是模糊的。例如,一个苹果实际上只是细胞的集合,这些细胞是原子和基本粒子的集合。但为什么这是人工智能安全的一个问题?我们使用抽象是因为我们的感官和计算带宽有限。我们的大脑不认为苹果是细胞的集合,尽管这是一种更准确的感知它们的方式,因为我们没有足够的计算能力和带宽来做到这一点。所以我们使用快捷方式,比如“苹果”这个概念,让这个世界变得足够可压缩,便于理解。但超级智能的人工智能系统不会面临这种限制:原则上,它们可以比我们更详细地看到世界,并可以通过发现我们无法发现的子抽象(如苹果中的细胞)之间的关系来对这些细节采取行动。因此,依赖于某些固定抽象(例如,“不要伤害人类”,或“不要吃那个苹果”)的人工智能安全策略,在面对超级智能系统时,可能远不如我们想象的有效。
播客中引用的链接:
- Ryan 一直在研究的因果激励理论网站。
- 这篇文章是关于预测人类和超人的人工智能何时会被开发出来。
- 本报道关于人工智能时间轴。
章节:
- 0:00 介绍
- 1:20 瑞安的背景
- 5:25 探索替代方案
- 6:45 抵御可扩展的影响
- 11:30 珍惜未来生活
- 13:50 存在风险和 AI
- 23:30 人工智能安全的进展
- 34:30 人工智能战略的组成部分
- 41:30 到达 AGI
- 49:50 五年时间跨度
- 55:10 冒险
- 56:50 总结
是什么驱使人们去抗议,什么因素促成了最大的成功?
围绕抗议活动的关键问题的数据驱动多学科方法。 附随代码可在 GitHub 上查看。
Teemu Paananen 在 Unsplash 上拍摄的照片
在印度全国范围的农民抗议和正在进行的黑人的命也是命示威之间,过去几个月暴露了印度公民对邦政府和国家政府的一系列不满,促使他们进行抗议,以满足他们的要求。
这些当前的事件促使我们想要进一步研究抗议行为,并探索世界各地的抗议是什么样的,是什么驱使人们进行抗议,以及在决定政府行为者是否满足抗议者的要求时,哪些因素可能是重要的。我们选择对这些问题采取多学科的方法,对抗议和政治权力进行文献综述,从 Tableau 的数据可视化中汲取见解,分析统计上显著的变量,并在 r。
数据理解
除了我们的文献综述,我们还利用了来自群众动员项目的数据集进行分析,该数据集纳入了 1990 年至 2019 年期间针对政府的抗议活动,涉及至少 50 人。大众动员通过评估《纽约时报》、《华盛顿邮报》、《伦敦时报》等报纸来源来收集数据,并建立了需要退回和审查的关于特定抗议事件的文章基线。随后的数据集包括抗议的开始日期和结束日期、地点、抗议者身份、抗议者人数、抗议是否是暴力的、抗议者的要求、国家的反应以及描述抗议活动的注释/文本信息和背景等变量。有关数据收集过程和数据集的更多信息,请参见大众动员数据项目手册和用户手册。值得注意的一个有趣区别是,虽然有几个地区和国家的抗议数据,包括北美国家加拿大和古巴,但没有美利坚合众国的抗议数据。
数据清理
通过特征工程、列删除和检查空值和错误值,使我们的数据集适合分析的过程非常漫长。经历的步骤包括:用“.”替换所有的空格和单元格在具有“NA”的 it 中,删除不相关/无意义的字段,例如 ID、CCode 和 Sources,创建连接开始日/开始月/开始年的新开始日期字段和连接结束日/结束月/结束年的新结束日期字段,通过计算开始日期和结束日期变量之间的差创建用于拒付长度的新列,删除具有多数空列/单元格的行,删除全部空列,将字符串数字变量转换成数字(例如“十几”), 使用“注释”列中的上下文信息创建一个新的基于文本的 csv,最后创建一个状态响应虚拟变量,作为我们的目标变量,通过 if/else 功能将负面的高级状态响应(例如,杀戮、枪击、忽视)转换为“0”并将抗议者要求的状态调节转换为“1”。
探索性数据分析
为了获得见解,我们在 Tableau 和 R 中进行了一系列探索性数据分析,评估变量的分布和计数,并回答了有关世界各地抗议活动特征的关键问题,如下所示。
可视化效果
作者图片
法国和英国等欧洲国家的抗议活动是世界上最多的。在亚洲,韩国和中国是抗议率最高的国家。此外,委内瑞拉和巴西是南美抗议数量最多的国家。
作者图片
这些年来,抗议活动的数量缓慢增加,其间有一些波动。2011 年,我们经历了自 1990 年以来的最高峰值,随后在 2015 年出现了更高的增长,共有 857 次抗议。
作者图片
在 1 月到 5 月期间,我们观察到抗议活动的高潮。在这个范围内,三月的抗议活动最多。此外,在任何一年的下半年,抗议活动的数量似乎都较少。
作者图片
抗议者的要求涉及各种社会、经济和政治问题。最常见的需求与政治行为和过程有关。这一类别包括与政治改革和保护民主程序有关的任何要求。
作者图片
政府最常见的反应是无视抗议,然后驱散人群。这些类型的政府反应是意料之中的,因为大多数抗议活动被归类为非暴力。
作者图片
抗议活动最常见的驱动因素是对政治行为和政治程序问题的回应,其次是劳动工资纠纷。这些反映了抗议时间最长的类型;因为相同的两种类型的需求具有覆盖最高天数的抗议。类似地,抗议次数和平均持续时间最少的是那些涉及社会限制要求的抗议。
作者图片
各州如何应对暴力和非暴力抗议的分类,每种类型的比例相似,但非暴力抗议的频率较低。
作者图片
大多数抗议活动都没有得到政府的通融,这使得探究导致政府通融与合作的因素变得有趣起来。此外,抗议活动的持续时间通常不到一天,中位数为 0,平均值为 1.664。然而,最大值是一个持续数年的抗议,持续时间为 938 天(出于比例目的,未在可视化中描述)。
作者图片
尽管媒体经常描述抗议活动(如文献综述部分所述),但大多数抗议活动并不涉及抗议者的暴力行为。
作者图片
出现频率最高的参与者类别是 100–999,后面是 50–99,表明他们通常处于较小的一方,但是这通常没有被报告,因为 NA 的显著水平表明了这一点。
您可以使用我们的 交互式仪表盘继续探索抗议数据的计数,点击此处链接(预览如下),并按国家、时间范围、抗议者要求和州响应进行过滤!
测试
除了可视化,我们的探索性分析包括测试变量的独立性和统计显著性。最有趣的发现包括国家反应和长度之间的统计显著正相关(抗议时间越长,它与政府的通融越相关),卡方检验向我们揭示了国家反应虚拟变量和抗议时间长度以及长度和抗议者暴力(存在或不存在)之间的关系不是独立的。
造型
在对各种模型进行迭代和比较,并将分类变量转换为因子以便能够在模型中使用它们之后,最适合我们的数据并为我们提供最多见解的是一个简单的广义线性回归模型** (glm)和一个更加微妙的随机森林模型。这些模型可以用来预测围绕抗议的某些因素是否可能导致国家对请求的通融。此外,他们还帮助确认了在我们的探索性数据分析阶段确定的、在州对抗议者要求的适应中被确定为重要的变量。**
作为参考,广义线性模型是“普通线性回归的灵活推广,允许响应变量具有非正态分布的误差分布模型”(维基百科),随机森林模型通过“在训练时构建大量决策树并输出作为类模式或单个树的均值/平均预测的类”来运用集成学习(维基百科)
在使用所有解释变量和所创建的状态响应虚拟字段的目标变量构建线性模型后,统计显著变量(< 0.05) included length, protester violence, participants category, and protester demand. Additionally, based on the factors the outputs showed us that specific statistically significant positive relationships were the year 2008, the region of Asia, length, protester violence, a participants range of 2000–4999, and the protester demand of price increases/tax policy . Negative ones included the years 1992, 1993, 2003, 2011, 2016, 2019, the regions Central America, South America and Europe, startmonth, and the protester demand of police brutality. The model had an adjusted R-Squared value of 0.6073, suggesting 60% of the data is explained by the model. More insights into the outputs of this linear model can be found by running the code in the accompanying GitHub.
The trained and tested random forest model had a lower r-squared of 0.1195, but still provided us valuable information based off the node purity and decrease in error with the additional amount of classification trees utilized (500 trees) as can be seen below:
****
The variables our random forest model opted to include (listed in order of node purity) were: 年的 p 值、开始日期、开始月份、参与者 _ 类别、抗议者需求、长度、数据区域和抗议者暴力)(关于抗议中是否使用暴力的虚拟变量)。节点纯度越高,表明越多的数据属于一个类,因此变量能够被这些变量更明确地分割,因为它们在确定一个州是否可能满足抗议者的要求方面更重要。
最后,我们对数据集中提供的上下文注释进行了文本建模,以查看在描述抗议活动时不同措辞的最高频率。出现频率最高的术语或词干是抗议( 20,222) 、警察( 10,252) 、治理( 7984) 和德蒙斯特( 7597) 。在下面的可视化中可以看到更多,较大且更集中的术语是在数据集中出现频率较高的术语:****
文献综述发现
互联网上有大量与抗议相关的文献,涵盖了一系列主题,包括抗议是否有效,世界各地的大规模抗议有哪些共同点,以及媒体如何描述它们。
虽然在本文的探索部分分享的国家通融与被忽视的负面回应/要求的数量可能令人沮丧,但研究向我们揭示了在正确的环境和情况下,抗议实际上是有效的,有价值的。
正如《大西洋月刊》上的一篇文章所写的那样,“在短期内,抗议活动可以起到一定程度的作用,以至于他们可以吓唬当局改变他们的行为。抗议是信号:“我们不高兴,我们不会容忍事情的现状。但要做到这一点,“我们不会容忍”的部分必须是可信的。如今,大型抗议活动有时缺乏这样的可信度,尤其是因为数字技术让组织抗议变得如此容易。” (来源)
此外,促使成功的最有说服力的抗议因素被发现是抗议活动的规模和范围,以及抗议者之间是否达成一致,他们的信息是否统一(来源)。
至于现在媒体描绘抗议的方式,通常是以负面的视角,描绘暴力和敌意。这可能会适得其反,最大限度地减少抗议者的运动,因为这助长了抗议者只是愤怒和煽动暴力或伤害社区的言论,而不是有效地展示这些情绪是如何源于他们所反对的系统性问题的。
用来描述这一点的框架被称为抗议范式,它被定义为“社会抗议报道的惯例化模式或隐含模板”。《牛津手册》将此描述为“当运动开始变得更大或更具破坏性,足以引起媒体关注时,他们收到的报道往往是对抗性的——正如跨越数十年媒体报道抗议运动的大量研究所确立的那样。记者对反战抗议、劳工抗议、堕胎法抗议、反政策示威、反核运动和反全球化抗议等给予了敌意对待——通常是通过嘲笑它们或将其描绘为暴力的。” (来源)**
结论&含义
关于促成抗议成功的因素,一些最重要的要点是,抗议的时间长度和暴力行为与国家的通融程度有着统计上的显著正相关。然而,正如一些文献指出的,这些可能是大规模问题的症状,需要长期和更暴力的抗议,因此更重要,从而促使政府做出更多回应;重要的是要区分它,就像我们通篇提到的其他关系一样,不一定是因果关系,但仍然是一种关系。
此外,在当前的社会政治对话中,一个特别相关的统计数据是,迁就需求和警察暴行抗议之间存在显著的负相关(同时,与价格上涨/税收政策问题之间存在正相关,表明政府更有可能迁就处理这些话题的抗议)。此外,从全球角度来看,中美洲、南美洲和欧洲的政府不太可能回应抗议者的要求,而亚洲政府则更有可能。这一分析中有趣的下一步将包括对言论自由的地区政策、政府体制结构的审查,以及纳入美国的抗议数据。
随着抗议活动能够通过社交媒体和数字化社区平台更快地进行规划和实施,看看这种形式的社会变革的未来将会是一件有趣的事情。虽然一些研究人员认为,由于其频率增加或减少到趋势化/不可描述的事件,这可能导致他们潜在地失去可信度和做出改变的能力,但其他人认为,如果做得正确,并且在允许的环境下,它将继续作为一种从外部点燃政治变革的方式。
鉴于当前的事件和稳定的抗议流交织在我们的媒体流和生活中,我们希望这种对过去近 30 年来世界各地抗议活动的多学科一瞥能够提供一些有趣的见解,了解政府抗议发生在哪里和为什么以及何时更有可能取得成功!
关于机器学习,爱因斯坦能教给我们什么
思想和理论
利用机器学习中的对称性
在许多方面,物理学和机器学习有一个共同的目标:为观察到的现象建立模型。在实现这个目标的过程中,物理学家早就理解了对称性的重要性。在这篇文章中,我们来看看物理学中的对称思想是如何作为机器学习的指导原则的。
这篇博客文章是由来自的奥利弗·科布和的卡根诺娃共同撰写的。
雪花的对称性。[图片由 Damian McCoig 在 Unsplash 上拍摄]
在过去的十年里,机器学习取得了长足的进步,特别是在涉及复杂高维数据的问题上,如计算机视觉或自然语言处理。然而,与生物智能相比,对机器智能的一个常见批评是它从例子中学习的效率低下。一个小孩可能只通过少数几个例子就能学会识别一种新动物,而现代机器学习系统可能需要数百甚至数千个例子才能完成同样的壮举。
物理学中的对称性
作为人类,我们根据强有力的物理法则形成周围世界的模型,其中许多是我们下意识学到的。物理学家探索这些定律和模型是如何被形式化和发现的。他们的目标是制定模型的基本过程,准确地描述和预测观察到的现象。
物理系统可以在不同的抽象层次上建模。用来解释天文现象的模型通常利用不同的物理定律来解释亚原子粒子。然而,有一个原则贯穿于所有抽象层次的物理定律:必须尊重自然界已知的对称性。
关于物理定律的对称性的概念与它在描述物体对称性时更熟悉的用法略有不同。如果一个物体在某种变换下保持不变(即不变),则认为它具有对称性。例如,一个球体在任意旋转下保持为球体的事实意味着它表现出旋转对称性。
另一方面,如果支配一个系统行为的物理定律以同样的方式适用于该系统,则该定律被认为是关于某种变换对称的。
一个简单的例子是平移对称,它满足的定律以同样的方式应用于一个系统,而不考虑系统的位置。例如,一个球落在一所房子的一个房间里的行为与一个球落在另一个房间里的行为是一样的(忽略任何外部因素,如任何轻微的微风)。
第二个例子是旋转对称,它满足的定律同样适用于一个系统,不管它面向哪个方向。第三个例子是时间平移对称性,满足不随时间变化的定律。
物理学家早就意识到物理定律的时空对称性。然而,在 20 世纪早期,对称性在物理学中的重要性经历了一次范式转变。
爱因斯坦没有从物理定律出发,推导出相应的对称性质,而是在他 1905 年关于狭义相对论的著名论文中,用对称原理作为出发点,推导出新的物理定律。
十年后,德国数学家艾米·诺特进一步提升了对称性在物理学中的作用,他在抽象代数和理论物理两方面都做出了开创性的贡献,而当时女性在很大程度上被排除在学术职位之外。她证明了物理定律的每一个连续对称都存在一个相应的守恒定律。例如,动量守恒定律可以从物理定律的平移对称性中推导出来。类似地,角动量守恒来自旋转对称,能量守恒来自时间平移对称。
阿尔伯特·爱因斯坦(左)和艾米·诺特(右)。【图片来源于维基共享资源:爱因斯坦;诺瑟
物理学的基本定律,如能量守恒和动量守恒,实际上是从宇宙的对称性而来的。
利用对称性作为指导原则来发现相应的规律和模型来描述观察到的现象不仅在物理学中有很大的用处,而且还可能在机器学习中得到利用。
机器学习中的对称性
机器学习实践者非常清楚对模型进行约束以控制偏差-方差权衡的重要性。当寻找解释变量和目标变量之间关系的模型时,在机器学习中,我们首先指定一类模型,我们假设这些模型包含一个充分描述的模型。在这一课程中,我们寻找最能描述观察到的现象的模型——即最大化拟合经验测量的模型。
重要的是要指定一个足够宽的类,使其包含一个准确描述关系的模型,同时也要有足够的限制,使其不会被过度适应数据的模型超越。这通常很难实现,因为当解释变量和目标变量之间的关系没有被很好地理解时(毕竟这是我们希望学习的),机器学习是最有用的,因此如何设置这些界限并不明显。例如,我们知道图像(即像素强度阵列)和对应于图像语义的类别之间的关系非常复杂。我们如何指定一个模型,在相对受限的情况下允许这样的复杂性?
将归纳偏差引入机器学习模型来解决这个问题的一个特别有效的方法是利用对称原则,这在这一点上应该不会令人惊讶!
给定一大类模型,我们可以立即忽略绝大多数不符合已知问题所展示的对称性概念的模型。本着与爱因斯坦发现狭义相对论时相同的精神,我们首先注意到应该满足的对称原则,然后反向工作,找到一个最能描述观察到的数据的模型。
卷积神经网络中的对称性
这个原则如何在机器学习中得到利用的典型例子是为计算机视觉问题设计卷积神经网络(CNN)。正如在神经网络的任何使用中,目标是从低级特征中分级学习高级特征。计算机视觉中最重要的对称是平移对称:无论出现在图像的什么位置,猫眼都是猫眼。
平移等方差图。给定一幅图像(左上),应用卷积核(𝒜)以获得特征图(右上),然后平移(𝒯)该特征图(右下)相当于首先平移图像(左下),然后应用卷积核(右下)。【猫和特征图图片来源
CNN 通过其架构的设计来编码平移对称性。每个神经元对应于输入的空间区域,并且仅连接到前一层中神经元的相应邻域。至关重要的是,每一个神经元都以完全相同的方式与前一层中的相应邻域相关联。因此,无论特征(例如猫眼)位于图像中的何处,它都会以相同的方式刺激相应位置的神经元。卷积运算符的这一属性称为平移等方差,如上图所示-将运算符应用于要素,然后进行平移,相当于平移后应用运算符。
通过这种仔细的架构设计,我们将模型的空间限制在那些坚持平移等价这一常识性属性的模型上。启发式地,我们可以考虑通过保证一个模式只需要学习一次来帮助我们的学习算法。我们不必在所有可能的位置学习模式,而是通过在模型本身中对平移等变进行编码,确保模式可以在所有位置被识别。
将对称性集成到平面图像及其他图像的机器学习中
将平移对称性集成到机器学习模型中是推动过去十年计算机视觉革命性进步的关键因素之一(结合数据和计算能力的激增)。
这当然有助于 2D 图像具有简单的平面形式,平移对称性可以以直观和计算有效的方式进行编码。对于涉及具有更复杂(非平面)几何形状的数据的问题,遵守期望的对称原则可能更困难。处理复杂的几何需要更先进的数学机器,催生了几何深度学习的领域。几何深度学习社区已经朝着这个目标取得了显著的进展,我们将在未来的帖子中进一步考虑这一点。
参考
[1]布雷丁&卡斯泰拉尼,物理学中的对称性:哲学反思 (2018), arXiv/0301097
[2]希金斯、阿莫斯、普法乌、拉坎尼埃、马泰、雷森德、勒施纳,走向解纠缠表象的定义( 2018), arXiv:1812.02230
[3]昆斯塔特,物理定律的对称性( 1999),https://theory . uwinnipeg . ca/users/Gabor/Symmetry/slide 15 . html
2021 年英伟达 GTC 发生了什么
回顾今年 NVIDIA GPU 技术大会上发布的内容,以及在会议期间关于深度学习和人工智能的讨论
今年的 GTC 以英伟达首席执行官和创始人黄仁勋的主题演讲开始,宣布了今年将发布的内容。自从 COVID 以来,世界上大多数的商务会议都是在我们自己家里的不同寻常的房间里举行的,这次开幕主题演讲也不例外,詹森在他自己的厨房里录制了这次演讲。去年的版本也是在那里制作的,可能证明了 2020 年和 2021 年看起来仍然非常相似。
英伟达首席执行官黄仁勋从烤箱中拿出一些基于 Arm 的 CPU。图片来自 YouTube
Jensen cookings 今年的主菜:“Grace”,NVIDIA 发布的首款 CPU。Grace 基于 Arm,这在该公司去年 9 月打算收购 Arm 后并不奇怪。政府监管机构仍在考虑是否批准合并,但英伟达并没有停止展示这款 CPU,称它将使数据中心实现比基于英特尔 x86 处理器的英伟达 DGX 系统高十倍的性能。Grace 将于 2023 年上市,并且已经有一个感兴趣的早期采用者:瑞士国家超级计算中心,用于其即将推出的名为 Alps 的超级计算机。菜单上的其他菜肴是其新一代数据处理单元 BlueField 和 DGX SuperPOD,这是一种旨在用于云人工智能研究的基础设施,如此庞大如果你不是索尼,你可能不会考虑购买它,但你现在可以用你的份额每月订阅 9000 美元。
但在英伟达,并非所有东西都是硬件。他们发布了 Omniverse,一个 3D 设计和模拟的合作平台。设计需要高性能的计算机,这通常是会议和并行工作的一个限制,尤其是在疫情时间,当你不能只是走到你的队友的桌面。有了 Omniverse,任何人都可以在任何电脑上进行任何项目,甚至可以在同一时间进行。自去年 12 月以来,宝马、Foster + Partners 和 WPP 等大型设计团队一直在使用 Omniverse beta。
开场主题演讲以 Jensen 宣布“最终, **Nvidia 是一种工具,**一种让你成就一生事业的工具”而结束,然后整个厨房被一部分一部分地拆除。抽屉、勺子、椅子和家具从场景中飞走,让我们想知道这个厨房是真的还是只是一个宇宙模拟。然后,GTC 开始了,在一千多个虚拟会议中,演讲者讨论了如何将 Nvidia 作为一种工具来使用。
格雷斯,詹森今年的主菜,肯定一个英特尔不会要求晚餐。图片来自 TecnoBlog
会议议程非常庞大,以至于很难阅读一天的会议列表。题目清单很广,涉及的行业也很广。它可以是像“奇异期权风险的神经网络这样具体的东西,或者是一个甚至会让你爷爷感兴趣的标题,比如“人工智能的下一个十年”。Nvidia 强调了一些会议,但除此之外,你还可以在议程中找到自己的方式,找到让你着迷的东西。
米罗普斯要去哪里
随着每天越来越多基于人工智能的系统投入生产(终于!),MLOps 每天都在变热,GTC 议程也不例外。MLOps 是由 WWT 在他们的谈话中提出的,是关于进化还是*消失的问题。他们共享一个模板,说明这种演变在组织内部应该如何发生,逐步采用 MlOps,不仅在专注的团队中,而且让每个人都成为其中的一部分。有这么多关于 MLOps 的说法,有时它进入了我们都想去的天堂,但不知道它看起来像什么。这就是为什么我特别喜欢 Moses Guttmann 在 ClearML 会议上的演讲,他向展示了地球上的 MLOps 看起来是什么样子:在你的机器上创建一个模板训练,让它在本地工作,然后只需将该模板部署到远程机器上,进行多次实验,搜索超参数的最佳组合,尝试不同的数据集,所有显示的内容都直接使用 ClearML 共享他的屏幕。正如 Nick Elprin 在 J & J talk 上说的那样:**请不要试图自己建造所有的基础设施!*这是一个很有吸引力的问题,但是你的工程师专注于你的企业特有的问题会更有价值”
摩西·古特曼为他的会议创造了一些好的迷因。来自 Nvidia 会议的照片
ML 框架的发展方向
如果 Nvidia 本身是一个工具,那么像 TensorFlow 和 PyTorch 这样的 ML 框架就是让我们使用另一个工具的工具。这些框架在去年经历了疯狂的发展,试图跟上学术研究和行业趋势。API 变得越来越大,ML 学习模型不再由代码和权重来定义,而是现在的 模型=代码, 正如 sou Smith chint ala 在这个演讲中所展示的。除非模型稳定在某个稳定的架构中,否则我们不会在专用硬件上看到太多的发展,尽管这不会发生, ML 框架必须跟上高速的变化。 Soumith 揭示了,如果通过先验的数据有效模型最终成为一切,那么 ML 实践将包括将知识主体的先验应用于特定案例,就像现在律师工作时所做的那样。
Keras 和 tensor flow 的未来五年的方向确实是将 priors 库民主化,试图通过创建一个可重复使用部件的生态系统来改进 UX 设计以提高生产率:计算机视觉问题的 KerasCV,语言问题的 KerasNLP,甚至“反重力应该像进口反重力一样简单”。ML 框架的最终 UX 设计只是一个提供用户数据集和优化指标的 API,算法将为用户做一切事情。用户工作将集中在问题规范和治疗数据集。深度学习应该对每个人都是真正可能的,因为今天的任何人都可以制作一个网站。在 PyTorch 的状态会议上,同样的重点放在了更好的前端 API 愿望上,他们宣布了一个非常有趣的版本: **PyTorch profiler,**它将让我们在 Tensorboard 选项卡上看到模型及其不同层的性能分析。
研究的方向
更多的学术研究也在 GTC 占有一席之地,卷积网络之父 Yann LeCun 提出了自我监督学习的基于能量的观点,既介绍了基于能量的模型如何工作,也介绍了它们如何用于 SSL。Sepp hoch Reiter(他提出了消失梯度问题)介绍了现代 Hopefield 网络,谈论了它们如何工作,以及它们如何被集成以充当**“带记忆的深度学习”**。以方程式和积分为特色的这些绝对不是你想以 1.5 倍的速度观看的那种演讲。
行业的发展方向
业界是如何采用这么多 AI 开发和发布的工具的?GTC 会议是一个很好的机会,可以直接从创造者的口中听到行业趋势。
会议在哪里举行
在封锁期间,虚拟会议比以往任何时候都更加突出,它的强制和快速采用为许多使用人工智能的创新解决方案打开了大门。自动检测有人举手要求关注,实时语音到文本的转换和不同语言之间的翻译,甚至让人工智能总结呼叫和讨论要点,这些功能都将破坏我们在虚拟会议上的体验。
零售业何去何从
在开始谈论这个行业之前,需要强调的一点是,根据专家在电话中的说法,人工智能的目的不是取代人类的认知能力,而是相反,增强和自动化最适合机器的任务(这是一个长期的辩论,你可以同意或不同意这个论点)。无论是简化复杂的任务,还是在人类失误高于机器的单调活动中减少失误。这里是一些应用人工智能最相关的领域,从价格优化、异常检测、流程自动化、产品推荐、人工验证、库存盘点和用于客户关怀的聊天机器人开始。
汽车行业的发展方向
尽管人工智能机器人制造汽车看起来很特别,是下一级创新的例子,但这已经是过去的事情了。为了给你一个接下来会发生什么的例子,你可以参考宝马的使用案例,他们已经在 Nvidia Omniverse 的工厂中做了一个 3D 数字双胞胎来训练新的机器人&人。是的,你没看错:没有现场培训,这将在时间和金钱方面产生巨大的开销,相反,他们利用这个 3D 双胞胎。这不会就此停止,因为这打开了一个的可能性世界,在那里可以测试工厂的变化,员工的新工作路线,硬件空间利用率,等等。
数字艺术和电影摄影的发展方向
借助惊人的渲染,一个伟大的生态系统和毫无疑问先进的人工智能技术,像 Adobe 和 Nvidia Omniverse 这样的公司正在改变数字艺术方面的世界。覆盖广泛用途的 Adobe Photoshop现在推出一项新功能,将语义分割提升到一个全新的水平,基本上你可以立即删除任何背景,甚至重建图像中以前没有的运动或地方,这是另一项人工智能技术 GANs 完成的。
但是电影摄影呢?这是一个令人兴奋的话题,因为它融合了许多人工智能技术,是应用人工智能的最具创造性的方式之一!对这种技术的偷偷窥视包括具有 3D 数字化的人类运动捕捉,其中它们包括拾取真实的人类姿势并输出 3D 虚拟角色,语音到面部表情,其中给定音频输入,它创建 3D 网格面部,与语音的情感和自动场景生成对话。所有这些为来自世界各地的热情的人们创造了一个完美的组合,让他们使用这种前瞻性的思维工具来表达他们的创造力。要看到这一点,你可以参考这篇演讲:Omniverse Machinima 简介
我们要去哪里
今年有这么多的发布,这么多令人鼓舞的演讲,在协助尤尔根·施密德胡伯在他的会议上做了精彩的人工智能历史回顾之后,人们怎么能不相信**我们已经非常接近奇点了呢?**我推荐听听加里·马库斯更保守的演讲,他提醒我们关于人工智能发展的许多先前失败的预测。我们一直被大数据和深度学习所困扰,这对学习有好处,但对抽象却不利。另一方面,经典的 ML 模型有利于抽象,但不利于学习。Gary 呼吁混合模型,因为我们需要一些方法来表示关于空间、时间和因果关系的知识,只有真正的推理和认知模型才能带领我们到达那里。
希望这篇简短的评论能让你了解 2021 年的 GTC。当然,这里还有很多其他值得一提的演讲,所以如果你想特别推荐一个,请发表评论!
我们是 eidos.ai,这是一个与创业公司和前瞻性公司合作的人工智能开发实验室。通过 info@eidos.ai 或我们的网站https://eidos . ai联系我们
[1]詹森厨房从去年到现在没有太大变化,勺子在同一个地方,盐和胡椒粉也是。所以我们可以说他做饭没做新 GPU 多。
机器学习在医疗保健领域的进展如何?
对已经完成的工作进行高层次的审视
上周,我写了一篇关于 Eva 的博文,Eva 是一个强化学习系统,希腊政府部署该系统是为了在边境监控和分配稀缺的 COVID 测试[2]。这个话题让我好奇机器学习在医疗保健中的其他用途。我四处搜寻,找到了一个关于自然的相对全面的观点[1]和一大堆关于这个主题的报告。恕我直言,这些信息足以让我发表一篇博文。
数据
你可能已经听到小道消息,机器学习是从数据开始的。在公共卫生领域,数据通常来自两个来源。
调查和政府报告
卫生部门和组织通过多种机制获取这类数据。他们可以被动地接受您的医疗保健提供商报告的数据(上次您看医生时,他们是否会询问您除电子邮件密码之外的所有信息?).或者,他们可以主动向您的医疗保健提供者索取信息,例如在 covid 的情况下。
个人生成的数据
两个字:社交媒体。(还有 FitBit 数据之类的其他东西,但没那么朗朗上口)。最重要的是,这种类型的数据通常与地理位置相关联,并带有时间戳。然而,这种数据的非结构化本质带来了一系列挑战。
公共卫生中的机器学习
这个主题有四个子类别值得注意。
识别因素及其与健康结果的关系
这里有几个例子。ML 可用于确定影响疾病结果的遗传因素[3]。在其他新闻中,ML 已被用于定位登革热(一种蚊子传播的病毒感染)最严重的地区[4]。
干预设计
在这方面已经取得了一些进展。ML 已被用于解决抑郁管理[5]、减肥自我效能[6]、戒烟[7]和基于血糖反应的个性化营养[8]。
结果预测
天啊,这里已经做了很多了。是我还是这个类别感觉像是由 Kaggle 竞赛驱动的?下面是已经完成的工作的一个小例子。
2017 年,一组研究人员设计了一种多步建模策略来预测心力衰竭的再入院率,AUC 为 0.78,电子病历数据的准确率为 83.19%。这比当时 AUC 在 0.6-0.7 范围内的现有预测模型有所提高。[10]
同样,在 2018 年,为了绕过从标准化电子健康记录(EHR)数据中提取精选预测变量的劳动密集型任务,一组研究人员提出了基于快速医疗互操作性资源(FHIR)的患者全部原始 EHR 记录的表示。然后,他们表明,基于这些数据训练的深度学习模型可以实现高精度的任务,如预测住院死亡率、30 天计划外再入院、延长住院时间以及患者的所有最终出院诊断。[9]
此外,在 2018 年,一个深度卷积神经网络(inception v3)在癌症基因组图谱的整片图像上进行训练,以准确地将它们分类为 LUAD、LUSC 或正常肺组织,其 AUC 高达 0.97。根据作者的说法,这种表现可与病理学家相媲美。[11]
资源分配
嗯,Eva,一个分配稀缺的 covid 测试的强化学习系统,就属于这一类[2]。同样,在 2019 年,Chun-Hao change 和他的同事提出了一个深度强化学习(deep RL)模型,该模型在 MIMIC-III [12]上进行训练,MIMIC-III 是一个数据库,包含了 2001 年至 2012 年期间在 Beth Isreal Deaconess 医疗中心重症监护病房停留的 40,0 00 多名患者。对于这些患者,您需要进行测试来预测有害事件。然而,测试是昂贵的。通过学习最小化测试成本和最大化预测增益的策略,深度 RL 模型将测量总数减少了 31%。[13]
总结
我希望这篇文章对你有用。我喜欢写这篇文章,因为 ML 及其应用发展如此之快,课堂教学已经跟不上了。了解 ML 很酷,但对我来说,更令人兴奋的是了解它在现实生活中的实际应用。你可能已经注意到了,基于我的兴趣,我更喜欢某些话题。但是我包含了一些链接,以防有什么引起你的兴趣。
保持联系
我喜欢写关于数据科学和科学的文章。如果你喜欢这篇文章,请在 Medium 上关注我,加入我的电子邮件列表,或者成为 Medium 会员(如果你使用这个链接,我将收取你大约 50%的会员费),如果你还没有的话。下一篇帖子再见!😄
来源
[2] 希腊用强化学习遏制新冠肺炎的涌入
[3] 从全基因组关联研究数据推断风险因素和结果之间的因果关系
[4] 登革热的全球分布和负担
[5] 利用情境感知开发抑郁症移动干预
[7] 走向戒烟的移动健康干预
[10] 使用电子病历范围的机器学习对医院再入院率进行预测建模:使用西奈山心力衰竭队列的案例研究
[11] 使用深度学习从非小细胞肺癌组织病理学图像进行分类和突变预测
[12] MIMIC-III 临床数据库演示
http://proceedings.mlr.press/v97/chang19a.html
是什么帮助我成为更好的数据分析师
办公时间
我的博客之旅继续!
由于我将于今年 8 月开始我的 MBA 之旅,我将离开工作场所 10 个月。之后,我肯定会继续从事与数据相关的工作,所以我想总结一下我作为数据分析师的第一年里发现的真正有帮助的东西,也作为我自己的记录。网上有很多有用的资源,从中我学到了很多。因此,我尽我所能保持这篇文章的独特性和个性化,以减少重复。
在我深入探讨这些技巧之前,让我分享一下我对优秀数据分析师的定义,也就是说,我想成为什么样的人,以及过去几年我一直在努力达到什么样的目标。请注意,这可能与特定公司或一般市场对数据分析师的期望大相径庭。😃
回到 2019 年底,我在我的 LinkedIn 上写下了以下来自 Cabo da Roca 的惊人观点的新年决心(https://www . LinkedIn . com/posts/wenling-y-25146887 _ wordoftheyear-2020 resolution-activity-6618244271386447873-bz3D),在这里我已经有了一个在我看来怎样才算是一个好的数据人的大致想法。这些要点仍然有效:帮助利益相关者提出正确的问题,讲述好的数据故事,快速学习。
作者图片
在我的第一篇博文中,我分享了一些关于数据叙事的良好实践。在这里,我想扩展一些其他的技巧。它们是:
🧭找到了“指南针”关键绩效指标,当你产生新的见解时,用它们作为快速健全检查的基准。这允许在新的环境中快速学习。
🔢尽可能用数据备份自己。我的意思是…在我们的标题中有一个词“数据”,对吗?😉
⛳️从进球开始。一直都是。这有助于你发现自己作为数据人员的真正价值,而不仅仅是“编写查询、创建仪表板和发送电子表格”。
🙌建立你的责任感,把自己作为一个平等的、有能力的、值得信赖的商业伙伴,并从你的同事那里获得同样的责任感。
在数据的海洋中找到自己的指南针。
在与我现在的雇主共事的五年中,我和我的团队一起创建并共享了大量的仪表盘和报告,构建了一个全公司范围的 OKR 系统,为我们的董事会创建了一个回报计算器,我可以自豪地说,我已经成为最熟悉我们数据的人之一。尽管如此,我仍然每天都感觉到我在学习一些关于我们业务的新东西,因为我们总能找到一个新的视角来审视我们的数据。
在保持我们的质量标准的同时,驾驭这种复杂性,也就是说,使我们自己适应新的环境,并快速准确地为我们的利益相关者产生洞察力,这绝对是一个挑战。对我帮助很大的一件事是记住 5-7 个高层次的关键绩效指标,当我产生一些新的见解时,总是用它们作为快速理智检查的基准。
我如何决定要记住哪些 KPI?AARRR 框架提供了一个很好的方向:
- 收购:我们的总客户群有多大?每月获得多少新客户?
- 激活:我们的注册漏斗的转化率是多少?有多少客户每月至少注册一次?
- 留存:我们应用的第一天留存率(%)是多少?
- 推荐:有多少客户(%)是通过我们的推荐计划获得的?有多少客户(%)推荐他们的家人和朋友使用我们的产品?
- 收入:有多少客户(%)为我们的业务创造了收入?在过去 12 个月中,我们的平均月收入是多少?
注意**我们不需要记住非常精确的数字,而是数量级。**根据您企业的规模,对于绝对数字,我们可能只需要回忆它是 10K、50K、100K 还是 1M,以及 10%、50%还是 90%的百分比。这听起来熟悉吗?是的,这是费米估算的一个应用!
最后提醒:在一个快速增长的企业中,这些数字需要定期更新。😃
为什么这很有帮助?想象一下,现在我正在处理一个紧急的临时请求。我编写了一个查询来查看一个我以前从未查看过的客户群。查询输出表明,该细分市场的 70%产生了收入。等等——我记得在整个客户群中,这个比例应该大约是 15%。70%对 15%……听起来好得难以置信!我立即怀疑我的查询有问题,并很快发现我遗漏了一个 WHERE 子句。唷!我头脑中的 15%帮助我进行了快速的理智检查,并使我们避免了潜在的不准确的交付。
这就是为什么我把这些数字称为“指南针”——在海上旅行时,我可能不记得确切的坐标,但只要我知道南方在哪里,我就总能很快找到出路。
尽可能用数据备份自己。
我的头衔中有一个词“数据”,我知道它让别人对我有什么期望。即使我没有提供任何数据或见解,我也总是尽可能确保我的论点得到数据的支持。这里的“数据”一词并不一定意味着你必须知道确切的数字或数学公式。更重要的是指定你将查看哪些数据,以及如何使用它们来支持你的论点并做出更好的决策。
我想用一个面试问题作为例子来解释这是如何工作的。在一次面试中,有人问我如何帮助评估目录活动的效果。首先,我从开始将成功指标定义为活动的转换率,即收到目录的人中有多少人后来购买了产品。然后面试官问我,“听起来很棒。您如何确定哪些购买是由目录触发的?”—这实质上是数据的跟踪和收集。我建议我们在目录中嵌入一个促销代码,供用户在结账时输入,并使用该代码来识别目录接收者的购买行为。面试官点点头,又追着问了一个问题,“如果有的用户不使用推广码怎么办?”我回答说,“我们可以应用一个归因窗口,也就是说,我们将目录发送后 X 天内收件人的所有购买行为归因于该活动的购买行为”——这就是人类逻辑发挥作用以覆盖数据跟踪的局限性的地方。面试官同意了这个提议,并问了最后一个问题,“你如何确定 X?”。我说,“我会查看类似活动的历史数据,以此作为基准。如果我看到这些收件人 90%的购买是在目录发送后 14 天内完成的,那么我会将 14 天作为归因窗口,因为这样我就可以覆盖至少 90%的转化。如果没有可用的历史数据,我会设计一个小规模的实验来收集数据。
我真的很喜欢这个面试问题,不是因为我得到了所有的分数,而是因为它像日常生活中与同事的对话一样自然,它涵盖了使用数据支持决策的简单流程。根本不需要复杂的计算。😃
从目标开始。一直都是。
当我开始担任初级数据分析师时,我认为我的首要任务是准确地提供人们对我的要求。如果有人来找我要月度销售报告,我会确保提供准确的数字——不是月度客户数字,也不是每日销售趋势,而是我们每个月完成的确切销售额。
没过多久,我就觉得这可能不是最好的工作模式。有时人们要求每月的销售报告,我给了他们,我们都很高兴。然而,第二天他们又来问我“嘿,实际上我需要这份报告来为我们的销售代理设计一个新的奖金方案。我们可以按代理人姓名细分吗?”肯定的!但是,如果我能事先很好地理解我同事的目标,以便我们能在第一次尝试时一起提出更好的解决方案,那不是更好吗?
有时我也会收到一些请求,这些请求在最初的形式下并不完全有意义。为此,我可以分享一个更具体的例子。在我们目前的设置中,我的团队负责帮助产品经理为他们的功能设置成功指标和数据跟踪。有一天,一位 PM 找到我,让我实现一个后端事件,当某个文档被发送给用户时就会触发这个事件。我和他一起做的第一项检查是看他希望通过跟踪来衡量什么 KPI。原来,他想看看那些在他们的帐户中看到该文档的用户中,有多少人会采取某种行动。然后我向他解释说,我们实际上已经有了一个前端事件来跟踪用户对该文档的查看,他建议的新后端事件是不必要的,它不会帮助衡量他想要查看的 KPI(因为它跟踪的是发送操作而不是查看操作)。我的同事最终采纳了我的建议。通过这样做,我实际上没有交付我的利益相关者要求我做的事情,但是我交付了任何价值吗?我觉得可以!我帮助我的同事澄清了围绕 KPI 定义的一个误区,并为我们节省了一项需要耗费工程能力的任务——就像每个初创公司一样,我们在这个问题上面临着非常严重的资源限制:)
由 Munkhtuvshin 拍摄。上的 T 开启
我从这个例子中得到的启示是,作为一名数据人员(无论是数据分析师、数据科学家、数据产品经理……所有这些与数据相关的非工程角色如今似乎越来越模糊),有时你不是通过完全执行他们的愿望,而是通过帮助他们实现最终目标,来为你的同事和你的企业创造价值。首先,与他们一起思考他们的真正目标是什么,而不是一开始就接受他们的要求。实际上,我会引用我的一位主管的话,“初级数据分析师和高级数据分析师的区别在于:初级数据分析师总是做他们被告知要做的事情,而高级数据分析师则不会。”
关于这个主题的最后一个加分点是:理解你的利益相关者的目标,即你提供的数据或见解将如何帮助他们做出决定,以及他们是什么样的决定,这绝对有助于你理解你作为一个数据人的真正价值,并增强你的信心。你的真正价值不是通过你交付了多少仪表盘或分析来证明的,而是通过你的交付物对业务成果和用户体验的影响来证明的。
建立你作为一个值得信赖的商业伙伴的责任感。
我们已经在很多地方看到和听到“利益相关者管理”这个词——实际上,说实话,太多了,我开始有点厌倦它。😅互联网上有许多关于这一领域的精彩内容,所以在这里我只想分享两件事,作为一名数据人员,我发现这两件事对于赢得利益相关者的信任非常有用。在我的第一篇博客文章我如何用数据讲故事中,我提到了一个技巧**“彻底了解你的数据”作为保持人们对数据信任的一种方式**,我在这里分享的两件事会更加通用,也可以转移到其他职业。
一件事是在进行大型分析或项目时,让你的主要利益相关者充分了解主要的里程碑和障碍。“大分析”指的是这种类型的分析,通常有:1)探索性和开放式的研究问题,2)源数据质量的高度不确定性,因此可交付性(记住——垃圾进,垃圾出😉),以及 3)相当长的交付时间线(例如,> 1 周)。
在这种情况下,我通常做的是**与我的利益相关者一起安排时间表上的 2-3 个接触点,在这些接触点上,我简要描述了我们所处的位置、我们已经取得的成绩以及我们面临的障碍。不一定要开会,一封简短的电子邮件也可以。这个接触点的目标不是简单地让人们知道“嘿,我们正在做我们的工作”,而是寻求对我们的方法和交付的即时反馈,以及在我们遇到困难时寻求支持。通过这样做,不仅我的利益相关者,而且我自己都将拥有更大的交付透明度,更大的适应范围的灵活性,更有价值的改进反馈,以及更多的支持(如果我们需要的话)!最终,我们将一起做出更明智的决策。**
我发现的另一件有价值的事情是,永远保持闭环。每天,我们都会提供新的见解和数据,进行精彩的交流,新的想法和反馈会出现在我们的桌子上。在一个快速变化的工作场所,很容易失去踪迹,并以未解决的积压工作结束——这让我感到没有成就感。因此,大多数时候我确保我的可交付成果得到了反馈或认可(至少对那些有高层次目标的人来说)。如果我提供了任何见解或数据,而不仅仅是发送了一张 excel 表或 PDF,我会随时征求反馈(例如,“如果您还有任何问题,请告诉我们”),并且在我得到确认的“是的,我们现在没有任何问题”之前,我不会认为任务已经解决。这有助于我保持可维护的积压,因为我知道几乎没有任何债务,只是有更多的新想法有待探索。最终,这有助于我的工作模式的效率和可靠性,因为我不必担心有一天一些未解决的任务会像地雷一样突然出现并阻碍其他交付。
事实上,这不仅是为了树立我作为一个平等、有能力、值得信赖的商业伙伴的形象,也是为了让我的同事对我有同样的责任感。这个过程绝对不容易,但我相信最终这有助于在我和我的同事(至少是那些目标一致的人)之间培养强大的信任和纽带。
就是这样!
一如既往,让我知道你是否觉得这有用或分享任何反馈!
是什么帮助我们在一家金融科技初创公司建立了强大的自助分析
行业笔记
培训我们的内部用户成为有效和负责任的数据内容消费者(和创造者)
由城市教会克赖斯特彻奇在 Unsplash 上拍摄的照片
我在以前的工作中做过的最自豪的工作之一是,我们在组织内部建立了强大的自助服务分析。
为了避开围绕自助分析的所有讨论,一个非常简单但有力的论点是,很长一段时间以来,只有两个人(我和另一个 BI 分析师)的 BI 团队是一个 300 多人的组织的数据“大脑”,也就是说,几乎所有内部决策和外部投资者报告的数据都来自我们的 BI 平台。
我们成功做到这一点的关键原因,或者引用一位同事的话,“你们正在做其他创业公司需要 10 名分析师团队才能做的事情”,是因为从很早的阶段起,我们就开始培训我们的内部用户成为有效和负责任的数据内容消费者,其中一些人还是创造者。通过这样做,大多数首要问题(例如,这个月的销售额是多少?)可以由内部用户自己回答,只需很少或不需要 BI 团队的帮助,我们的 BI 团队可以专注于为二级问题生成更深入的见解(例如,为什么本月的销售数字下降了?)更重要的是,在整个组织中培养数据文化。
如果我曾经对构建自助分析的重要性有过任何怀疑,那么我最近在 INSEAD MBA 项目中的经历应该已经消除了这种怀疑。当我发现一门名为“不确定性、数据和判断”的核心课程完全是关于应用统计学(相关性、假设检验、回归等)来回答现实生活中的商业问题,并且我们被鼓励(尽管不是强制要求)使用 R 来解决我们的商业案例时,我感到非常惊讶——嗯,我没想到在离职后这么快就有机会开设 R studio😃。另一个惊喜即将到来,那就是我们将会有另一门名为“管理客户价值”的核心课程,我们将会使用 Python 进行细分分析。这两门课程清楚地告诉我们一个不可再忽视的趋势,即从数据中做出合理判断的能力不应再是一群头衔中带有“数据”的人的特权。相反,这种权力应该民主化,每个需要做出商业决策的人都应该有权根据高质量的数据做出高质量的判断。
受这两门课程的启发,我决定回顾一下过去五年在一家金融科技初创公司构建自助 BI 的经历,并分享一些思考。
在深入讨论细节之前,我想再分享几个支持性统计数据,来说明为什么我认为我们拥有强大的自助式分析:
- 当我离开前雇主时,我们是一个 300 人的团队,其中 200 多人在我们的 BI 平台上有一个活跃的用户账户(我们使用 Superset 和 Mixpanel)。
- 我们的用户遍布组织的所有级别和所有部门——无论是市场营销还是销售、工程师还是 UX 设计师、初级经理还是高管。
- 在 Superset 上,我们有 2.7K 图表和 200 多个仪表板,涵盖了我们业务的所有方面。
- 随着时间的推移,越来越多的内容由非 BI 用户创建。据我所知,最近 30 天内创建的仪表板中有 50%是由 BI 团队以外的用户创作的。
事后看来,我认为我们在克服共同挑战和不断改进工作方面做得很好。
📍将 BI 职能定位为一个可靠的业务合作伙伴而不是服务台。
🎬创建一个有利于商业的商务智能词汇表来帮助新员工。
👟期望管理是成功培训的关键——对 BI 团队和内部用户都是如此。
🌱不断指导你的同事帮助他们提高技能,成为你的数据盟友。
定位:BI 职能部门是可靠的合作伙伴,而不是服务台。
虽然没有在任何工作场所的文件中正式说明,也没有作为标语挂在墙上,但我相信,当我作为第一个 BI 人加入公司时(并且在相当长的一段时间内),我对 BI 职能的理解绝不是服务台或接收订单并简单地给你所需数据集的图书管理员。相反,BI 职能应该是业务利益相关者的可靠伙伴。
服务人员和合作伙伴之间的主要区别在于,合作伙伴并不总是对所有请求都答应。如果需要的话,伴侣会挑战你,并试图征求我们需要的真正见解,而不是照字面理解你的话,好像它们是要实现的最终要求。
向内部数据用户明确这一定位至关重要— **它提醒他们,他们的请求与他们有利害关系,在某种程度上,数据/见解交付的质量以及解释在很大程度上取决于他们的数据素养。**换句话说,为了做出高质量的决策,他们需要高质量的判断,而高质量的判断需要高质量的数据/见解,这反过来又要求他们提出高质量的问题。此映像的出现为构建自助服务分析奠定了基础。
我在之前的文章 中分享了一个将此付诸实践的例子,它帮助我成为了一名更好的数据分析师 。每次当你或你的团队接到某人的要求时,不要把他们的要求当成是他们如何提出的,而是试着和你的同事一起思考他们真正的目标是什么。
入职:为新员工创建一个业务友好的商务智能词汇表。
我想分享作为我们自助服务分析基础的文档——BI 词汇表。它既不是一个指标层定义,也不是一个领域页面,而是一个面向业务的关键指标和公司术语的访问页面,特别是对于新加入者(不仅仅是 BI,还有其他团队)。
它按字母顺序排序,每个条目如下所示:
作者照片
- 定义:我们通常包括行业范围的通用定义(因为新加入者可能对通用定义相当熟悉)和公司特定的定义。
- 公共 KPI:这里我们包括一些与这个实体相关的指标以及一个仪表板链接。注意,这并不取代我们的度量定义(用 dbt 维护),并且应该与度量层保持一致。因此,为了减少更新的频率,我们只包括 2-3 个最常用的 KPI,它们不会轻易改变。
- 内部链接:这里我们链接到真实的来源,也就是一些领域定义页面。请注意,该页面并不旨在成为领域知识的真实来源,而是为新加入者提供一个不那么令人生畏但更有利于业务的关键实体的页面。
培训:期望管理是关键——对 BI 团队和内部用户都是如此。
像其他公司一样,我们定期组织培训计划来教我们的同事使用我们的 BI 平台,例如,他们应该查看哪些数据集,如何创建可视化,如何编写简单的 SQL 查询等。
我从一开始就注意到,尽管许多参与者表示他们对数据感兴趣并注册了培训,但他们中很少有人能真正参加培训或真正提高了技能。例如,在会议结束后,我仍然会收到参与者提出的本应由他们自己解决的问题。不是说任何人在他们的热情上撒谎,愚蠢或懒惰,我相信更好的期望管理会带来更好的结果。
更具体地说,这些实践可能是有帮助的:
- **将你的训练内容分成不同的等级,以满足不同的需求。**并不是每个人都想成为数据专家,有些人可能只是想看看他们的团队仪表盘,大致了解一下他们的表现。不是每个人都有成为数据专家的天赋——有些人可能已经在 Excel 中苦苦挣扎了。因此,期望每个人从相同的培训内容中获得相同的价值是过于理想化的。为了克服这一挑战,我将我的内容分为三个级别,并为每个级别定义了先决条件和预期结果:1) 数据内容消费者从 Excel 的初步知识开始,并希望知道在哪里可以找到仪表板,并在完成级别 1 后阅读可视化;2) 数据内容创建者在 1 级之后开始,并被期望基于给定的数据集创建或转换简单的可视化以回答一级问题,例如,创建饼图以显示我们的用户的年龄分布;3) 高级数据内容创建者从第 2 级开始,如果他们想要更多给定数据集以外的内容,则需要创建高级可视化(如直方图、旭日图等)并编写简单的 SQL 查询。当宣布培训计划时,这些定义被明确地陈述,以便人们知道他们可以从每个级别期望什么,以及他们被期望做什么来达到那里。他们可以自由选择他们想去的地方。
- 清楚地陈述你的期望,并跟踪培训项目的成功。一旦我们定义了三个级别,我们还会为每个级别设计作业,并明确说明参与者需要完成作业,以便他们可以进入下一个级别。通过这样做,我们确保只有那些真正热爱数据的人才会留在这个项目中。此外,这也有助于 BI 团队跟踪项目的成功。如何温和地执行这确实是一个挑战,坦率地说,随着团队的成长,我发现很难执行。
建立关系:不断指导你的同事,帮助他们提高技能,成为你的数据盟友。
我们自发开始做的一件事是每周与关键数据用户进行接触。后来,当团队有了新的领导者时,这正式成为每周数据诊所。我们在这里做的一些例子:
- BI 团队分享最近的见解,这些见解可能会引起更广泛的受众的兴趣,而不仅仅是请求这些见解的人。例如,负责客户满意度的产品经理最近要求我们分析为什么留存率下降,然后我们发现这与一个新的货币化功能有关。这将是一个完美的话题,在更广泛的一轮讨论中涉及到货币化项目经理。
- 我们与项目经理、UX 设计师和工程师一起审查产品仪表规范,并就活动名称、活动属性、KPI 定义等提出建议。如果你感兴趣,这里是我对产品仪器仪表的学习总结。
- 我们为快速技术问题提供即时支持,例如,编写查询或创建可视化的困难。
确定潜在的高级用户/数据内容创建者并与他们建立良好的关系至关重要。这可以通过回答一些问题“谁通常会向您提出数据请求?”来轻松实现,“他们的问题有多深?”以及“他们对数据的熟练程度如何?”。一旦你确定了这些用户,当他们向你寻求问题或帮助时,给予他们更多的关注。随着时间的推移,他们可以发展成为事实上的 BI 人员以及他们自己团队中解决数据问题的关键人物。在我的前雇主,我们能够在营销、产品和战略方面发展这样的超级用户,他们帮助分享了一些本应属于 BI 的流量。😉
这里没有讨论的是工具和技术部分——我将在另一篇文章中分享我在这方面的学习和思考!
我在维罗纳大学教授数据科学的收获
针对教育工作者和自学的数据科学家的提示
在知识商品化、研究商业化的时代,如何学习
一张来自的照片&id = 236&tipo BC = 5&lang = en
半年前,我同意为自己进行一次小小的冒险。我的大学教授兼论文导师卢卡·迪·珀西奥邀请我加入我的第二个母校维罗纳大学的一个全新的数据科学学院的教学团队。几年前,我做过多次讲座和技术讲座,但从来没有对学生的长期结果负责过,所以我决定接受挑战。
通过写这篇文章,我的目标是:
- 教育家们正在寻找更注重结果的学术教学方法的替代品
- 自定进度的学生,他们的目标是取得成绩,并接受现实世界的评判,而不是同龄人的评判
我将数据科学作为一门学术学科、行业专业和商业领域的方法与大多数教育材料中流行的方法大相径庭。我是一名实践驱动型企业家,为了成为我所在行业的佼佼者,我获得了数学学位,这极大地影响了我的观点和教学方法。我认为这种观点对教育工作者和学生是有用的,他们看到数据科学领域的当前教育系统没有达到它应该达到的目标。
我邀请您参加本周四在俱乐部会所举行的讨论,思考这个话题:
https://www.joinclubhouse.com/event/PNzJO11K
开始前我就知道的问题
https://www.azquotes.com/quote/1447564 在这篇文章的主题中引用了彼得·泰尔的一段相当激进但却非常真实的话
我本人在乌克兰和意大利的两所大学获得了学位,并自学了多门欧美 MOOCs 课程,因此我非常明白,大学不是万能的,也不会让你为现实生活做好准备。然而,我喜欢这个想法,现代大学:
- 吸引并建立一个由专注于单一领域的人才(学生、研究人员、教师)组成的社区
- 给你一种独特而深刻的知识,这是用其他教育材料或短期课程很难获得的
现实是不同的,尤其是在数据科学中,作为科学、工程和商业交叉的新学科:
- 数据科学项目吸引了 a)学者、b)行业专业人士和 c)工程师,他们都被相似的趋势团结在一起,但几乎拥有正交的知识、技能和心智模型
- 大多数教育项目要么 a)遵循“经典”的统计学习书籍,要么 b)“酷而新潮”的博客,两者都被商品化并被 MOOCs 和在线教育者广泛访问和解释
简而言之,这个系统没有给出它所承诺的东西,在这场游戏中,每个人都是输家:政府(输掉了科学竞赛)、企业(无法参与全球竞争)、大学(失去了人力资本),当然,最重要的是,失去了生命年数的学生。
我决定改变的是
我在维罗纳大学学习的课程叫做“编程”,旨在为学生将来学习统计学习、数据库等课程做准备。我已经将一学期课程的目标设定为:
学生了解计算机科学和科学计算的基础,并准备好独立创建简单而有用的终端客户数据驱动的解决方案
为了实现这一点,我将课程分成了 4 个逻辑块,并根据每一个逻辑块来评估期末项目:
编程基础校准
即使跳过这些步骤很有诱惑力,但这只会损害而不是促进职业发展。图来自https://explain programmer humor . com/post/184600929440/skipping-steps
在这门课上,有来自经济学、物理学、应用数学、计算机科学和其他系的学生。我决定确保在几周内每个学生都能打开并研究任何类型数据的主要属性:表格、图像、文本、声音等等(当然是真实的数据集)。为了做到这一点,每个实验环节我都进行小规模的实时编码,在这里我可以跟踪每个人是否可以在 15-20 分钟内打开并使用任何类型的数据集。我使用了你可以在 Kaggle 找到的基本数据集,包括 Numpy、Pandas、OpenCV 和 Matplotlib。
计算机科学和科学计算
然后,我想直观地了解我们在上一节中所做的数据分析在幕后是如何工作的:
- 首先,我们致力于广义上的数据结构:从内存和不同变量(变量、熊猫数据帧、张量)如何存储到列表、哈希表和树,以及实际用例和从头开始的实现
- 然后,我们研究了经典的算法(排序和搜索);机器学习算法,这些算法通过循环和 Numpy 支持的向量化实现,并比较了不同情况下的性能
我推荐以下材料:
https://www.labri.fr/perso/nrougier/from-python-to-numpy/ https://www.coursera.org/specializations/algorithms
以人为本的软件开发
学术界的典型软件开发,插图来自https://blogs . egu . eu/divisions/GD/2018/09/19/reproducible-computational-science/
在学院中编写的代码是众所周知的噩梦,所以我专门用了一整块来介绍 OOP,并在几个场景中实践它:
- 重构现有代码:实现线性和逻辑回归,并围绕它们构建类层次结构
- 从头规划项目结构:使用 ide 代替笔记本来构建项目,定义库需求,创建 UML 图
结合我的实用技巧和诀窍,我主要遵循了两个很棒的演示:
当然,我已经展示了最好的开源项目是如何组织的。
现实世界的解决方案
学术界和现实世界的另一个比较,插图来自https://twitter.com/phdcomics/status/604978904558792704
最后但同样重要的是,我想确保学生能够将他们的解决方案作为对其解决方案的最终客户有意义的东西来操作。为了解释什么是“有用的数据驱动产品”以及它通常是如何被创建的,我简单地介绍了一下:
https://pair.withgoogle.com/guidebook/ https://course.fullstackdeeplearning.com/
关于操作化,我提供了三种选择:分析仪表板、交互式 GUI 或 REST API。对于前两种 app,我推荐了 Streamlit,对于后者——Flask。此外,我还展示了解决方案的 dockerization,并将其发布在 Heroku 上。
结果发生了什么
我真的对项目的最终质量感到惊讶(以一种好的方式)——具有更深 CS 背景的学生用从游戏数据中学习的算法创建了他们自己的游戏;数学和经济学专业的学生已经开发了很酷的应用程序,用于分析他们朋友和亲戚的真实业务数据。我想提几个同意分享他们经验的学生的项目:
基于深度学习的披萨分类器
作者插图
乔迪·达尔·科尔索 ( LinkedIn , Email )对算法进行了最深入的研究,并开发了一款应用程序,使用最先进的深度学习模型从照片中识别披萨的成分。看看资源库中的源代码和算法的使用是如何组织的。没有和披萨相关的项目就没有好的课程:)
影响者的社交媒体图表分析
作者插图
Marta boni oli(Linkedin, Email )专注于非常实际的应用——基于社交图谱分析为每家公司找到合适的影响者。她开发了一个工具,你可以进入你的目标公司,它分析周围的人的网络,并找到谁能最好地推广他们的产品!
推特情感分析
作者插图
Hunter Paul Youngquist(Email)也关注了 Twitter,但更多的是在情绪分析的角度。根据配对指南,他找出了黑盒解决方案的典型问题,即没有给用户提供反馈和解释性能的机会,并在他的应用程序中解决这个问题。也来看看他的知识库吧!
亚马逊销售预测
作者插图
Martina Urbani ( 电子邮件)使用了一家真实零售公司的数据,该公司通过亚马逊开展业务活动,并建立了一个交互式仪表盘,提供实时分段分析、分析佣金以及预测销量。这将有助于企业主做出正确的战略决策!
如果你认为他们能帮助你应对挑战,请随时联系他们;)
我能做得更好吗?
尽管整个课程进行得非常顺利,但我觉得有两个时刻我绝对可以做得更好:
线上和线下互动
在课堂上讲课时,如果学生专注于材料,我至少可以感同身受地理解,离线时很难做到。在接下来的课程中,我想尝试:
- 互动 ML 操场,不需要太多的编码,在那里我可以看到关于进度和理解水平的即时反馈。
- **邀请客座讲师或“客户”**与学生一起探讨一些特定的话题。正如我们所见,这在俱乐部会所中效果很好:)
- 团队项目——非常明显的游戏,但我在课程中完全忽略了它
强调基础
我只有相当有限的时间来深入研究科学计算和计算机科学基础,我发现这些非常重要。在我解释完之后,我认为像 Coursera 那样用自动评分练习来检查理解是很棒的。每周自动给深奥主题的练习打分肯定会对理解 cs 主题产生更积极的影响。
结论
我想用我对学术教育未来的观点来结束这篇文章。随着知识 变得商品化和研究变得商业化,大学需要定义一个新的甜蜜点,在这个点上它们可以保持独特性,并在某种程度上成为精英机构。也提醒关于会所聊天即将到来;)
https://www.joinclubhouse.com/event/PNzJO11K
首先,我认为,大学应该建立并保护对基础研究活动的垄断,这需要形成独立的思想家,专注于非常狭窄的科学前沿领域,但对重要的世界问题有广阔的视角。我在我的课程中通过数据科学顾问的心智模型强调了独立的概念,数据科学顾问负责以表达的指标来表示业务结果。在科学领域,这有点不同,在保罗·格拉厄姆的博客中有更好的描述:
第二,我认为,为了在教育和应用研究方面与机构竞争,大学需要参与进来,对结果负责,减少对政府拨款的依赖(政府拨款应该只用于基础研究)。基于大学应用研究、商业和技术加速器的风险投资衍生产品,以及与具有明确 KPI 的行业的合作伙伴关系可以给学术界带来所需的推动力,使其走出停滞状态,注入新鲜血液。
第三,科学又要变得性感了。如果爱因斯坦生活在我们这个时代,他的 Instagram 肯定是最受欢迎的,但正如我们今天所看到的,科学家甚至没有进入前 1000 名。诺贝尔奖并没有真正做好,因为如果你问一个随机的人,他们是否知道任何获奖者,他们会提到和平或文学天才,也许是经济学家,但物理学家不会是第一个。我个人很喜欢尤里·米尔纳和他的突破计划,我们确实需要更多这样的东西:
**https://breakthroughinitiatives.org/initiative/3
附言
如果你觉得这个内容有用,有观点,可以在 Bitclout 上支持我。我对技术教育领域的讨论和合作持开放态度,你可以在脸书或 LinkedIn 上与我联系,在那里我会定期发布一些人工智能相关的文章或新闻观点,这些文章或观点对于媒体来说太短了。**
我从编写谷歌代码中学到了什么
如何加速您的编程开发
杰米·哈根在 Unsplash 上的照片
介绍
我在大学四年级的时候用 Java 从头开始复制了一个 Google 风格的搜索引擎。在整个学期中,我花了 30 个小时完成了五个单独的作业,在课程的最后两个星期,我花了 100 多个小时以四人小组的形式完成了课程的最终项目。
我现在是在宾夕法尼亚大学获得数据科学硕士学位前的最后一个学期。尽管它给我带来了难以置信的压力、睡眠不足和疲惫,但这门网络系统课程是我在宾夕法尼亚大学四年中迄今为止最有收获的课程。在四个月的辛勤工作和磨砺之后,我想不出还有什么比这更值得的了,因为我知道你从零开始建立了谷歌,一个每天都有数十亿人使用的系统。
我们建立了一个类似于 Spark Java 的网络服务器和框架,一个网络爬虫,以及一个可以独立分布在不同节点上的系统。我们以 4 人一组的方式完成了这个学期的工作,用这些组件和其他一些组件构建了完整的搜索引擎。
到学期结束时,我们已经从互联网上抓取了超过 100 万个文档(遵守每个网站上的机器人排除协议),在词典和反向索引中索引了这些文档中的超过 1.4 亿个单词,并开发了一个 PageRank 算法来对我们抓取的所有文档进行排序。我们学习了如何在 AWS 上运行所有这些不同的组件,使用不到 400 美元的预算,通过 AWS 教育帐户信用。最后,我们创建了一个用户界面来输入搜索查询,并用我们的排名结果进行响应。
这篇文章的目标并不是要展示我通过这个课程能够完成的所有事情。我列出了我们项目的所有组成部分,向你们展示了我在四个月的编程中所能完成的工作。在此之前,我做过的最大的项目是用 Java 创建国际象棋。如果你愿意努力,不要怀疑你能完成什么。
我的目标是鼓励你考虑做一个你感兴趣的项目,这个项目感觉非常困难,甚至是不可能的。到最后,你会创造出一些不可思议的东西,这是值得的。如果你不感到不舒服,不为自己设定很高的期望,这种类型的成长机会是不存在的。
我学到了什么
如何阅读文档
作为一名程序员,最有用的技能之一是阅读库文档并使用它实现代码的能力。
给定语言中不同库的文档质量差别很大。当你在一个大型项目中工作时,你将会使用大量不同的库。这有助于您了解这种多样性,并培养您阅读各种形式的文档的能力。
到项目结束时,我们已经使用了 20 多个不同的 Java 库。整个小组会议甚至几天的时间都用来熟悉如何在一些更复杂的库中编写高效的代码。我现在非常自信,我可以有效地学习任何我想使用的库。
如何谷歌编码问题
与阅读文档类似,我们花了大量时间在谷歌上搜索我们面临的错误以及某些事情是如何工作的。作为一名程序员,学习如何将正确的搜索查询写入 Google 是一项必要的技能。
这些问题从我们无法解决的错误信息到如何更有效地运行我们的代码。代码效率的第二个问题不是您在处理小规模项目时通常会遇到的问题。
当你在从事一个大型项目时,比如搜集 100 万个文档或索引超过 1.4 亿个单词,理解代码效率是按时完成项目的必要条件。诊断代码的哪些部分没有像你希望的那样快速运行,然后在网上找到解决方案,这是一项重要的技能,大型项目可以让你提高这项技能。
如何与团队合作
另一个需要培养的关键技能是你在编码时的团队合作能力。如果你想成为一名软件工程师或数据科学家,你必须能够在团队中有效地工作。虽然没有必要为了一个个人项目而在一个团队中工作,但是如果你有几个人想加入你,这绝对是一个强烈的建议。在这些大型项目中,团队合作还有一些额外的好处。
第一个好处是你的整体面试体验。在行为面试中,大多数公司都想知道你在团队中的表现如何(因为当你为团队工作时,你也将在团队中工作)。拥有令人印象深刻的经历,比如在团队中参与一个具有挑战性的项目,对这些对话非常有帮助。
另一个好处是,你将学会如何有效地向人们传达技术想法。在从事大型项目时,需要做出许多设计决策。在与你的小组开会时,你有机会表达你对如何实现项目各个方面的看法。有效地讨论技术想法是一个非常有用的工具,无论是在倡导你自己的想法的背景下,还是在讨论你对队友想法的看法的背景下。
你也有机会使用像 git 这样的版本控制工具。版本控制是大多数程序员必备的技能。理解如何和队友一起为同一个项目编写代码,不是你一个人能够自然而然学会的。
最后,当和一群人一起工作时,工作会更愉快。独自在一个项目上花费数百个小时不如与他人交流和集体朝着一个重要的目标努力有趣。
如何对项目资源进行预算
并非所有的大型项目都必须有货币成本。如果是这样,了解如何管理这些成本还有一个额外的好处。如果这个项目没有任何金钱成本,你也可以学习如何有效地安排你的时间。
AWS educate 向所有去合作大学学习云计算平台的学生提供 100 美元的免费学分。当我们在谷歌项目上工作时,我们的四人小组明白我们有 400 美元的综合预算来明智地在 AWS 上花费以完成项目。
除了用于爬行和索引的并行 EC2 节点,以及用于运行索引和 PageRank 计算的 map-reduce 作业的 EMR 集群,我们所有的数据都存储在 AWS 上。
为了有效地预算我们的资源,我们在一起工作的两周内举行了多次会议。这些会议涉及我们计算什么机器我们可以使用,既完成项目的时间,也保持在我们的预算限制。这种类型的成本与效率规划不适用于小规模项目。
作为一名学生,我也不得不预算如何度过我的时间。这学期我还选修了其他五门课程(包括其他三门研究生计算机科学课程)。这门课程所需要的时间让我重新思考我是如何度过我所有的时间的。我完全改变了我安排时间的方式,以及如何处理我拖延的冲动,以便每周为这个项目腾出时间。
我喜欢编码
在这门课之前,我曾怀疑自己喜欢编码。我从未能够检验这个理论。我喜欢做我的计算机科学作业,并且非常确定我想在毕业后从事数据科学工作,但我不确定这是否是正确的道路。
在完成这个项目后,我意识到我不仅喜欢编码,我热爱它。在四个月的时间里,我在这个项目上工作了数百个小时,这向我展示了我热爱编码,即使是在压力很大的时候,即使是在我不得不编码很长时间的时候,即使是在它导致我极度睡眠不足的时候,即使是在问题感觉太难克服的时候,甚至是在我不想继续编码的时候。第二天,我总是兴奋地醒来,继续处理前一天无法解决的问题。
我现在有信心毕业后会热爱我的数据科学工作。没有这种经历,你无法真正知道在艰难时期你会喜欢什么(我相信这是享受工作的关键)。我现在可以把编程称为一种激情,我很高兴我也可以把我的激情称为一份工作。
丹尼尔·伊德里在 Unsplash 上的照片
结论
在课程的最初几周,我不断告诉自己,“我真的应该放弃这门课程。我无法完成所有这些工作。”我们的教授不断鼓励我们,尽管工作量很大,但我们不会后悔选修这门课,我们会通过考试的。到学期末,我意识到他是对的。
作为程序员,我们太怀疑自己了。我们认为在开始一个新的编程项目之前,我们必须了解所有的事情。如果我们坐下来开始努力,我们会惊奇地克服挑战并成长。
这个项目完全改变了我对自己作为程序员的看法。我仍然认为我永远也完成不了我刚刚想到的那个非常酷的主意。然后我就对自己说,“我创造了谷歌。”我开始工作。我希望你有同样的燃料。过去几周你一直坚持的真正雄心勃勃的想法是什么?开始吧。你能做到的。你会成为一个更好的自己。
感谢您阅读本文,并祝您的雄心勃勃的项目好运。
我在 A 轮创业公司的数据分析师实习中学到了什么
这篇文章记录了我在数据分析师实习期间的 22 条经验和想法,希望能帮助你成为一名更好的初创公司数据分析师。
由 FunNow 拍摄的照片
在我即将飞回美国之际,我想这将是一个很好的时间来反思我在台湾台北的 A 轮市场初创公司 FunNow 担任商业数据分析师实习生的最后五个月。
背景
我叫 John(Yueh-Han) Chen,目前是计算机科学专业的大二学生,专攻数据科学、产品分析和用户增长的交叉领域。(在 Linkedin 上跟我打招呼)。)
由于 2020 年新冠肺炎在美国爆发,一切都在网上移动,我决定回来暂时呆在我的祖国台湾,那里比去年的美国安全得多。起初,Covid 看起来很失望,因为我失去了与我的朋友、同学和教授见面的机会。然而,一枚硬币总是有两面,对我来说这实际上是一个机会,因为人们仍然去办公室,公司仍然在台湾招聘。相比之下,许多美国公司因为 Covid 取消了许多实习项目。
我幸运地发现,FunNow 正在招聘实习生,这是我所钦佩的一家发展迅速的台湾初创公司。我毫不犹豫地申请了这个职位,花了几天时间更新我的 SQL、Python 和 Excel/电子表格技能,并通过了面试过程。幸运的是,我得到了实习机会:)
我的家乡,台湾台北。—蒂莫·沃尔茨在 Unsplash 上的照片
那么,现在有什么好玩的?
FunNow 是一个在亚洲各国进行休闲和娱乐活动的即时预订平台,包括台湾、日本、香港和马来西亚,并致力于扩展全球所有大城市。到目前为止,它已经积累了大约150 万次下载和 15 万个月活跃用户。
我实习期间都做了些什么?
我在用户运营团队,团队的总体目标是提高用户留存率,从而增加 GMV。因此,我所参与的一切都直接或间接地致力于提高用户保留率,包括构建每周仪表板、编写 SQL 来查询数据、分析和细分 VIP 用户、训练 ML 模型来提取可操作的见解、对客户忠诚度计划进行研究、实验设计以及进行群组分析。
因为有很多不同的任务,所以我决定把这 22 课分成 7 类:
1.数据分析:4 课
2.编写 SQL: 5 课
3.机器学习:3 课
4.仪表板构建:3 课
5.实验设计:2 节课
6.沟通/演示:3 节课
7.一般主题:2 课
好了,有了足够的背景信息,下面是我在这 5 个月的数据分析师实习经历中的 22 个教训、收获和想法。请享用。
关于数据分析的 4 堂课
- 大部分分析不加实值。先想想什么方向能带动最大的商业价值,然后一头扎进去。
在实习期间,我纯粹出于好奇做了 2-3 次分析,但都没有带来任何商业价值。主要原因是缺乏预先假设或对优化方向的清晰认识。所以,在这几个非增值的分析之后,我列出了几个在投入研究之前必须要做的事情,这些对我帮助很大。一个是从客户的角度思考是什么让产品难以使用。另一个是研究其他公司有哪些成功优化的,看看他们的案例是否适用于我们的案例。列出根据上述方法产生的想法,并探索和可视化每个想法的潜在投资回报率,然后深入分析以验证可行性。
此外,阅读关于增长战略和其他公司成功增长经验的书籍可以提高选择正确探索方向的商业指导。我的经理推荐给我的一本书是 Alistair Croll 和 Benjamin Yoskovitz 写的【精益分析】。它包括 6 种最常见的商业模式和选择相应的正确指标进行分析的建议,我认为这是一本非常适合初学者的书。后来偶然看到摩根布朗 黑客成长和肖恩·埃利斯 ,对我思考成长策略和优化有超级大的帮助。除此之外,陈楚翔和布莱恩·鲍尔弗的博客也是有益的。
《精益分析》的合著者之一 Alistair Croll 解释了什么是精益分析。
②。浏览数据时,使用自上而下的方法。**
找到一个方向之后,那么就可以跳到分析了。然而,仍然有一个陷阱。不要直接跳到细节上。
原因是分析必须提交给经理,而你和他们之间可能存在信息鸿沟。因此,解决这个问题的更好的方法是从一个更广阔的视角向一个更小的领域提供分析,这样他们就可以对研究有一个详尽的了解。因此,逆向思考,要让管理者和其他团队成员轻松把握整体,最好是呈现整体情况,然后逐渐转移到微观上的信息。
3。确保电子表格中的表格分析是灵活的。
无论是使用 Python、R 还是 SQL 进行分析,您都可以将分析结果导入到电子表格中,以便与您的团队共享。如果你决定以表格的形式呈现,你可以做一些结构上的调整。
就像我前面提到的,您的团队成员可能想要检查数据或进行进一步的分析。如果表格数据已经被手动调整了很多结构,团队成员进一步处理它将会非常困难(参见下面的例子)。因此,前车之鉴,我认为表格数据应该尽可能少的进行手动的结构性修改。
这是一个我手工过度调整结构的例子,所以其他成员很难进一步处理这个数据。(这些都不是真实数据。)— 作者图片
4。如果数据透视表能做分析,就用它。**
如果 Google sheets 中的数据需要结构上的改变,不要手工去做。请改用数据透视表。使用数据透视表有三个原因。这很简单,很容易检查,原始数据可以保持完整。再说,如果一个简单的分析任务都可以用透视表完成,为什么还要用 Python 或者 R 呢?
由多产橡树简单介绍数据透视表
关于编写 SQL 的 5 堂课
- 编写优秀的 SQL 代码最重要的是对数据库模式的理解。
在编写 SQL 之前,您需要了解哪些表包含您想要的数据、默认数据类型和键。如果这是分类数据,通常使用缩写,你应该知道每个缩写是什么意思。此外,这里最重要的是对表之间关系的理解,这将有助于您编写高效的 SQL 代码。
实习期间让我吃惊的第一件事是 FunNow 的数据库中有很多表(70 多个)。数据模式的复杂性受业务和产品的影响。有些公司有 100 多张桌子,而有些公司只有 30 张桌子。我还练习了许多 Leetcode 的 SQL 面试问题。其中许多在一个查询中只需要使用不超过 3 个表。不过我在 FunNow 的时候,一个查询用 5+的表超级普遍。因此,我认为在分析员工作开始时最重要的事情是充分研究数据模式,以掌握数据是如何组成和连接的。
2。不要改造机器。
在大多数情况下,除非你是公司的第一个数据科学家或数据分析师,否则有人可能已经编写过类似的 SQL 查询。所以要想拿到查询数据的手,最快的方法就是养成先查代码再写代码的习惯。这会节省你很多时间。
3。当共享您的分析时,请确保您附加了用于查询数据的原始 SQL 代码。
SQL 代码- 图片作者
两个原因。第一个是当查询很复杂时,您的同事可能需要检查代码的准确性。第二,其他团队成员或您的经理可能希望根据您的工作进行进一步的分析。因此,附加您的 SQL 可以帮助您的团队更快地进入下一步。
4。检查 SQL 查询结果是否准确的能力。
当查询不正确的数据导致你从分析中得出错误的建议时,你在团队中的可信度会大大降低。能够检查数据的正确性是 DA 或 DS 最重要的职责之一。在初创公司,由于人力短缺,人们可能不会一行一行地检查你的代码。因此,代码自检能力在创业公司中尤为重要。
通常,有几种方法可以获得可比较的数据。我以前会想可能是哪里出了问题,然后用其他表格来检查。另一种方法可能是使用以前的数据来推测查询结果是否有意义。
5。最小化 SQL 运行时间,但不要过度优化。
有些表可能有数百万行,不同语法中的细微差别可能会增加几分钟的计算时间。特别是当查询需要每天运行或者非常频繁地运行时,应该对它们进行优化。
我觉得有两个方向可以探索。一是你可能选择了一个低效的表。我正在编写一个查询,可以通过选择两个主列中的一个来完成:一个有 200 万行,另一个有 10 万行。我选择了 200 万,因为我认为代码会更简单,因为它需要过滤的相关表更少。然而,又花了 4 分钟。优化的第二个方向可能是调整语法。
https://www.sisense.com/blog/8-ways-fine-tune-sql-queries-production-databases/
然而,有些查询可能只需要运行一次或每几个月运行一次,而优化一分钟可能需要 3 个多小时,在这种情况下,就让它留在那里吧。
3 堂关于机器学习的课
- 使用决策树时,将贡献最大的数值变量分成更小的组,这样它们就不会被奇数分割成无限多的分支。
我在训练决策树模型的时候,转储了一个贡献度很高的数值变量(叫做 OrderPoints,见下图),它的取值范围是 0 到 10000。因为它与目标变量密切相关,所以模型将它分成几个小分支,导致一些奇数个分割点,如 8881.5 和 7495。然而,它的切割方式过于自发,很难察觉和提取洞察力。
决策树的一部分。- 作者图片
我的同事建议我预先处理这些数据,并将其分为 5 类,0–2000 属于第 1 类,2001–4000 属于第 2 类,依此类推。这使得数值变量变成了分类变量。然后,我可以使用一键编码方法来创建 5 个相应的列。就这样,我解决了这个奇怪的数字问题!
2。在选择贡献最大的变量时,我应该选择 random forest 或 XGBoost。
我构建决策树模型的原因之一是为了找到最有贡献的变量,因为它会在划分树的顶部位置显示主要变量。但是决策树有偏差,我当时是机器学习新手。如果我可以再做一次,我会选择随机森林模型并使用其 feature_importances_ 或选择 XGBoost 并使用其 xgb.plot_importance() 来查找重要性分数,因为随机森林和 XGBoost 都属于Ensemble方法。这意味着将计算许多树,然后将它们加起来得到平均数,这比单棵树的偏差要小。
**https://machinelearningmastery.com/feature-importance-and-feature-selection-with-xgboost-in-python/
3。随着许多 ML 过程将被类似 AutoML 的产品所取代,使用领域知识来生成新特性在未来将变得更加重要。
当使用实际数据来构建 ML 模型时,我发现最令人兴奋的部分是制作新功能,因为它需要直觉、领域知识、商业意识,有时还需要创造力来思考可以带来价值但无法通过数据库访问的潜在功能。
以网飞为例。DS 可能想了解是什么因素导致续订。DS 将创建的功能可能是已完成电影的比率(已完成电影的数量除以已点击电影的数量),或者每个用户都有一个标签,K-means 模型根据用户的去看电影类别分配该标签,等等。由于每家公司都有不同的商业模式,DS 想要探索的商业问题也会非常不同,这使得创造新功能的任务很难被机器取代。
这次实习结束后,我花了一些时间研究像 AutoML 这样的自动化 ML 产品是否会在未来取代数据科学家。我的研究总结是,尽管这些自动化的 ML 产品在特征选择、特征预处理、模型选择和超参数调整任务方面优于人类,但未来使用类似 AutoML 产品的数据科学家将腾出时间来完成这些任务,有更多时间思考业务,并应用他们的判断来更快地改善业务。数据科学家之死 AutoML 会取代他们吗?)。
人工判断部分包括定义业务问题,应用领域知识生成更有价值的特征,以及提取可操作的见解。简而言之,在这次实习后的研究之后,我学到的经验是,作为一名未来的数据科学家,我应该留出大量时间投入到业务方面,选择一个专注的行业,并随着时间的推移积累我的领域知识。
https://www.kdnuggets.com/2020/02/data-scientists-automl-replace.html
关于仪表板构建的 3 堂课
- 在构建仪表板之前频繁的沟通和起草。
我实习的第一个任务是制作每周仪表板。在创建优秀仪表板的所有因素中,我认为最重要的一个是与你的观众频繁交流,他们可以是你的队友、经理或高管。在 FunNow,我们使用 Metabase,一个开源的 BI 服务器来构建仪表板。仪表板中的每个图表都是由一个 SQL 脚本构建的,因此十个图表意味着幕后有十个 SQL 脚本。(虽然,我们也使用了一个更流行的工具,比如 Mixpanel,它在分析和构建仪表板方面更有效,但是没有 Metabase 灵活。我个人更喜欢使用 Tableau,因为它既灵活又高效,但对初创公司来说太贵了。)
如果最终的仪表板不是您的最终用户想要的,如果您使用元数据库,您可能会浪费时间安排不需要的布局或编写许多不必要的脚本。因此,创建仪表板最重要的原则是在创建之前起草并经常与您的受众交流。
这是我用来与经理沟通的草稿之一,确保它包含所有必要的数据和正确的图表。数据当然是可以想象的。— 作者图片
2。如果这两个数据组合在一起可以指示潜在的重要信息,则将它们并排放置,以便您可以轻松地一起查看它们。
例如,我构建的一个仪表板是跟踪每周 GMV(商品总值)。GMV 是 ARPPU(每个付费用户的平均收入)乘以付费 UU(唯一用户)的公式,也是 OrderCnt(订单数)乘以 AOV(平均订单值)的公式。直觉上,我首先以垂直的方式设计它们:我首先订购 ARPPU,然后支付 UU,然后 OrderCnt,然后是 AOV。
但真的很难看到 ARPPU 和付费 UU 之间的动态,或者 OrderCnt 和 AOV 之间的动态。因此,如果这两个数据结合在一起可以指示潜在的重要信息,将它们并排放置,这样您就可以像下图一样轻松地一起查看它们。
因为 GMV = OrderCnt * AOV,把这两个数据并排放在一起,观众很容易看出哪一个导致了 GMV 的变化。数据当然也是可以想象的。— 作者图片
3。本期与前期平均值相比的增长比仅显示平均线更直观。
例如,它可以是本周的 WAU(每周活跃用户)除以过去 8 周的平均 WAU。这比在折线图中只显示一条平均线或趋势线要好,因为通过这种方式,观众必须在心里计算出本周与过去 8 周的平均水平相比增长了多少。相反,使用当前时期与以前时期的平均值相比的增长率,观众可以看到数量发生了多大的变化。
2 节实验设计课
1。让实验尽可能简单。
在三月和四月,我们的市场部开展了一项活动,一下子吸引了许多首次使用 VIP 的用户。我所在的用户运营团队希望让这些用户不仅仅是一次性购买者,而是长期使用 FunNow。因此,我设计了一个实验,即首次购买 VIP 的顾客,只要订购了两件 VIP 特价商品,就可以享受独家折扣。其背后的基本原理是,如果他们能够尽快体验到 VIP 用户的好处,那么他们可能更愿意保持 VIP 身份。
由于我们是创业公司,而且我们的 VIP 身份是每个月计算一次的。所以,为了留住这一批第一次成为 VIP 的人,这个实验应该在月底之前进行。
然而,这却成了让这个实验没有我们预期的那么成功的原因。自从我们在四月中旬开始这个测试以来,一些第一次的 VIP 已经完成了购买一个 VIP 独特物品,一些没有购买任何东西。因此,由于有这两组首次 VIP,我们需要在推送通知软件 CleverTap 中设置两个应用内和推送通知轨道。每个曲目将有 5 到 6 个步骤,其中第一步是用户第一次打开应用程序,然后弹出通知,然后等到用户购买了一件 VIP 商品,然后发送推送通知,然后重复这个过程,直到他们完成购买两件商品。这使得实验更加复杂。
尼古拉斯·托马斯在 Unsplash 上拍摄的照片
在 4 月底,虽然我们发现这个实验比之前的统计多了 10%的首次 VIP 在第二个月停留,但我们发现已经购买了一个 VIP 项目的群体中约有 40%没有收到我们的应用内推送内容,这意味着他们甚至没有进入推送通知轨道,这表明如果这个实验没有出现故障,我们本可以让更多的用户留下来。然而,我们学到的一个教训是,让实验尽可能简单。
2。如果你能用数据来支持你的假设,那就用它。**
设计一个实验的第一步是形成假设,可以通过数据探索、用户访谈、其他公司的经验、心理学原理等找到假设。然而,初创公司通常缺乏人力资源,所以我们必须选择可能带来最高投资回报率的测试。因此,如果一个假设只包含定性观察,就很难说服数据驱动的管理者批准这个实验。所以,正因为如此,如果一个假设能够得到数据证据的支持,那就更好了。
3 堂关于沟通/展示的课
1。先解释一下数据来源。
向数据团队做演示时,您应该解释一下数据来源,原因有几个。第一个是他们都理解数据模式,并且可以检查您的分析是否与数据源完全匹配。第二个原因是,他们可能会建议你使用其他你没有考虑过但对你的研究有帮助的数据来源。第三个原因是,您团队中的一些高级同事可能知道一些没有记录在数据模式中但对您的项目有帮助的数据。
②。将数字与行业标准进行比较。**
克里斯·利维拉尼在 Unsplash 上的照片
当你提出数据时,附上比较数字。否则,很难理解这个特定的数字是高还是低,例如,30 天后的保留率是高还是低?根据 Localytics 的数据,30%在游戏公司是正常的,而在社交媒体公司(Bhargava。充分利用推送通知提高用户留存率。
3。用百分比表示数字时,一定要清楚地解释分母。
我的经理经常问我,“等等,约翰,这个分母是什么意思?”提出比率时,确保解释分母的含义,因为通常情况下,细微差别隐藏在上下文中。你是指所有的登录用户吗?还是付费用户?还是特定时间范围内的付费用户?
2 节课/关于一般主题的思考
- 系统思考——在思考策略时,考虑它们会如何影响其他团队。如果不确定,就问!
当你制定的策略需要与其他团队/部门合作时。你需要系统地思考这个任务对他们来说是否太多,或者他们是否应该专注于手头其他更重要的任务。如果不确定,就和他们谈谈。我一开始没有想到这个至关重要的角度,使得我提出的最初几个建议显得有点幼稚。
②。我太沉浸在任务中了。我应该参加更多的会议。**
莱昂在 Unsplash 上拍摄的照片
包扎
台北——图片由 TangChi Lee 在 Unsplash 上拍摄
我试图在一篇文章中包含尽可能多的想法,但仍然有许多有价值的想法,我没有放进去,因为它太长了。总的来说,我从这次实习中获得的最有价值的东西是实际经验,从分析真实数据到设计实验到建立 ML 模型到提取商业见解到执行到分析结果到与团队成员交流并获得反馈。这些是我在单独使用 Kaggle 的样本数据构建 side 项目时不可能经历的。此外,这次实习也让我更加坚信,用数据驱动商业价值是我真正热爱的,也是我未来职业生涯想要追求的!
谢谢你,FunNow,还有我出色的同事们,佩吉,袁和史蒂文,让我有了如此美妙的经历!
如果你读到这里,请在 Linkedin 上给我发一个连接请求!我喜欢结识新朋友,探索我们未来如何合作。
引用作品:
- 克罗尔、阿利斯泰尔和本杰明·约斯科维茨。*精益分析:利用数据更快地建立更好的创业公司。*奥莱利媒体,2013 年。
- 布朗、摩根和肖恩·埃利斯。*黑客成长:当今发展最快的公司如何取得突破性成功。*兰登书屋,2017。
- Chin,Joseph,Aifaz Gowani,Gabriel James 和 Matthew Peng。" 数据科学家之死 AutoML 会取代他们吗?“KD nuggets,2020。
- 李,迈克尔。" 自动化会不会淘汰数据科学岗位?”Techcrunch,2020。
- Bhargava,Vanhishikha。" 充分利用推送通知提高用户留存率 " GETSOCIAL,2021。
- 费里斯蒂姆。泰坦们的工具。霍顿·米夫林·哈科特,2016。**
我在 HealthJoy 数据团队的头 6 个月学到了什么
关于从大型数据团队过渡到小型数据团队、在初创公司的数据团队中工作等内容的说明
米利安·耶西耶在 Unsplash 上拍摄的照片
正如标题所示,这篇文章将会是“在一家初创公司工作是什么样的”这一类文章中的又一篇,我相信大多数人都已经读过了。然而,我将对事情提出自己独特的见解,并从一个人的角度来写,这个人不仅经历了从 Big glometer 到中期创业公司的转变,还特别经历了在上述创业公司的一个小型但不断增长的数据团队中工作的感觉。希望这篇文章可以为数据和分析领域的其他人提供一些关于如何进行类似转变的有用观点。
简单介绍一下我,我叫乔伊,是一名数据专家,住在纽约布鲁克林区。我拥有德保罗大学的数据科学硕士学位,在运营领域开始职业生涯后,我已经在数据和分析领域工作了大约 5 年。我既做过分析经理,也做过个人贡献者,我目前的职位是 HealthJoy 的高级数据分析师。
我将这篇文章分成几个部分,第一部分是关于我在 HealthJoy 的新角色的转变和我工作的头几个月。第二部分重点介绍了我的角色,最后一部分赞扬了我们团队的优点,以及我非常喜欢学习我们所有的工具和数据堆栈。
过渡
在我到 HealthJoy 的头两个月左右,我需要做的大量的新鲜事物和调整有时让我感到不知所措。从 15 人的分散数据团队转变为 4 人的集中数据团队本身就是一个巨大的转变。再加上要学习的新工具和新技术(Gitlab,Snowflake,dbt,Looker),学习一个全新的行业,行话等等,很容易感到迷失。
不过很快,在我的经理和团队中一些终身任职者的帮助下,我找到了做出贡献的方法。在某种程度上,在最初的几个月里,我先前知识的缺乏对我来说是一笔财富,并帮助我们的团队为当前的成长期构建文档。我问了很多关于我们的数据和数据集的问题(流水线/架构、列含义、度量定义等。)并很快发现许多知识存在于其他现任和前任团队成员的头脑中。这有助于启动我们团队为新数据模型整合文档标准的工作,并引发了许多关于我们一些重要但不那么完美的文档化数据模型和来源的教育和讨论。
我从这一切中得到的最大收获是,如果我对一些事情感到困惑,那么这种困惑很可能代表着一个机会,可以学习、记录和为我们的团队贡献一些以前没有正式记录的东西。其他一些贡献领域是从特定工具培训(特别是 Looker 和 dbt)中获取概念,并为如何实现这些新概念创建外卖文档或建议。据我所知,用新的眼光来看待成熟的流程是产生改进的最快方法之一。该团队最近引进了另外两名分析师,在他们最初的 2-3 周内,他们已经收集了一些关于 Python 和开发环境设置的很棒的材料和文档。
伴随着适应新团队的学习曲线,我意识到在小公司工作意味着我作为分析师的角色将比我以前在任何职位上经历的角色有更多的可见性。在 2020 年第四季度加入后,我很快被要求帮助数据团队的一名更高级成员分析我们的一些客户维系数据。在完成了项目中我的部分并将工作移交给我们的利益相关者后,我非常震惊和兴奋地看到我们的工作在我的第二次月度全公司会议上得到展示和表扬。虽然我以前向高杠杆的利益相关者介绍过工作,但这是一个真正的“哦,sh*t”时刻,我意识到我要做的许多工作将对整个公司产生可见的、真实的影响。
升速
虽然我在工作的头几个月学到了很多东西,并尽我所能让自己变得有用,但需要时间来感觉真正舒适,并好像我对我们的数据和数据堆栈了解得足够多,以至于真正危险。与此同时,我的经理/我们团队的主管围绕他希望如何管理我们的团队以及我们应该如何作为一个单位工作而提出的一些概念和理念真正成为了焦点。具体来说,像产品团队一样运营我们的数据团队和专注于跨职能分析这样的概念,是我在团队的第一个完整季度中真正意识到的。
虽然我之前所在的分析团队确实有 OKRs 和团队目标,但他们也是作为一个以客户为中心的服务组织而成立的。作为分析师,我们专注于根据客户在任何给定时刻的需求,向不同的内部和外部利益相关者提供输出。这使得很难在任何长期数据团队优先事项上取得进展,偿还任何技术债务,或投资于数据基础架构—几乎我所有的分析师时间都用于响应我们客户的需求。
正如我提到的,在 HealthJoy,我们努力让我们的数据团队更像一个产品团队,而不是一个服务台。这一过程需要我们就团队的季度优先事项进行协作,以便为我自己和我的数据团队成员提供一个清晰的路线图,并帮助我们确定工作的优先级。这种转变让我能够深入了解我的优先事项,不仅从产出的角度,而且从协作的角度来回应利益相关者的反馈。在多年从事面向客户的分析工作后,让该机构埋头于几个项目是一种解脱。这种理念和劳动的成果来得相当快——将我们整个组织的经常性收入模型整合在一起就是这样一个有影响力的项目的结果。我还深入研究了我们的客户和最终用户如何通过 HealthJoy 产品进行激活,得出了一些关键发现,挑战了我们的客户如何通过我们的平台产品进行激活的假设,并对跨职能利益相关者进行了大量培训。
虽然所有数据和分析团队都在努力帮助我们的组织和利益相关者做出更好的决策,但到目前为止,看到自上而下的理念和愿景是如何实施的,这是一次令人难以置信的学习经历。稍加考虑、规划和思考就能在数据领域大有作为。
尽管如此,我很幸运,因为我的第一个项目非常有趣,我已经收到了很多利益相关者的积极反馈和认可。我为经常性收入建立的数据模型现在被我们的 CEO 和其他领导使用。该公司更好地了解了我们的经常性收入为什么会发生变化,以及哪些客户对 HealthJoy 的经常性收入变化贡献最大。最有趣的是,这些项目不是花哨的机器学习模型或复杂的多元测试(不是说我们没有能力做这些事情)——它们只是对利益相关者有用的数据分析,这些利益相关者以前从未见过以这种方式分析的数据。
技能&总结
从事数据和数据科学工作,我最喜欢的部分之一就是尝试和学习大量的新事物。这是让我兴奋地加入 HealthJoy 数据团队的另一个原因——“现代数据堆栈”的承诺以及在解决数据问题的同时提高我的编码技能是我在下一个角色中真正寻找的东西。与我以前的分析角色相比,我们的数据堆栈让我感觉像是一个在糖果店的孩子。学习使用 dbt 并为我们团队的 dbt 项目做出贡献是我最喜欢的工作之一。在编写 SQL 和 Jinja 的同时解决业务问题对我来说真的很酷,我非常确定解决棘手的编码问题带来的“啊哈时刻”是我将不断追求的东西,因为它让我感觉自己像个天才(至少暂时如此)。
我将 dbt 车型推向生产时的感受(照片由 Unsplash 上的Kristian lvstad拍摄)
我也很喜欢我们团队每周的展示和报告会议,在会上我们每个人花大约 5 分钟谈论我们在过去一周左右的时间里一直在做的事情。看到我的团队成员有多有才华,了解他们每周都在做的了不起的事情,这真的很酷。无论是在 dbt 中创建的新数据模型,对我们一些机器学习和预测项目的更新,还是某人发现并希望与团队分享的新工具,不断分享和学习的文化真的很棒。在我们团队的会议之后,我经常发现自己受到启发,去研究数据科学/数据工程生态系统的新概念或新领域。
总之,我很高兴加入了 HealthJoy 的数据团队。这种经历非常有益,让我大开眼界,我接触到了一些工具和工作方式,我不确定如果我继续留在以前的行业或继续在更大、更成熟的组织工作,我是否会体验到这些。对于未来几个月我将学到的东西,我们团队和公司的发展方向,我感到非常兴奋。
我在领导数据科学团队时学到了什么
美国宇航局在 Unsplash 拍摄的照片
从数据科学家的角色转换到管理职位比我想象的要困难,但是我每天都在学习
当我担任数据科学团队的领导时,我几乎没有人员管理经验。作为一名数据科学家,我很容易联系,但很快我就面临一些挑战,以保持团队的快乐和正轨。
以下是我的学习清单。它们是数据科学团队的专属吗?可能不会,但话说回来,我也说不清。
1.企业 IT 可能是一个艰难的环境
这对我来说并不是什么大新闻,因为我以前在企业环境中做过多个数据科学项目,但是,我从未考虑过对长期幸福的影响。不要误解我的意思,与大多数数据科学产品相比,企业 IT 需要遵守完全不同的法规和预防措施。然而,僵化的流程极大地减缓了数据科学中的思考和解决过程,即使这是理所应当的。这会导致挫败感,在某些时候会阻碍创造力。
该如何应对?嗯,我还没有找到一个万能的解决方案。对我们来说,为数据科学家提供符合企业标准的开发空间,以及让企业 IT 专家尽早参与的大量协调会议,都是在帮助我们。
2.被埋没的数据科学家倾向于离开
这一点我不得不经历艰辛。许多企业项目都是面向长期的,而且必须如此。在这样一个项目中从头到尾都有一个数据科学家,除了希望项目团队保持连续性之外,还会有一些不必要的副作用。以机器学习为核心的端到端业务应用很难构建,然而数据科学相关工作只是其中的一部分。因此,数据科学家最终肯定会承担一大堆与他/她个人资料并不相关的任务。这在一段时间内是可以的,但一旦它成为新常态,数据科学家就会开始感到不高兴。
似乎对我们有用的是,让数据科学家同时处理多个项目,并在每次迭代之前承担一定的工作量。这样,大多数与概要文件相关的任务就达成了一致。
3.远程工作绝对是游戏规则的改变者
不知何故,我们团队的大多数人都喜欢远程工作——包括我自己——为什么他们不喜欢呢,这太神奇了。当然,它有它的缺点,但是我们的生产力飞速增长,老实说,通过所有基于 Git 的讨论、技术会议和一对一会议,我们在团队中发展了一种新的亲密关系。
我更欣赏的是我们更加开放地谈论我们的个人生活。无数次我的小宝贝和我的同事打招呼或者一只狗抱怨什么,让我们走到了一起。
我充分意识到这里的负面影响,但是我尽量把注意力放在积极的方面。
结论
最有经验的数据科学家是最有内在动力的人。现在不时有正式的教育途径出现,但是我们大多数人来自不同的学科,开始进入数据科学纯粹是出于兴趣。作为数据科学家,我们通过不懈的努力学习和成长。为了让数据科学家满意,我们需要创造一个合适的环境。
我为什么要分享这个?我猜你们中的一些人已经是数据和分析领域非常有经验的领导者了。然而,像我一样,现在可能有许多其他数据科学家开始成长为领导职位。我很想听听你对此的想法,所以请联系我:)
PS:
最难的学习与团队无关。对我来说,放下编码是多么困难。我仍在编码,但比以前少多了。我对此没有意见,因为我还有其他方式来创造价值和贡献,但这绝对是一种学习。这并不容易。
我在为机器学习项目设置存储时学到了什么
入门
面向小型项目的快速存储解决方案之旅
总的来说,机器学习框架和技术已经走了多远,我们现在能够以多快的速度将机器学习功能集成到应用程序中,这是令人惊讶的。几周前终于进入 TensorFlow 和 Keras几个小时后就训练了我的第一个模型。我完成了三个教程,几个 YouTube 视频,用演示数据训练模型,并想知道为什么训练过程的“改进”会产生相反的效果。🙂
总的来说,这是一次非常好的经历,我当然想了解更多。我跟随的教程都附有数据集,这些数据集已经进行了适当的分类和结构化。对我来说,合乎逻辑的下一步是从头开始一个新项目:收集数据,手动分类数据,并训练一个模型。由于我目前正在构建一个专门用于创建和安排 Twitter 内容的工具,也就是 Tweets,我考虑过在其中加入 ML 特性。
为此,我需要一堆推特。好在我的机器上已经有大约 30,000 条 JSON 格式的推文。当然,这些没有标签。但是丢失标签并不是最大的问题。我在想储物件,以及我如何能够
- 一次给一条推文加标签,
- 添加和删除推文,而不打破以前的分类。
一开始尝试用微软 Excel。不,不是因为我看了这篇文章。这是一个强大的工具,在过去,我经常选择用代码来实现自动化,而不是使用现有的和经过验证的解决方案。因此,我将推文转换为 CSV 格式,并将 CSV 文件导入 Excel 表格。我为我的班级添加了专栏,并在同一张纸上标注了前几百条推文。直到我意识到有些推文不是用英文写的。事后看来,这并不奇怪,因为我没有按语言过滤推文。这很不幸,因为我不确定我是否可以再次导入 CSV 文件,而不会弄乱我已经标记的推文。
第二天,我决定花更多的时间为分析打基础。如果推文存储在数据库中,我可以不分类地随机选择一条,然后单独更新。我将能够添加更多的推文,而不必担心打破推文和它们各自的分类之间的关联。不过,也有一些缺点。
- 复杂性:更多的组件意味着更多的维护工作和更高的故障几率。
- 访问 : Tweets 以 CSV 和 JSON 文件的形式存储在我的文件系统中,我可以用任何文本编辑器查看它们。数据库需要额外的工具来查看和操作数据。
- 版本控制:由于推文存储在文本文件中,它们受到版本控制。Git 也存储二进制 blobs,但是,当然,二进制文件的变化不容易可视化和理解。
此外,什么数据库是一个选项?构建我的 Twitter 内容工具时,我对 MongoDB 相当满意。我最喜欢的是我能够使用 API 来创建、更新和检索数据。不需要使用不同的语言,如 SQL。这是一个很大的优势。此外,MongoDB 支持模式和模式验证,但默认情况下并不强制执行。
我想到的另一件事是:摆脱了 Excel,我也失去了对数据进行分类的用户界面。Mongo-express 是一个选项,但是对于大量数据的批量编辑来说太不方便了。快速搜索后,我找到了 Labelbox/labelbox ,但对抽象级别不满意。它仍然需要手动获取数据并编写 HTML 来可视化训练数据和标签。
但是对于 tweet 分类,它不需要过于复杂的应用程序。毕竟,我想对包含多达 280 个字符的文本应用标签。我很快就想出了这个简单的模型如下所示。它在左边显示 tweet,在右边显示一个包含各种选择元素的表单和一个提交按钮。
推特分类前端的模型
所以,我决定用 MongoDB 存储数据,并编写一个简单的 HTML 前端来标记推文。
最初将所有 tweets 插入 MongoDB 集合非常简单。我使用 Python 将 JSON 文件读取并解析到一个数组中,并将该数组一次插入 MongoDB 集合中。有趣的是,几天前我用 Python 的内置 JSON 模块创建的 JSON 转储包含一些语法错误,我必须用第 17 行来修复。
随着推文被存储在数据库中,是时候考虑分类数据的存储了。分类数据包括推文的 id 和分类本身。我定义了经典的情感分析标签
- 正面、中性、负面来捕捉推文的语气,
- 随意而又商务地描述观众,
- 和提问、告知、说服分类意图。
分类数据必须以某种方式与 tweet 数据一起存储。有两种选择:
- 规范化:使用单独的集合存储分类标签和 tweet id。
- 嵌入式:使用我已经用过的 tweets 集合来存储 tweets 本身。含义:将分类标签存储在 tweet 旁边,或者将分类数据与 tweet 数据混合。
对于那些不熟悉 MongoDB 的人来说:集合大致相当于关系数据库的表。集合存储相关的文档,比如 Tweets,并且可能施加某些规则,比如模式或者读写文档的权限。在关系数据库的上下文中,文档是一行。
一开始我选择了第一个选项:一个集合包含所有推文,另一个集合包含每个推文的分类。但这又一次给我带来了麻烦。为了找出哪些推文还没有被标记,我必须加入这两个集合。这可以用 $lookup 操作符实现,但是这个过程很慢,即使在我只有 30000 个文档的情况下也是如此。花了 20 秒在 tweets 集合中找到 tweets,但在 classifications 集合中没有。那太慢了。
出于性能原因,MongoDB 鼓励用户嵌入集合。在这种情况下,嵌入意味着在文档中包含嵌套的对象。这基本上是我上面提到的第二种选择。
一般来说,嵌入为读取操作提供了更好的性能,并且能够在单个数据库操作中请求和检索相关数据。嵌入式数据模型使得在单个原子写操作中更新相关数据成为可能。
docs.mongodb.com/data-model-design/
所以选择二。下面是我用来从数据库中提取一条没有标签的 tweet 的代码。
不出所料,表演棒极了。渲染前端应用程序,包括从数据库获取下一条 tweet,大约需要 200 毫秒。
此时此刻,我为自己所取得的成绩感到高兴。我为我的机器学习项目实现了一个可扩展的存储解决方案和一个轻量级的快速分类过程。我能够时不时地更新推文,而不会中断甚至破坏分类过程。
我将在另一个故事中分享关于前端应用程序的细节,我也将在未来几周继续分享关于我的机器学习之旅的进一步细节。
感谢来到这里,也感谢你的阅读,
Stefan, www.blauspecht.io 的创作者👋
我从数据科学工作中学到了什么
重要的经验和教训
学分 Instagram 和网络
我最近开始作为一名数据科学家工作,以下是我工作三个月后的想法。除了这些小的学习之外,还有很多我遇到的技术方面的东西,但是任何人都可以在加入后学习。
机器学习与经济价值 -在学校,我们学习不同的学习算法,但不学习它们的经济价值。一定要明白精准不是王道,的预算才是!我们需要了解逻辑回归在百万美元行业中的使用案例,一个简单的模型如何带来如此大的经济价值。参加一门从商业角度展示行业级机器学习用例的课程,可能有利于所有数据科学家在行业中做出日常决策。
构建基于混合规则的 ML 系统 -在学术界和各种在线资源中,基于规则的学习与 ML 模型是分离的,但在现实生活场景中,最简单的情况仍然由基于 if else 规则的语句进行分类。我们如何决定简单性的水平?我们如何并行运行这些以获得更好的用户体验。如何做出最快的预测并在更复杂的模型做出决定后改变它。此类决定应在设置 ML 管道时做出。
理解模型推理和训练的时间复杂性- 虽然我是机器学习如何简化为 python 库导入的粉丝。但我更喜欢理解正在发生的底层操作。当一个算法花了很长时间来训练时,你只是采样一部分数据或超参数调整它,也就是提高学习率的频率是多少?一个更系统的方法是知道这些算法的时间复杂度。例如,在使用不同优化技术的 SVM 的情况下,我们的训练时间可以改变。当使用牛顿方法时,复杂度是 N,而使用 Cholesky 方法时,复杂度是 N,其中 N 是训练样本的数量。在这里,仅仅减少数据大小并不是一个明智的决定!
生产环境- 我们在学校很少了解生产环境。并非所有的现代机器学习生产系统都是为了处理最先进的方法而构建的,这也是学术界和工业界之间存在巨大差距的原因之一。
了解的一些重要话题-
- 持续学习- 现实世界的数据通常是流式的。您需要用新输入的数据不断更新您的模型。一种简单的方法是从头开始重新训练整个模型或者进行微调。微调不会有那么好的效果,因为它可能会使你的模式偏向最新的数据。因此,应该分析再培训和使用复杂的持续学习技术的经济成本。
- 主动学习- 给数据贴标签很贵,而给我们受益最大的样本贴标签却不那么贵。主动学习基础应该是所有 intro ML 课程的一部分!
没有每个团队都必须遵守的标准公平/道德体系
从事机器学习的每个人可能都知道这一点。但是现在是时候让社区在部署你的 ML 模型之前提出一些基本的公平性检查了。
我在最近的黑客马拉松中可能会做些什么
以及为什么领域专业知识在机器学习中很重要
Alex Kotliarskyi 在 Unsplash 上的照片
最近,我的同事【Michael Pyrcz 教授 ( @GeostatsGuy )和我在德克萨斯大学奥斯汀分校举办了一场数据科学黑客马拉松,由希尔德布兰德石油和地球系统工程系提供支持。鉴于 COVID 疫情,我们在 2021 年 4 月的两个周末举办了该活动。第一个周末由一个研讨会组成,随后是对问题数据集的解释,然后学生们分成小组,研究他们的解决方案,最终在接下来的周末提交给一个行业专家小组进行评分、代码审查和演示评审。
对我个人来说,这是一次非常有趣的经历,所有参与者的反馈都令人难以置信。鉴于我多年来一直在教授数据科学技能,并用高难度的编码练习挑战我的学生,看到他们展示自己的能力真是太棒了。
我鼓励你看一下详细的问题陈述和上面链接的数据集,但简单地说,挑战是:给定来自测井的岩石物理数据和从已经生产一段时间的 73 口油井的地震解释的空间图,预测最近钻探的 10 口新井的 3 年累计产量,并有测井数据,但尚未投入生产。除了他们的“最佳估计”,学生们还被要求提供 100 个额外的实现,以便可以评估不确定性模型。客观评分包括相对于他们的“最佳估计”和真实的 3 年产量(我们知道,但对学生保密)的均方误差的比较,以及他们的不确定性模型与 Deutsch (1996)提出的“良好性测量”的评分。
我认为这将是一个有趣的练习,考虑我自己可能会做些什么来完成这个挑战。本着黑客马拉松的精神,我将把我在项目上的工作时间限制在我一天能完成的范围内。当然,因为我已经熟悉了数据集,所以我比比赛中的团队有优势,他们通常在第一天就花几个小时调查数据。但鉴于我的时间表很短,我不会训练任何复杂的神经网络架构或任何复杂的机器学习模型。我想看看我如何利用我的领域专业知识来设计有意义的功能,以快速获得答案。关于我如何处理不确定性模型,我也有一个惊喜。所以让我们开始吧…
特征插补
首先,像 Python 中的所有工作一样,我将从这项工作中使用的模块导入开始。
我将从已经生产的油井和我们称之为试生产的油井中读取测井数据集,即我们试图预测 3 年后累积产量的油井。
现在我们将这两个数据帧合并成一个数据帧。
并检查数据集的一些总体统计数据。
我们可以看到有相当多的数据缺失。特别值得关注的是大量渗透率缺失,因为这将是最强的生产指标之一。所以我们的第一个任务是估算缺失的特征,特别是建立一个好的渗透率模型。首先,让我们绘制一些提供的地图数据。这里我们展示了储层中百分比相的空间分布。水库里有一条断层,我们只知道它的位置,没有其他信息。白色圆圈代表我们有产量的井,红色圆圈是我们试图预测产量的井。红线表示故障。虽然我试图展示尽可能多的代码,但 matplotlib 绘图命令有些冗长,所以我将取消输入,只显示绘图。
相分数彩色地图
看起来断层不会在空间相信息中产生任何偏移或不连续,这是个好消息,因此我们将继续使用空间位置信息输入缺失的相信息。首先,我们将划分数据帧的子集,并用数字替换岩相的字符串标签,因此 0 表示砂岩,1 表示砂质页岩,依此类推…
现在我们将构建一个k-最近邻分类器,用 scikit-learn 的内置 GridSearchCV 做一点超参数调整。
{'n_neighbors': 4, 'weights': 'distance'}
使用上面的超参数设置,我们现在可以预测(和估算)缺失的相值。
假设我们期望相同岩相的岩石具有相似的密度和声阻抗,我们将用每个岩相的平均值来估算这些缺失的特征。
现在,我们将对数据框进行子集划分,并使用所示的特征通过多项式回归来估算缺失的孔隙度值。
我们将设置一个管道,并再次使用GridSearchCV
来寻找最佳超参数。
{'pca__n_components': 5, 'poly__degree': 2, 'scaler': MinMaxScaler()}
最佳参数如上所示。现在我们将使用这个模型来估算缺失的孔隙度。
下面我们将绘制估算的和给定的孔隙度。这里看起来没什么奇怪的,没有一个估算值是给定数据范围内的异常值。
作为深度函数的预测孔隙度
我们还可以观察估算孔隙度的分布,并与给定值进行比较。插补保留了原始数据的双峰分布。
给定和预测孔隙度
现在我们将这个估算数据添加到我们的wells_df
中。
为了估算缺失的渗透率,我们将使用一些岩石物理学知识来做一些特征工程。孔隙度和渗透率之间有一个广泛使用的相关性,称为 Kozeny-Carmen 关系,它将渗透率建模为
其中κ是渗透率,ϕ是孔隙度。我们可以使用 seaborn 的内置函数快速查看这种关系,即
作为孔隙度函数的渗透率的 Kozeny-Carmen 变换和拟合
虽然不是最好的模型,但我们可以使用这些数据来调整我们未来更复杂的预测。首先我们找到上面蓝线的斜率和截距。
现在我们将使用这个模型来创建一个我们称之为'KC permeability, mD'
的特征。
使用上面显示的数据,我们将建立一个模型来估算缺失的渗透率。同样,使用GridSearchCV
进行超参数调整,我们有
{'pca__n_components': 4, 'poly__degree': 2, 'scaler': RobustScaler()}
有了这些参数,我们可以预测缺失的渗透率。
根据给定数据可视化预测结果,该模型表现良好。同样,我取消了冗长的绘图命令
作为孔隙度函数的预测和给定渗透率
'KC permeability, mD'
现在是多余的,所以我们将它从数据帧中删除。
特征工程
由于断层正好穿过生产井和我们试图预测产量的井,让我们设计一些与断层相关的特征。首先,我们将设计一个称为'Distance to fault'
的特征,它计算到断层的垂直距离。此外,我们不知道断层是否以任何方式划分了油藏,因此我们还将创建一个名为'left/right fault'
的要素来指示油井位于断层的哪一侧。
因为所有预测井都“靠近”断层,所以我们将创建另一个布尔要素,赋予断层附近的井一定的重要性。我们将“近”定义为比平均预生产(即预测)井距断层更近的任何井。
假设我们预期“相似”的井具有“相似”的产量,我们将使用KMeans
聚类在我们的数据框架中寻找相似的井
{'cluster__n_clusters': 14, 'scaler': MaxAbsScaler()}
并且使用该模型来预测预生产井将落入哪个组。
现在我们将读入生产历史,并将它们与我们的工作数据框架合并。
现在,我们将计算每个丛的 1 年、2 年和 3 年的平均产量,并将此平均值作为每个井位的预期平均产量分配给一个新特征。
将这些平均产量值合并到我们的工作数据框架中,我们就有了最终的数据框架,我们将用它来进行预测。
预言
为了对我们即将推出的模型进行超参数调整,我们将使用 Deutsch,1996 的“良好度”度量,即
除了来自 scikit 的mean_absolute_percentage_error
-学习给我们的模型打分。我们的想法是使用BaggingRegressor
来创建一个模型集合,我们对其进行平均以创建我们的“最佳估计”,并使用每个单独的估计值作为我们不确定性模型的实现。我们将使用GridSearchCV
在交叉验证中对我们的模型进行评分。功劳归于 Honggeun Jo 创造了这个函数的原始版本,我在这里只做了一点小小的修改。
分离我们的预测和响应特征标签。
由于每口井都有几个数据样本,但我们只需要报告整个井的预测,因此有几个选择。最简单的方法是对每个孔中的所有样本进行平均,为了节省时间,我们将使用这种方法。
为我们的训练井(已经投产的井)获取布尔索引器。
现在我们将建立一个管道,并将其传递给GridSearchCV
进行超参数调整。我重复了几次,以缩小要搜索的最终参数集,以便最终的笔记本/解决方案能够及时运行。这里,我在 k 倍交叉验证中使用了 7 倍,因为这在测试集中留下了大约 10 个孔,类似于我们需要预测的数量。
0.8432431728379238{'bag__base_estimator': LinearRegression(),
'bag__bootstrap': True,
'bag__max_features': 0.75,
'bag__max_samples': 0.75,
'pca__n_components': 9,
'poly__degree': 1,
'scaler': MaxAbsScaler()}
上面显示了“最佳分数”和最终的超参数集。现在,我们将把我们的最佳估计和实现写到解决方案文件中。
提交解决方案文件进行评分,我们可以生成以下图。首先,我们有一个准确度图,它将预测值与实际值进行了比较。10 口井的产量。
MSE: 24697.56
下面显示了不确定性模型和真实值。
最后是善良的情节。我们在上面的scorer
函数中使用的品质度量与黑色虚线相对于红色对角线的积分有关,其中红色对角线上方的面积是下方面积的两倍。
Goodness: 0.856
最后,我在其他团队中的排名(注意,这只是客观评分的一部分,在实际的黑客马拉松中,我们有额外的代码质量和演示栏,因此此表中其他团队的最终排名并不反映比赛的实际最终结果)。对于一天的工作来说还不错!
这里的最后一个信息是,导致良好估算和特征工程策略的领域专业知识远比花哨的机器学习模型有用。此外,准确理解您正在寻找的感兴趣的数量,以便您很好地评估(即评分)您的模型。最终我用一个线性回归模型“赢”了比赛。
最初发表于T5【https://johnfoster.pge.utexas.edu/blog/posts/hackathon/】。
如果我买不起量子计算机怎么办
使用量子计算机还有其他方法
量子机器学习要不要入门?看看 动手量子机器学习用 Python 。
作者图片
量子计算机不再是科幻小说了。他们是现实。
谷歌已经在 2019 年宣布了量子优势——他们的量子计算机在 200 秒内解决了一个经典计算机需要 10,000 年才能完成的任务。尽管 IBM 反驳说,他们的一台(经典)超级计算机可以在不到三天的时间内解决同样的问题,但这仍然是一个令人印象深刻的加速。
但是,如果两个科技巨头争夺谁的设备首先证明量子优势,那么在你当地的零售商那里找到一台量子计算机出售的机会就很小了。所以,即使它们确实存在,除非你有几百万你不需要的钱,否则你今天是买不起量子计算机的。
同时,量子计算是最有前途的技术之一。这是一项技术,你可能想今天就开始学习,而不是明天。
那么,你能做什么?
选项 1:云
当然是云!如今,一切都在云端。有相当多的云提供商提供量子计算资源。
首当其冲的是 IBM。IBM 在 IBM cloud 中免费提供他们的量子计算机。目前,他们允许你使用的最大量子计算机是 27 量子位计算机。
问题是你必须等待一个空闲的位置。有时,你的电路运行需要几个小时。
第二,还有谷歌。谷歌提供基于量子计算服务的量子计算硬件。但是目前只允许那些在许可列表上的人访问。此外,他们没有指定硬件的大小。
第三个玩家是亚马逊。亚马逊不开发自己的硬件。但它们提供对其他制造商硬件的访问,如 Rigetti。他们的投资组合中有一台 32 量子位的 Aspen-8 量子计算机。缺点是你必须为每一次执行和每一个镜头付费。
选项 2:云模拟器
三个云服务也提供模拟器。经典计算机计算你的电路,而不是量子计算机。当然,它没有量子计算机快,但如果你只想看看你的电路是否工作,它们是一个有效的选择。
IBM Cloud 提供了不同的模拟器,大小高达 100 个量子位。虽然您可以免费使用它,但您的电路不会立即运行,而是必须等待一个空闲时间。
就像他们实际的量子硬件一样,谷歌对他们在谷歌云中提供的模拟器并不十分明确。
亚马逊 Braket TN1 模拟器可以模拟某些类型的量子电路,大小高达 50 量子位。
选项 3:本地模拟器
第三种选择是用你的本地机器来模拟量子电路。根据你的硬件和你创建的电路,你的本地设备可以在合理的时间内计算 10 到 20 个量子位。
明显的好处是,你不必等待你的电路运行,你也不必支付任何进一步的费用。
结论
局部仿真是电路开发过程中的最佳选择。每当你想知道具体的电路结构是如何影响结果的,你最好的选择就是你的电脑。
当然,你需要保持你的电路小。因此,您能够解决的实际问题的复杂性是有限的。
一旦你有了一个对小问题表现良好的电路,你就可以把它送到 IBM 的云模拟器和硬件上。你将看到你的电路是否在有噪声和退相干的真实环境中工作。并且您将知道它是否扩展到您的本地机器很可能无法模拟的大小。
最后,如果你想将量子电路嵌入到生产环境中,当时间很重要时,你可以考虑使用 AWS Braket 为使用真实设备付费。
量子机器学习要不要入门?看看 动手量子机器学习用 Python 。
在这里免费获得前三章。
如果我告诉你 RDBMS 可以处理时序数据会怎么样?
本文旨在简化您的数据堆栈。
今天,有大量的 NoSQL 数据库可用于处理时间序列数据。毫无疑问,它们解决了许多用例,并且还提供了与可视化工具的现成集成,但是在向数据架构添加新组件(假设它是处理时序数据的新组件)之前,让我们退一步分析一下,这真的有必要吗?从长远来看,每个新组件都有自己的运营挑战。
本文旨在简化您的数据堆栈。假设您的用例围绕关系数据库,现在您必须处理时间序列数据,以便可以对这些数据进行接近实时的查询。你会添加一个新的组件吗?
嗯,答案可能取决于很多原因,但是不要排除关系数据库。请继续阅读,了解如何在关系数据库中处理时间序列数据,并做出相应的决定。
说到这里,我们先来了解一下什么是时序数据。
时序数据
在时间维度上捕获的数据(事实)是时间序列数据,因此该数据的一个轴将始终是时间。该数据通常但不一定是(近)实时捕获的。它帮助我们回答如下问题:
- 每分钟有多少用户访问应用程序?
- 每小时销售多少产品?
- 下个月的预测销售额是多少?
现在,这些时间序列数据需要以一种能够提供有意义结果的方式被接收、存储和转换。为了有效处理,对于时间序列数据有几个注意事项:
- 它几乎是实时摄入的。
- 用于实时报告。一般来说,近实时总量是根据这些数据计算出来的。对它的聚合查询本质上是临时的,因此在数据上定义的任何聚合都会随着数据的到来而改变。
- 它是仅附加数据,但可能具有较高的接收率,因此需要支持快速写入。
- 可以分析历史趋势来预测未来的指标。像 ARIMA 这样的机器学习算法被用来做时间序列预测。
现在问题来了,我们如何在 RDBMS 中设计这些数据?
考虑到高摄取率和接近实时的聚合,关系数据库无法直接处理上述数据考虑事项。但是给关系数据库添加一些填充,我们可以让它变得非常强大,以便处理时序数据。我们现在要讨论的关系数据库是 postgresql ,所涉及的填充是它的扩展。
我们将在下面讨论两个这样的扩展。
时间刻度数据库
时间刻度数据库是 PostgreSQL 的开源扩展。由于它是作为 postgresql 的扩展捆绑在一起的,所以它可以支持 postgresql 的所有功能,如关系查询、完整的 sql 支持(而不是类似 sql 的)以及实时查询支持。
timescaledb 如何处理时序数据
它有一个超表的概念,超表是简单的时间数据块,存储在标准表中。这些超表是用户的抽象层,用户可以像在普通表上一样简单地在这个表上进行查询、连接或其他任何操作。
对这些超表的摄取是非常快的。根据文档,它支持每台服务器每秒接收超过 150 万个指标。
此外,对于连续聚合,可以在这些超表上创建物化视图,以便聚合接近实时可用。在内部,时间刻度数据库有后台进程负责刷新视图,并且刷新间隔和参数是可配置的。它还提供了与 Kafka、kinesis 等的集成,用于数据摄取。
一个物化视图是一个包含查询结果的数据库对象
如何创建这个时间序列数据的实时可视化?
物化视图有助于提供实时聚合,也可用于创建实时可视化。由于该扩展与 PostgreSQL 捆绑在一起,因此它可以与 Graphana 等任何可视化工具集成,并刷新连续聚合。
现在,有了这个简单的架构,你就知道如何获取时间序列数据,甚至创建可视化数据,这样就可以在办公室的大显示器上演示了(好吧,如果我们去办公室,就祈祷吧)。很简单,不是吗?只有一个关系层?
除此之外,它还有预测时间序列数据的方法!timescaledb 的文档非常丰富,可以跟着做概念验证。
管道数据库
Pipeline DB 是 PostgreSQL 支持的另一个扩展,它也可用于实时报告,与 timescaledb 类似,它支持对时序数据的物化视图进行实时聚合。
关于 pipeline DB 需要注意的是,它的效率来自于它不存储原始数据,所以如果您需要存储原始数据(IMO,它应该总是被存储)。但是它看起来也很有前途,并且是非常值得一提的用例。
嗯,就是这样。我想到写这篇文章是因为我非常喜欢将关系和时间序列捆绑在一起以简化堆栈的想法,以及完整的 SQL 支持。类似 SQL 的查询的问题是,加入它仍然需要时间,而完整的 SQL 也允许轻松加入堆栈。
现在您知道了,如何在 PostgreSQL 中添加 cape 并使其成为一个超级数据库。好吧,玩笑归玩笑,在做任何设计决定之前理解所有的概念是很重要的,我希望这篇文章能帮助你获得一些理解。
下次见 JD
如果标准不是最好的呢
莎伦·麦卡琴在 Unsplash 上的照片
简单的解决方案并不总是最好的
在研究过程中,在某些时候,我需要在大矩形矩阵上评估一个特定的度量(多样性指数)。这与这个故事无关,但我说的是单细胞 RNA 测序数据。
在实践中,这有助于估计在群体中发现的不同成分的数量(例如,一本书中不同单词的数量),并且可以解释 [3]在许多复杂系统中出现的特殊幂律分布[1,2,4]。
熊猫
给定存储在文件中的数据,测量这个度量的问题可以使用著名的 pandas 库在一行 Python 代码中解决。
pd.read_csv().apply(lambda x: len(np.unique(x)))
这对于许多应用来说是很好的,并且不需要数据科学家付出任何努力来实现它是非常直接的,但是…
我需要在大桌子上测量这个数量(单细胞数据有几十万个样本),这个简单的任务对熊猫来说很慢。pandas 方法需要很多时间将数据加载到内存中,然后在每一行上评估函数。
一种更快的方法是在将行加载到内存中时立即处理它们,然后丢弃它们(节省内存是一个额外的好处),所以我在 scartch 中实现了它。
C++解决方案
我对这个特殊问题的解决方案使用了标准模板库和 Boost。
这个想法
如上所述,这个想法是在这些行可用时尽快解析它们。我定义了一个线程,读取文件,将其存储在缓冲区中,其他线程解析可用的读取行。因为我的度量是在列上估计的,所以我需要多个线程同时解析不同的行而不是到重叠,这是用一个互斥数组解决的(每列一个)。
有约束力的
使用升压。Python 我能够将我新创建的模块加载到一个 Python 模块中,所以使用它会像熊猫一样容易。
下面是一个绑定函数的例子
#include <boost/python.hpp> BOOST_PYTHON_FUNCTION_OVERLOADS(loadFile_overloads, loadFile<long>, 1, 3) BOOST_PYTHON_MODULE(pydiversity){
namespace bp = boost::python;
using namespace bp;
def("diversity", loadFile<long>, loadFile_overloads(bp::args("file", "nThreads", "verbose", "out_filename")));
}
它可以很容易地导入到 python 中
import pydiversity
pydiversity.diversity("mainTable.csv")
基准
我测量了解析一个有 10000 列和 20000 行的表的时间(你可以猜猜为什么),看起来我的解决方案比简单的熊猫应用的快 60%。此外,我的解决方案可以利用运行它的机器的全部能力,在一台多核机器上,相对于 Python 实现,加速比为 90% 。
英国泰晤士报(1785 年创刊)
- Python 使用熊猫 : (8.05 0,11)s
- Python 绑定单线程:(3.3 0,4)s
- 使用多线程的 Python 绑定:(0,71 0,14)s
- 纯 C++单线程:(3.2 0,3)s
- 纯 C++多线程:(0,66 0,11)s
加速
因为我的解决方案可以是多线程的,所以我测量了用越来越多的线程运行时的增益。我在一台 6 核机器上测量了加速比(1 倍/(最慢时间)),有一个可感知的增益。
在 6 核机器上加速。图片作者。
结论
除了这个特殊的问题,我希望能激励人们不断深入研究,并在可能的情况下实施更有效的解决方案。很多次我听到“因为这是 Python 做这件事的方式”,但作为数据科学家,我认为我们应该提高自己,总是实施新的解决方案,我们不应该每次都接受最简单的解决方案。
密码
https://github.com/fvalle1/fastDiverse/
参考
- Lazzardi S,Valle F,Mazzolini A,等单细胞转录组数据中出现的统计规律。(2021)bioRxiv 2021 . 06 . 16 . 448706。
2.马佐利尼 A,格拉尔迪 M,卡塞尔 M,等复杂组分系统中共享组分的统计。 (2018)体检 X
3.Mazzarisi O,de Azevedo-Lopes A,阿伦松·JJ,Corberi F 极大多样性和齐夫定律。(2021) arXiv:210309143
4.语言学中的统计规律。 (2016)施普林格国际出版公司。
如果我们不必在可解释性和性能之间妥协会怎么样?
小数据中的机器学习算法基准测试
在过去的几年里,我读了很多关于可解释性和性能之间的权衡(顺便说一下,这让我想起了很多偏差-方差权衡)。我见过许多图表,显示了标准机器学习算法在这两个指标方面的地位,如下所示:
- 一方面,线性模型天生简单且易于理解,只有当数据符合线性的硬约束时才能产生良好的性能
- 另一方面,我们发现了集成算法,如随机森林,甚至更进一步的深度神经网络,它们对大多数数据都有良好的性能,但代价是在没有额外策略的情况下难以解释(例如,使用时间或 SHAP )。
性能与可解释性领域的主要机器学习算法
有一类算法总是从那些图表以及机器学习的参考书和材料中缺失,即符号回归算法。拉斐尔·鲁杰罗最近写了一篇关于它的文章,名为被遗忘的机器学习算法,这说明了一切!
符号回归
那么,这个进化算法界最了解的算法是什么呢?它包括将模型构建为数学表达式**,也可以表示为表达式树**。以下示例显示了模型的数学公式,其中涉及输入特征 X 的选择,使用一元运算符(正弦、平方根和对数)将其修改为新特征,以及使用二元运算符(加法和乘法)将其交互。****
符号回归模型的示例
由于搜索相关的新特征以及如何组合它们是一个非常大的搜索空间和困难的优化问题,传统的机器学习并不真正适合处理它,符号回归的大多数算法依赖于遗传编程。在符号回归不为 ML 社区所熟知的可能原因中,我们可以列举以下几个:较慢的计算时间,缺乏与 ML 相关的基准,性能不太好,超参数数量大…
然而,在过去的几年里,事情开始发生变化:
- 回归中有几个比较不同符号回归算法与更传统算法(线性模型、决策树、随机森林、多层感知器)的基准,其中一个在大量 ML 数据集上[1]
- 最近发布的几个符号回归算法表明,它们可以实现与随机森林相当的 T2 性能,并接近 T4 梯度增强。这些算法分别是 Zoetrope 遗传编程(ZGP)【2】和特征工程自动化工具(FEAT)【3】。
符号回归算法的性能
在再次谈论可解释性之前,让我们看看符号回归算法相对于更传统的机器学习算法的表现如何。
下图是从Penn Machine Learning Benchmark数据库中对近 100 个数据集执行的基准测试的结果生成的,这些数据集具有多达 3000 个观察值。它们显示了每个算法对所有数据集运行 20 次后,归一化均方根误差(NRMSE)和 R2 的重新分配。这些算法是按平均值排序的(在 NRMSE 是从低到高,因为我们希望它尽可能接近 0,在 R2 是从高到低,给出的分数是 1,表示完全符合)。
从这些图中,特别是关于 R2 分数的图,我们看到 4 种算法明显优于其他算法,即:梯度推进、Zoetrope 遗传编程(ZGP)、随机森林和特征工程自动化工具(FEAT)。因此,这里要传达的信息是,良好的性能也可以通过符号回归来实现。
符号回归和机器学习算法在归一化均方误差(NRMSE,顶部)和 R2 分数(底部)中的性能,按所有数据集的平均值排序。最好的算法在左边。
请注意,这里的基准测试是使用大多数方法的默认参数运行的,并且为了尽可能公平起见,对线性方法进行了交叉验证。
可解释性与性能
我们现在回到我们最初的问题:这些算法在可解释性和性能测量方面表现如何?更准确地说,我们是否总是要在这两者之间做出妥协?答案是否定的,这要归功于符号回归算法,我们接下来要研究它。
下图是根据与之前相同的基准生成的。它显示了中值 R2 的性能与一些符号回归算法和标准机器学习算法的可解释性。这里的可解释性被测量为树中的节点数(对于符号回归或决策树)或系数数(对于线性模型或多层感知器)。
它表明,3 个顶级符号回归算法能够实现与随机森林一样好的性能,可解释性接近线性模型,产生人类可以理解的模型。
请注意可解释性的对数标度:这意味着符号回归算法可以实现“简单”1000 倍(就节点数量而言)的模型,而性能没有损失。此外,它们可以非常清楚地显示变量之间的相互作用,这在一些应用程序中非常有用。在上面给出的表达式树的例子中,已经发现变量 X9 和 X3 的平方根之间的相互作用。
符号回归和机器学习算法的实际性能与可解释性
基准测试的完整细节在[2]中给出,这些结果的基准测试代码可从以下 Gitlab 存储库中获得:https://git lab . devenv . mydata models . com/publications/bench-zgp-symbolic-regression。
结论
所以最后,使用符号回归,有可能获得既有好的性能又有好的可解释性的模型。取决于问题(及其大小!),为了获得可以直接解释的模型,有时牺牲一点性能(例如与深度神经网络相比)是值得的,而不需要求助于额外的方法来理解如何从模型中获得预测。
参考
[1] Orzechowski,p .,La Cava,w .,& Moore,J. H. (2018 年)。我们现在在哪里?近期符号回归方法的大型基准研究。在遗传和进化计算会议上(第 1183-1190 页)。**
[2] Boisbunon,a .,Fanara,c .,Grenet,I .,Daeden,j .,Vighi,a .,和 Schoenauer,M. (2021 年)。回归的遗传程序设计。在 2021 年 7 月 10 日至 14 日的遗传和进化计算大会(GECCO’21)上。https://doi.org/10.1145/3449639.3459349**
[3]拉卡瓦、辛格、塔加特、苏里和摩尔(2019 年)。通过进化树网络学习回归的简洁表示。在国际学术代表会议 (ICLR)。https://openreview.net/pdf?id=Hke-JhA9Y7**
如果…你必须用无代码工具构建一个数据栈,那会怎样?
最佳无代码工具及其用例的基准
图片来自 castor 的网站
在过去的几年里,我们见证了技术生态系统的巨大演变,因为无代码工具已经迅速改变了我们生产和管理软件的方式。今天,任何拥有笔记本电脑、互联网连接和大脑的人都可以使用无代码工具构建网站或应用程序。数据生态系统在很大程度上跟上了这种发展,最近出现了一系列无代码数据/机器学习工具。目标:降低现代数据堆栈每一层的技术壁垒,让尽可能多的人能够利用数据科学。无代码数据工具在数据社区产生了很多兴奋。原因是,这些工具引领了走向数据民主化的运动,是现代数据堆栈下一波创新的五大支柱之一。今天的主题是深入无代码生态系统,理解这些工具的能力/限制,并找出可用的解决方案。
什么是无代码?
无代码平台使用不涉及编写代码的编程方法。相反,用户使用图形用户界面(GUI)工作,他们可以使用模板、逻辑序列和拖放来实现所需的输出。后者可以是数据摄取、转换、分析、机器学习等。一个无代码的数据平台基本上使人们能够在不使用代码的情况下执行各种数据操作,这在传统上是不可能的。这些解决方案提供了一条捷径——利用代码的力量,但抽象掉复杂性,以便用户可以专注于设计和逻辑
无代码策略关注四个关键领域:
- 提供拖放功能或其他配置流程的可视化方式。
- 创建过滤器和数据查询以允许即时定制流程。
- 使用 API到整合来自各种来源的数据。
- 吸引非技术用户,授权他们执行给定的流程。
无代码平台不同于低代码平台。低代码简单地代表减少的编码量。借助低代码,您无需编写一行代码即可构建工作流/数据科学模型。然而,也可以通过编写自己的代码来定制它们,这增加了灵活性。
让我们看看无代码如何在数据科学/机器学习的领域中工作:
机器学习是一种痛苦的学习:你需要准备数据,训练你的模型,调整你的参数,等等。机器学习模型传统上是使用 python 等脚本语言构建的,这增加了复杂性。无代码/低代码机器学习工具,如 Google autoML,允许您快速创建机器学习模型。怎么会?主要是通过自动化机器学习过程中的一些步骤。一些工具,如 autoVIML 可以自动将你的数据放入不同的机器学习模型中,以找出哪一个最适合你的数据。自动化,或者使用拖放选项来完成这个过程的一部分,为数据团队节省了大量的时间。
无代码工具机器学习模型流程—图片由 Louise de Leyritz 提供
利害攸关的是什么?
无代码数据平台在民主化数据访问中发挥了关键作用。这些工具的广泛采用不会在一夜之间发生,但一旦发生,它将对非技术用户和数据工程师/开发人员产生同样的影响,同时为每个人带来巨大的生产力提升。
对于商业用户
无代码数据平台消除了技术障碍,使非技术用户能够操作数据。这是关键,因为企业开展分析工作的方式已经发生了转变。事实上,如今的公司都在从事运营分析——一种让“运营”团队可以访问数据的方法,用于运营用例(销售、营销、…).
我们将它与仅使用数据生成仪表板和 BI 报告的更经典的方法区分开来,在这种方法中,只有数据科学家/数据分析师会与数据争论。运营分析不是使用数据来影响长期战略,而是为企业的日常运营提供战略信息。简而言之,就是让公司的数据发挥作用,让组织中的每个人都能做出更明智的决策。
实际上,这意味着销售、营销和其他业务团队每天都要与数据和分析打交道,进行各种分析来启发他们的短期战略。这种趋势只会加剧,这意味着越来越多的人,尤其是非技术人员,将数据作为他们日常工作的一部分。易于使用的数据/机器学习平台允许没有编码技能的用户优化日常操作,并更有效地解决业务问题。对于这些平台来说,学习曲线要平滑得多,这意味着用户可以快速进行价值生成分析,而不是花几个月来掌握复杂的软件。
更重要的是,无代码是为了让非技术人员能够自己在不同的云服务之间分析和路由数据,而不是被迫拿着票等待数据工程师和数据科学家为他们做这些工作(这可能需要几天或几周)。
对于数据工程师和数据科学家来说
首先,无代码并不意味着没有编码员,数据工程师/科学家不会很快消失。我们不要忘记,无代码工具是用代码构建的,这些平台的存在是因为有优秀的开发人员一直在努力寻找更好的解决方案。
无代码数据解决方案赋予了新的现代数据堆栈的每一个角色,尤其是技术奇才。事实上,这些平台自动化了数据处理过程中可以自动化的东西。数据工程师、数据科学家和其他训练有素的专家可以停止从事可以自动化的重复任务,转而专注于解决更大、更有趣的问题,比如系统设计中的偏差。
无代码数据工具不应该只被非编码人员使用。事实上,完全精通 python 的数据人员也可以通过使用无代码方法进行数据分析而获益。使用无代码方法可以让您比使用更传统、代码量更大的方法更快地处理数据。与一个对编程一无所知的人相比,程序员也能更好地理解无代码工作的逻辑。
对于企业
采用无代码工具意味着组织不需要依赖工程师和技术数据人员团队来利用他们的数据。技术人才稀缺且昂贵。占美国市场 99%的中小型公司通常雇不起大数据团队。无代码平台代表了一种部署定制数据处理解决方案的新方法,否则大多数组织将无法实现。小公司可以开始利用机器学习和数据分析,而不必进行大量投资。
无代码工具的缺点
另一方面,无代码工具也有一些限制,在您决定构建无代码数据栈之前,应该考虑到这些限制。
刚性模板
从设计上来说,无代码工具提供的选项不如编码工具精炼。这是完全正常的,就像你可以用文字表达比手势更多的东西一样。当然,现在手势变得非常方便,但这并不意味着你应该只把它作为唯一的交流方式。没有代码工具提供各种可以被配置来满足一组用例的模板。然而,一旦您遇到不可避免的边缘用例,或者需要引入一个定制层,无代码工具就不再有用了。这种无代码的限制在数据处理领域尤其不利,因为在数据堆栈的每一层都有无数不同的用例。
例如,如果您决定完全依赖无代码平台进行数据科学和机器学习,您将很快陷入困境。在设计机器学习模型的时候,你希望你的模型尽可能的微调。有了可视化界面和拖放功能,你很快就会遇到这些平台的边界。原因是,这些平台都是基于模型的。设计数据科学/机器学习工具的开发人员通常决定提出易于理解和使用的简单模型,目的是使机器学习和数据科学能够为业务用户所用。问题是,简单的模型缺乏灵活性,因为人们只能在模型的框架内开发。现在,平台设计者可以选择更精细的模型,从而获得更大的灵活性。但是掌握这些工具的学习曲线显然比简单的解决方案要陡峭得多。这与无代码平台的目的背道而驰,即让非技术用户也能接触到数据科学和机器学习。因此,在机器学习模型的易用性和微调之间存在一个关键的权衡。这就是为什么你应该知道你在为谁购买软件:数据科学家和机器学习工程师,还是商业用户?最终用户会影响你选择的软件类型。
平台依赖性
无代码工具的问题是,遇到供应商锁定问题只是时间问题。假设您决定使用无代码工具来编排您的报告工作流。问题是,一旦这些工作流围绕这个工具建立起来,你就完全依赖这个工具了。如果价格上涨,你必须继续支付或自己重建整个系统。在这两种情况下,这都不是一个理想的位置。
哪些非代码工具适合您的组织?
下面,你会发现一个无代码工具的前景,它可以帮助你选择一个适合你公司需要的工具。
无代码数据栈。全基准这里。—图片由路易斯·德·莱里兹提供
要获得完整的无代码工具基准测试和更多分类标准,请单击此处。
更现代的数据堆栈基准?
点击此处,了解更多关于现代数据堆栈的基准测试和分析。我们写了利用数据资产时涉及的所有过程:从现代数据堆栈到数据团队的组成,再到数据治理。我们的博客涵盖了从数据中创造有形价值的技术和非技术方面。如果你是一名数据领导者,并希望更深入地讨论这些话题,请加入我们为此创建的社区!
在 Castor,我们正在开发一个数据文档工具 Figma,Slack generation。或者对 Fivetran,Looker,Snowflake,DBT 的狂热爱好者来说是数据方面的。我们将我们的目录设计得易于使用、令人愉快且友好。
Want 去看看吗?联系我们,我们将向您展示一个演示。
语料库中什么是单词嵌入?
这些 NLP 模型中的一些很拗口
马修·费尼在 Unsplash 上的照片
虽然计算机非常擅长处理数字和执行逻辑命令,但它们仍然难以理解人类语言的细微差别!单词嵌入旨在通过构建捕捉意义和上下文的单词的密集矢量表示来弥合这一差距,用于下游任务,如问答和情感分析。单词嵌入技术的研究构成了计算语言学领域的一部分。在本文中,我们将探讨建模语言的挑战,以及单词嵌入的演变,从 Word2Vec 到 BERT。
计算语言学
在最近对神经网络重新产生兴趣之前,计算语言学严重依赖于语言学理论、手工制作的规则和基于计数的技术。今天,最先进的计算语言学模型是通过结合大型带注释的语料库和深度学习模型开发的,通常缺乏语言学理论和手工制作的特征。在这篇文章中,我的目的是解释单词嵌入的基本原理和不同的技术,同时尽量减少行话,避免使用微积分。
“什么是语料库/语料库?”你可能会问。非常好的问题。在语言学中,语料库是指一种语言中特定语言元素的完整集合,如单词或句子。通常,语料库(或语料库)是新闻文章、小说、电影对白等的单语(统一语言)集合。
罕见的和看不见的单词
大型语料库中单词的频率分布遵循一种叫做齐夫定律的东西。该定律指出,给定一些自然语言话语的语料库,任何单词的频率与其排名成反比。这意味着,如果像“the”这样的单词排名为 1(意味着它是最常用的单词),那么它在语料库中的相对频率为 1。而且,如果像“of”这样的单词的等级是 2,那么它的相对频率将是 1/2。诸如此类。
来源于https://www . smashingmagazine . com/2012/05/stop-re design-start-tuning-your-site/
Zipf 定律的含义是,排名为 1000 的单词将每出现一个像“The”这样的排名第一的单词就出现一次。随着词汇量的增加,情况会变得更糟!Zipf 定律意味着一些单词非常罕见,在你的训练数据中可能只出现几次。或者更糟糕的是,这些罕见的单词在你的训练数据中不存在,但在你的测试数据中存在,也被称为未收录(OOV)单词。这意味着研究人员需要采用不同的策略来增加不经常出现的词(也称为分布的长尾)的样本,并建立对看不见的词稳健的模型。应对这些挑战的一些策略包括上采样,使用 n-gram 嵌入(如 FastText)和字符级嵌入,如 ElMo。
Word2Vec,OG
每个尝试过 NLP 的人可能都熟悉谷歌研究人员在 2013 年推出的 Word2Vec 。Word2Vec 由两种不同的架构组成:连续词包(或 CBOW)和 Skip-gram。这两个模型都产生了一个单词嵌入空间,在这个空间中可以找到相似的单词,但是它们的架构和训练技术略有不同。
来源于https://arxiv.org/pdf/1309.4168v1.pdf
使用 CBOW,我们通过尝试预测给定上下文向量的目标单词 w 来训练模型。Skip-gram 是相反的;我们通过尝试预测给定目标单词 w 的上下文向量来训练模型。上下文向量只是在我们的目标单词 w 周围找到的单词的单词包表示,如上图所示。Skip-gram 在计算上比 CBOW 更昂贵,因此应用对远距离单词的下采样来给予它们更小的权重。为了解决罕见词和常见词之间的不平衡,作者还积极地对语料库进行子采样——丢弃一个词的概率与其频率成正比。
研究人员还展示了 Word2Vec 的显著组合属性,例如,人们可以通过单词嵌入来执行向量加法和减法,并找到*【国王】* + 【女人】 = 【女王】。Word2Vec 打开了单词嵌入世界的大门,开启了语言处理需要更大更差的机器,越来越少依赖语言学知识的十年。
快速文本
到目前为止,我们讨论的嵌入技术用不同的向量表示词汇表中的每个单词,因此忽略了单词的内部结构。FastText 扩展了 Skip-gram 模型,还考虑了子词信息。这种模式对于语法关系如主语、谓语、宾语等的语言是理想的。通过词形变化来反映——单词被变形以表达其含义或语法关系的变化,而不是通过单词的相对位置或添加助词来表达。
这样做的原因是 FastText 学习字符 n 元语法的向量(几乎像子词一样——我们一会儿会谈到这一点)。然后,单词被表示为它们的 n 元文法的向量之和。子词的创建如下:
- 每个单词被分解成一组字符 n 元语法,每个单词的开头和结尾都有特殊的边界符号,
- 原始单词也保留在集合中,
- 例如,对于大小为 3 的 n 元语法和单词“there ”,我们有以下 n 元语法:
< th , the , her , ere ,re>and the special feature。
特征**<>和之间有明显的区别。这种简单的方法支持跨词汇表共享表示,可以更好地处理罕见的单词,甚至可以处理看不见的单词(以前的模型缺乏这一特性)。它训练速度快,不需要对单词进行预处理,也不需要任何语言知识。作者进行了定性分析,并表明他们的技术优于不考虑子词信息的模型。**
工程与后勤管理局
ELMo 是由 AllenNLP 于 2018 年开发的一个 NLP 框架。它构建了深度的、语境化的单词嵌入,可以处理看不见的单词、句法和语义,以及多义性(单词在给定的语境下具有多重含义)。ELMo 利用预先训练的两层双向 LSTM 模型。从预训练的深度双向 LSTM 模型的内部状态中提取单词向量。ELMo 不是学习单词级标记的表示,而是学习字符级标记的表示。这使得它可以在测试和推理过程中有效地处理词汇之外的单词。
比尔斯特姆的内部运作。来自https://www.analyticsvidhya.com/
该架构由堆叠在一起的两层组成。每一层有两个通道,一个向前通道和一个向后通道。为了构造字符嵌入,ELMo 在输入单词上使用字符级卷积。正向传递对导致并包括某个单词的句子的上下文进行编码。反向传递对该单词之后和包括该单词的句子的上下文进行编码。前向和后向 LSTM 隐藏向量表示的组合被连接并馈入 biLSTM 的第二层。最终表示(ELMo)是 biLSTM 的第二层的原始单词向量和级联的前向和后向 LSTM 隐藏向量表示的加权和。
让 ELMo 在当时(是的,2018 年是 NLP 年很久以前的事)如此具有革命性的是,每个单词嵌入都编码了句子的上下文,并且单词嵌入是其字符的函数。因此,ELMo 同时解决了多义词和看不见的词所带来的挑战。除了英语,预先训练的 ELMo 单词嵌入在葡萄牙语、日语、德语和巴斯克语中可用。预先训练的单词嵌入可以在下游任务中使用,或者根据特定领域的数据进一步调整。
伯特
谷歌大脑的研究人员在 2018 年推出了 BERT ,比 ELMo 晚了几个月。当时,它打破了 11 个基准 NLP 任务的记录,包括胶水任务集(由 9 个任务组成)小队和 SWAG 。(是的,名字很时髦,NLP 充满了真正有趣的人!)
来源于https://synced review . com/2020/03/13/Bert lang-helps-researchers-choose-bet-models/
BERT 代表来自变压器的双向编码器表示。不出所料,BERT 使用了 Transformer 架构的编码器部分,并在未标记的books corpus(800 万字)和未标记的英语维基百科(2500 万字)上以伪监督的方式进行了一次预训练(稍后将详细介绍)。然后,可以通过添加一个附加的输出(分类)层来微调预训练的 BERT,以用于各种 NLP 任务。
如果你对变压器(和注意力机制)不熟悉,看看我写的这篇文章。在他们令人难忘的题为“注意力是你所需要的全部”的论文中,谷歌大脑的研究人员介绍了 Transformer,这是一种新型的编码器-解码器模型,它仅依赖注意力来绘制输入和输出序列之间的全局依赖关系。该模型使用位置编码注入有关标记的相对和绝对位置的信息。令牌表示被计算为令牌嵌入、段嵌入和位置编码的总和。
本质上,BERT 由堆叠的变压器编码器层组成。在 Google Brain 的论文中,他们引入了两种变体:BERT Base 和 BERT Large。前者包括 12 个编码器层,后者包括 24 个。与 ELMo 类似,BERT 双向处理序列,这使得模型能够从左到右捕捉上下文,然后再从右到左捕捉。每个编码器层应用自关注,并通过前馈网络传递其输出,然后传递到下一个编码器。
阿拉马尔,J .(2018)。图解变压器[博客帖子]。检索自https://jalammar.github.io/illustrated-transformer/
使用两个任务以伪监督方式对 BERT 进行预训练:
- 掩蔽语言建模
- 下一句预测
为什么我说伪监督是因为神经网络天生就需要监督才能学习。为了训练转换器,我们将非监督任务转换成监督任务。我们可以对文本这样做,文本可以被认为是一系列单词。请记住,术语双向意味着一个单词的上下文是它前面的单词和后面的单词的函数。自我关注与双向处理相结合意味着语言模型是全方位的,这使得实际学习潜在变量变得困难。随之而来的是屏蔽语言模型,它利用文本的顺序性,并假设一个单词可以通过它周围的单词(上下文)来预测。对于这个训练任务,所有单词的 15%被掩蔽。**
MLM 任务帮助模型学习不同单词之间的关系。下一句预测 (NSP)任务帮助模型学习不同句子之间的关系。NSP 的结构是一个二元分类任务:给定句子 A 和句子 B,B 是否跟随 A,或者它只是一个随机的句子?
这两项训练任务足以学习真正复杂的语言结构——事实上,一篇名为 “伯特对语言的结构了解多少?” 演示了 BERT 的层是如何捕捉越来越多的语言语法粒度的。作者表明,BERT 的底层捕捉短语级信息,而中间层捕捉句法信息,顶层捕捉语义信息。
自 2019 年起,谷歌在谷歌搜索中加入了 BERT,以进一步提高搜索结果的质量。搜索查询通过 BERT(使用最新的云 TPU)运行,特征表示用于对最佳结果进行排名。这张图展示了这个著名的搜索引擎在使用 BERT 后有了多大的改进。
BERT 被添加到搜索引擎前后的谷歌搜索结果。来源于 https://www.seroundtable.com/google-bert-update-28427.html
自诞生以来,BERT 已经启发了许多最新的 NLP 架构、训练方法和语言模型,包括谷歌的 TransformerXL ,OpenAI 的 GPT-3 , XLNet ,罗伯塔,以及多语言 BERT 。它对语言理解的通用方法意味着它可以用最少的努力对各种 NLP 任务进行微调,包括问答、情感分析、句子对分类和命名实体识别。
结论
虽然单词嵌入非常有用,并且很容易从文本语料库中编译,但它们不是神奇的独角兽。我们强调了这样一个事实,即许多单词嵌入与歧义性和词汇表之外的单词作斗争。并且虽然基于接近度推断单词之间的语义相关度相对容易,但是基于单词嵌入推导出具体的关系类型却要困难得多。例如,即使小狗和狗可能被发现靠得很近,但知道小狗是一只幼犬就更具挑战性了。单词嵌入也已经被证明反映了他们接受训练的文本中存在的种族和性别偏见。
当对大量数据进行训练时,单词嵌入在学习非常复杂的语言结构的能力方面确实非常出色。对于未经培训的人(或未经培训的 4IR 经理)来说,它甚至可能看起来很神奇,因此当我们使用单词嵌入时,强调并记住这些限制是非常重要的。**
我很想听到你的反馈。请随时给我发电子邮件,地址是jeanne.e.daniel@gmail.com。