TowardsDataScience 博客中文翻译 2016~2018(二百三十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

ProGAN:NVIDIA 如何生成前所未有质量的图像

原文:https://towardsdatascience.com/progan-how-nvidia-generated-images-of-unprecedented-quality-51c98ec2cbd2?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Images generated by progressively growing GANs with ProGAN. These are not real people. *Image taken from the paper.

逐渐生长的 GANs 使它们变得更大更稳定

上面高分辨率图像中的人看起来可能是真实的,但实际上不是——他们是由一个对数百万名人图像进行训练的程序合成的。“ProGAN”是 NVIDIA 首创的一种生成性对抗网络的口语术语。Karras 等人去年在为提高质量、稳定性和变异而进行的 GANs 渐进生长中发表了该研究。在这篇文章中,我们将通过这篇文章来了解这种类型的网络是如何工作的,它是如何产生像上面这样的图像的,以及为什么这是一个突破。

这篇文章假设你熟悉一般视觉任务的深度学习,但不是说你对 GANs 有广泛的了解。

甘斯简史

一种新的生成模型

生成敌对网络(GANs)已经存在几年了。蒙特利尔大学的 Ian Goodfellow 和他的同事在 2014 年的一篇著名论文中介绍了它们,从那以后它们一直是一个热门的研究领域。

简而言之,GANs 是一种生成模型,它试图合成与训练数据难以区分的新数据。这是一种无监督学习的形式。它有两个竞争锁定的神经网络:一个是发生器,它被输入一个随机数向量并输出合成数据;一个是鉴别器,它被输入一条数据并输出它来自训练集的概率(与合成相对)。换句话说,生成器创建“假的”,鉴别器试图将这些“假的”样本与“真的”样本区分开来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

In a typical GAN, a random code z is fed into the generator G to produce a ‘fake’ sample. A discriminator network D is then (separately) fed both the generated sample x’, and a real sample x from the training set. It assigns a probability of being ‘real’ to each, which depends on how convincing the fake is, and how sophisticated the discriminator has become. Both these probabilities are then used to compute the adversarial loss, from which we train both D and G via backprop.

这两个网络开始时在它们的任务中表现很差,但是当训练顺利时,它们协同改进,直到生成器产生令人信服的假货。这两个网络陷入了一场零和游戏,其中一个网络的成功相当于另一个网络的失败。正因为如此,在任何给定时间损失函数的值都不能告诉我们系统整体训练得如何,只能告诉我们发生器或鉴别器相对于另一个做得如何。

我们输入到生成器中的随机代码尤其重要。它是使合成样本成为新的和独特的噪声源。它也倾向于以有趣的方式控制输出。当我们在随机码的向量空间周围进行线性插值时,相应生成的输出也进行平滑插值,有时甚至以我们人类直观的方式进行插值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Digits obtained in a GAN trained on MNIST by linearly interpolating the random code z. As you can see, it appears to smoothly transition from a 1 to a 5, suggesting that it has learned some internal representation of these numbers. *Image taken from the Goodfellow paper.

挑战和局限

虽然这对于对学习无标记数据表示的新方法感兴趣的研究人员来说非常令人兴奋,但是在实践中使用 GANs 通常是相当困难的。从一开始,从业者就注意到他们在训练中面临挑战。这很大程度上是由于一个叫做模式崩溃的问题。当鉴别器基本上“赢得”游戏,并且生成器的训练梯度变得越来越没用时,模式崩溃就会发生。这可能在训练期间相对较快地发生,并且当它发生时,生成器每次都开始输出几乎相同的样本。它停止变好。

就连伊恩·古德费勒也承认,他很幸运,因为他根据直觉尝试为他的第一个 GAN 选择的超参数有效——它们可能很容易失败。自那以后的几年里,研究界已经想出了许多方法来使训练更加可靠。某些体系结构似乎比其他体系结构工作得更好,并且已经探索了几种对抗性损失函数的变体。其中一些似乎比其他的更稳定。我建议甘人生而平等吗?Lucic 等人的一项大规模研究,如果您想了解更多信息,这是一篇关于 GAN 景观的优秀综述。

然而,这些方法都没有完全消除这个问题,模式崩溃的理论原因仍然是一个积极的研究领域。

生成图像

图像生成的一个重大改进发生在 2016 年,当时拉德福德等人发表了利用深度卷积生成对抗网络的无监督表示学习。他们发现了一系列 GAN 架构,可以很好地创建图像,简称为“DC GAN”。DCGANs 摆脱了某些 CNN 中使用的池层,并依靠卷积和转置卷积来改变表示大小。大多数层之后是批量规范化和泄漏 ReLU 激活。

然而,即使是 DCGANs 也只能创建特定大小的图像。图像的分辨率越高,鉴别者就越容易区分“真”图像和“假”图像。这使得模式崩溃的可能性更大。虽然合成 32x32 甚至 128x128 的图像已经成为常规的教程材料,但在实践中生成分辨率高于 512x512 的图像仍然具有挑战性。

我应该注意到,一些图像到图像的转换技术 可以处理高分辨率,但这是一项不同的任务,因为这些技术只学习改变输入图像的表面特征,而不是从头开始生成全新的图像。

可以想象,从零开始生成大型图像的困难严重限制了 GANs 在许多实际应用中的实用性。

向更高的图像分辨率发展

正是在这种背景下,NVIDIA 的团队在本文的顶部展示了由他们的新程序生成的令人震惊的 1024x1024 图像。更好的是,他们不知道为什么他们的技术不能用于合成更高分辨率的图像。这甚至比以前的 GANs 更有效率(就训练时间而言)。

生长 gan

该团队并没有像通常那样尝试一次训练发生器和鉴别器的所有层,而是逐渐地生长它们的 GAN,一次一层,以处理分辨率越来越高的图像版本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The ProGAN starts out generating very low resolution images. When training stabilizes, a new layer is added and the resolution is doubled. This continues until the output reaches the desired resolution. By progressively growing the networks in this fashion, high-level structure is learned first, and training is stabilized.

为了做到这一点,他们首先人为地将他们的训练图像缩小到一个非常小的起始分辨率(只有 4x4 像素)。他们创建了一个只有几层的生成器来合成这种低分辨率的图像,以及一个相应的镜像架构鉴别器。因为这些网络非常小,所以它们训练相对较快,并且只学习了在严重模糊的图像中可见的大规模结构。

当第一层完成训练后,他们将另一层添加到 G 和 D,将输出分辨率加倍到 8×8。早期层中训练的权重被保留,但不被锁定,新层逐渐淡入以帮助稳定过渡(稍后将详细介绍)。训练继续进行,直到 GAN 再次合成令人信服的图像,这一次是在新的 8×8 分辨率下。

通过这种方式,他们继续添加图层,将分辨率提高一倍,并进行训练,直到达到所需的输出大小。

种植甘蔗的有效性

通过逐渐提高分辨率,我们不断要求网络学习整个问题中更简单的部分*。增量学习过程极大地稳定了训练。这与我们将在下面讨论的一些训练细节相结合,降低了模式崩溃的可能性。*

从低到高分辨率的趋势也迫使逐渐增长的网络首先关注高级结构(在图像的最模糊版本中可辨别的模式),然后填充细节。这通过降低网络将得到某些严重错误的高级结构的可能性来提高最终图像的质量。

逐渐增加网络规模也比一次初始化所有层的更传统的方法在计算上更有效。层数越少,训练速度越快,因为其中的参数越少。由于除了最后一组训练迭代之外的所有迭代都是用最终层的子集来完成的,这导致了一些令人印象深刻的效率增益。Karras 等人发现,根据输出分辨率的不同,他们的程序通常比相应的传统 GAN 快 2-6 倍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

*This graph reflects the superior training efficiency of progressive growth. For a given amount of training time, ProGAN (green) was able to train on many more images than a traditional GAN (blue). The difference is most extreme in early training, since this is when the progressively grown network is smallest. Image taken from the paper.

建筑

除了逐渐扩大网络,NVIDIA 论文的作者还进行了其他几项架构更改,以促进稳定、高效的培训。

给定分辨率 k 的生成器架构遵循一个熟悉的高级模式:每组层都将表示大小加倍,并将通道数量减半,直到输出层创建一个只有三个对应于 RGB 通道的图像。鉴别器的作用几乎完全相反,它将制图表达的大小减半,并将每组图层的通道数加倍。在这两种网络中,通过将滤波器的数量限制在合理的值(如 512)来中断通道倍增模式,以防止参数的总数变得太高。

在这个意义上,ProGAN 类似于早期的图像生成 GANs。DCGAN 使用了类似的结构。

然而,DCGAN 使用转置卷积来改变表示大小。相比之下,ProGAN 使用最近邻进行向上扩展,使用平均池进行向下扩展。这些是简单的操作,不需要学习参数。然后是两个卷积层。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A detailed view of the generator architecture, when it has “grown” to resolution k. Each set of layers doubles the resolution size with a nearest neighbor upscaling operation followed by two convolutions. To stabilize training, the most recently added layer is “faded in”. This process is controlled by α, a number between 0 and 1 that is linearly increased over many training iterations until the new layer is fully in place.

“淡入”新图层

每次在现有分辨率下完成训练时,通过添加一组新的层使分辨率加倍,网络逐渐增长。当添加新层时,先前层中的参数保持可训练状态。

为了防止突然增加新的顶层对先前存在的较低层造成冲击,顶层被线性“淡入”。这种淡入由参数 α 控制,该参数在许多训练迭代过程中从 0 线性插值到 1。如上图所示,最终生成的图像是生成器中最后一层和倒数第二层的加权和。

像素标准化

作者使用了像素归一化*,而不是通常使用的批量归一化。这个“pixelnorm”层没有可训练的权重。它将每个像素中的特征向量归一化为单位长度,并应用于生成器中的卷积层之后。这样做是为了防止信号幅度在训练期间失控。*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The values of each pixel (x, y) across C channels are normalized to a fixed length. Here, a is the input tensor, b is the output tensor, and ε is a small value to prevent dividing by zero.

鉴别器

生成器和鉴别器大致是彼此的镜像,并且总是同步增长。鉴别器获取一个输入图像 x ,它或者是发生器的输出,或者是缩小到当前训练分辨率的训练图像。作为典型的 GAN 鉴别器,它试图将“真实的”训练集图像与“虚假的”生成的图像区分开。它输出 D(x),这是一个捕获鉴别器对输入图像来自训练集的置信度的值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A detailed view of the discriminator architecture, when it has “grown” to resolution k. Here, x is the input image (either generated or from the training set), α is the extent to which the last generator layer is “faded in”, and D(x) is the probability the generator has assigned to x being from the training set. The representation size is halved at each set of layers by an average pooling operation.

小批量标准偏差

一般来说,GANs 倾向于产生比训练集中发现的变化少的样本。解决这一问题的一种方法是让鉴别器计算整个批次的统计数据,并使用该信息来帮助区分“真实的”训练数据批次和“虚假的”生成的批次。这鼓励生成器产生更多的变化,使得跨生成的批次计算的统计数据更接近于来自训练数据批次的统计数据。

在 ProGAN 中,这是通过在鉴别器末端附近插入一个“迷你批次标准偏差”层来实现的。这一层没有可训练的参数。它计算整批特征图像素的标准偏差,并将它们作为额外通道附加。

均衡学习率

作者发现,为了确保发生器和鉴别器之间的良性竞争,各层以相似的速度学习是至关重要的。为了达到这个均衡学习率*,他们根据一个层的权重来缩放该层的权重。他们使用与在 He 初始化中使用的相同公式来做这个,除了他们在训练期间每个向前传球时在*中做这个,而不仅仅是在初始化时。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Learning rates can be equalized across layers by scaling the weights before every forward pass. For example, before performing a convolution with f filters of size [k, k, c], we would scale the weights of those filters as shown above.

由于这种干预,权重初始化不需要任何花哨的技巧——简单地用标准正态分布初始化权重就可以了。

损失函数

作者表示,损失函数的选择与他们的贡献是正交的——这意味着上述改进都不依赖于特定的损失函数。使用最近几年出现的任何流行的 GAN 损耗函数都是合理的。

然而,如果你希望完全遵循这篇论文,他们使用了改进的 Wasserstein 损失函数,也称为 WGAN-GP 。这是一个比较常见的损失函数,已经被证明可以稳定训练,提高收敛的几率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The WGAN-GP loss equations. Here, x’ is the generated image, x is an image from the training set, and D is the discriminator. GP is a gradient penalty that helps stabilize training. The a term in the gradient penalty refers to a tensor of random numbers between 0 and 1, chosen uniformly at random. It is common to set λ = 10. Since we usually train in batches, the above losses are usually averaged over the minibatch.

需要注意的是,WGAN-GP 损失函数期望 D(x)和 D(x’)是无界的实数值。换句话说,鉴别器的输出是而不是预期的 0 和 1 之间的值。这与传统的 GAN 公式略有不同,后者将鉴频器的输出视为概率。

结果

如果你已经做到了这一步,恭喜你!现在,您已经对最先进的图像生成算法之一有了很好的理解。如果你想看到更多的训练细节,有一个由 NVIDIA 团队发布的优秀的官方实现。他们也有一个关于这个话题的谈话

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The output of ProGAN when we smoothly interpolate over the input vector, z.

感谢阅读!我希望这是一个有用的概述。如果你对这篇文章有任何问题、修正或建议,请留下你的评论。

编程文献 II —连续性是递归的

原文:https://towardsdatascience.com/programming-literature-ii-continuity-is-recursive-1efc44474acd?source=collection_archive---------5-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更进一步,翻译了一部经典作品

不久前,我在 medium 上写了一篇文章,介绍了“编程文学”这个相当愚蠢的想法。要点是为人类而不是为计算机写程序,把它们写成文学作品,努力追求美观和表现力,而不是其他品质,比如可维护性或…功能性。

这样一种艺术的可能表现形式之一(我能称之为艺术吗?)可能是对原创故事的阐述,就像上一篇文章中的那样。但正如其他媒体一样,它可以从前辈那里获得灵感,在这种情况下,是以翻译现有文学作品的形式。

事实上,它最初的目的不是为了证明一个原创的故事,而是基于一个我认为具有独特特征的作品,可以用编程语言非常明确地表达出来。它也非常短,易于管理。这个故事是胡里奥·科塔萨尔的《T2 公园的延续》。

事不宜迟,故事是这样的:

You can find the original here

你看到了吗?公园的连续性是一个以与故事开头完全吻合的事件结尾的故事。也就是说,如果你读到故事的结尾,又从头开始读,故事继续,有意义。它还无限期地在一个故事中嵌套一个故事。

作为一名程序员,当我想到这一点时,我首先想到的是 递归 。这在原著中并不明确,但人们可以说公园的连续性是一个递归的故事:一旦它结束,它引用自己并再次开始,重复相同的事件。

在翻译版本中,我冒昧地通过调用:

continuity(theMan, theNovel)

到目前为止,这是我用编程写的最长的故事。它也是第一部从自然语言翻译过来的作品。那么,从这个练习中我们可以得出什么结论呢?

翻译比预期的要难

故事很短。不会发生很多事。尽管如此,我还是很难把它翻译成 Groovy,主要是因为它有相当多的不常见和广泛的句子,并且为这些句子想出好的和有效的表达需要大量的大脑周期。

结果似乎过于复杂

我的目标之一是试图保留大部分用自然语言表达的信息。这导致代码看起来比它应该的更复杂。作为程序员,我们被训练得尽可能保持代码简单。我们到处拥抱亲吻原则。此外,至少对我来说,代码美丽的部分原因是它的简单性。

所以当我看着用 Groovy 写的故事时,我不禁觉得应该更简单一些。

没有太多的编程正在进行

我喜欢在第一个故事中包含一些常见的编程模式和工具,比如声明一个类,或者使用数组文字和范围来表示重复。在某种程度上,通过使用这些工具和模式,故事利用了它所使用的语言。

我发现在这个故事中很难使用它们,不知道是因为我专注于尽可能忠实地翻译,还是因为这个故事没有提供很多使用它们的机会。

有用!(作为文学作品)

我可能有偏见,但我认为一个人可以阅读这个故事,理解它,跟随它,享受它,甚至发现它很美。我个人更喜欢原著,但我也能享受阅读这本书的乐趣。

那么,下一步是什么?

我可能会尝试用静态类型的语言写一个原创的故事,并让它编译。和诗歌一样,用受限的语言讲述一些东西,也有一点美。

我也一直在寻找类似的想法,并发现一些其他人做的工作。我大学里的一个老师甚至设法为学生写了一个练习,讲述《守望者》电影的故事,一个学生写了一个 Haskell 程序,可以编译,也是一部文学作品。我可能也会对此稍加评论。

和以前一样,我想鼓励任何读到这篇文章的人用他最喜欢的语言写下他/她自己的故事。

感谢您的阅读!

Python 中的进度条

原文:https://towardsdatascience.com/progress-bars-in-python-4b44e8a4c482?source=collection_archive---------3-----------------------

就像被监视的锅永远不会沸腾一样,被监视的循环永远不会结束。当处理大型数据集时,即使是最简单的操作也会花费小时。进度条有助于减少数据处理工作的麻烦,因为:

  1. 你会得到一个可靠的估计需要多长时间。
  2. 如果卡住了,你可以立即看到。

第一点在商业环境中尤其有价值,有一个可靠的交货估计可以让你看起来非常专业。我发现的给 Python 代码添加进度条的最好的/唯一的方法是使用 tqdm 。虽然 tqdm 超级容易使用,但是设置起来可能有点麻烦,尤其是如果您使用 JupyterLab (您完全应该这样做)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

tqdm in action

在仔细研究了 StackOverflow 和一些尝试和错误之后,我想我已经找到了一个让 tqdm 启动并运行的可靠方法(即使是使用 JupyterLab)!

设置 tqdm

首先,用您选择的包管理器(pip、pipenv、anaconda 等)安装 tqdm。安装完成后,您可以运行以下命令来激活 JupyterLab 的 ipywidgets 插件,

> pip install ipywidgets 
> jupyter nbextension enable --py widgetsnbextension
> jupyter labextension install @jupyter-widgets/jupyterlab-manager

要在笔记本中激活 tqdm,您只需添加一个单元格,

%%capture
from tqdm import tqdm_notebook as tqdm
tqdm().pandas()

如果您只是打算在脚本中使用 tqdm,那么您可以跳过这两个步骤!

使用 tqdm

tqdm()包装任何 iterable 都可以得到进度条。举个例子,

my_list = list(range(100))for x in tqdm(my_list):
    pass

会给你一个(非常快的)进度条。您还可以更明确地使用 tqdm,

my_list = list(range(100))with tqdm(total=len(my_list)) as pbar:
    for x in my_list:
        pbar.update(1)

还有一个熊猫的整合,

df.progress_apply(lambda x: pass)

关于使用 tqdm 的更多内容,包括嵌套进度条,请查看他们的文档

级数

原文:https://towardsdatascience.com/progressions-eb79a573f7f1?source=collection_archive---------4-----------------------

利用马尔可夫链提取歌曲相似度

你和你的朋友在公路旅行,播放列表中出现了经典的 Ice Ice Baby 简介。为了这一刻,你已经在浴室里练习了 1000 次;这是你的重大突破。引子结束时,你突然开始一段激烈的说唱,只听到:

“嗯,巴巴·德
嗯,流浪汉巴德……”——女王

这是皇后乐队的《压力下的 T3》和《T4》,在接下来的旅程中,你尴尬地沉默着,承受着谦卑的压力。

不要对自己太苛刻!许多歌曲听起来极其相似,无论是相似的旋律还是匹配的歌词。现代歌曲往往遵循同样的和弦结构。这就是为什么有时你可能会听到一首歌曲的器乐部分,并认为这是一首不同的歌曲。现代音乐并不缺乏创造力或创新,而是朝着观众认为在审美上悦耳的方向发展。

Progressions 是一个网络应用程序,允许你选择一首歌曲或键入和弦进行,并对和弦进行类似的其他歌曲进行排名。这对初学吉他的人来说可能是有用的,可以增加他们的弹药库,找到与他们已经知道的歌曲相似的歌曲。这也可以帮助音乐编曲者找到他们可以拼凑成一首混合曲或混搭曲的曲调。或者你可以简单地用它来探索流行歌曲之间的相似性。

先决条件:使用术语和概念时对音乐理论的基本理解

介绍

仅仅一首歌就包含了丰富的信息。每个小节、和弦、音符、节奏值和音量强度都会随时间变化。此外,每种乐器或声音都会发出不同的音调属性,从而创建数据层。除此之外,我们还有关于歌曲基调、创作时间、流派等等的元数据。音乐学家多年的研究让位于从提取主题或可识别的结构以及历史背景中识别歌曲的复杂性。自然语言处理技术已经被用于分析歌词,而录音的信号处理已经被用于诸如流派分类之类的事情。世界上有超过 9700 万首歌曲,音乐无疑提供了大数据。

音乐的时间性允许我们把一首曲子作为一系列事件来分析。例如,约翰·科尔特兰的《大踏步》 improv 就是一系列不同音符的简单组合,带有一点随机性。这让我们可以将音乐建模为一个随机过程,一系列发生在某个时间媒介上的随机事件。

对随机过程建模的一个简单方法是使用马尔可夫链。一阶马尔可夫链遵循下面的简单性质。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Markov Property

这就是说,序列中下一个状态的概率只是有条件地依赖于当前状态。在一段旋律中,下一个音符的值只取决于当前的音符,而不考虑之前旋律的其余部分。关于马尔可夫链更深入的解释可以在我之前的文章这里中找到。

在这个项目中,我们将给定歌曲的每个和弦视为一阶马尔可夫模型中的一个状态。我们如何得到和弦,我们从哪里得到歌曲?

数据集

数据来自于《终极吉他》,我们在那里搜集了有史以来最受欢迎的 1000 个标签。在此,我们提取了用户在该网站上列出的 1000 首歌曲的歌名、艺术家、和弦和流行度。所有的数据都存储在 MySQL 数据库中。在报告的自述文件中可以找到更详细的关于抓取方法和数据库设置的描述。

寻找相似之处

有了我们的歌曲集,我们希望能够选择一首歌曲,然后根据和弦进行找到与之相似的歌曲。用于存储马尔可夫模型的数据结构是转移矩阵。因此,对于每首歌,我们创建一个转换矩阵,存储从一个和弦到另一个和弦的概率。借助可靠的线性代数,我们可以找到矩阵之间的欧几里德距离

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Euclidean Distance Between Transition Matrices

这个公式着眼于两个转移矩阵,用不同的概率符号表示。这给了我们歌曲之间的距离,其中固有的更短的距离意味着分布更接近(更相似),反之亦然。

在这个项目中,我们更关注歌曲的和弦结构,而不是和弦名称或音调。比如披头士:随遇而安沿用了标志性的C 调的 I-V-vi-IV 和弦结构,和弦名称为 C-G-Am-F 。阿黛尔的《像你这样的人》在相似度上排名第三,并且有一个和弦进行的合唱。这也是 I-V-vi-IV 结构但现在在 a 调中,因此,我们可以突出显示结构相似的歌曲而不管原来的调。

一点数据管理

如果我们所有的歌曲都是 c 调,那么确定和弦结构就容易多了。当然,我们数据库中的歌曲并不都是同一个调。因此,我们必须想出一种方法来确定给定歌曲的基调。

当用户在 UltimateGuitarTabs 上创建标签时,他们可以选择输入他们正在跳转的歌曲的音调。尽管如此,它并不完全可靠。有些歌曲需要变音器,因此键和变音器指示品不在一条线上。一些用户输入了完全错误的密钥,而另一些用户根本没有输入密钥。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Key Table

音乐理论告诉我们,当我们处于一个特定的调时,只有某些和弦会听起来很好听。每一行都包含可能的和弦,如果一首歌曲在那个特定的调上,就可以播放这些和弦。我们所要做的就是计算每一个和弦被弹奏的次数,然后计算每一行的总和。具有最大总和的行将被标记为该歌曲的关键字。

因为这个键表只包含大调、小调和减和弦,我们还必须清理我们提取的和弦,以移除任何其他和弦质量(即,sus、7、13、aug 等)。

注意:这是一种启发式方法,决不会每次都给你正确的密钥,但这是我们目前能做的最好的了。

所有的抓取、存储和转换都在 Python3 中完成。现在我们有了清晰的和弦和确定相似性的方法,我们现在可以构建应用程序了!

建立和使用级数

我们决定使用 Flask+Angular.js 来创建应用程序。Flask 使我们能够将数据发送到前端,Angular.js 允许我们在引导 HTML 页面上很好地显示数据。我们的 Flask 功能还与 MySQL 数据库交互以查询数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Main View of Progressions

用户既可以点击表格中的歌曲,也可以输入自己的和弦进行!当用户点击一首歌曲时,会出现一个新页面,显示类似歌曲的列表,以及 UltimateGuitar 上原始标签的链接。当用户提供和弦进行时,显示和弦进行的估计键以及数据库中的类似歌曲。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Result after choosing Pumped Up Kicks by Foster the People

总结

我们从 UltimateGuitar 上的前 1000 个排行榜中搜集和弦序列,并将所有信息存储在 MySQL 数据库中。我们将所有和弦序列标准化为 C 调,只包含大调、小调和减和弦。使用马尔可夫模型,我们为每首歌曲的和弦序列创建了一个转移矩阵,并且能够计算歌曲之间的欧几里德距离来测量相似性。使用 Flask 和 Angular.js 通过 web 应用程序显示结果。

未来的工作

  • 正如我们之前所说,一阶马尔可夫链是对和弦进行序列建模的基本方法。因此,使用高阶或变阶马尔可夫模型可以改进应用。
  • 我们寻找答案的方法是一种基本的音乐理论技巧。使用信号处理技术或隐马尔可夫模型来分类歌曲关键字的其他新颖方法已经被使用,但是可能不适合这个数据集。需要对音乐信息检索领域进行更多的研究。
  • 去除和弦质量以仅具有大调/小调和弦降低了我们寻找相似歌曲的方法的准确性。在我们的计算中,我们可能想把复杂的弦和简化的弦都包括进去。例如,如果一首歌曲有和弦 Cmin6/G,我们可能希望在状态空间中使用该和弦及其基础 Cm。但是,在我们的转换矩阵中存储所有的和弦类型会创建非常大的稀疏填充的矩阵。计算出的距离平均会更短。
  • 可以使用除欧几里得距离度量之外的其他距离度量。使用像 Kullback-Leibler (KL)散度这样的度量是比较概率分布的一种选择。我们对转移矩阵™的使用使得这变得复杂,因为我们可以计算 KL-divergence 行的歌曲,但不是作为一个整体。此外,任何距离矩阵的功效都依赖于我们的建模方法,在这种情况下,这是一个简单的一阶马尔可夫链。
  • 因为我们的焦点是找到具有相似和弦结构的歌曲,所以确定歌曲的真实和弦结构(即,I-V-vi-IV)并将其显示给用户也是必要的。

应用程序的存储库可以在这里找到。它仍然是一项正在进行中的工作,所以建议是高度鼓励!

查看我之前在发表的关于使用可变长度马尔可夫模型人工生成布鲁斯旋律的帖子

如有任何问题,请随时联系 me !希望你喜欢这篇文章!

PGGAN 创建逼真的面孔

原文:https://towardsdatascience.com/progressive-gans-new-training-trend-for-2018-c18cb0190239?source=collection_archive---------3-----------------------

2018 年深度学习的新趋势

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ian Goodfellow 早在 2014 年就在蒙特利尔大学发明了世代对抗网络。他们已经有了一个很好的开始,显示出图像生成质量的潜在增长,打破了以前由受限玻尔兹曼机器、可变自动编码器等设定的所有基准。这个框架仍然是生成高质量图像的最成功的方法之一。此外,该框架产生易于处理的网络(与通过近似推理计算的 RBM 相反),且很容易仅使用误差反向传播来训练。

多年来,GANs 的许多变体被发明出来,但第一个最成功的进展是 DCGAN,它生成了质量更好的图像,还发现了各种稳定训练过程的技术,因为众所周知,随着一个网络变得比另一个更强,学习无法完成,GANs 在训练时非常不稳定。另一个问题是模式崩溃,生成器无法生成新的图像。除了训练问题,GANs 很快转向不同的方向,如生成高分辨率图像,图像修复,制作音乐等。

进步甘斯

最近,在撰写本文时,NVIDIA 的一项研究揭示了一种训练 GANs 的新技术,他们称之为GANs的渐进生长。他们采取了一种完全不同且出乎意料的训练方法。并且这种技术产生新颖的并且不容易与原作或赝品相区分的真实图像。

只是看一看👀观看下面的视频,了解这种新训练方法的潜力!

Celebrity Face Generation (Novel Faces)

扩大网络

他们用于训练网络的方法是,首先从生成器 G 生成 4x4 分辨率的图像,并将它们与缩放到相同分辨率的真实图像一起送入鉴别器进行训练。请注意,他们使用的图像来自 CelebA 数据集,尺寸为 1024x1024。现在,在网络学习对于宽空间特征饱和之后,两个网络都随着更高分辨率的层慢慢淡入到 GD 中。

研究人员使用残差网络,通过增加残差网络存在的权重,将这些更高分辨率的卷积层淡化到两个网络中。卷积分辨率(新层)增加了 2 倍,在这种情况下是从 4×4 增加到 8×8。这意味着现在 G 生成 8×8 图像(而不是以前的 4×4 图像)并作为 8×8 图像输入到 D 中。原始实像也被缩放到 8×8,用于将它们馈送到 DGD 的先前 4×4 卷积层仍然保持可训练。

网络的渐隐进入 GD 借助残差网络让较高分辨率层渐隐进入网络而不影响训练有素的较低分辨率层。

图层被对称地淡入 GD 中。通过将分辨率增加 2 倍,分辨率逐步增加到 1024x1024。这种方式网络学习图像的宽空间特征和更高分辨率层中的局部空间特征,因为GANs 增长,因此称为 GANs 的渐进增长*。*

虽然有些图像是不正确的,例如有时头发和前额混在一起,有些照片中的眼睛彼此不相似,等等。但总的来说,网络生成的图像非常好,而且还是高清的!

接下来呢?

为了更深入的理解,请看一下研究论文:为了提高质量、稳定性和变化而进行的 GANs 渐进生长。还可以在 GitHub 上查看我的推理(生成器)网络对的实现。代码是用 PyTorch 编写的,可以让你从潜在空间生成图像。

GitHubInstagramTwitter 上追踪我。

TensorFlow 中的渐进式学习和网络增长

原文:https://towardsdatascience.com/progressive-learning-and-network-growing-in-tensorflow-e41414f304d2?source=collection_archive---------9-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在许多真实世界的应用中,在网络已经被训练之后,新的训练数据变得可用。特别是对于大型神经网络,每当新信息可用时,重新训练完整的模型将是非常乏味的。对于引入的每个新类别或其他信息,简单地向网络添加新节点,并保持所有其他先前训练的权重,会容易得多。在这篇文章中,我将简要介绍如何在 TensorFlow 中实现这一点,以及它对网络性能的影响。

我将在 CIFAR-10 数据集上演示该过程和结果,但本文结尾链接的 Git 存储库也提供了 MNIST 和 CIFAR-100 的代码和结果,可以很容易地适用于任何其他这类数据集。我使用的网络结构非常简单,由两个卷积层组成,后面是一个具有 512 个神经元的全连接层和一个具有与数据集中的类一样多的神经元的读出层。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Network structure used for the following experiments. On CIFAR-10 it reaches an accuracy of ~55%.

在这个渐进学习网络的例子中,训练从 CIFAR-10 的十个课程中的六个开始。在每个时期之后,引入一个新的类,直到五个时期之后,所有十个类都在数据集中。为了让网络在新添加的类上进行训练,它需要为该类提供一个新的输出节点。这意味着网络的最后一层以及与之相连的权重随着每一个新类别的增加而增加。为了在 TensorFlow 中实现这一点,我用新大小的新图层重新初始化完整的最后一层。

# Define initializer (old weights + random samples from them for the new node(s) )
initializer = tf.constant_initializer(np.append(weights,np.random.choice(weights.flatten(),(512,1)),axis=1)) # Initialize new last layer of size (512 x numClasses)            tf.variable_scope(tf.get_variable_scope(),reuse=tf.AUTO_REUSE):
                outLog,Wname =      newLastInit(hidden_layer,numOutP,initializer)
                acc,CE = evaluate(outLog,desired)
                accuracy = tf.reduce_mean(tf.cast(acc, tf.float32))
                cross_entropy = tf.reduce_mean(CE)                   
                learning_rate = 1e-4
                optimizer = tf.train.AdamOptimizer(learning_rate,name='op_0')# get name of new layer
weightName = Wname# define gradients
gradient = tf.gradients(cross_entropy, weightName)[0]# define training goal
training_step = optimizer.minimize(cross_entropy)# get all uninitialized variables
uninitialized_vars = getUnititialized(tf.all_variables())# initialize all uninitialized variables
init_new_vars_op = tf.initialize_variables(uninitialized_vars)# Start training for the next epoch
session.run(init_new_vars_op)

连接到新的最后一层的权重最好用来自前一时期的已训练的weights来初始化。连接到新添加的节点的权重可以从旧的weights或随机分布中随机采样。这种权重初始化导致比用随机数或小常数初始化所有权重明显更好的结果,因为它保留了在先前时期中学习的所有信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Comparison of three weight initializations with network growing. The blue boxes represent the size of the last layer. The number in the orange circle states how many classes are in the training and validation set. The red lines mark the start of a new epoch and the initialization of a new class and a new node in the last layer.

对于所有三种权重初始化,每当引入一个新类时,您都可以看到性能下降。然而,前两次初始化(恒定和随机初始化)的下降比用旧的权重初始化时大得多,因为旧的权重初始化保留了已经学习的信息,并且只有新的类需要从头开始训练。当比较旧类的网络性能和新类的性能时,可以看出性能下降主要是由后者引起的。相对而言,新班级的引入并没有影响旧班级的表现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Network performance on the old classes compared to the performance on the new class. Red lines mark the start of a new epoch and a new class introduction.

看着这些图,当保留旧的权重时,似乎添加新的类和增长网络对关于旧的类的已经学习的信息几乎没有影响。但是它是如何影响整体测试精度的呢(黑线)?

为了将网络增长与数据集中所有类的传统训练进行比较,我在每种条件下训练网络 100 次,然后比较每种条件下产生的 100 个测试准确度的分布。此外,我添加了一个名为 No Growing 的条件,其中最后一层保持静态(总是包含 10 个节点),只有数据集随着时间的推移而增长。这相当于从开始就初始化一个更大的输出层,以便为新的类留出一些空间,而不必在训练期间改变网络结构,但是限制了可以添加的类的最大数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Distribution of 100 test accuracies for each of the three conditions after training for five epochs on CIFAR-10.

正常的网络训练(M=0.50,SD=0.01)明显优于连续学习条件(增长(M=0.48,SD=0.01)和不增长(M=0.49,SD=0.01)),p <0.001. However, the normal training had a strong advantage since it could train on each example for each class five times. The two continuously learning networks had much less time to train on the classes that were introduced later on. In the most extreme case, the images of the class introduced last were only seen once by the networks as opposed to five times by the normally trained network.

When training for longer after the last class has been introduced one can see how the two continuously learning networks catch up to the normal network after 30 epochs of post training, from then on no significant difference can be found anymore, F(2,297), p=0.06.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Distribution of 100 test accuracies for each of the three condition comparing the number of epochs that were used for post training. KeepTrain=0 therefor means that no post training was performed and reprsents the same results as shown in the previous figure. KeepTrain=30 means that after the last class introduction the network was trained for 30 more epochs.

These results show that a network can be trained with iterative class introduction and can still reach a comparable performance to a network trained with all classes from the beginning on. The continuously learning networks take a bit more time to reach a performance comparable to the performance of a normally trained network but this effect can be explained by the lower exposure of the network to the classes which were added later on. In a real world application this can be a simple solution for adding new information to an already trained network without having to start training from scratch again.

代码:https://github . com/vkakerbeck/progressive-Growing-Networks

项目 Diversita:当机器学习遇到用户体验

原文:https://towardsdatascience.com/project-diversita-an-intelligent-edge-computing-device-31adbd0d4076?source=collection_archive---------9-----------------------

在这个为期两个季度的研究生项目中,我探索了如何释放机器学习的力量,以满足上一代技术难以满足的要求,同时考虑到以人为中心的设计和工程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

背景

Project Diversita 是微软于 2018 年在 AI for Earth initiative 下在GIX大学发起的“启动项目”。它旨在通过利用边缘技术上的机器学习(ML)来支持生物多样性研究。微软研究院已经基于非自然主义者数据集训练了 ML 模型。

我接受了机器学习和传感器方面的培训,但是在这个项目中,我的角色主要是产品设计。面临的挑战是探索潜在的市场空间,并找到最适合我们技术骨干的利基市场。

时间跨度

2018 年 6 月 27 日至 2018 年 12 月 7 日

关于团队

一个十人小组由大学的学生(菲尔普斯夏哈尔张本凯勒和我)和微软的研究人员(丹莫里斯卢卡斯约帕)/工程师(魏永德、、、、艾丽卡梅内塞斯、朱)组成

在项目中的作用

产品设计师(UX,身份证),产品经理,用户研究员

总体目标

  • 研究市场,以确定一个利基相机陷阱场景,以破坏微软在人工智能方面的能力。
  • 对客户来说是可取的,对业务是可行的,对工程是可行的。
  • 开发工作原型来证明这个概念。

关键词

机器学习、边缘计算、树莓派、物联网、计算机视觉

1.产品的定义

来自微软的原始输入

在微软园区的启动会议上,微软方面的项目团队提出了以下要求:

  • 面向消费者:最终产品应该面向消费者,能够扰乱相机陷阱市场;
  • 移动性:最终产品应该易于携带;
  • 连接性:最终产品应该能够连接到其他设备或云。

为了更好地了解主题,我们的团队分三个阶段研究了该案例:

  1. 竞争分析;
  2. 用户调研:访谈;
  3. 用户研究:调查。

1.1.竞争分析

本研究旨在回答三个研究问题,并提取启发和指导概念设计的见解。这些见解来自对竞争对手产品发现的推理。

研究问题是:

  • 竞争对手的产品如何适应特定的使用情形?
  • 成像产品有哪些合适的交互模式?
  • 开发我们产品的好方法是什么?

确定的竞争对手

“竞争者”包括直接竞争者和间接竞争者。直接竞争对手是可能与我们的潜在产品竞争的产品。而间接竞争对手是在特定维度上与我们的潜在产品有相似之处的产品。在本研究中,“间接竞争对手”不需要能够替代本项目的预期解决方案。本研究选择的间接竞争对手包括共享类似功能(例如图像捕捉)或可以在同一场景中共存的产品或服务(例如双筒望远镜、野生动物跟踪系统)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

观察指标

在浏览竞争对手的产品时,团队成员记下了产品三个方面的发现— 1。业务方面;2.交互体验;3.发展方式。

从竞争分析中获得的见解

四名团队成员促成了 84 项调查结果。84 项调查结果中有 44 项是关于用例/业务模型或用户交互体验,其余是关于工程解决方案的调查结果。基于这些发现,我们提取了以下见解:

  1. 平台即服务。 —该产品可以是不同服务的通用平台。当产品联网时,协同效应可以产生额外的价值。价值可以打包成服务出售。
  2. 以差异化为优势。 —低成本、可移动、无需连接、隐私。边缘设备上的机器学习可以仅针对特定用例进行设计,这使得它与智能手机相比成本较低。与云上的 ML 相比,它节省了订阅信用和连接费用。
  3. 利用分层策略扩大市场规模。 —向市场提供低成本 MVP,通过允许更多的试购来刺激需求。
  4. 寻求与社区合作,以打破特定的利基市场。 —无论是专业社区还是居住社区,与他们紧密合作,解决他们的独特问题,是踏足市场的有效途径。
  5. 授权他人。 —除了是一个独立的产品。该产品作为一个模块也是可行的,该模块可以利用/授权其他产品来实现与独立产品类似的功能。
  6. 主动服务,倾听用户。 —用户的反馈是迭代和改进的宝贵输入。预测用户的挫折感,并准备结构良好的资源来帮助用户。
  7. 为分享而生。分享是人类的天性。让用户自由表达既能满足他们的愿望,又能创造超越用户的影响力。
  8. 传递用户关心的东西。 —用户关心结果。他们不介意封闭背后的算法或工程努力。避免使用术语或提示用户配置不必要的对话框。
  9. 形式遵循功能。 —逻辑设计既实用又美观。通过采用逻辑工业设计,可以用更低的成本实现相同的功能,为客户留下更多的空间来创造价值。
  10. 使用手机作为界面。 —智能手机屏幕具有丰富的交互性。将特定操作转移到智能手机可以降低设备成本,实现更好的交互体验。
  11. 冗余带来可靠性。 —为同一目的使用多组组件可以增强系统的性能。此外,它使系统更加健壮。
  12. 准备扩张。 —为特定模块留出开放的末端将使产品能够以较小的努力适应不同的场景。

竞争分析的结论

通过竞争分析,我们探索了项目多样性的竞争空间。根据我们提取的见解,Project Diversita 的预期产品应该采用边缘设备上的 ML 的差异化优势来与智能手机和其他竞争对手竞争。通过寻求与社区的合作,产品可以通过扰乱利基市场来扩大其市场。从长远来看,它应该为扩展到更多的场景做好准备;设备节点可以作为一个整体形成一个平台来提供服务。在设计产品时,我们应该牢记以用户为中心的原则——倾听他们的声音,并提供能够激励他们参与生物多样性保护行动的东西。

1.2.1.用户研究

用户研究的研究问题是:

  • 在什么场景下,人们希望识别自己附近的野生动物?
  • 不同的利益相关者群体对自然界持有什么样的观点,这些观点如何影响他们的行为和购买?
  • 当前 ML on Edge 设置的技术能力和局限性是什么?

面试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

In one of the user interview sessions, the participant was an active hiker and world traveller. She showed us her tools for species recognition and shared her opinion on design’s impact on the environment.

我们采访了主题专家(SME)和潜在用户(有后院并愿意与动物互动的人)。我们采用亲和图对访谈数据进行处理。主题演讲被聚合到不同的集群中—场景、特征、用户属性、动机、关注点。基于这五个亲和组,我们确定了该项目的障碍、动机、用户要求和其他方向。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Interview data processing.

障碍:

  1. 遭遇物种缺乏变异。–在用户访谈中提到的物种不到 10 种。在 100 个样本的调查中,提到的物种不到 20 种。
  2. 识别结果的准确性。–SME 3 *:“研究人员在发表经过同行评审的论文时,要求准确度高(98%)。
  3. 维护。–SME 3:“每年有 10-20%的摄像机损坏或被盗。”
  4. 伦理问题。——增加人与动物的互动有好处吗?

动机:

  1. 好奇+参与。–U1 *:“我想知道喂鸟器发生了什么事。”“我需要一些可操作的信息。”
  2. 安全+安保。–U2:“当土狼来了,提醒对方注意。”
  3. 社交网络。–U2:“当麋鹿来到我们家门前的湿地时,我会给邻居发短信。”

用户请求:

  1. 语音识别。–U2:“鸟类照片很难捕捉,但很容易听到。”
  2. 菌群识别。U1:“我做蘑菇。有些人觉得它令人生畏,因为很难确定它是否可以食用。”
  3. 足迹识别。–U2:“雪地环境中的动物脚印就在小路旁边,很容易辨认。”
  4. 超过认可。–U1:“我更想知道如何改进,而不仅仅是识别物种。”

其他说明:

  • 浮潜。–浮潜时,人们有很大机会在短时间内接触多种物种。此外,水下没有连接。边缘语言可以利用它的优势来区别于其他计算平台。
  • 保护性研究与保存
  • —入侵物种清除;
  • —无线电遥测钻铤;
  • —遗传取样。
  • 保护区管理:
  • —监控外壳;
  • ——城市发展生态影响评价。

注:SMEx =主题专家 x 号;Ux =用户编号 x。

1.2.2.调查

该小组从拥有房子的参与者那里收集了定量数据。该团队总共收集了 120 个样本,并分析了结果,以提取关于兴趣的见解,从而在不同的场景中利用动物识别能力。结果反映了对应用程序最感兴趣的目标的更多共同特征。他们是有后院的房主,并拥有宠物,尤其是猫和狗。这些见解将在下一阶段指导团队进行概念设计和方向选择。

研究问题如下:

  • 在什么场景下,人们希望识别自己附近的野生动物?
  • 人们出于什么原因想要购买一个设备来监控他们的后院?
  • 从用户的角度来看,边缘计算设备能给他们带来什么好处?

调查工具

谷歌表单,亚马逊土耳其机器人,Tableau。

分析方法论

我们从两个方面分析了数据。首先,我们从定量方面分析了数据。我们使用这些数据来缩小范围并支持角色制作过程。同时,我们希望了解不同场景的潜在用户规模,作为我们市场研究的一部分,以找出可能的最大市场。同时,我们分析了所有的开放式问题,以从受访者那里获得更多的灵感和有价值的想法,这将有助于我们了解更多的可能情况以及支持或反对我们想法的证据。

调查感悟:

  1. 后院的潜在市场可能是巨大的。
  2. 对于消费者来说,他们会认为这款设备更像是一款娱乐设备。
  3. 人们监视他们后院主要是出于安全目的。
  4. 养宠物的人更有可能购买这些设备。
  5. 人们关心的是参与而不是技术。

1.3.概念发展

我主持了一个概念创作的头脑风暴会议。构思有两组限制:技术限制和非技术限制。技术上的局限性:1 .机器学习模型只能识别陆地动物;2.该设备需要移动性。因此,我们需要平衡性能和功耗;3.作为项目投入,它必须具有连接能力。非技术制约因素:1 .设备应该面向消费者;2.我们只有七周的时间来做这个项目。

思维能力

考虑到这些限制,该团队提出了以下想法:

  1. 邻里好奇心:一种将设备捕获的动物分享给社区的设备。给他们一个空间来分享在他们的地方目睹野生动物的经历。
  2. 小朋友的守护:用设备捕捉孩子与家中宠物玩耍的瞬间。当捕捉到危险的动物时,警告父母他们的孩子或宠物的安全威胁。
  3. 露营发现:放在帐篷外或露营地点附近的设备。捕捉路过的动物。
  4. 自然之窗:残疾人如何体验自然。他/她可以设置该设备,并在家中的森林中查看经过他设置的设备的动物的照片。
  5. 掠夺者监视:作为一个邻里监视系统,许多设备协同工作来监视附近的院子、道路和绿化带,并提防危险的动物。当食肉动物出现时向居民发出警报,这样他们就可以避开它们,呆在家里,保持安全。
  6. 露营守卫:设置在帐篷上或食物储藏室旁,在你睡觉的时候为你提防掠食者,记录你露营旅行中令人兴奋的动物遭遇。
  7. 植物和动物移动维基:大多数时候,当你去一个有外来物种的地方旅行时,你没有手机网络覆盖。如果你能在给它们拍一张令人惊叹的照片的同时获得物种的名称和信息,那就太好了。
  8. Smart GoPro :帮助用户捕捉身边有不认识的动物的瞬间。
  9. 宠物跟踪器:帮助用户跟踪宠物在后院的活动。
  10. 捕食者警报:提醒用户警惕附近即将到来的捕食者。
  11. 保护平台:联网摄像陷阱,实现研究和保护自然的新方式。
  12. 人工智能喂鸟器:对到达喂鸟器的鸟进行计数和分类,以了解如何最好地促进当地的生物多样性。
  13. 猎人用 AI 步道摄像头:帮助猎人更好地了解鹿的数量,从而知道有选择地去除哪些。

我们综合了这些想法,想出了三个概念:

  • 理念一:好奇心——利用 ML on Edge 满足人们的好奇心和教育目的。示例场景:带着设备去野营,设置好设备,去享受大自然。回来检查捕获的图像。
  • 概念二:安全——识别可能威胁孩子或宠物安全的物种。必要时发出警告。示例场景:在需要的地方部署设备。配置要监控的物种。如果检测到目标物种,向用户发送通知。
  • 概念三:平台 —部署一个设备网络,实现保护研究和管理的新方法。示例场景:保护区管理、入侵物种应对、围栏安全、气候监测。

解决方案描述/工作分解结构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该系统应该有三大支柱:

  • 设备(物联网套件):套件会部署在用户需要的地方。它会扫描场地,如果有动物经过,就会唤醒相机并拍照。照片将在设备上进行本地处理。如果边缘 ML 模型确定图像中有动物,设备将通过无线连接将图像发送到云服务。
  • Azure services :当云服务收到图片时,云上 ML 模型会分析图片提取物种信息。随着试剂盒发送的图像数据的积累,这些数据可用于 ML 模型进化。在图像接收到作为其元数据一部分的物种识别结果之后。云上的通知服务将根据用户的设置确定图像是否应该触发通知操作。
  • 应用控制台:应用是用户与物联网套件和云服务交互的入口。用户可以配置物联网套件和云服务的设置。例如,用户可以设置系统在物联网套件检测到郊狼时向他/她发送通知。该应用程序是一个内容分发渠道。用户可以观看由该设备捕获的正面图像。也是一个社交平台。多个用户可以共享来自同一设备或设备网络的数据,并就内容进行通信。此外,该应用程序是用户反馈识别质量的反馈渠道——用户可以对识别质量进行评级,并提供正确的物种名称。由于时间和资源限制,该应用程序将针对移动网络浏览器而不是原生应用程序进行开发。

从长远来看,该系统应该允许多个套件形成一个物联网网络。可以添加更多功能,如工作流程简化、远程触发、行为映射、年龄/性别识别,为客户带来更多价值。

2.原型开发

2.1.用户旅程映射

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我起草了一份用户旅程图来生成功能列表:

硬件:

  1. 开关按钮打开/关闭相机;
  2. 重置按钮;
  3. 手动捕获按钮;
  4. 状态的 LED 指示器;
  5. 工业设计:可在典型场景下部署——柱子/墙/树;
  6. 检测视野中运动物体的传感器。

软件:

  1. 登录;
  2. 设备管理;
  3. 任务管理;
  4. 本地 ML 处理;
  5. Azure ML API
  6. 推送通知服务。

2.2.用户体验

在这个项目中,我负责产品设计,包括产品定义、数字体验和物理原型。

2.2.1。数字体验

这项服务的数字接触点是应用程序。最初,当我们计划这个项目时,由于我们团队中没有人有开发原生 iOS/Android 应用程序的实践经验,我们决定开发一个 web 应用程序。所以当我设计产品的时候,我只用了基本的网络交互模式,比如滚动和点击。考虑到时间限制(四个人,两个月),该应用程序只能提供非常基本的功能——注册/登录,添加设备,设置触发器,查看拍摄的图像。事实上,最小的可行产品已经是团队的一个挑战——我们还需要测试和开发硬件部分,在 Edge 和 Azure 上配置和测试 ML,设计机械结构并制作原型。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.2.2。物理体验

经过 60 多天的实验,我们的团队确定了用于最终原型的最终组件集。这些部件的物理尺寸以及它们相互连接的方式成为了原型外形的限制因素。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我使用 CAD 工具来安排电路系统的空间关系,并仔细考虑用户将如何使用该产品。V2 原型是为了评估我的设计和 3D 打印机的性能而制作的。基于我们教员的反馈和我的观察,我进一步将模型迭代到 V3。

与使用 360mL ABS 的 V2 相比,V3 仅消耗 268 mL,即少消耗 25.6%的材料,但保持相同的强度(请参考下图)。此外,新的设计使我们能够密封部件和外壳之间的所有间隙,使其成为一种防水设备。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过点击这个链接,你可以交互式地查看 CAD 模型。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Parts just got printed from the Stratasys F170 machine, the chamber was still very hot.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The back of the prototype, from left to right: University of Washington (UW), Global Innovation eXchange (GIX), Microsoft. Someone joked it was Word, Excel, Windows.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

I designed the device with a tripod mounting point.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The viewfinder was my answer to a teammate’s plan to add a video streaming feature, which was just for the user to check what the camera can see. I’m proud to solve a seemingly tricky requirement with a stone age solution.

3.以后

3.1.Diversita+

在我们最后一次展示的舞台上,我评论了 Diversita cam:

然而,我们的长远眼光不仅仅是照相机。

当我们有一个支持 ML 的摄像头矩阵时,我们可以形成一个平台,这是一个智能边缘设备的平台。其可用于收集数据并从世界中获得洞察力,例如,监测水的纯度、环境的变化等等。

Diversita 项目的本质是使用边缘技术上的机器学习来识别特定的模式,并相应地对不同的结果做出反应。虽然 Diversita 是为陆地动物建造的,但我个人开发了 diversi ta+——技术框架场景的扩展——用于水下。用于训练模型的数据集可以是单个物种如鲨鱼、鳐鱼、梭鱼的光学相机图像。也可能是声纳反射模式。总的来说,Diversita+可用于协助海滩安全监测、海洋动物研究和水质监测。

三个示例概念:

  1. 狩猎区(hunt away):部署在海滩或类似地方的围栏系统,用于监控和抵御威胁人类生命的海洋物种。
  2. Remora:ML on Edge 设备,安装在船舶吃水线以下的船舷,它结合来自光学相机和声纳阵列的图像,识别海洋生物物种,并对数据收集的位置进行地理标记。
  3. 海马:集成了电子显微镜和边缘计算模块的设备。

如果你有兴趣,请查看以下文档了解详细描述:http://bit.ly/2EFxdgj

3.2.媒体报道

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

photo credit: Scott Eklund

我们的团队很幸运地在微软上发表了一篇关于:http://bit.ly/2GxYvYA问题的报道。当这个故事发布时,微软总裁布拉德·史密斯转发了它。看到我们的合影出现在最有价值的上市公司总裁 Twitter 账户的时间轴上,真是令人惊讶。

3.3.信用

最后,我想给以下的人热烈的掌声:

  • 布莱克·汉纳福德、琳达·瓦格纳、约翰·莱蒂:感谢他们的指导和帮助;
  • 尼古拉斯·艾姆斯:为我们提供了可靠的制造设备;
  • 肯特·福斯特:为微软和 UW 牵线搭桥,使该项目成为可能;
  • 微软项目团队:为我们提供了这个参与这个项目的机会,特别感谢杨思雨,当我们的机器停机时,他及时联系了微软园区的制造部门;
  • 马克西姆·苏尔盖伊:作为我们的第五名成员,为我们提供焊接工具、螺丝和胶水。

本文原载于我的博客:https://catalium . net/project _ diversita _ when _ machine _ learning _ meets _ user _ experience/

潘德雷肯计划:命运大订单的人工智能机器人

原文:https://towardsdatascience.com/project-pendragon-an-ai-bot-for-fate-grand-order-23f51b6e3268?source=collection_archive---------6-----------------------

作为一名数据科学家,我经常不会真的对我的模型做任何事情。我投入了大量的时间来建立数据集,准备数据,训练模型,调整它们的超参数,然后我将它们存储起来,再也不会被看到。所以我想这一次我会试着把它们整合到一起。

潘德雷肯计划使用三个 Pytorch 神经网络的主干来决定在手机游戏《命运大令》( FGO)中什么时候出什么牌。对于一些人来说,这可能是我过度工程的解决方案,但对我来说,这是一个有趣的项目,实际上节省了我每天在游戏中的项目农业的时间。尤其是在早上,当我让机器人运行一些任务时,有额外的 10-15 分钟是很有用的。

这里的是 github 回购的链接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A previously trained face detection model only detects the center character, Altria Pendragon, FGO’s version of King Arthur Pendragon, but not either of the other two characters. The the other two characters are more in the background and faces are partly obstructed. Also the object detection model was trained on season 4 of The Flash… so it doesn’t actually have exposure to cartoon characters, I could build a specific network for that though. I’m using that model (calling it Flashpoint for now) as part of a raspberry pi remote greeter which could also be a good blog post…

FGO 的一些背景。这是一款移动设备的日本角色扮演游戏,你可以通过从一副牌中选择动作牌来控制角色。在任何给定的时间,你将有 3 个角色在场上,每个角色有 5 张自己的行动卡。动作牌有三种,艺术牌、巴斯特牌和快速牌,每种牌的数量取决于角色。每回合从 15 张牌中给你发 5 张牌(每个角色 5 张),没有替换,并且允许你选择 3 张牌作为该回合的行动。一个额外的机制是建造卡链有奖励。选择三张相同类型的卡片。链的例子见下面的两个图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Arts Chain: Pick 3 arts cards, can be from the same or different characters. Can do the same thing for any of the 3 card types

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

brave chain: pick 3 cards from the same character

当我坐下来思考我可以做的事情时,我意识到我可以使用一系列神经网络,通过 python 向游戏发送输入来选择卡片,来创建一个玩 FGO 的机器人。对机器人来说,一个基本但有效的游戏策略是,只要有可能,它就玩牌链。卡链在使用时会带来伤害或其他奖励,使用它们会使回合更有效率,因为伤害更高,因此战斗时间更短。

在开始编码之前,我必须弄清楚我希望机器人遵循的一般流程,以下是我想到的逻辑结构。

  • 开始时,它会查看是否能看到“攻击”按钮,如果找到,它会按下按钮并进入该回合的阶段,在该阶段中,它会从 5 张命令卡中挑选 3 张
  • 机器人会检查这 5 张牌中是否有 3 张是同一角色的。如果是这样,那么它就创造了“勇敢链”
  • 如果没有找到勇敢链,那么它将查看所有的卡,检查它们的类型,并寻找 3 张相同类型的卡来创建卡链。
  • 如果没有找到卡链。那么它将按以下优先级顺序播放。艺术卡,巴斯特卡和快速卡。(我倾向于在我的游戏中优先考虑艺术卡,因为它们为 FGO 中被称为“高贵幻影”的角色收取终极能力,所以我让机器人这样做)出于同样的原因,这也是机器人在不同链中尝试玩牌的顺序。
  • 一旦完成,它将开始检查攻击按钮的重新出现,机器人的回合将再次开始。

因此,在这个过程中,识别攻击按钮和卡类型的能力是传统的 CNN,而寻找同一人物的 3 张卡是连体 CNN。

我使用 Pytorch 构建了所有的网络,并在 1060 或 1080 Nvidia GPU 上对它们进行了训练。

然而,在这之前,第一步是让 FGO 在我的电脑上运行,这比我想象的要难。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bot identifies that the first, second, and fifth card are all of the same character and so it constructs a chain using those three cards.

在个人电脑上运行 FGO

虽然这应该是很好很简单的,但是一些谷歌搜索很快让我知道,目前没有任何模拟器可以轻松支持 FGO,并且像在 Android 上使用开发者功能这样的选项与 FGO 不兼容。

所以在短暂的绝望之后,我偶然想到了用微软的 TeamViewer 来控制我的 android 设备。由于我通常使用 TeamViewer 来远程访问我的计算机,这看起来是一个优雅的想法,而且它证明工作得很好。使用 android TeamViewer 主机应用程序,我可以将我的手机添加到我现有的帐户中。对我来说,唯一的缺点是我的手机在长时间使用后会过热

设置好之后,我必须确认我能够启动 FGO,并测试通过 python 的 pyautogui 向它发送鼠标点击。令人欣慰的是,这是成功的,所以下一步是捕捉游戏屏幕的屏幕截图,并隔离神经网络将查看的部分,获得适当的 xy 坐标,以裁剪出图像的这些部分。

第一部分是玩家回合开始时出现在屏幕上的“攻击”按钮。一旦它出现,玩家按下它,并被允许选择他们的行动“命令卡”。到目前为止,我的策略是让机器人每秒检查一次攻击按钮,如果它检测到这个按钮,它将执行其余的代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

clipping of the TeamViewer screen that gets fed into my bot for analysis

点击攻击按钮后的下一步是确定“命令卡”在下一个屏幕上的位置。我还注意到,五个命令卡总是位于屏幕上的相同位置,这意味着我也可以从屏幕上裁剪出命令卡,并作为输入输入到网络中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Showing placement of command cards on the screen

现在我有了提取输入的方法,我需要运行它们。我已经准备好训练我需要的神经网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bot identifies that there are 3 cards of the same color (card 2,3 and 5) and selects them to make a card chain

利用预训练 Pytorch CNNs

对于这两个网络,第一步是为我关心的班级获取图像数据。

第一个是二进制分类问题,以检测“攻击按钮”,我浏览了游戏镜头,剪出了几十个攻击按钮和按钮不存在的例子,这是大多数时间。

对于第二个分类器,我浏览了游戏片段,剪下了大约 60 张三种不同颜色的动作卡片。对于这一张,我预计虽然每张卡片上的面孔不同,但颜色是相同的,所以它会学会优先考虑卡片的颜色。

现在我已经有了两个小数据集,我准备好开始构建模型了。尝试从零开始训练网络是愚蠢的,所以我决定利用 Pytorch 中包含的预训练网络。像大多数图像分类问题一样,我采取的第一个方法是利用 Pytorch 的预训练网络,在这种情况下,我针对我的分类问题对现有网络进行了微调。Pytorch 的文档中列出了基本流程。像微调或使用预训练网络作为特征提取器这样的事情使我们能够利用网络,这些网络已经学习了图像分类的有用权重,我们希望这些权重将推广到我们的特定用例。

对于这两个模型,我使用了 Resnet 的变体(Resnet 18 和 50),我可能会使用两个 Resnet 18 实例,但决定尝试一下,看看在我的显卡上使用更大的 Resnet 50 模型需要多长时间。我对每个网络进行了大约 5 个时期的训练,对于这两个分类任务,它们都达到了大约 95%的准确率

确定卡类型的网络是 Resnet 50,它构成了我的机器人的主干。因为一旦我决定了卡的类型,我就可以形成卡链,这可能是最常见的卡链类型。见下面的例子,机器人识别,然后创建“艺术”链。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bot identifies cards 1,3, and 5 as a chain.

用连体神经网络寻找勇敢的锁链

第二种类型的卡链是通过选择 3 张相同角色的卡创建的。所以从概念上来说,这比第一种卡链要难一点。目标必须是识别在已经分发的 5 张牌中,何时至少有 3 张牌是由同一人物发出的。

有几种方法可以解决这个问题。首先是建立一个经典的 CNN,学会识别游戏中的所有角色。这是可行的,但收集数据会很麻烦,因为至少有 100 个字符,并且很难获得足够大规模的数据以使网络收敛,甚至很难进行适当的微调。因此,在这种情况下,我想我可以应用我在以前的帖子中谈到的东西,暹罗神经网络

有了暹罗网络,我可以使用一个相当小的数据集来训练一个网络,使其善于识别不同颜色卡片上的人脸的相似性。这也意味着我将能够极大地增加数据集,因为我现在将进行成对比较。

为了做到这一点,我利用了这个存储库中的数据集函数进行面部相似性分析,并修改了网络结构以包括最大池,部分是因为我的计算机将耗尽内存,但也因为我发现了一些改进,因为初始网络即使在变得更深时也保持了原始图像的大小,最大池被应用于让网络通过附加层来学习更复杂的图像特征。

这里的暹罗网络被训练为最大化或最小化两个输入图像的特征向量之间的欧几里德距离,这取决于它们是否相同。因此,对于我部署模型,我可以用它来测试一个命令卡与其他 4 个命令卡,并寻找相似性匹配。从计算的角度来看,这样做的一个缺点是,我将每张卡与所有其他卡进行比较,因此最坏情况下的运行时间是 N。

请参见下文,了解如何做到这一点。图像对可以通过网络输入,然后通过获取两个输出向量之间的欧几里德距离,可以得到网络看到的两个图像的不同之处(分数越低意味着越相似)。在这个例子中,网络运行良好,但仍有改进的空间。我发现很多人物最终看起来与侧面肖像相当相似,所以我可能需要包括更多这些更难比较的例子来帮助加强网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

These are two cards by the same character and is really the comparison that this network was designed to make. By finding 3 of these matches the bot can create a brave chain and get an extra attack as a result (how the game rewards 3 cards by the same character)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example of dissimilar pair, score of 1.17 is quire high

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

another more dissimilar pair

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

one where the network marks two characters as being similar while they are different. As discussed above this is probably the main area of improvement. The network was only trained on around 40 characters with 3 or so cards from each.

虽然还有待改进,但暹罗网络在实地确实表现良好。见下面的一些例子,它循环通过 5 张卡片,并将每张卡片与所有其他卡片进行比较。当它找到一个三元组时,该三元组被提供给机器人,机器人选择适当的卡来创建链。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bot uses siamese network to identify cards 3,4, and 5 as all being the same character so it constructs a brave chain

结束语

这个机器人是一个好的开始,它可以相当胜任地玩 FGO,在某种意义上它可以清除我让它通过的高等级任务。然而,它没有利用许多额外的游戏机制,这些机制可以提高它的效率。

  • 聪明地使用角色的终极能力,在 FGO 被称为“高贵的幻影”(NPs)。到目前为止,我让机器人在一定数量的回合后尝试使用角色的 NPs,他们可能会在那场战斗中用它来对付老板或更强的敌人,而不是浪费在早期较弱的敌人身上。
  • 利用 FGO 的阶级亲和系统。本质上是一个石头剪子布类型的设置,每个角色都有一个给定的职业,相对于其他职业有优势和劣势。有利的使用它会给你一个伤害加成,而不利的配对是一个伤害。
  • 让 bot 使用角色“技能”。在 FGO,角色技能在正确的时候非常有用,可以增加伤害,治疗盟友,减少敌人的负担等等。机器人目前没有利用这些,因此错过了很多。

机器人的下一个阶段可能是强化学习的应用,但这很难,因为 FGO 有一个行动点系统,在那里每场战斗都需要 X 个行动点,当你用完它们时,你必须让它们充电……这意味着我很难让它探索数千次迭代。另一个选择是建立一个模拟的 FGO 环境供它探索。这是可能的,但是会非常耗时。

编辑:作为一个后续帖子,我为上面提到的 FGO 制作了强化学习机器人,你可以在这里查看。我建立了一个自定义的游戏环境,让机器人通过玩数千种游戏来学习,发现它学会了一些很酷的行为!

这里的是 github 回购的链接

项目潘德雷肯第 2 部分:命运大订单的强化学习机器人

原文:https://towardsdatascience.com/project-pendragon-part-2-a-reinforcement-learning-bot-for-fate-grand-order-7bc75c87c4f3?source=collection_archive---------12-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fate Grand Order wallpaper that I passed through a YOLOv2 object detector I fine tuned to detect human faces, it is somewhat surprising that it detects any cartoon faces…

在我之前的帖子中,我概述了一个我为玩手机游戏《命运大令》(FGO)而制作的机器人,昵称为潘德雷肯。潘德雷肯机器人的核心是三个神经网络,两个经典 CNN 和一个暹罗 CNN。网络的输出被机器人用来决定它被分发的五张卡中的哪张卡该轮到它玩。

在上一篇文章的最后,我讨论了一些可能的后续步骤,我提到的其中一个步骤是使用强化学习来训练一个模型,让它自己选择卡片,而无需我为它制定规则。我认为这将是非常困难的,因为我必须从头开始为机器人建立一个实验环境…但我继续这样做,因为我觉得这将是一个有趣的项目,值得付出额外的努力。这篇文章将介绍我如何为机器人建立一个简化的 FGO 环境,构建一个神经网络来决定选择哪张牌,使用强化学习来训练它,以及我对它所学游戏的印象。

在训练并将新的强化学习网络整合到我为扮演 FGO 而构建的框架中后,我决定给它取个昵称。现在我用的是 潘德雷肯。FGO 制作角色,然后是邪恶的“改变”版本,让他们不用做太多额外的开发就能制作更多的角色(并增加他们的收入)。所以我想我最初的潘德雷肯机器人可以使用一个,可能是邪恶的,强化学习的对等物。

作为一些背景,FGO 是一种游戏,玩家每回合发五张牌,他们从这五张牌中挑选三张作为该回合的行动。每种类型的卡都有自己的属性,以不同的组合使用它们有不同的好处。例如,玩三张相同颜色的牌会在牌的基础统计上增加额外的奖励。奖金的性质取决于卡的类型。艺术卡(蓝色)充能强大的终极能力,巴斯特卡(红色)造成额外伤害,快速卡(绿色)创造致命一击的可能性,双倍伤害。我试着在这篇文章中解释重要的游戏机制,但是请随意查看上一篇文章以获得组成 FGO 的其他通用机制的更详细的概述。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pendragon Alter building an “Arts chain” picking 3 Arts cards

构建命运大秩序环境

像许多其他人一样,我使用 OpenAI 的健身房库,使用其他人的代码来训练一些简单的强化学习模型,但这是我这个项目的一部分动机,因为我想看看它是如何从头构建一个定制环境的。这方面的很多灵感来自于 2016 年斯科特·罗马(Scott Rome)的一篇帖子,他在帖子中创建了一个环境来训练网络玩 21 点(此处)。

在 FGO,玩家通常在任何给定的时间有 3 个角色在场上,大约有 9 个对手在三个以上的波中产卵。为了简化这一点,我将我的环境构建成一对一的战斗,两个实体的目标是通过每回合造成伤害来将对手的生命值减少到 0。

目前,这些战斗的基本结构是一个循环,每一次迭代都由两个团队组成,当一个团队的生命值降至 0 时,两个团队都会造成伤害。

敌人团队每回合在一个范围内随机选择一个数字来造成伤害,我认为这个简单的解决方案暂时可行,合理地调整敌人的伤害比重建他们如何处理伤害更重要。另一方面,玩家团队根据他们从五张牌中选出的三张牌组合造成伤害,这五张牌是根据他们的初始牌组发出的。我这样做是为了更好地反映玩家在 FGO 的战斗方式。

实现见 github 回购行 275–432 中的**Colosseum . py。**

一旦这个循环建立起来,我就开始添加 FGO 用来放大伤害的后端计算和机制。我找到了这些计算和机制的值(这里)。

这些后端机制的一些示例:

  1. 崇高幻象(NPs):是 FGO 中人物拥有的强大终极能力,通常会造成大量伤害。NP 在使用前必须充电到 100%,这在“NP 量表”中进行跟踪。当前费用通过使用某些卡来增加。在我的实现中,当玩家的 NP 标准达到 100%时,该 NP 在下一回合被用来造成额外的伤害。玩家充能其角色的 NPs 的能力对于他们成功清除 FGO 战役至关重要。
  2. 致命一击:致命一击的百分比几率基于“致命之星”的生成。临界星生成的速率根据你使用的牌而变化。恒星在第 N 回合生成,在第 N+1 回合消耗。星星的数量增加了造成致命伤害的可能性。虽然成功获得致命一击有一些随机性,但如果你成功击中,你会造成双倍伤害,这是非常有价值的。
  3. 将一张牌放在三张牌链的不同位置会有奖励。例如,链中的第一张卡对链中的所有卡都有奖励,而第三张卡的属性显著增加。这使得使用链中的第一和第三张牌变得非常重要。我的潘德雷肯机器人,实际上没有很好地利用这个机制,新的强化学习机器人在这方面做得更好,详情见最后一节。
  4. 卡链:正如我之前提到的,将三张相同类型(颜色)的卡放在一起会有奖励,因为卡的统计数据被放大了。这种奖励加上从放卡中得到的奖励有助于使卡链在游戏中变得非常强大,因此是加入游戏环境的必要条件。

这些额外的机制可以在coloseum . py的第 104–235 行找到

构建神经网络

为了开始构建将网络整合到我的新游戏环境中的机制,我必须决定如何表示模型的动作空间。我的第一轮头脑风暴让我希望模型根据三种不同的牌类型(艺术牌、巴斯特牌、快速牌)来对不同的牌进行分类。但是我很快就碰壁了,见下文。

Hand: “Arts”, “Quick”, ”Quick”, “Buster”, “Arts”
output: “Arts”, “Arts”, “Arts”

我如何压缩输出,这样当只有两张可用时,它就不会尝试使用三张艺术卡?

我想不出一种优雅的方式来做到这一点,所以我不得不回到绘图板,想出一种方法来表示动作空间,这样每个输出节点总是有效的,它只需选择最好的一个。

我最终采用的方法是让行动空间成为从五个可能的卡槽中选择三个卡槽的所有可能的排列。我在这里的思考过程是,不要考虑牌的类型会不断变化,总会有五个有效的牌槽。因此,60 种可能的排列,即从 5 个顺序重要的位置中挑选 3 个,可能是表示动作空间的好方法。参见下面的前一手牌示例,对于前一手牌示例的输入,所有输出 1-60 均有效。

Hand: “Arts”, “Quick”, ”Quick”, “Buster”, “Arts”
output_1: “Card 1”, “Card 2”, “Card 3”
output_2: “Card 1”, “Card 2”, “Card 4”
...
output_60: “Card 5”, “Card 4”, “Card 3”

这意味着我构建的任何网络都将有 5 个输入节点代表 5 个卡插槽,60 个输出节点代表从 5 张卡中选出 3 张卡进行替换的所有方法。

netlearner.py 包含完整的网络代码,以及网络如何根据当前游戏状态采取行动,并根据观察到的结果更新自身。

起初,我担心网络是否能够在不同的类别之间归纳出“玩三张相同类型的牌是好的”这样的概念。给定两个输入向量:

Hand_1: “Arts”, “Arts”, ”Quick”, “Buster”, “Arts”
Hand_2: “Buster”, “Quick”, ”Arts”, “Arts”, “Arts”

我对这种方法的一个担心是,网络是否会认识到从任意一手牌中挑选三张艺术牌是一个好策略,因为选择“牌 1”、“牌 2”、“牌 5”和“牌 3”、“牌 4”、“牌 5”可以通过使用多个节点来完成?然而,网络确实学会了这种行为,我感到惊喜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pendragon Alter constructing another Arts Chain by picking the node corresponding to cards 3,2, and 4

深度 Q 学习

在强化学习中,没有初始数据集,我们允许网络探索环境的行动空间,在该空间中,它因不同的决策而受到奖励和惩罚,以便它可以尝试发现如何最佳地导航环境。

基本流程如下:

  1. 代理(在这种情况下是网络)被告知游戏的当前状态。这可能是一款雅达利乒乓游戏的像素,也可能是你选择的任何代表。在我的情况下,这是一个长度为 5 的牌列表。
  2. 代理从动作空间中选择一个动作。在 Pong 的例子中,Andrej Karpathy 把它作为上升的概率。我的 FGO 游戏是 60 种可能的卡槽组合中哪一种最好。然而,应该注意的是,在强化学习中,存在探索与利用的概念。本质上是说,有时应该随机选择一个动作,而不是简单地做代理认为最好的事情。这有助于代理探索和发现额外的奖励,否则如果它只是利用它知道的奖励,它将不会发现。
  3. 行动被归入环境,任何奖励被收集,环境进入下一个状态、框架或回合。机械地,我这样做是通过将奖励添加到网络输出的卡槽组合中。对于正的奖励,该类别在输出数组中的值增加,并且网络将再次看到给定该输入,该特定类别是有益的。
  4. 代理根据其收到的奖励进行更新。在奖励被用于修改输出阵列之后,网络以修改后的输出阵列为目标在初始输入状态上被训练。这有助于巩固好的选择,同时也考虑到坏的选择。
  5. 冲洗并重复。

这个过程循环可以在 斗兽场. py 中看到,其中战斗类调用网络来获得动作,并在每次迭代和游戏结束时用奖励更新自己。

如何奖励行为良好的机器人?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

excerpt from FGO official comics making a joke about how players are addicted to rolling for new characters, but talks about rewards so figured I would include it

这一部分花了很多实验,但最终我发现了一套奖励,这个机器人工作得很好。最初我只对战斗的最终结果进行奖励,基本上是赢+1,输-1。在这一点上,机器人会展示一些有益的卡放置的知识,但没有更高级的行为,如持续建立卡链。在最初的几轮训练中,在我构建的定制环境中,网络的成功率很少超过 30%。最好的运行可能有 50%的胜率,但仍有很大的改进空间。因此,为了调整这一点,我在游戏中增加了额外的奖励,因为成功地使用了游戏中更复杂的机制。

为了尝试让机器人学习这些更高级的机制,我在环境中添加了额外的奖励。我添加的第一个奖励是打三张同类型的牌(艺术、巴斯特或快速),这对模型有帮助。经过一些测试后,我还为机器人增加了一个奖励,使其 NP 标准达到 100%。如前所述,卡牌链极大地放大了单个卡牌的效果,NPs 经常被玩家用来一次性完成战斗,所以我觉得这两者对机器人的成功都很重要。

我认为这样做的一个缺点是,机器人会强调做这些动作,这可能是我过度限制机器人来满足我对游戏的看法。在未来,我可能会通过为机器人添加一个记忆机制来解决这个问题,以跟踪一场完整的战斗中的所有行动和奖励,然后进行评估,而不仅仅是在每回合结束后进行评估。然而,在我目前的设置中,我每回合都进行评估,我发现这种奖励结构是有效的。

有了这些额外的奖励,我能够让机器人在训练时有大约 60-70%的胜率,经过更多的调整,最终网络在训练 50,000 场战斗后有大约 80%的胜率。我通过跟踪机器人在 10,000 场游戏中的表现来衡量这些胜率,所以当我说 60%时,这意味着它在过去的 10,000 场游戏中赢了大约 6,000 场,等等。

这些成功率可能会进一步增加,但我发现网络已经学会了一些好的和非常有趣的行为,我将在下面讨论。

潘德雷肯·奥尔特的结果以及与原始潘德雷肯机器人的比较

所以能够赢得我所经历的 80%的模拟战斗是很好的,但是现在我们来看看它在实际游戏中的表现。

为此,我将强化学习机器人集成到我在上一篇文章中构建的框架中,以与 FGO 手机游戏进行交互,并让它玩了一些比赛。

我之前概述过,我觉得接近 FGO 的一个好策略是让机器人在任何可能的时候玩卡牌链,然后我让它按照艺术、巴斯特和快速的顺序玩牌。我发现潘德雷肯·奥尔特玩艺术和巴斯特牌和链条相当一致。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pendragon Alter picking a Buster chain based on card input

然而,虽然它玩快速链,但它并不总是这样做。相反,如果有两张相同类型的牌,其中有三张快速牌。它将在卡槽 2 中播放一张快速卡,在卡槽 1 和 3 中播放另外两张卡。(见下文)。这最大化了放在插槽 1 和 3 中的两张卡的效果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Alter ignoring a Quick Chain to charge its NP using Arts cards in the first and third slot

如果有三张快速卡,一张艺术卡和一张巴斯特卡,它所做的是将巴斯特卡或艺术卡混合到第二个卡槽中,而不是打出三张快速卡来形成快速链。这意味着机器人放弃获得玩快速链的奖励(增加致命几率),要么现在造成更多伤害,要么进一步充能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Alter ignoring a Quick Chain to charge its NP using Arts cards in the second slot

这让我很感兴趣,因为,首先,如果没有必要,它似乎没有发展出玩快速卡的爱好。这可能是因为我初始化的 15 副牌中只有三张快速牌,而有六张艺术牌和六张毁灭牌。所以它会更习惯玩艺术和巴斯特牌。第二个有趣的细节是,正如我上面讨论的,潘德雷肯·奥尔特似乎对第一和第三张牌槽中的扑克牌的额外奖励有一些直觉。

潘德雷肯·奥尔特建筑对第一张和第三张牌有额外奖励的一些理解也在没有锁链可用的情况下展示。在下面的例子中,它没有选择任何一张快速卡,而是用两张巴斯特卡和一张艺术卡建立了一个链。通过在链的开始和结束放置巴斯特牌,链将在该手牌的任何牌组合中造成最大的伤害,而中艺牌将帮助它提高 NP 标准。所以基本上潘德雷肯圣坛在充能的同时试图最大化自己的伤害。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pendragon Alter maximizing damage by playing Buster cards in slots 1 and 3 while filling the 2nd card slot with an Arts card

当没有卡链可用时,我会认为潘德雷肯 Alter 优于我以前的潘德雷肯机器人,因为它更好地利用了卡链中的位置。下面是这两个机器人如何玩之前 GIF 中看到的那手牌。

Hand: "Buster","Quick","Arts","Buster","QuickProject Pendragon Bot: “Arts”, “Buster”, “Buster”
Alter Pendragon Bot: “Buster”, “Arts”, “Buster"

非常相似,但交换前两个卡槽的区别很重要。

我建立了潘德雷肯计划来玩所有可用的艺术牌,然后是巴斯特,然后是奎克。这意味着它将总是使用所有可用的艺术牌,但它不会最大化艺术牌的效果或巴斯特牌的伤害。最大化这两样东西的方法是玩潘德雷肯·奥尔特玩的那手牌。第一张巴斯特卡增加包括最后一张巴斯特卡在内的整个链的伤害,中间的艺术卡比第一个槽中的艺术卡造成更多的 NP 增益,最后一张巴斯特卡的伤害将增加第一张和第三张卡槽奖励。

因此,虽然我可以在潘德雷肯项目中添加逻辑来解决这一问题,但它暴露了我最初算法中的一个弱点,以及强化学习训练的潘德雷肯·奥尔特击败我最初机器人的一个领域。

最终注释

到目前为止,这些帖子受到了许多其他数据科学家及其工作的启发。Sentdex 的侠盗猎车手教程系列 , Chintan Trivedi 的关于他如何训练一个网络玩 FiFA 的帖子,以及之前提到的 Scott Rome 关于训练一个网络玩 21 点的帖子等等。因此,感谢所有为数据科学社区做出贡献的人,让它拥有如此丰富的信息!

虽然潘德雷肯·奥尔特展示了一些基本的强化学习如何产生一些有趣的结果,但仍有改进的空间。正如我提到的,能够考虑整个游戏而不是一轮一轮地玩将是机器人的另一个有趣的扩展。

在本系列的第 1 部分中,我构建了一个由三个神经网络驱动的基于规则的机器人来玩命运大令。第 2 部分展示了我如何构建一个可能是邪恶的“Alter”,强化学习的对等物。因此,我写第 3 部分来展示这两个机器人面对面放置时的情况似乎很合适。

项目潘德雷肯第 3 部分:斗兽场摊牌

原文:https://towardsdatascience.com/project-pendragon-part-3-the-colosseum-showdown-b7a855dd141?source=collection_archive---------19-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Screenshot from one of my speed runs for this blog post.

在我之前的两篇文章中,我讲述了我如何构建两个机器人来玩游戏《命运大令》(FGO)。第一个机器人(潘德雷肯)利用三个 Pytorch CNNs,两个经典的和一个暹罗的,根据我建立的算法识别卡片并播放它们。第二个机器人(潘德雷肯·奥尔特)在定制的游戏环境中接受训练,使用基于 Keras+Tensorflow 的强化学习,自行学习挑选卡片来玩 FGO。

我发现这两个机器人都能够完成大部分任务,包括一些 80-90 级以上的任务,这表明他们能够很好地扮演 FGO。然而,我还没有明确测试的是机器人在相互比较中表现如何,以及它们与人类玩家相比如何,在这种情况下就是我。

第三篇文章将介绍我对这两个机器人的性能进行对比测试的过程,以及我对如何改进它们的想法。就其本质而言,它不像前两篇文章那样具有技术性,而是对这两个机器人的性能进行定量和定性的比较。

由于 FGO 并不跟踪效率或分数之类的东西,我认为对这两个机器人进行基准测试的最佳方式是让它们使用相同的团队重复运行特定的任务。谁跑得更快,谁就是赢家。

指定时间和地点:

根据标题,你大概能猜到摊牌地点。我选择了 FGO 一年一度的尼禄节的最后一场比赛,选手们在罗马斗兽场与无数不同的敌人战斗。这个特殊任务的名字叫“回合”。回合是一个结束游戏水平 80+。除了推荐的高等级之外,这个任务的另一个困难之处是敌人类型的混合。

这种混合的敌人意味着你很难通过使用有利的职业配对来完成任务。所以这是我能为机器人选择的最难的任务之一,因为它们天生就必须靠暴力来完成。这个增加的难度意味着如果他们选择了糟糕的卡组合,他们将会受到游戏更严厉的惩罚。如果他们选择了不好的卡片组合,最好的情况是多花几个回合才能赢,或者在最坏的情况下会彻底输了,被消灭。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

screenshot from the final battle of “The Rounds” quest. It is basically a battle against different knights of the round table. On several occasions the bots got stuck trying to defeat Tristan the red haired character on the left. He would fire his own ultimate several times and defeat multiple members of the bot teams and even managed to wipe out the Pendragon Bot on one occasion

选择团队

设计团队组成需要一点思考,这样他们才能发挥机器人的优势。一个人类玩家可能会尝试使用一个主要伤害制造者和两个辅助角色的组合。由于我的机器人不能使用辅助角色,在阵容中使用它们是相当无用的。因此,我决定在团队组成中尽可能多的增加力量,通过将三个最大等级的伤害处理者作为团队的主要部分,使之成为一场蛮力战斗。团队中的其他人是较弱的角色,我可以根据可用点数将他们放入团队中(见下图中的总成本 105/105)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

If anyone watches Critical Role, yes that is a Critical Role team name reference

规则和约束

因为我也是作为人类基准在这里竞争,所以解释机器人目前的限制很重要,这样我就可以匹配它们。

机器人有三个主要的限制,对我来说也很重要。

首先,我没有为机器人创造一种使用角色技能的方法。技能通常是强大的加成,可以叠加在一起放大攻击。我还没有为机器人建立一个使用技能的方法,因为让他们聪明地使用技能比仅仅编写脚本让他们在 x 回合使用技能要难一些。

第二,机器人从前到后依次清除敌人 1、2 和 3。玩家可以从技术上选择攻击哪个敌人,如果他们的手对某个特定的敌人没有优势,或者他们可能想攻击某个特定的角色,因为他们很危险。

最后,我给机器人添加了一个协议,他们在第十回合之前不会使用他们的终极能力,高贵幻影。我发现这大约是机器人进入最后一轮战斗所花的时间。如果我不包括这一点,机器人可能会在非常不合适的时候使用它们的 NPs,它们很大程度上被浪费了。这模拟了普通玩家的策略,在前两波攻击 NPs,在第三波(包含最后的 bosses)释放他们,以在一个回合中结束最后一波。

所以作为这场比赛中的人类选手,我也把自己限制在这些规则之内。快速重新总结如下

  1. 不能使用角色技能
  2. 不能选择敌人,必须从前到后攻击他们
  3. 在第十回合前不能使用终极能力,高贵幻象。

将这些功能添加到机器人上会是潘德雷肯或潘德雷肯变更代码库项目的一个很酷的补充!

由于这个任务中的敌人和这些限制,我相信理论上一个团队完成这个任务的最低回合数是 10。如果所有的 3 个 NPs 没有被使用,那么这个任务可以很容易地再拖 4-5 个回合。

谁生,谁死,谁讲述你的故事?

为了比赛,我让两个机器人中的每一个和我自己使用上面的团队组成和指定的规则运行“回合”任务 10 次。

我花了几个小时运行这个任务 30 次,部分原因是因为我在这个博客系列的第 1 部分提到过,在长时间使用 Teamviewer 后,我的手机会发热。然而结果很有趣…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最初的潘德雷肯机器人和强化学习训练的潘德雷肯·奥尔特乍一看表现非常相似,平均分别为 12.8 圈和 12.5 圈。此外,每个机器人都能够在 10 次转向时达到该测试的理论最佳分数。有趣的是差异,你会注意到潘德雷肯机器人的标准差更大,因为分数范围从 10-17,而潘德雷肯奥尔特的分数范围在 10-14 之间。

我在运行这些测试时注意到,当它们能够满足最佳情况时,两个机器人都做得很好。开始的三个角色在前两波战斗中幸存下来,给他们的 NPs 充能,然后在第三波包含老板的战斗中立刻释放他们。这两个机器人有时能够做到这一点,因为它们都优先使用艺术卡来给它们的 NPs 充电。最初的潘德雷肯是因为我硬编码了那个行为,而潘德雷肯改动是因为它自己学习了那个行为,以便在我为它构建的定制环境中获得 80%的成功率。

这两个机器人之间的差异可以在他们无法在第 10 回合获胜时看到,这通常发生在一个或多个开始的三个角色在第 10 回合之前被选中并击败时。原始的潘德雷肯几次被逼得走投无路,所以在测试中,它的得分是 15 分和 17 分。特别是到了 17 强的那一轮,整个团队都被电脑 AI 消灭了。这可能被认为是最坏的结果。潘德雷肯·奥尔特拥有更紧密的分布,最高得分为 14 分,并且从未像最初的机器人那样被推回到墙上。

这种紧密的分布很可能是由于潘德雷肯·奥尔特从第二部的自定义环境中的强化训练中学到了更好的游戏性。特别是潘德雷肯·奥尔特学到的游戏玩法是通过优先使用艺术卡和巴斯特卡来最大化伤害和 NP 收益,同时降低第三种卡类型的优先级,快速卡。

类似于我在第二部分中强调的,结合潘德雷肯·奥尔特对第一和第三张牌奖励的了解,下面可以看到一些艺术和巴斯特牌的优先排序的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

In this case Pendragon Alter chooses Arts cards in slots 1 and 3 and a buster card in slot 2. This is a choice the maximizes NP gain and helps Pendragon Alter get to that final wave with all of its NPs charged

这并不是说快速卡不好,但它们的伤害更低,并且不会对 NPs 收取那么多费用。由于致命一击,它们创造了更高伤害的随机机会,并且需要团队定制使用它们。然而,我所效力的球队并不像某些组合那样受益于致命一击。所以潘德雷肯改变学习去优先化快速卡让它在使用我扮演的角色时比原来的潘德雷肯平均造成更多的伤害。

这种快速卡的去优先化在潘德雷肯圣坛中表现为能够在早期回合中击败一个额外的敌人,或者能够在战斗后期输出更多的伤害。相比之下,最初的潘德雷肯机器人会浪费一个关键的游戏后期回合,通过玩更多的快速卡来造成更少的伤害,从而使游戏拖得更长。这种差异使潘德雷肯·奥尔特的团队在整个战斗中免受额外的伤害,并帮助它在最初的机器人努力消灭对手并因此受到额外伤害时持续清除任务。

下面是一个早期的游戏例子,潘德雷肯·奥尔特在牌槽 1 和 3 中挑选两张艺术牌,然后用一张快速牌来填充槽 2。最初潘德雷肯会打出三张快速卡,由于快速卡的低伤害输出,我不确定它是否能够击败最后一个敌人。如果敌人没有被击败,那么机器人的团队将受到另一轮的伤害。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

潘德雷肯·阿尔特能够造成更多伤害的另一个地方是有三张快速卡的情况。最初的潘德雷肯机器人会玩快速链,因为这是它被编码要做的。然而,潘德雷肯·阿尔特并不总是玩这种牌,而是玩高伤害牌或能帮助他更快建立 NP 标准的牌。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

This is an example Pendgraon Alter playing a higher damage hand that still generates critical stars, rather than simply generating critical stars, but dealing relatively little damage.

结束语

所以在这种情况下,经过强化学习训练的潘德雷肯·奥尔特击败了我亲手制作的潘德雷肯机器人。我认为这是一个非常酷的结果,因为在我建立强化学习环境之前,作为一个相当有经验的玩家,潘德雷肯·奥尔特比我更好地学会了如何玩 FGO。在那种环境下,我不得不研究 FGO 是如何计算伤害的,潘德雷肯·奥尔特可以从中学习。

虽然潘德雷肯·奥尔特击败了我最初的潘德雷肯机器人,但他们仍然没有超过人类玩家。即使有和他们一样的限制,我也能在十个回合中持续获胜。主要的区别是我能够应用更多的知识,比如利用职业亲和力系统,FGO 使用的石头剪刀布风格的职业系统,并确保我对所有角色的 NPs 充电,使他们都达到 100%,而不是像机器人一样不知道他们在充电谁的 NPs 就试图充电。

这些差异是机器人可以改进的地方,或者是游戏当前状态的更大背景。输入关于哪些卡对当前目标敌人有效的信息将有助于机器人优先使用哪些卡。让机器人可以检查他们团队中每个角色的当前状态,这可能有助于他们选择出牌来帮助收取特定角色的 NP,即使这是仅基于卡选择的次优移动。

如果我能在机器人中建立一些这样的功能,也许能在 FGO 达到接近人类的表现。这将是一个更崇高但也很有趣的更新,在未来我将不得不为此而努力。

感谢您阅读本系列,希望您也觉得有趣!

托弗计划:脸书·佩奇反应预测计划

原文:https://towardsdatascience.com/project-topher-facebook-page-reaction-prediction-program-95bcf4916892?source=collection_archive---------3-----------------------

我终于在旧金山大会完成了为期 12 周的数据科学沉浸式项目。对我来说,学习前沿数据分析&机器学习技术是一次非常好的经历。

本课程的重点部分是“顶点工程”。我想出了一个在脸书商业页面上建立一个反应预测程序的主意。我在这个项目中主要使用了自然语言处理和分类建模技术。

动机

我为我的顶点项目选择这个主题,因为大约 5 年前当我还是一名营销经理时,我真的很想有这样一个项目。我不得不为我每天管理的每个社交媒体设计内容,却不知道我的预期绩效结果。我必须根据我在脸书分析工具上的发帖记录和我的直觉,在社交平台上发布新的东西。如果当时我有一个自动反应程序,可能会对我更好。我根据公司的发帖历史设定策略,尽可能多地获得反馈,但这是一项如此不可预测的工作。因此,我决定建立一个社交网络反应预测程序,帮助几乎每天都在创建在线营销内容的社交媒体经理。首先,我选择创建一个脸书·佩奇反应预测程序,托弗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1)Post from Whole Foods Market Facebook Page: ‘Status message’ and ‘Link text’ are highlighted by red lines

产品设计

我设计 Topher 是为了帮助社交媒体经理在过去分析他们的发帖历史和竞争对手的帖子时表现得比他们的平均表现更好。换句话说,这个程序显示你是否会得到比你目前得到的平均反应更多的反应。

该产品的目标是预测给定用户文本输入后的反应。脸书因其“喜欢”按钮而闻名,但它在去年(2016 年 3 月)推出了亚情感表情符号,如积极的爱、哈哈、哇,消极的悲伤和愤怒。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2)Facebook added sub emoting emojis such as Love, Haha, Wow, Sad and Angry in March, 2016

我把这些反应分成三类:积极的反应,消极的反应。我设计了这个程序来预测这篇文章,在给定文本输入的情况下,是否会比脸书页面上的平均表现获得更多的每个反应类别的数字。当你在页面上写下你的文字输入后,这个程序会自动评估你的表现。我没有在这个分析中包括“分享数量”和“评论数量”,因为我们无法仅用数字来推断分享和评论的哪个行为是积极的还是消极的。

数据集

我使用脸书 API 从 5 个杂货店页面获取了大约 15k 个帖子。数据包含文本和每种反应类型的反应数量。脸书提供的数据有两部分文本:“状态消息”和“链接文本”,在上图(图 1)中用红线突出显示。除了文本数据,该数据还包括其他信息,如“内容类型”、“发布日期”、“内容链接”等。我最初分析了“全食超市”数据集,后来将我的分析扩展到另外 4 个数据集。

数据预处理

首先,我从数据集中过滤掉一些极端的异常值和反应数量很少的帖子。除此之外,数据的分布是极其正偏的,所以我采用自然对数变换来使我的数据呈正态分布。由于该程序旨在帮助你获得比你之前帖子的平均数量更多的喜欢或积极反应,过滤这些帖子将有助于我的模型的一致性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3)Remove outliers -> natural log transformed -> remove posts with least number of reactions

除此之外,如果你的帖子是付费的,那么比普通粉丝数量有更高的可能性接触到更多的人,也更有可能获得更多的反应。事实上,当我比较离群值的文本时,我无法说出离群值和只有文本数据的正常帖子之间的任何特殊差异。因此,我怀疑那些极端的异常值可能是付费的帖子,或者那些有大量回复的帖子可能有一些背景。然而,这次我无法证明这个假设,因为我无法获得关于每个页面上哪个帖子是有机的或付费的信息。因此,这次我只是为了模型的一致性而将它们过滤掉。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4)Texts from normal posts

第二,我把两列文字合并成一列,因为“状态消息”和“链接文字”同时出现在一篇文章中。在整个项目中,我意识到文本越多,建模的结果就越好。

第三,为了简单起见,我从文本中删除了特殊字符、数字和链接名(比如‘https://…’)。

第四,数据规范化。由于每个页面的粉丝数量不同,曝光度也不同。当我将我的分析扩展到另外 4 个数据集(如 Safeway、Sprouts、Walmart 和 Kroger)时,我将每个反应的数量除以每个页面的粉丝数量进行了归一化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5)pairplot for num_likes and num_reactions

最后,当我研究变量之间的相关性时,我注意到反应的数量和喜欢的数量高度相关。这是因为在 2016 年 5 月之前,“赞”是脸书上唯一的情感反应按钮,超过 95%的反应来自“赞数”。

从现在开始,我将主要解释全食超市数据集(WFM)的数据分析和建模过程。

自然语言处理

对于文本数据处理,我使用了 Scikit-learn(sklearn)、NLTK 和 Gensim 库来分析文本数据。

首先,我使用停用词去除频繁但不必要的词,并使用 Tf-idf 向量机创建文本稀疏矩阵,该向量机赋予频繁和重要的词更多的权重。Tf-idf 是“术语频率和逆文档频率”的缩写,它是一种数字统计,旨在反映一个词对集合或语料库中的文档有多重要,并且是广泛用于信息检索的技术。除此之外,我过滤掉了在整个语料库中只出现一次的最不常用的词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6)distribution of most frequent words(x-axis: frequency rate)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7)distribution of least frequent words(x-axis: frequency rate)

我必须查看真实的单词,确定哪些单词是不必要的或重要的,更新包含要从原始语料库中过滤的单词的停用单词列表,并一遍又一遍地调查单词的分布。这可能是一项非常乏味的工作,但对于自然语言处理来说却非常重要。

我还研究了 n 元语法,这对于相邻单词的序列是有用的。N-gram 是来自给定文本序列的 n 项的连续序列。我能够理解哪些单词经常一起使用,并更好地理解上下文中的单词。

在清理和过滤不必要的单词后创建的文本稀疏矩阵将被用作预测器,以预测一个帖子是否会在建模中获得更高的反应数。

更多特色工程

对于分类建模,我使用上面的 tf-idf 矢量器创建了一个文本预测器。然而,仅使用标记化的文本数据,我无法获得高准确度分数,因此我必须想出更多的特征工程技术。我尝试创建了几个功能,如使用 word2vec 的文本向量表示、内容类型、可读性和文本列长度。

首先说明结论,文本长度可以有效区分低于平均文本和高于平均文本。当我查看数据时,我可以看到较短的文本通常会得到更多的反应,所以我创建了一个文本长度列,并使用预测器进行分类建模。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. mean of number of reactions for text length

除此之外,“内容类型”列稍微增加了准确性分数。然而,我没有包括这个功能,因为我的程序不会接收输入的内容类型(如视频,图片,只有文本)将用于这个职位。数据类型和反应数量之间肯定存在正相关关系。然而,我决定这次不包括这个特性,我将在不久的将来把它与图像和视频分析结合起来

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. video and photo has the most biggest number of likes(mean)

型号选择

下面是我为托弗做的最终模型的解剖图。

目标

Topher 将新的用户文本输入分为 2 类(低于/高于平均值),每类 3 种反应。

  • 反应:喜欢,积极反应(爱,哈哈,哇),消极反应(悲伤,愤怒)
  • 目标类:低于平均类(类 0),高于平均类(类 1)

预测值

  • 清理和标记文本数据
  • 文本长度

模型:带有决策树分类器的 Adaboost 分类器

我的最终模型是 Adaboost(Adaptive Boosting 的缩写)分类器,这是一种用于集成方法的机器学习元算法。

决策树分类器

决策树分类器是该模型的基础分类器。决策树分类器根据输入变量中最显著差异将输入数据划分为预定义类别。由于决策的重复过程看起来像树的节点,因此被称为决策树。

Adaboost 分类器

Adaboost 分类器将基分类器的性能训练成强分类器。根据 Scikit-learn 文档,boosting 基本估计量是按顺序构建的,人们试图减少组合估计量的偏差。其动机是将几个弱模型组合起来,产生一个强大的集合。

弱模型被顺序添加,使用加权的训练数据进行训练。该过程继续,直到已经创建了预设数量的弱学习者(用户参数),或者不能对训练数据集进行进一步的改进。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我以 7:3 的比例将数据集分为训练数据集和测试数据集。我用训练数据训练我的模型,并用测试数据集测试模型。最后,在使用 Adaboost 分类器的所有五个源/数量喜欢的情况下,我的准确度得分为 0.87。这意味着我的分类模型以 87%的准确率预测了输入文本的性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10) Accuracy score comparison_ number of likes model

查看 Topher 的最终模型,总共有 6 个分类模型在一起工作。我最初开始只分析全食超市数据集的每个反应(赞数、赞数和负数),并将我的分析扩展到所有 5 个杂货店数据集。通过这六个模型,用户不仅可以将他们的文本输入结果与他们自己过去的数据集进行比较,还可以与他们的竞争对手进行比较。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. Accuracy score table_all models

我对积极和消极反应的准确率更高。你可以看到红线框里的数字。然而,这些对于这个模型来说并不是好的分数,因为这些模型是过度拟合的。

根据维基百科,在过度拟合中,统计模型描述的是随机误差或噪声,而不是潜在的关系。过度拟合发生在模型过于复杂的时候,例如相对于观察值的数量有太多的 p 参数。过拟合的模型具有较差的预测性能,因为它对训练数据的微小波动反应过度。在这种情况下,num_pos 和 num_neg 的这 4 个模型几乎只预测了一个类别(低于平均值)。

这是因为阳性和阴性反应的数据数量非常少(不到整个数据集的 5%)。由于 Adaboost 容易对小数据集和太多参数(在这种情况下,文本稀疏矩阵超过 16,000 列)过度拟合,这种情况发生在这四个模型上。然而,我没有排除这些模型,因为我假设当我以后获得更多数据时,我可以改善这个问题。

模型性能评估

我的最佳模型有 87%的准确率。精度是正确预测的观测值之比。这个分数是选择最佳模型的直观的和主要的度量,但是这对于分类器的性能评估是不够的。为了更彻底地评估分类模型,我还使用了 Scikit 中的一个常规函数——学习库,分类报告。我将用我的主模型和 num_likes 的 5 个杂货店数据集来分析模型性能。

分类报告

分类报告有 3 个主要的分类指标:精确度、召回率和 f-1 分数。

  • 精度表示所选类别中正确阳性结果的比率:真阳性/(真阳性+假阳性)
  • 召回率表示相关数据中正确预测的阳性事件的比率:真阳性/(真阳性+假阴性)
  • f-1 分数是精确度和召回率的调和/加权平均值。因此,这个分数同时考虑了误报和漏报。直观上,它不像精确度那样容易理解,但是 F1 通常比精确度更有用,尤其是当你的职业分布不均匀的时候。:2*(召回率*精确度)/(召回率+精确度)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Classification report for the main model with 5 grocery store dataset for num_likes

从我的最佳模型的分类报告来看,每个分数看起来都很不错。不同类别之间在精确度和召回率方面存在一些差异,但总体而言,该模型在超过 16,000 个特征(标记化单词)的情况下工作良好。

网络应用

我使用 Flask 和 Reactjs 与一名开发人员一起创建了一个 web 应用程序。这个程序被设计成当你在输入框中输入你的文本时立即显示结果。

程序演示

下面是 Topher 演示页面。第一个窗口仅用于 WFM 数据集,第二个窗口基于 5 个杂货店数据集。当您想要查看仅使用过去的数据时,您的文本输入将如何执行时,您可以使用第一个窗口。如果您想与他人比较您的表现,您可以在第二个窗口中键入文本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例如,在第一个框中键入“复活节快乐”,然后您会看到您的输入将获得比平均数量更多的反应。在这个演示中,“高于平均受欢迎程度”意味着你将获得比你之前帖子平均更多的“喜欢”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个项目现在不对公众开放。当我很快创建一个供公众使用的网站时,我会在这里链接该程序。

未来工作

对于这个项目,我专注于文本分析,试图捕捉文本和反应之间的关系。直观地说,图片和视频的质量对吸引用户关注脸书有着最大的影响。为了检验我的假设,我对周围的人做了一个简短的调查。

问题:当你看这个帖子的时候,你首先看到了什么?

  1. 状态消息
  2. 图片/视频
  3. 链接文本

我询问的大多数人(60 人中有 58 人)回答说
图片首先引起了他们的注意,然后是“链接文本”和“状态消息”。我想很快将项目范围扩大到图像&视频。

关于作者

我是加州圣何塞的一名热情的数据科学/机器学习从业者。我是一个终身学习者,目前对 NLP 和深度学习非常感兴趣。你也可以在 Linkedin 上找到我。

表现出自信

原文:https://towardsdatascience.com/projecting-confidence-5fe3a799913d?source=collection_archive---------15-----------------------

概率赛马如何遣散公众

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

受唐纳德·川普在 2016 年大选中令人震惊地击败希拉里·克林顿的启发,肖恩·韦斯特伍德伊普塔赫·莱克斯和我开始探究这样一个问题:elecion 的预测——尤其是概率性预测——是否有助于制造一种对克林顿获胜的虚假信心,并最终导致许多左翼人士在选举日留在家中。

选举后,纽约杂志引用了希拉里本人的话:

有人真的在寻求赦免……’很抱歉我没有投票。我以为你不需要我。“我不知道我们将如何计算有多少人认为它是稳操胜券的,因为百分比一直被抛给人们——”“哦,她有 88%的机会赢!

预测可能影响了选举,这有可能吗?

为了影响选举,它必须出现在媒体上,接触潜在选民,压低投票率,并对克林顿支持者(和/或克林顿竞选者)产生比特朗普更大的影响。

与过去的选举周期相比,2016 年媒体对概率预测的报道明显增多:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(谷歌新闻索引的提及概率预测的文章数量。)

我们的研究(见下面的结果)表明,在民调中领先的候选人更容易受到概率预测的影响。2016 年,那是希拉里。

但不管 2016 年如何,当你看谁在社交媒体和电视媒体上接触这些材料时,你会发现这些渠道拥有左倾的观众。根据概率展示民意调查汇总结果的网站拥有左倾(负面)的社交媒体受众——只有不强调获胜概率的 realclearpolitics.com 拥有保守的受众:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些数据来自那些分享链接到脸书各种投票聚合网站的人的平均自我报告意识形态,这些数据来自本文复制材料

当你看一下主要电视广播对概率预测的报道平衡时,你会发现对 MSNBC 的报道更多,那里有更自由的观众。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

预测者到底有多大影响力?

嗯,FiveThirtyEight 的 2018 年报道似乎已经很有影响力了。在他们的实时预测显示共和党获得众议院席位的几率在晚上 8 点 15 分左右达到 60%后,PredictIt 预测共和党的几率升至 50%以上,美国政府债券收益率短暂飙升 2-4 个基点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这种激增似乎已经发生,因为许多大的,共和党占主导地位的地区在那些支持民主党的地区之前开始报告回报,还因为它从部分选票统计中做出推论:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是由 FT.com 的布莱恩·格里利首先报道的。他们报告说,由于市场预期在共和党控制下(高支出、低税收),美国债券收益率上升。

这只是一种关联吗?有可能,但在美国几乎没有其他事情发生,就像上面 FT.com 的文章指出的那样,欧洲现在是凌晨 1 点。

Josh Tucker 在一篇猴子笼博文中提出,2012 年,538 可能正在推动预测市场。

我们对预测和感知的研究

我们的研究显示,概率性的选举预测让一场比赛看起来不那么激烈。国家概率调查实验的参与者在看到概率预测后,比看到同等的投票份额估计和误差幅度后,更加确定一个候选人将赢得假设的比赛。这是一个很大的影响——这些是置信区间而不是标准误差,p 值低于 10^-11.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人们为什么会这样做?

这里需要更多的研究,但我们确实有一些线索。首先,公众最熟悉的选举指标——投票份额估计——的微小差异通常对应于候选人获胜概率的巨大差异。

Andy Gelman 在 2012 年的一篇博文中顺便提到了这一点,质疑 538 在其网站上传达预测时使用的十进制精度(0.1%):

没错:0.1%的获胜概率变化对应着 0.004 个百分点的两党选票份额。我看不出想象如此精确的选举预测有什么意义……

其次,人们有时会混淆概率预测和投票份额预测,并错误地得出结论,认为候选人预计会赢得 85%的选票,而不是有 85%的机会赢得选举。在我们的实验中,大约十分之一的人会这样做。

正如约书亚·本顿在推特中指出的,TalkingPointsMemo.com犯了这样一个错误:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,人们倾向于从定性的角度思考事件发生的概率 (Sunstein,2002)(Keren,1991) 。有 85%的可能性某事会发生意味着它将会发生。这些研究可能有助于解释为什么在 2016 年大选后,如此多的人批评预测者“搞错了”(见这个这个)。

投票呢?

也许最关键的是,我们发现显示更多井喷的概率预测会降低投票率。在研究 1 中,我们发现基于自我报告的证据有限。在研究 2 中,我们表明,当参与者面临模拟现实世界投票的激励时,当概率预测显示一名候选人获胜的可能性更高时,他们不太可能投票。然而,他们对投票份额的变化没有反应。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这真的会影响现实世界的投票吗?

想想 2016 年——异常多的民主党人认为领先的候选人会以相当大的优势获胜:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在选举前的民意调查中,认为领先的候选人将会以相当大的优势赢得 T21 的人,比认为这是一场势均力敌的选举的人说他们在选举后投票的可能性低大约 3 个百分点。这是在控制了选举年、之前的投票率和政党身份之后。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里的数据来自美国全国选举研究(ANES)的数据,可以追溯到 1952 年。

过去的社会科学研究也提供了证据,证明认为竞争激烈会提高投票率。一些最好的证据来自分析投票结束前公布投票后民调结果的影响的工作,这显然消除了不确定性。研究东海岸电视网为一个或另一个候选人“提前打电话”对西海岸投票率的影响的工作通常发现微小但具有实质性意义的影响,尽管这些电话发生在选举日的后期(德利·卡皮尼,1984)(苏德曼,1986) 。利用投票改革作为自然实验的类似工作显示,在出口民调公布后,法国海外领地的投票率下降了整整 12 个百分点 (Morton,Muller,Page,& Torgler,2015) 。这些设计不会与竞选团队在竞争激烈的竞选中投入更多资金的趋势相混淆。

研究人员一致发现,更严格的选举和更高的投票率之间存在强有力的关联。 (Cancela & Geys,2016) 供点评】。此外, (Nicholson & Miller,1997) 从统计模型中提供证据表明,先前的选举结果也解释了超出竞选支出的投票率,尤其是在没有良好的投票数据的情况下。

实地实验提供了额外的证据,表明对更激烈的选举竞争的感知会增加投票率。这项工作发现,当民调结果显示通过电话传递一场势均力敌的比赛时,会对投票率产生实质性影响[在那些被触及的人中, (Biggers,Hendry,Gerber,& Huber,2017) ],但当依靠明信片传递近距离信息时,结果为零[无法验证是否实际阅读了该处理,(缺少参考文献);(比格斯,亨德利,格柏,&胡伯,2017) 。最后,在 2012 年总统大选前几周进行的一项研究发现,在公布表面上显示奥巴马与罗姆尼不分上下的民调结果时,自我报告的选举后投票率更高[这与现存的显示奥巴马轻松领先的民调数据不一致, (Vannette & Westwood,n.d.) ]。

这也会影响政治家吗?

候选人对选举接近程度的看法会影响竞选和代表 (Enos & Hersh,2015)(Mutz,1997)

这些看法也可以影响政策决定——例如,在 2016 年选举之前,据报道,奥巴马政府对克林顿获胜的信心是对俄罗斯干预选举保持沉默的一个因素。

前联邦调查局局长詹姆斯·科米表示,由于对希拉里获胜充满信心,他觉得自己有责任在 10 月 28 日写信给国会,表示他将重新调查希拉里的电子邮件。科米解释了他的行为,基于他对克林顿获胜的某种信念:“(她)会当选总统,如果我对美国人民隐瞒这一点,她当选的那一刻,这一点出现的那一刻,她就是非法的”。内特·西尔弗一度表示,“科米的信可能让希拉里输掉了选举。‘’

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

媒体报道 华盛顿邮报FiveThirthyEight 的政治播客纽约杂志政治专线

参考文献

  1. Keneally,M. (2018)。科米说每个人——包括他自己——都认为克林顿会赢得 2016 年大选。美国广播公司新闻。ABC 新闻网。检索自https://ABC news . go . com/Politics/comey-included-thought-Clinton-win-2016-election/story?id=54486869
  2. Biggers,D. R .,Hendry,D. J .,Gerber,A. S .,& Huber,G. A. (2017)。关于选举接近程度是否(以及为什么)影响投票率的实验证据。从 https://huber.research.yale.edu/materials/67_paper.pdf 取回
  3. 坎塞拉,j .,&盖斯,B. (2016)。解释投票率:国家和地方选举的荟萃分析。选举研究42 ,264–275。
  4. Enos,R. D .,& Hersh,E. D. (2015)。竞选对选举接近度的看法:不确定性、恐惧和过度自信。《英国政治科学杂志》,1–19 页。
  5. 莫顿,R. B .,穆勒,d .,佩奇,l .,和托格勒,B. (2015)。出口民调、投票率和从众投票:来自自然实验的证据。欧洲经济评论77 ,65–81。https://doi . org/http://dx . doi . org/10.1016/j . euro ecorev . 2015 . 03 . 012
  6. Geys,B. (2006 年)。解释投票率:总体水平研究综述。选举研究25 (4),637–663。
  7. 桑斯坦(2002 年)。情绪、最坏情况和法律。《耶鲁法律杂志》112 (1),第 61–107 页。
  8. 尼科尔森,S. P .,,米勒,R. A. (1997)。1986 年和 1988 年国会选举中的先验信念和投票率。政治研究季刊50 (1),199–213。
  9. 穆茨,哥伦比亚特区(1997 年)。动力机制:是思维让它如此吗?《政治杂志》59 (1),第 104–125 页。
  10. 克伦,G. (1991 年)。校准和概率判断:概念和方法问题。心理学报77 (3),217–273。
  11. 苏德曼(1986 年)。出口民调会影响投票行为吗?舆情季刊50 (3),331–339。
  12. 德利·卡皮尼,硕士(1984 年)。拉拢选民?1980 年电视网提前宣布总统竞选的后果。《政治杂志》46 (3),866–885 页。
  13. 选举前的民意调查能影响投票率吗?来自随机实验的证据。检索自https://www.dartmouth.edu/seanjwestwood/papers/polling . pdf

原载于https://solomonmg.github.io/projects/1_project/

数据的承诺和陷阱,或者不是所有的数据都是一样的。

原文:https://towardsdatascience.com/promise-and-pitfalls-of-data-or-not-all-data-is-created-the-same-14f59123e3a4?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大约十年前,当“数据科学”变得流行时,许多观察家附和并胜利地宣布“科学方法”的时代已经结束,例如,根据《连线》杂志上这篇令人眼花缭乱的文章。许多科学家理所当然地感到震惊,并发出了歧义——我特别喜欢彼得·诺维格回复的这篇深思熟虑的文章,他是我深深敬佩的人。但是,就数据的更随意的用户而言,我怀疑《连线》杂志比像诺维格这样的真正的科学家做得更正确。底线是,当涉及到他们在“业务”中可能不会遇到的罕见事件时,人们不在乎“真实”的解释。他们想要“有效”的精巧的解决方案,不管深入的解释是什么。如果 Google Translate 在不真正理解这些语言及其各种细微差别和复杂性的情况下,能够高效地翻译需要翻译的常见文档,为什么不呢?如果所有复杂的理论都只与日常商业交易中不会出现的少数不寻常的情况有关(例如,诗歌、古日语中的宫廷行话、一些奇怪的稀有语言,或者其他什么),为什么要为所有的理论化费心呢?不管我们喜不喜欢,Google Translate 的成功在于认识到翻译中 95%的复杂性和怪异之处与不到 1%的怪异案例有关,并且在开发翻译引擎时可以省去它们——至少在最初阶段是这样。

这不是翻译算法所独有的。相当可靠的数据既便宜又丰富。与复杂的理论相比,它们可以用于创建相对简单的度量,并以熟练的方式表现良好。他们失败的地方是相对较少的“怪异”案例,从大的方面来看,这些案例不寻常到足以被安全地忽略——除非它们可能是相关的。还有另外两个领域,我对引入数据科学方法既着迷又沮丧:政治和棒球。识别和衡量“优秀的棒球技术”或“意识形态”本质上是一项不可能的任务:我们不知道它们到底是什么,就像翻译普希金的诗歌一样。但是翻译俄语并不需要理解普希金的诗歌,毕竟,即使对俄罗斯人来说也没有多大意义。有很多更容易、更容易翻译的文档可以用来训练你的算法,而且大多数文档更接近这些常规文档,而不是普希金。因此,一个好的政治观察家或一个好的侦察兵在遇到奇怪的情况时可以胜过算法,就像一个好的翻译可以比算法更好地翻译普希金一样。但是,对于绝大多数任务来说,这种专业知识要么很少或根本没有改善常规算法,要么甚至可能表现更差。

这突出表明的问题是一个经典的统计问题,即异方差问题,但与通常描述的方式略有不同:根据模型的情况,误差在所有数据中的分布并不相同,或者换句话说,不同的模型在预测能力方面对不同的数据子集有不同的“效率”。当然,这是所谓的投资“反模式”思维或“ε理论”背后的基本观点。但我不认为这必然超出了算法思维的范围,只要人们不期望相同的算法对所有数据都同样有效——我在这里广义地定义“算法”。举一个简单的例子,如果条件 A 成立,数据生成过程总是产生 1,但如果条件 B 成立,则返回 2 或 0,但概率相等,如果条件 B 很少发生,但有一定的规律性,则可以通过使用两层方法进行改进:如果 A 预测 1,如果 B 预测 2 或 0。 一刀切的模式:总是预测 1,这对于线性思维来说是“正确的”,但前提是分析师故意忽略 A 和 B 之间的区别。这种改善只会是微不足道的,尤其是在 B 很少的情况下,而且它仍然会经常出错——如果我们无法预测最佳对策应该是 2 还是 0——这确实处于不确定性领域,鉴于手头的数据,但仍然是一种改善。 有人可能会说,如果一个星探说一个毫无意义的潜在客户仍然会很棒,如果这个星探很好,在这个潜在客户身上投资一点可能是值得的,数据就见鬼去吧。(我在某种程度上颠倒了赫伯特·魏斯伯格的论点,但是,我认为我忠实地抓住了他的真正论点:当我们从事统计分析时,我们确实必须故意无知——因为这是统计学的全部意义——但是我们需要认识到,当我们有机会时,我们已经准备好并愿意学习。

但是这需要一个理论,任何理论都需要评估它的有用性。一个球探根据一个理论来运作,这个理论是关于一个好的棒球运动员是如何形成的,这个理论可能不是普遍适用的——至少不是那么成功。如果这个理论不是普遍适用的,我认为正确的做法是不要彻底抛弃它,而是留下一种可能性,即这个理论仍然是好的,但只是对一些数据子集而言——如果那个数据子集能够以足够高的可靠性被识别,它仍然是有用的。因此,一个只适用于将俄语诗歌翻译成英语的理论可能仍然是好的——即使相对于统计算法而言,它对翻译军备限制条约并不那么有用。(顺便提一句,诺维格针对这一点提供了另一篇深思熟虑的文章,作为对乔姆斯基观点的回应。)如果球探能够比从一个天真的统计模型中推断出的机会更好地识别出在那些矮小和骨瘦如柴的人中脱颖而出的投手,那么也许我们已经在数据中识别出了他的理论应该得到更好机会的利基。

正如我在之前提到的,数据的问题,特别是当涉及到“大”数据时,是绝大多数样本与我们感兴趣处理的问题没有什么关系:如果我们想知道国会议员可能如何投票表决一项关于糖的修正案,比如说,从压倒一切的关注是投票给政党的大量投票中收集的数据并不特别适用,除非糖的问题不知何故成为了一个政党的问题。但是,即使记录的投票数量可能会成倍增加,大多数新的投票都会被精确地记录下来,以便国会议员可以按照政党路线突出他们的投票——这使得从中得出的措施几乎没有用处。现在,这本身就很重要——过去,国会议员会在他们投票的地方隐藏选票,并试图突出他们投票的地方,这对于选民来说是相对容易的,因为国会记录,即使记录了投票,也不容易获得。但关键是潜在样本本身正在以有意义的方式发生变化,而故意忽视这一点并坚持认为“意识形态”正在变化是误导性的,特别是当涉及到更罕见但仍具有潜在重要性的选票时,这些选票中的“地区关注”超过了“政党考虑”。

我认为解决方案是重新思考盲目崇拜大数据,但明智地怀疑其影响。大数据让我们对全局有了更准确的理解,这比没有数据我们所能获得的任何东西都更准确。但是它的发现掩盖了那些被错误地归为“错误”的微妙的小模式。然而,正是因为数据如此之大,它也提供了发现这些微妙模式的机会,如果一个人屈尊更仔细地观察,套用里科弗上将的话,具有讽刺意味的是,一个伟大的工程师而不是科学家,意识到这些细节才是拯救之所在。

PS。按照我的想象,统计建模的未来可能会如下发展。最近,参数不同地应用于数据的不同子集的多水平类型模型风靡一时:它提供了一种手段,以某种严格的措施来识别主要效应的差异及其统计意义。问题是,根据上面示例中确定的问题,数据子集之间的关键差异通常不是实质性影响,而是噪声量:对于始终为 1 的子集和以相等概率取值为 2 或 0 的子集,最佳预测值仍然是 1。如果一个人所寻求的只是确定“正确”的答案,而不考虑“错误”的程度,那么总是选择 2 以 B 为条件将是更好的反应。如果担心平均误差,但得到“正确”的答案仍然比总是错误更有价值,那么根据 B 在 0 和 2 之间随机猜测比得出它总是 1 的结论更好。像这样的嵌套决策模型在博弈论中并不少见。我不明白为什么这不应该适用于一个统计模型——其中感兴趣的关键统计数据应该是不同数据子集的条件方差,也就是说,即使抛开同质假设的伪装——即使它可能禁止用一个方程来总结整个数据,我认为这无论如何都是一个危险的错误偶像。

PPS。关于诺维格和乔姆斯基,我想我提出的是第三种方法,不同于两者,但吸收了两者的要素。正如诺维格所描述的,乔姆斯基的宇宙是“数学化的”(或者,我称之为“公理化的”)。)命题之所以为真,是因为它们是真的,并且它们依赖于某种“永恒的真理”,无论是上帝还是逻辑。现实是混乱的,它偏离了这个真理。例如,优秀的运动员最终会成为糟糕的棒球运动员。但是这种模式对于一些数据子集来说更为明显。我们不需要太多的公理化理论来处理常规数据。如果数据显示一种模式,那就取代了理论。但问题是,数据向我们展示的模式是什么?对于数据的某些子集,这种模式可能很明显。对其他人来说,可能不是。对于后者,我们需要理论,这样我们才能看到。在政治心理学中,有一个术语叫做“酒鬼的搜索”,我认为这个术语被滥用了。这个故事认为,一个丢了钥匙的醉汉在明亮的灯光下寻找,即使他把钥匙丢在了其他地方,因为他看不到他到底把钥匙丢在了哪里。我不认为一个人需要成为一个酒鬼来承受这种痛苦,或者,事实上,如果这是愚蠢的。就像诺维格引用的利奥·布雷曼的观点一样,我们基于我们所能看到和理解的东西开发了一个世界如何运作的模型,不一定是因为这个模型是真实的,或者,再次借用诺维格的例子,我们不是去火星——我们是去天文学家指定的火星“模型”。如果我们没有一组可靠的数据来构建这个模型,我们需要根据我们认为我们对宇宙的了解来推测,以便构建这个模型。这就是理论的用武之地。我认为,当我们处理大量不同的数据时,不同的理论有不同的位置来更好地适应不同的数据。

前瞻性法医数据科学——有可能预测犯罪并预防犯罪吗?

原文:https://towardsdatascience.com/prospective-forensic-data-science-is-it-possible-to-predict-a-crime-and-prevent-it-28b48ba19825?source=collection_archive---------8-----------------------

社交网络中的数字足迹已经成为寻找罪犯的信息来源。例如,在巴西,一些与种族主义有关的案件由于 FaceBook (FB)上的种族主义帖子而受到指使。例如,2015 年 10 月,非裔巴西电视和电影明星 Tais Araújo *因其肤色和发型而成为 facebook 上种族主义评论的受害者。结果,大约有 30 人根据他们的 FB 档案被调查,其中五人因为他们的职位被逮捕。与那些罪犯所想的相反,远程计算机提供的明显的匿名性是他们犯罪的证据。数字足迹的好用途!

此外,数字足迹已经被用来防止潜在的更有害的犯罪。在里约热内卢举办夏季奥运会之前,巴西联邦警察发现了一个据称与 ISIS 有关联的组织,该组织正计划对奥运设施进行恐怖袭击。该组织利用脸书和推特赞美 ISIS,庆祝世界各地的恐怖袭击。他们还使用 WhatsApp 和 Telegram 等即时通讯应用程序来交换信息和策划攻击。联邦警察切断了他们的通讯,暴露了他们的计划,这足以将他们的行为定性为犯罪。

此类犯罪引发了另一个问题:即时通讯服务提供商是否应该为了与当局合作而中断用户对话?1988 年《巴西宪法》(第 5 条第十二款)规定,通信保密不可侵犯,除非法官作为一项非常措施并在法律规定的情况下下令保密。当然,这种数字通信在巴西宪法颁布时并不存在,但最高法院将这种豁免权延伸到了这些新技术。2016 年 5 月发生了一件不寻常的案件,当时联邦警察正在调查毒品生产商和经销商。一名来自一个小镇的联邦法官下令 WhatsApp 的所有者 FaceBook 披露嫌疑人的信息。脸书拒绝这样做,声称他们没有这个信息了。由于拒绝,这位法官下令 WhatsApp 必须在巴西全境离线 72 小时。由于这款应用在巴西被广泛使用,包括用于商业,整个巴西都因为这一法令而变得疯狂。该判决仅执行了几个小时,因为该判决被更高一级法院推翻。

事实是,FaceBook 有权访问 WhatsApp 用户的对话内容。用户协议明确说明了。该内容用于向用户投放广告。问题是:如果当局要求,FaceBook 和其他即时通讯服务提供商应该存储他们的用户对话并披露吗?或者至少受到公正的对待?

然而,这段历史可以有另一个篇章。如果这些即时通讯服务可以访问用户的聊天内容,并通过文本分析了解他们,那么在一些可控和合法的情况下,当有强有力的证据表明他们的用户正在犯罪时,他们是否应该向当局发出警报?例如,算法可以被训练来识别婴儿色情图像。当一个人向另一个人发送这种图像时,他们应该被用来识别这种犯罪吗?**文本分析可用于理解关于女性奴役的对话。为了发现这种罪行而中断交流并可能暴露数百万人,这样做值得吗?此外,这些算法可以被训练来识别这种犯罪何时仍在计划中。当一个潜在的罪犯将要犯罪时,即时通讯提供商能警告政策吗?

未来的法医数据科学可以实现这种打击/预防犯罪的场景,这类似于汤姆·克鲁斯的电影少数派报告。但是,正如电影中一样,预测算法可能会出错或有偏差(有意或无意)。有了这个,一个无辜的生命可能就毁了。嗯……从这个可能的世界中,大量的伦理问题涌现出来。然而,这不是本文的主题,这些问题可以在其他时间出现。

*葡萄牙语参考文献

  • *发送这种图像的简单行为并不意味着犯罪。例如,心理学家可能会将这样的图像发送给另一个人,以帮助解决问题。

脸书波士顿环球报交通的原型分析

原文:https://towardsdatascience.com/proto-analysis-of-boston-globe-traffic-on-facebook-db66bcda3693?source=collection_archive---------7-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2013 年 7 月 18 日更新:在这篇文章中,你会发现大量关于统计和关键指标的解释。如果你已经熟悉它们,请参考由尼曼新闻实验室发布的一份整洁的摘要。上周,我在波士顿环球报做了一个简短的演讲,展示了我的初步分析,该分析考察了《波士顿环球报》的文章是如何通过其脸书版被感知的。通过我的分析,我希望回答两个问题。《波士顿环球报》员工在社交媒体平台上分享哪些类型的故事?反过来,不同类型的分享故事如何不同地影响脸书用户的阅读和分享?通过回答这两个问题,我旨在通过脸书提供的三个衡量标准,找出员工的意图与读者的兴趣在多大程度上保持一致,以及在意图和感知之间是否存在差距,这将标志着改进的空间。

  • 我研究了《波士顿环球报》脸书版两周内分享的 215 个故事。
  • 我发现了几个与注意力相关的属性:
  • 图像大小(无、缩略图、单列和双列)
  • 标题中有无“中断”标签
  • 共享时间(小时和工作日)
  • 编辑定义的新闻主题(商业、都市、体育等。)
  • 是否与波士顿马拉松爆炸案有关
  • 工作人员的努力与脸书用户的阅读和分享之间存在差距。

我通过页面管理员的内置功能脸书洞察将数据导出到电子表格文件,然后在开源统计工具 R 中进行分析。为了节省时间,我将数据集保持得相当小,特别是因为我手动清理了数据并标记了一些变量,因为自动化对它们来说是不可行的。我总共检查了今年 5 月 7 日至 21 日分享的 215 个故事。

我的分析完全依赖于三个指标脸书洞察特性:达成参与用户,以及谈论这个。根据脸书的说法, reach 被定义为“看过你帖子的唯一人数”;参与用户为“点击你的帖子的唯一人数”;将此描述为“从你的页面帖子中创建了一个故事的独特人数。当有人喜欢、评论或分享你的帖子时,故事就产生了;回答您发布的问题;或响应您的事件”。这些指标以各种方式作为独立访问者的绝对数量,反映了从被动阅读到主动分享的用户行为。

下一节讨论一些人可能不熟悉的统计细节。请点击此处直接跳转到调查结果和影响部分。
我在本次分析中使用的统计工具是负二项式回归,我想详细说明两个术语,回归负二项式,以证明我选择的研究方法。回归是用来估计变量之间关系的统计过程。变量在分析中有不同的作用,有些被称为自变量,有些被称为因变量。因变量衡量我们期望增加或减少的属性,如预期寿命、幸福度和犯罪率。自变量衡量影响、预测因变量结果或与因变量结果相关的因素,如教育水平、血压、警察人数等。自变量和因变量决不是预先确定的,而是为各种研究问题自由分配的。例如,我们可以根据一个毕业生的教育水平来估计她的收入,或者根据她的收入来估计一个人获得硕士学位的可能性。

在我分析脸书数据的案例中,我选择了三个关键指标作为因变量,即到达参与用户谈论这个。自变量是可能影响这些结果的共享职位的不同方面。我包括的方面是新闻部分、图像大小、“突发”标签、出版时间和工作日。特别是,我创建了一个二元独立变量,将故事标记为与波士顿马拉松爆炸案相关或无关,因为这个话题一直是《环球时报》员工密切关注的话题。

我选择回归的原因是因为它允许单独评估每个自变量与因变量的关联。这对分析非常重要。例如,据报道,死于乳腺癌的黑人女性比白人女性多。那么我们是否可以假设,从生物学上讲,黑人女性面临着更高的患病风险?也许不是。如果我们将女性的职业、教育和收入纳入分析,我们会发现,如果处于相同的社会经济地位,黑人和白人女性在患乳腺癌方面没有显著差异。

再以分析新闻故事的研究为例,我们可能观察到故事 A 比故事 B 被更多的人阅读,我们能声称故事 A 比故事 B 更有趣吗?还是那句话,也许不是。我们可能会发现,故事 A 是在早上 8 点人们上班途中查看脸书的时候分享的,而故事 B 是在上午 11 点人们通常忙于工作的时候分享的。同样,故事 A 涵盖体育,故事 B 涵盖国际关系,而体育新闻通常比国际新闻更受欢迎。因此,为了控制新闻报道的各个方面,我需要运行回归来获得更可靠的结果。

关于哪种类型的回归最合适的问题,一个快速的回答是泊松回归,因为它处理计数数据,例如人们一周看多少次电视,美国一年发生多少次龙卷风,以及有多少人在收银台前等着你。因为我收集的数据违反了泊松回归的一个假设(均值和方差相等),所以我选择了一种替代方法,称为负二项式回归,因为这是处理我的数据所表达的过度分散的一个好选择。对于那些对这些和其他分析方法的描述感兴趣的人, UCLA 分享了很多关于统计分析的教程,包括负二项式回归

负二项式回归生成的系数是对数比。为了使研究结果更容易理解,在下一节中,我用指数系数来表示比率。

这项研究受到了脸书关于媒体公司良好实践的报告的启发。脸书收集了使用脸书网页的新闻机构样本,并根据它们的各种实践得出结论。相比之下,我的研究只关注了波士顿环球报,我的发现并不总是与脸书给出的建议一致。
脸书发现,“包含‘突发事件’或‘突发新闻’的帖子比不包含‘突发新闻’的帖子的参与度高出 57%。”相比之下,我没有发现在吸引用户或传播病毒方面有什么显著的不同。我发现的唯一区别是 reach 显著增加了 60%。由此,我们可以推断,“打破”标签并没有抑制“参与用户”或谈论这一点,并增加了覆盖面。
就说明性图片而言,可以在脸书页面的帖子中观察到四种尺寸。它们是零图像或无图像、缩略图、单栏图像和双栏图像,但双栏图像在用户的新闻订阅源上看不到,只能在脸书页面上看到。出于研究目的,我保留了“双栏”作为图像大小。从下面的图表中,你可以看到图片大小是如何影响脸书用户的注意力的。比率是指数系数。

  • 很明显,用图像来说明一个故事比没有图像要好。
  • 缩略图看起来并不比没有图像有显著的不同。
  • 图片越大,分享的故事就越受欢迎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于波士顿马拉松爆炸案的报道在脸书吸引了更多的注意力。在三个关键指标中,达到参与用户和【T4 谈到这个,这些故事将指标提高了 31%、97%和 64%。然而,当我观察用户如何参与赞、评论和分享时,我意识到人们不一定“喜欢”与爆炸相关的故事。这并不奇怪,因为“喜欢”一个可怕的故事可能会给一些人造成认知冲突,因此他们不会对“喜欢”它感到舒服。关于评论和分享,轰炸相关的报道获得了 90%和 80%的增长。同样,这里的比率是指数系数。因为数据集只持续了两周,我不认为共享工作日的相关性是可靠的。然而,它足够大,可以比较一天中的 24 小时。下图显示了员工是如何分享这些故事的,以及脸书用户是如何看待这些故事的。从中,我们可以看出:

  • 更多的故事是在工作时间分享的。
  • 然而,从这三个指标来看,在工作时间内,性能并不是很好。
  • 交通似乎在美国东部时间上午 8 点左右和晚上 11 点—凌晨 2 点左右达到高峰。
  • 西海岸可能会导致午夜后的滞后。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我和《波士顿环球报》的乔尔·艾布拉姆斯讨论了为什么高峰出现在清晨和深夜。对于这种现象,我们想出了两种理论。首先,人们在工作前后更频繁地查看脸书,例如,在上下班途中或在床上。其次,相当不合作的是,新闻编辑室在那些“空闲”时间分享的故事更少,因为社交媒体编辑也不在工作。因此,这些时间可能会出现新职位短缺,因此对寻求关注者的竞争较少。在未来,我们可以尝试在清晨和深夜分享故事,看看我们是否有可能提高流量。《波士顿环球报》的工作人员预先确定了总共 12 个新闻部分:艺术、商业、思想、生活方式、杂志、都市、新闻、观点、幻灯片、专题、体育和升级。(升级帖子是邀请人们将其会员资格升级为订户的广告。)下图显示了员工在不同主题间分享的故事数量,以及不同主题如何与 reach、参与用户和讨论话题相关联。在员工的分享和读者的关注之间,事实上存在一些差距。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

回归分析更精确地评估了不同的新闻栏目如何影响脸书的报道表现。艺术新闻作为基线,其他新闻部分与之进行比较。结果显示为比率(例如,20%意味着只有艺术新闻的五分之一好,300%意味着是艺术新闻的三倍好)。请注意,置信区间是回归估计的指数,这就是上区间大于下区间的原因。现在,我们可以根据新闻对性能的影响对其进行分类:

  • 按员工分摊金额排序,由高到低依次为:
  • 地铁,体育,新闻,生活方式,艺术,商业,意见,幻灯片/杂志/升级,想法和特别。
  • 按范围排序,最重要的是:
  • 观点、幻灯片、生活方式和业务
  • 按参与用户排序,排名靠前的是:
  • 观点、都市、生活方式和商业
  • 通过讨论这一点来排序,最重要的是:
  • 幻灯片、观点、体育和地铁。
  • 员工持股和读者看法之间的不一致,可能是调整的起点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了比较这两个维度(员工的帖子和读者的注意力),我把它们分散在一张图表上。在这个图表中,横轴代表员工分享了多少故事,纵轴代表脸书读者对这些故事的看法,即到达参与用户谈论这个。数据经过对数转换,这样数据点可以被压缩在一起,以获得更合理的视图。事实上,这里的单位并不重要,因为我们希望看到的是努力与结果的比率。或者效率。为了表明读者对工作人员努力的反应的效率,我粗略地将新闻主题分为高、中、低三个等级,并以黄色、灰色和白色为背景。看起来,给定相同数量的帖子,意见参与了更多的活动,照片幻灯片更容易传播。与此同时,我们可以看到分享的观点和照片幻灯片相当少。按版块发布的文章数量和它们捕获的流量之间存在差距,这可能是一个富有成效的分析点,用于未来文章共享选择的调整。具体来说,这项研究表明,如果有更多关于观点、照片幻灯片、商业和生活方式的帖子,会有更多的读者参与进来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下面的图表显示了一个趋势:当故事接触到更多的读者时,更多的读者会参与到更多围绕故事的活动中,每个点代表一个共享的故事。这个趋势出现在到达参与用户谈论这个之间大致呈线性关系。与此同时,我们可以很容易地分辨出一些在趋势线下摇摆的圆圈,它们位于红色圆圈中。那么,为什么这些故事产生的活动较少呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

病毒传播程度,或所谓的谈话率,有助于发现这些表现不佳的故事。该指标被计算为谈论该达成的比率。我将列出最少和最多的对话故事,并对内容中观察到的模式进行快速总结。

  1. 俄克拉荷马城雷霆队的明星凯文·杜兰特今天承诺为昨天毁灭性的 T2 龙卷风后的恢复工作捐赠 100 万美元。【http://b.globe.com/191OR6r
  2. 夏天住在波士顿公园(冬天住在富兰克林公园动物园)的天鹅罗密欧与朱丽叶,今天回到那里,标志着春天的季节真正到来了。见照片:http://b.globe.com/ZOid4O
  3. 阿诺德树木园的紫丁香盛开了。这张照片是昨天在植物园拍摄的,官方名称是丁香星期天。如果你有机会顺便来看看。环球员工照片/ Yoon S. Byun
  4. 向飞行员问好。它今天进行了首次运行,并计划于下周末正式亮相,这是大约 25 年来第一次提供从波士顿到科德角的服务。http://b.globe.com/13xiois 你会骑它吗?
  5. 马拉松爆炸案在一毫秒内切断了马克·富卡里勒的右腿(如图,和他的未婚妻珍·里根在一起)。它放过了左派,但也差不了多少。现在,他和他的家人正处于痛苦的等待中,看他的“好”腿能否保住。http://b.globe.com/11igVlA
  6. 在一场 EF-4 龙卷风袭击后,一名儿童被从俄克拉荷马州摩尔市广场塔小学的废墟中救出。风速高达每小时 200 英里的龙卷风,宽度达一英里,并留下大片破坏区域。http://b.globe.com/12pP8KY
  7. “这是波士顿体育史上最伟大的时刻之一,”《环球时报》的丹·沙乌格内西写道,布鲁因斯队激动人心地战胜了枫叶队。“然后奇迹出现了……布鲁因斯队得分了,得分了得分了。”http://b.globe.com/18H5GTZ
  8. 波士顿运动协会邀请所有未能到达完成 2013 年波士顿马拉松的参赛者参加明年的比赛。这影响了 5633 名跑步者。
  9. 在加时赛的 15:40 分,布拉德·马尔尚为布鲁因斯队攻入制胜一球。故事:http://b.globe.com/10vZlak(图片来源:美联社)
  10. 在得知她有 87%的机会患乳腺癌后,女演员安吉丽娜·朱莉接受了预防性的双乳房切除术。朱莉今天在纽约时报专栏上分享了她的故事:http://nyti.ms/18HZFX3环保局照片
  11. 基思·雷丁的惊悚片《几乎是蓝色的》在查尔斯镇工作剧院上映,与其说是蓝色,不如说是黑色的 http://goo.gl/PwlBT
  12. #辣椒肉菜饭的食谱http://goo.gl/PwlBT
  13. 新:马修吉尔伯特的 Buzzsaw 专栏。环球影评人马修·吉尔伯特(Matthew Gilbert)问道,作为最受崇拜的“发展受阻”,带着一季大小的“集转储”回归,给观众太多会让他们无话可说吗?http://b.globe.com/10a7Sg5
  14. 用这些时尚的母亲节礼物让妈妈感到更加特别。
  15. 菲尼克斯太阳队任命前波士顿凯尔特人队的 33 岁的瑞安·麦克多诺为他们的新总经理。
  16. 专辑评论:巴兹·鲁赫曼改编的电影《了不起的盖茨比》(The Great Gatsby)的配乐由 Jay-Z 策划,是对那个时代的梦幻再现,将 20 世纪 20 年代的爵士乐置于现代流行音乐和嘻哈音乐的背景下。奇怪的是,原声音乐缺少的是心。
  17. 创新的躁动和冒险的感觉是 Iron & Wine 最新专辑《幽灵上的幽灵》(Ghost on Ghost)的核心,萨姆·梁(Sam Beam)将于今晚在伯克利表演中心(Berklee Performance Center)举行一场演出来庆祝这张专辑。
  18. 书评:深受喜爱的《追风筝的人》的作者卡勒德·胡赛尼,带着《群山回响》回到了他的祖国阿富汗崎岖的土地上
  19. 乔恩·莱斯特在芝加哥的六局比赛中失六分,白袜队以 6 比 4 击败红袜队。
  20. 雅虎将以 11 亿美元收购 Tumblr。你认为这将有助于重振雅虎品牌吗?Tumblr 是一个好的投资吗?

以下是我对故事潜在对话模式的快速总结。

  • 漂亮和令人愉快的东西是最容易交流的,比如照片幻灯片。
  • 也是高度对话式的:有一个问题,但已经(或将会)有一个解决方案:
  • 在体育比赛中奇迹般获胜,打破了平局
  • 未能完成马拉松,但被邀请回来做这件事
  • 马拉松爆炸受害者,但得到了医疗护理
  • 自然灾害,但孩子们得救了
  • 癌症的机会,但干预使其最小化
  • 最不健谈的:
  • 艺术相关(音乐、电影、书籍等。)
  • 事实信息(体育比分、已达成的商业交易等。
  • 高参与度和低参与度与之前的研究一致,即更高的情绪反应会导致更频繁的表达。
  • 限制
  • 数据集相当小(n = 215)
  • 因此,更多的抽样误差和结果偏差
  • 也省略了考察分享的频率会如何影响读者的感知(分享的故事越多越好,或者反之亦然,或者无所谓?)
  • 未来的研究
  • 时间序列数据
  • 人口统计(性别、年龄范围、地点等。)
  • 设备(网络与移动、平台类型等。)

原载于 2013 年 7 月 14 日 sonya2song.blogspot.com。****

推荐系统原型

原文:https://towardsdatascience.com/prototyping-a-recommendation-system-8e4dd4a50675?source=collection_archive---------2-----------------------

R、Java、Scala 和 SQL 的 Hello World

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Amazon.com recommendations for “Mahout in Action”

Twitch 有许多由推荐系统驱动的产品,包括 VOD 推荐、剪辑推荐和类似的频道。在将 Twitch 的一个推荐系统产品化之前,科学团队首先制作了一个推荐系统的原型,看看输出结果对我们的一个产品是否有用。建立推荐原型的成本可能很低,这篇文章提供了用四种不同的编程语言构建推荐系统的例子。

每个例子都使用不同的库来构建一个使用协同过滤的推荐系统原型。本文介绍了 Amazon.com 使用的协作过滤方法,而 Mahout in Action 则很好地概述了推荐系统中使用的不同算法和相似性度量。我还在 EverQuest Landmark 的市场上的 GDC 演讲中提供了推荐系统的概述。除了使用交替最小二乘法(ALS)的 Scala 示例之外,以下所有示例都使用了基于用户的协同过滤。

这些示例加载一个数据集,然后为 ID 为 101 的用户推荐五个商品。在这些例子中使用的合成数据集是用户购买游戏的集合,其中每一行包括用户 ID 和游戏 ID。所有示例的示例数据集和源代码可在 GitHub 上获得。

如果 R 是你选择的编程语言,那么 recommenderlab 软件包可以让你很容易地构建不同的推荐系统。该软件包在 CRAN 存储库中可用,可以使用标准的 install.packages 函数进行安装。加载后,该包提供了一个推荐器函数,它将数据矩阵和推荐方法作为输入。在这个脚本中,数据矩阵是从一个 CSV 文件中加载的,使用的方法是基于用户的协同过滤。然后使用预测函数为用户 101 检索五个项目。

install.packages("recommenderlab")
library(recommenderlab)matrix <- as(read.csv("Games.csv"),"realRatingMatrix")
model <-Recommender(matrix, method = "UBCF")
games <- predict(model, matrix["101",], n=5)
as(games, "list")

Java:Apache Mahout Mahout 是一个用 Java 实现的机器学习库,提供了多种协同过滤算法。Mahout 用一个 UserNeighborhood 类实现了基于用户的协作过滤,这个类指定了用户需要有多相似才能提供商品推荐的反馈。此示例使用 Tanimoto 相似性度量来查找用户之间的相似性,该度量计算共享游戏的数量(交集)与玩家拥有的游戏总数(联合)的比率。这个 CSV 文件被用作数据模型的输入,该数据模型然后被传递给推荐器对象。一旦推荐对象被实例化,就可以使用推荐方法为特定用户创建游戏推荐列表。

import org.apache.mahout.cf.taste.*;DataModel model = new FileDataModel(new File("Games.csv"));UserSimilarity similarity = new
  TanimotoCoefficientSimilarity(model);
UserNeighborhood neighborhood = 
  new ThresholdUserNeighborhood(0.1, similarity, model);
UserBasedRecommender recommender = 
  new GenericUserBasedRecommender(model, neighborhood, similarity);List recommendations = recommender.recommend(101, 5);
System.out.println(recommendations);

Apache Spark 是构建推荐系统越来越流行的工具之一,它提供了一个名为 MLlib 的内置库,其中包括一组机器学习算法。该示例首先运行一个查询来检索 UserID、GameID 元组格式的游戏购买,然后将数据框转换为 ALS 模型可以使用的评级集合。本例中使用了隐式数据反馈,这就是为什么使用了 trainImplicit 方法而不是 train 方法。训练方法的输入参数是游戏评级、要使用的潜在特征的数量、为矩阵分解执行的迭代次数、用于正则化的λ参数以及指定如何测量隐式评级的 alpha 参数。一旦模型被训练好,就可以使用推荐产品方法为用户检索推荐的游戏列表。

import org.apache.spark.mllib.recommendation._val games = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "false")  
    .option("inferSchema", "true")  
    .load("/Users/bgweber/spark/Games.csv")val ratings = games.rdd.map(row =>
  Rating(row.getInt(0), row.getInt(1), 1)
)val rank = 10
val model = ALS.trainImplicit(ratings, rank, 5, 0.01, 1)
val recommendations = model.recommendProducts(101, 5)
recommendations.foreach(println)

在将数据提取到运行 Spark 或 R 的机器上太慢或太贵的情况下,您可以使用 SQL 来构建一个推荐系统的原型。这种方法使用起来可能计算量很大,但是对于抽查一些结果是有用的。下面的例子使用 Spark SQL,因为我想让这个例子对于所提供的数据集是可重复的。代码的第一部分从 CSV 文件加载表,并将加载的数据框注册为临时表。示例的第二部分包括 SQL CTAs,它准备数据,然后为单个用户的游戏评分。内部查询通过查找重叠游戏的比率除以购买的游戏总数来计算用户之间的 Tanimoto 系数,外部查询返回每个检索到的游戏的总分数。

val games = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "false")  
    .option("inferSchema", "true")  
    .load("/Users/bgweber/spark/Games.csv")

games.registerTempTable("games")val result = sqlContext.sql("""
with users as (
    select _c0 as User_ID, sum(1) as NumGames 
    from games 
    group by 1 
)
, purchases as (
    select _c0 as User_ID, _c1 as Game_ID, NumGames 
    from games g
    join users u
      on g._c0 = u.User_ID
)
select u.User_ID, v.Game_ID, sum(Tanimoto) as GameWeight
from ( 
    select u.User_ID, v.User_ID as Other_User_ID,
        count(u.Game_ID)/(u.NumGames + v.NumGames - count(u.Game_ID)) as Tanimoto
    from purchases u
    Join purchases v
        on u.Game_ID = v.Game_ID 
    where u.User_ID = 101
    group by u.User_ID, v.User_ID, u.NumGames, v.NumGames
) u
Join purchases v
    on Other_User_ID = v.User_ID
group by u.User_ID, v.Game_ID
order by GameWeight desc
""")result.show(5)

评估 这些脚本提供了如何为特定用户检索游戏建议的示例。评估推荐器质量的一种方法是使用定性方法,其中为一小组用户手动检查推荐器的输出。另一种方法是使用不同库中包含的内置评估指标。例如,recommenderlab 和 MLlib 提供了用于计算 ROC 曲线的函数,这些曲线可用于评估不同的系统配置。在评估推荐者时,将推荐系统的性能与其他手工制作的方法进行比较也是一种很好的做法,例如畅销书排行榜。

一步一步建立推荐系统原型第 1 部分:基于 KNN 项目的协同过滤

原文:https://towardsdatascience.com/prototyping-a-recommender-system-step-by-step-part-1-knn-item-based-collaborative-filtering-637969614ea?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Movie Recommender Systems

第二部分推荐系统可以在这里找到

推荐系统

我们今天使用的大多数互联网产品都是由推荐系统驱动的。Youtube、网飞、亚马逊、Pinterest 和许多其他互联网产品都依靠推荐系统来过滤数百万内容,并向用户提供个性化推荐。推荐系统得到了充分的研究,并被证明为互联网企业及其消费者提供了巨大的价值。事实上,当我听到网飞在 2009 年向一个开发团队颁发 100 万美元奖金的消息时,我感到非常震惊,因为一种算法将公司推荐系统的准确率提高了 10%。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Netflix Prize Leader Board

尽管推荐系统是那些价值数十亿美元的生意的秘密来源,但推荐系统的原型可以是非常低的成本,并且不需要科学家团队。你其实可以为自己开发自己的个性化推荐器。只需要一些基本的机器学习技术和 Python 中的实现。在这篇文章中,我们将从头开始,并通过如何原型最小可行的电影推荐过程。

方法

推荐系统可以大致分为三类:基于内容的系统协同过滤系统混合系统(使用其他两种系统的组合)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

An Overview of Recommendation Systems

*基于内容的方法利用项目的一系列离散特征来推荐具有相似属性的附加项目。

协同过滤方法根据用户过去的行为(先前购买或选择的项目和/或对这些项目给出的数字评级)以及其他用户做出的类似决定来建立模型。该模型然后被用于预测用户可能感兴趣的项目(或项目的评级)。

混合方法结合了前两种方法。大多数企业可能在他们的产品推荐系统中使用混合方法。*

在这篇文章中,我们将从最常见的方法协同过滤开始,用一个简单的普通版本。在以后的文章中,我们将开发更先进和复杂的方法来进一步提高推荐器的性能和可伸缩性。

让我们建立一个电影推荐器

我喜欢看电影,所以我决定建立一个电影推荐器。看看我的推荐者对我的电影偏好有多了解,这将是一件很酷的事情。我们将回顾我们的电影数据集,ML 模型的选择,如何评估我们的推荐器,最后我将给出一些关于这种方法的优点和缺点。

数据

*有时候很难找到一个好的数据集来开始。不过,我还是鼓励你去发现有趣的数据集,建立自己的推荐器。我发现在这个 页面 上有一些不错的数据集。除了建立一个电影推荐器,建立一个食物或约会推荐器也很有趣。只是一个想法!

为了构建一个电影推荐器,我选择 MovieLens 数据集。它包含 58,098 部电影的 27,753,444 个评级和 1,108,997 个标签应用。这些数据是由 283,228 名用户在 1995 年 1 月 9 日至 2018 年 9 月 26 日之间创建的。等级从 1 到 5。

我们将只使用来自 MovieLens 数据集的两个文件:ratings.csvmovies.csv。分级数据提供了用户对电影的分级。每行有三个字段:['userId', 'movieId', 'rating']。每一行都可以看作是用户和电影之间交互的记录。电影数据为收视率数据中的每个'movieId'提供电影标题和类型。*

*import os
import pandas as pd# configure file path
data_path = os.path.join(os.environ['DATA_PATH'], 'MovieLens')
movies_filename = 'movies.csv'
ratings_filename = 'ratings.csv'# read data
df_movies = pd.read_csv(
    os.path.join(data_path, movies_filename),
    usecols=['movieId', 'title'],
    dtype={'movieId': 'int32', 'title': 'str'})

df_ratings = pd.read_csv(
    os.path.join(data_path, ratings_filename),
    usecols=['userId', 'movieId', 'rating'],
    dtype={'userId': 'int32', 'movieId': 'int32', 'rating': 'float32'})*

让我们快速看一下这两个数据集:电影和收视率

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据过滤

在现实世界中,从电影评级等显式反馈中收集的数据可能非常稀少,数据点主要从非常受欢迎的项目(电影)和高度参与的用户中收集。大量鲜为人知的项目(电影)根本没有评级。我们来看一下电影收视率分布图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Rating Frequency is a “long tail” distribution. Only a small fraction of the items are rated frequently. Such items are referred to as popular items. The vast majority of items are rated rarely.

如果我们放大或以对数标度绘制它,我们可以发现 58,098 部电影中只有大约 13,500 部获得了超过 100 个用户的评级,其余大部分都很少为人所知,很少或没有用户互动。这些稀疏的评级对于大多数用户来说不太可预测,并且对于喜欢晦涩电影的个人来说高度敏感,这使得模式非常嘈杂。

大多数模型基于用户评级模式进行推荐。为了消除噪声模式并避免由于大数据集导致的“内存错误”,我们将过滤我们的分级数据帧以仅显示流行电影。过滤后,我们在收视率数据中剩下 13,500 部电影,这对推荐模型来说足够了。

建模

协同过滤系统利用用户的动作推荐其他电影。通常,它们可以是基于用户的,也可以是基于项目的。基于项目的方法通常优于基于用户的方法*。由于用户的动态特性,基于用户的方法通常更难扩展,而项目通常不会发生太大变化,并且基于项目的方法通常可以离线计算并提供服务,而无需不断地重新训练。***

为了实现基于项目的协同过滤,* KNN 是一个完美的模型,也是推荐系统开发的一个非常好的基线。但是什么是 KNN 呢? KNN 是一种非参数的、懒惰的学习方法。它使用一个数据库,其中的数据点被分成几个聚类,以便对新样本进行推断。***

KNN 不对底层数据分布做任何假设,但它依赖于* 特征相似度。当 KNN 对一部电影做出推断时,KNN 将计算目标电影与其数据库中所有其他电影之间的“距离”,然后对其距离进行排名,并返回前 K 部最近邻电影作为最相似的电影推荐。***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Illustration of how KNN makes classification about new sample

等等,但是我们如何把收视率的数据框架输入 KNN 模型呢?首先,我们需要将评级的数据框架转换成 KNN 模型可以使用的适当格式。我们希望数据在一个m x n数组中,其中m是电影数量,n是用户数量。为了重塑收视率的数据框架,我们将pivot将数据框架转换为宽格式,电影作为行,用户作为列。然后,我们将使用0 s 来填充缺失的观察值,因为我们将执行线性代数运算(计算向量之间的距离)。让我们称这个新的数据帧为“电影特写数据帧”。

我们的电影特征数据帧是一个极其稀疏的矩阵,形状为13,500 x 113,291。我们绝对不希望将大部分数据类型为float320数据全部提供给 KNN。为了更有效的计算和更少的内存占用,我们需要将数据帧的值转换成一个 scipy 稀疏矩阵

***from scipy.sparse import csr_matrix# pivot ratings into movie features
df_movie_features = df_ratings.pivot(
    index='movieId',
    columns='userId',
    values='rating'
).fillna(0)*# convert dataframe of movie features to scipy sparse matrix*
mat_movie_features = csr_matrix(df_movie_features.values)***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们的训练数据有一个非常高的维度。如果在目标函数中使用“欧氏距离”,KNN 的性能将遭受 维数灾难欧几里德距离在高维空间中是没有帮助的,因为所有向量与搜索查询向量(目标电影的特征)几乎是等距的。相反,我们将使用余弦相似度进行最近邻搜索。还有另一种处理高维数据中最近邻搜索的流行方法, 位置敏感哈希 ,我们不会在本文中讨论。**

来做一些电影推荐吧

在我们对数据进行预处理并将收视率的数据帧转换成电影特征的稀疏矩阵之后,我们需要用适当的超参数来配置我们的 KNN 模型:

***from sklearn.neighbors import NearestNeighborsmodel_knn = NearestNeighbors(metric='cosine', algorithm='brute', n_neighbors=20, n_jobs=-1)***

最后可以给自己做一些电影推荐。让我们在 KNN 推荐器中实现一个make_recommendations方法。

snippet of our final step in KNN recommender’s implementation

这个片段演示了我们推荐器实现中的make_recommendations方法。请在我的 GitHub Repo 中找到推荐器应用的详细源代码。

如果你去我的源代码页面,你会看到我把一个 KNN 推荐系统放在一个脚本中,作为一个小的 python 应用程序。我将我的推荐器应用程序参数化,并暴露了两个选项,movie_nametop_n,供用户使用。现在想请我的推荐人推荐 10 部和《钢铁侠》最相似的电影。所以我们可以在 bash 荐里面运行下面的终端(linux/mac):(指令的命令可以在 这里找到 )

***python src/knn_recommender.py --movie_name "Iron Man" --top_n 10***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

List of movie recommendations based on my favorite movie: “Iron Man”

万岁!!我们的推荐系统确实有效!!现在我们有自己的电影推荐人了。

一些想法

乍一看,我的推荐人似乎给我留下了深刻的印象。我喜欢它推荐的所有电影。但如果我们真的仔细想想,它们都是 2008 年与《钢铁侠》同期非常受欢迎的电影。很有可能当时看《钢铁侠》的人大概也看了一些推荐的电影。这份电影列表不仅在同一时代很受欢迎,而且有着非常相似的类型和主题。

***作为一个电影爱好者,我大概是在寻找没看过的电影或者不同题材的电影。推荐不同主题的电影允许用户探索不同的口味,并保持用户对推荐产品的兴趣。另一方面,缺乏多样性会让用户感到厌烦,对产品的参与度降低。

所以我们才有效地识别出中存在的两个缺点😗**

  1. 人气偏向:推荐者倾向于推荐人气商品
  2. 项目冷启动问题:推荐器无法推荐新的或不太为人所知的项目,因为项目没有或很少交互

回想一下电影评分频率分布图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“Long Tail” Property in Rating Frequency Distribution

只有很小一部分电影有很多用户互动,而“长尾”电影则没有。在商业环境中,高频商品往往是相对有竞争力的商品,对商家来说利润很少。另一方面,频率较低的项目利润空间较大。

我们如何改进我们的电影推荐系统来解决以上两个缺点?我们将在下一篇文章中介绍一种更复杂的方法来改进电影推荐系统: 一步一步建立推荐系统原型第二部分:协同过滤中的交替最小二乘(ALS)矩阵分解

摘要

在这篇文章中,我们简要介绍了推荐系统中的三种方法:基于内容的、协同过滤的和混合的。我们在 KNN 学习了如何通过几个步骤来原型化基于项目的协同过滤*!这篇博文的 Jupyter 笔记本版本可以在 这里 找到。如果你想玩我的源码,可以在这里 找到[。

在我的下一篇文章中,我们将讨论推荐系统中更高级的主题,并利用 Spark 来构建一个可扩展的推荐系统。敬请期待!在那之前,尽情享受机器学习和推荐器吧!](https://github.com/KevinLiao159/MyDataSciencePortfolio/blob/master/movie_recommender/src/knn_recommender.py)***

喜欢你读的书吗?在我的 Github 查看更多数据科学/机器学习项目: 凯文的数据科学作品集

一步一步建立推荐系统的原型第二部分:协同过滤中的交替最小二乘矩阵分解

原文:https://towardsdatascience.com/prototyping-a-recommender-system-step-by-step-part-2-alternating-least-square-als-matrix-4a76c58714a1?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Item Based Collaborative Filtering Movie Recommender

第一部分的推荐系统可以在这里找到

*在上一篇*文章中,我们讨论了很多如何构建我们自己的推荐系统,并且用 PandasScikit-learn 实现了一个 KNN 基于项目的协同过滤电影推荐器。KNN 推荐系统的源代码可以在我的 Github repo 中找到。

在本帖中,我们将讨论如何用更复杂的机器学习技术来改进我们的电影推荐系统:矩阵分解。在这篇文章的后面,我们将讨论为什么我们要在协同过滤中使用矩阵分解,什么是矩阵分解,它是如何在 Spark 中实现的。**

基于项目的协同过滤的缺点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Output of KNN Item Based Collaborative Filtering Recommender From Previous Post

上一篇 的最后一节,我们向模特询问了一些电影推荐。在我们评估了推荐的电影列表后,我们很快发现了 KNN 方法的两个明显的局限性。一是“人气偏差”,二是“物品冷启动问题”。如果底层的训练数据太大而不适合一台机器,就会有另一个限制,即“可伸缩性问题”

  • ****流行偏好:指系统推荐互动最多的电影,没有任何个性化
  • 项目冷启动问题:指添加到目录中的电影没有互动或者互动很少,而推荐者依靠电影的互动来进行推荐
  • 可扩展性问题:指当越来越多的用户和电影加入我们的数据库时,缺乏扩展到更大数据集的能力

以上三点对于协同过滤推荐系统来说都是非常典型的挑战。它们与用户-电影(或电影-用户)交互矩阵一起自然到达,其中每个条目记录用户i和电影j的交互。在现实世界中,绝大多数电影很少甚至根本没有得到用户的评价。我们看到的是一个极其稀疏的矩阵,99%以上的条目都缺少值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sparse Rating Data

有了这样的稀疏矩阵,有哪些 ML 算法可以训练出来,可靠的做出推断?为了找到问题的解决方案,我们正在有效地解决数据稀疏问题。

矩阵分解

在协同过滤中,矩阵分解是针对稀疏数据问题的最先进的解决方案,尽管它是从 Netflix 奖挑战赛 开始广为人知的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Matrix Factorization of Movie Ratings Data

什么是矩阵分解?矩阵分解只是线性代数中矩阵的一系列数学运算。具体地说,矩阵分解是将矩阵分解成矩阵的乘积。在协同过滤的情况下,矩阵分解算法通过用户-项目交互矩阵分解为两个低维度矩形矩阵的乘积来工作。一个矩阵可以被视为用户矩阵,其中行代表用户,列是潜在因素。另一个矩阵是项目矩阵,其中行是潜在因素,列代表项目。

矩阵分解如何解决我们的问题?

  1. 模型学习将评级矩阵分解为用户和电影表示,这允许模型为用户预测更好的个性化电影评级
  2. 通过矩阵分解,不太出名的电影可以像受欢迎的电影一样具有丰富的潜在表示,这提高了推荐器推荐不太出名的电影的能力

在稀疏用户-项目交互矩阵中,用户u将给予项目i的预测评级被计算为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

where H is user matrix, W is item matrix

用户u对项目i的评分可以表示为用户潜在向量和项目潜在向量的点积。

注意,在上面的公式中,潜在因素的数量可以通过交叉验证来调整。潜在因素是用户-项目交互矩阵投影出的低维潜在空间中的特征。矩阵分解背后的思想是使用潜在因素在低得多的维度空间中表示用户偏好或电影主题。矩阵分解是机器学习中非常有效的降维技术之一。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Variance Explained By Components In PCA

很像 PCA成分的概念,潜在因素的数量决定了我们想要在一个低维空间中存储的抽象信息量。具有一个潜在因子的矩阵分解相当于最受欢迎的最受欢迎的推荐器(例如,推荐具有最多交互而没有任何个性化的项目)。增加潜在因素的数量将改善个性化,直到因素的数量变得太高,此时模型开始过度拟合。避免过度拟合的常见策略是将正则化项添加到目标函数中。

矩阵分解的目的是最小化真实评级和预测评级之间的误差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

where H is user matrix, W is item matrix

一旦我们有了目标函数,我们只需要一个训练例程(例如梯度下降)来完成一个矩阵分解算法的实现。这个实现实际上叫做 Funk SVD 。它是以西蒙·芬克的名字命名的,他在 2006 年网飞奖挑战中与研究界分享了他的发现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scaling Machine Learning Applications With Distributed Computing

尽管 Funk SVD 在那段时间对于单机的矩阵分解非常有效,但是随着今天数据量的增长,它不具有可伸缩性。对于兆兆字节甚至千兆字节的数据,不可能将如此大的数据加载到一台机器上。因此,我们需要一个机器学习模型(或框架),它可以在机器集群中传播的数据集上进行训练。

带 Spark ML 的交替最小二乘法(ALS)

交替最小二乘法(ALS)也是一种矩阵分解算法,它以并行方式运行。ALS 是在 Apache Spark ML 中实现的,是为大规模协同过滤问题而构建的。ALS 在解决收视率数据的可扩展性和稀疏性方面做得很好,它很简单,可以很好地扩展到非常大的数据集。

ALS 背后的一些高层次想法是:

  • 其目标函数与 Funk SVD 略有不同:ALS 使用 L2 正则化,而 Funk 使用 L1 正则化
  • 其训练套路不同:ALS 最小化两个损失函数交替**;它首先固定用户矩阵,然后用项目矩阵进行梯度下降;然后,它保持项目矩阵固定,并与用户矩阵运行梯度下降**
  • 它的可伸缩性:ALS 在来自一个机器集群的底层训练数据的多个分区上以并行运行它的梯度下降

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pseudocode For SGD In Matrix Factorization

如果你有兴趣了解更多关于 ALS 的知识,可以在本文中找到更多细节:Netflix 奖大规模并行协同过滤

就像其他机器学习算法一样,ALS 也有自己的一套超参数。我们可能想通过保持验证交叉验证来调整它的超参数。

交替最小二乘法(ALS)中最重要的超参数:

  • maxIter:要运行的最大迭代次数(默认为 10)
  • 等级:模型中潜在因素的数量(默认为 10)
  • reg param:ALS 中的正则化参数(默认为 1.0)

超参数调整是许多机器学习项目中高度重复的任务。我们可以将它编码到一个函数中,以加速调优迭代。

经过调优,我们找到了超参数的最佳选择:maxIter=10regParam=0.05rank=20

实施 ALS 推荐系统

现在我们知道我们有一个精彩的电影推荐模型,接下来的问题是:我们如何将我们的精彩模型产品化为推荐系统?机器学习模型产品化是另一个大话题,我不会详细谈论它。在这篇文章中,我将展示如何为 ALS 推荐者建立一个 MVP(最小可行产品)版本。

要将模型产品化,我们需要围绕模型建立工作流。典型的 ML 工作流程大致从通过一组预定义的 ETL 作业、离线/在线模型训练的数据准备开始,然后将训练好的模型吸收到 web 服务中用于生产。在我们的例子中,我们将构建一个非常简单的电影推荐器来完成这项工作。我们的工作流程如下:

  1. 新用户输入他/她喜欢的电影,然后系统为该模型创建新的用户-电影交互样本
  2. 系统根据新输入的数据重新训练 ALS 模型
  3. 系统创建用于推理的电影数据(在我的例子中,我从数据中抽取所有电影)
  4. 系统为用户对所有电影进行分级预测
  5. 系统基于电影分级预测的排名为该用户输出前 N 个电影推荐

下面是我们的 MVP 推荐系统的一小段源代码:

snippet of our final step in ALS recommender’s implementation

这个片段演示了我们推荐器实现中的make_recommendations方法。请在我的 GitHub Repo 中找到推荐器应用的详细源代码。

我们来做一些推荐吧

一旦我们在 python 脚本中将 ALS 推荐系统实现为一个小的 Pyspark 程序,我们就可以将我们的 spark 应用程序提交到具有客户端部署模式或集群部署模式的集群,并享受分布式计算的强大功能。

最后,我们完成了技术细节和实现。现在让我们向我们的推荐人要一些电影推荐。我将假装一个新用户,将我最喜欢的电影“钢铁侠”再次输入这个新的推荐系统。看看它给我推荐了哪些电影。希望它们不是我之前看过很多遍的热门电影列表。

出于演示的目的,我通过在终端中运行以下命令在本地提交我的 spark 应用程序:(命令的指令可以在这里找到)

**spark-submit --master local[4] --driver-memory 4g 
             --executor-memory 8g src/als_recommender.py 
             --movie_name "Iron Man" --top_n 10**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

List of Movie Recommendations Based On My Favorite Movie: “Iron Man”

耶!!用 Spark 成功运行我们的电影推荐器。

这份新的电影推荐名单与之前的 KNN 推荐名单完全不同,非常有趣!!我从未看过这份新名单中的任何一部电影。我发现新的推荐者向我推荐不寻常的电影非常令人惊讶。对于其他用户来说,它们可能太不寻常了,这是有问题的。

进一步改进我们的电影推荐系统的一个想法是将这个新的电影推荐列表与 KNN 推荐器的先前列表混合。我们基本上实现了一个混合推荐系统,这个混合推荐系统可以向用户提供流行和不太了解的内容。

摘要

在这篇文章中,我们介绍了如何用矩阵分解来改进协同过滤推荐系统。我们了解到矩阵分解可以解决协同过滤中的“流行偏见”和“项目冷启动”问题。我们还利用 Spark ML 实现了使用交替最小二乘(ALS)** 的分布式推荐系统。这篇博文的 Jupyter 笔记本版本可以在这里 找到 。如果你想玩我的源码,可以在这里 找到**

在我的下一篇文章中,我们将深入探讨矩阵分解技术。我们可以用 Keras 中的神经网络实现开发一个更一般化形式的矩阵分解模型。敬请期待!在那之前,尽情享受机器学习和推荐器吧!

喜欢你读的书吗?在我的 Github 查看更多数据科学/机器学习项目: 凯文的数据科学作品集

提供对增长可能性和潜在风险的洞察

原文:https://towardsdatascience.com/providing-insight-into-growth-possibilities-and-potential-risks-c7d801559efb?source=collection_archive---------3-----------------------

我喜欢大数据,因为迄今为止我仍在试图理解它的所有潜力。

大数据是非常大的数据集,可以通过计算分析来揭示模式、趋势和关联,尤其是与人类行为和互动相关的模式、趋势和关联。- 谷歌

这不是一篇关于大数据的文章。但是大数据对于这里的概念是必不可少的。预测分析及其给企业带来远见的潜力是关键。

预测分析是高级分析的一个分支,用于预测未知的未来事件。预测分析使用来自数据挖掘、统计、建模、机器学习和人工智能的许多技术来分析当前数据,以预测未来。- 谷歌

我的研究集中在保险行业。基于一些正在做的事情,以及这个行业可能需要一些变革的事实。

公平地说,保险业有点名气。是否与服务差、方法过时缺乏灵活性不合适的盖子有关。对于许多个人和企业来说,为未来风险做准备被排在“待办事项”清单的最后,这并不奇怪。

我们大多数人都没有意识到我们可能持有的对我们有益的所有潜在保险政策。除了强制保险- 汽车保险如果你有一辆车和健康保险。我们不关心其他形式的保险。

保险单是一份详细说明保险合同条款的文件。- 谷歌

投保人是以其名义持有保险单的个人或团体。

我以“需要一种工具来帮助保险公司预测他们的投保人需要和感兴趣的政策,而不是传统的人寿、健康、汽车和教育政策”为主题。

小型保险公司没有明确的方法来了解客户的需求。因此,没有办法为他们提供服务于大量人群的独特定制政策。然而,许多保险公司拥有丰富的客户历史数据。为什么不与承销商合作,利用这些数据来开发符合当今企业和个人需求的产品呢?

这种工具应该是一种方式,让公司首先了解投保人的新趋势、他们面临的风险因素和可能的后果。除了优化适合投保人的保单,

到目前为止,我的研究中的其他亮点包括一份报告,该报告强调全球预测分析市场将从 2015 年27.4 亿美元增长到 2020 年92 亿美元。预测期内**年复合增长率( CAGR )为 27.4%。该报告进一步指出,由于传统商业智能(BI)技术向高级分析技术的转变,预测分析市场正在快速增长。此外,结构化和非结构化数据激增。(又名大数据)******

在 it 的核心,分析是关于解决业务问题。因此,向企业提出问题才是关键。所以他们想出自己的答案,并提出新的问题来探索。这样,见解更加及时和有价值。

对分析的一个常见抨击是,它专注于过去的活动在报告中提供的见解不能帮助公司制定有效的竞争战略。预测分析旨在改变这种情况。通过使用统计算法和机器学习技术来预测未来结果的可能性。

预测分析也越来越主流。得益于 API(应用程序编程接口)、web 服务、预测模型标记语言(PMML)和其他开发工具和技术,这些工具和技术使公司更容易将其纳入业务分析程序。

目前,启动预测分析计划的成本可能相当高。好消息是,公司可以使用开源预测分析工具来保持低成本,同时探索预测分析的可能性。

以上想法只是沧海一粟。使用预测分析的技术解决方案的范围跨越到许多其他领域。如果您有兴趣继续这一对话或有可能有益的材料/资源,请在 LinkedIn 上找到或与我分享。

保险业面临的其他一些关键挑战:

  • 管理索赔和风险的成本上升。
  • 努力提高盈利能力。
  • 大多数财产、意外、健康和福利保险公司的承保和调查资源有限,无法分析、审查、评估和支付索赔。
  • 建立新业务、保持现有客户和满足客户满意度要求的竞争压力。
  • 政策价格总是显得武断和过高。
  • 比较不同保险公司的保险几乎是不可能的。
  • 当你得到你想要的东西时,很少有透明度。

归根结底,我们需要保险。我们需要它发展成更适合消费者的产品。所以可以少一些人讨厌保险,多一些人从中受益。仍然是可持续发展的生意。不要在这场竞赛中被排除在外,以获得做出明智的实时决策的能力和手段。

我们看到的未来是,企业从洞察走向可操作的远见。

刺猬索尼克 2 和 3 的近似策略优化(PPO)

原文:https://towardsdatascience.com/proximal-policy-optimization-ppo-with-sonic-the-hedgehog-2-and-3-c9c21dbed5e?source=collection_archive---------2-----------------------

我们推出了新的免费、更新、 从初学者到专家的深度强化学习课程,用拥抱面对🤗

👉新版教程:https://huggingface.co/deep-rl-course/unit0/introduction

下面的章节是以前的版本,新版本在这里👉https://huggingface.co/deep-rl-course/unit5/introduction?fw=pt

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们推出了新的免费、更新、 从初学者到专家的深度强化学习课程,带着拥抱脸🤗

👉新版教程:https://huggingface.co/deep-rl-course/unit0/introduction

下面的章节是以前的版本,新版本在这里👉https://huggingface.co/deep-rl-course/unit5/introduction?fw=pt

几周前,OpenAI 在深度强化学习方面取得了突破。他们用 OpenAI five 击败了一些世界上最好的 Dota2 玩家,open ai five 是一个由 5 名代理组成的团队。不幸的是,他们在第二次经历中失败了。

Dota2

这一突破之所以成为可能,得益于强大的硬件架构和使用最先进的算法:PPO 又名近似策略优化。

最近策略优化的中心思想是避免太大的策略更新。为了做到这一点,我们使用一个比率来告诉我们新旧政策之间的差异,并将该比率从 0.8 削减到 1.2。这样做将确保我们的政策更新不会太大。

此外,PPO 引入了另一项创新,即通过在小批量取样中运行 K 个梯度下降周期来训练药剂。如果你读过我关于 A2C 和刺猬索尼克的文章,我们已经实现了。

所以今天,我们将深入了解 PPO 架构,我们将实现一个近似策略优化(PPO)代理,它可以学习玩刺猬索尼克 1、2 和 3!

然而,如果你想能够理解 PPO,你需要首先掌握 A2C,如果不是这样,在这里阅读 A2C 教程

政策梯度目标函数的问题

还记得我们学习政策梯度的时候,我们学习了政策目标函数或者你更喜欢政策损失。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个想法是,通过对这个函数采取梯度上升步骤(这相当于对这个函数的负值采取梯度下降),我们将推动我们的代理人采取导致更高回报的行动,并避免不良行动。

然而,问题来自于步长:

  • 太小,训练过程太慢
  • 过高,训练中可变性太大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

When there is enormous variability in the training (Robot Icons made by Smashicons)

这就是 PPO 有用的地方,其思想是 PPO 通过限制每个训练步骤的策略更新来提高演员训练的稳定性。

为了能够做到这一点,PPO 引入了一个新的目标函数,称为“削波替代目标函数”,该函数将使用一个削波将政策变化限制在一个小范围内。

引入截取的替代目标函数

首先,正如本堆栈溢出答案中所解释的,我们可以使用当前策略下的操作概率除以先前策略下的操作概率,而不是使用 log pi 来跟踪操作的影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Taken from PPO paper

我们可以看到 rt(θ)表示新旧策略之间的概率比:

  • 如果 rt(θ) >1,则意味着动作在当前策略中比在旧策略中更有可能发生。
  • 如果 rt(θ)在 0 和 1 之间:这意味着当前政策采取行动的可能性小于旧政策。

因此,我们新的目标函数可以是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Taken from PPO paper

然而,在没有约束的情况下,如果所采取的行动在我们当前的政策中比在我们以前的政策中更有可能,这将导致大的政策梯度步骤,并导致过度的政策更新。

因此,我们需要通过惩罚导致比率偏离 1 的变化来约束这个目标函数(在纸上比率只能从 0.8 变化到 1.2)。通过这样做,我们将确保不会有太大的政策更新,因为新政策不能与旧政策相差太大。

为此,我们有两种解决方案:

  • TRPO(信赖域策略优化)使用目标函数之外的 KL 散度约束来约束策略更新。但是这种方法实现起来非常复杂,并且需要更多的计算时间。
  • PPO 修剪概率比直接在目标函数与其修剪代理目标函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Clipped Surrogate Objective function

对于截取的替代目标函数,我们有两个概率比,一个是非截取的,一个是在一个范围内截取的(在[1-𝜖,1+𝜖]之间),ε是一个超参数,它帮助我们定义这个截取范围(在论文中𝜖 = 0.2)。

然后,我们取削波和非削波目标的最小值,,因此最终目标是未削波目标的下界(悲观界)。

因此,我们有两种情况要考虑:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Taken from PPO paper

  • 情况 1:优势为> 0

如果ȃt > 0**,则表示动作优于该状态下所有动作的平均值**。因此,我们应该鼓励我们的新政策,以增加在该州采取行动的可能性。

因此,这意味着增加 r(t),因为我们增加了新策略的概率(因为 At *新策略)和分母旧策略保持不变。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Taken from PPO paper

然而,由于修剪,rt(𝜽)只会增长到和 1+𝜖.一样多这意味着,与旧策略相比,这一行动的可能性不可能增加 100 倍(因为剪辑)。

为什么?,因为我们不想过多地更新我们的政策。原因很简单,记住在那种状态下采取行动只是一次尝试,这并不意味着它总是会带来超级积极的回报,所以我们不想太贪心,因为这会导致糟糕的政策。

→综上所述,在积极优势的情况下,我们希望增加在该步骤采取该行动的概率,但不要太多。

  • 情况 2:当优势ȃt 小于 0 时

如果ȃt< 0, the action should be discouraged because negative effect of the outcome. Consequently, rt will be decreased (因为当前政策比旧政策采取行动的可能性更小)而是因为剪辑的,rt 只会减少到和 1-𝜖.一样小

同样,我们不希望因为过于贪婪而对政策做出重大改变,完全降低采取行动的可能性,因为这会导致负面优势。

总而言之,由于这个被删减的替代目标,**我们限制了新政策与旧政策的差异范围。**因为我们去除了概率比移出区间的激励。因为,剪辑有渐变的效果。如果比率为> 1+e 或< 1-e,梯度将等于 0(无斜率)。

因此,我们看到,这两个裁剪区域防止我们过于贪婪,试图一次更新太多,并在该样本提供良好近似的区域之外进行更新。

最终剪切替代目标损失:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实现一个 A2C 风格的 PPO 代理,播放刺猬索尼克系列(索尼克 2 和 3)

所以现在,我们准备以 A2C 的方式实现一个 PPO 代理。A2C 风格意味着它遵循 A2C 文章中解释的相同过程。

同样,这个实现比本课程的之前的实现要复杂得多。我们开始实现最先进的算法,所以我们需要越来越高效地使用我们的代码。这就是为什么在这个实现中,我们将代码分离到不同的对象和文件中。

要实现一个 PPO 代理,你需要阅读下面的笔记本,它包含了一个完整的 PPO 过程的模式和每一部分解释的代码。

实现在这里的 GitHub repo

仅此而已!您刚刚创建了一个学习播放刺猬索尼克 1、2 和 3 的代理。太棒了。你需要在 1 个 GPU 上进行大约 10 到 15 个小时的训练,才能拥有一个好的代理。

不要忘记自己实现代码的每一部分。尝试修改代码真的很重要。尝试修改超参数,使用另一个环境。尝试是最好的学习方式,所以尽情享受吧!

花点时间考虑一下你在本课程第一章****:之后取得的所有成就,我们从简单的文本游戏(OpenAI taxi-v2)发展到复杂的游戏,例如使用越来越强大架构的《毁灭战士》和《刺猬索尼克》。这太棒了!

下一次,我们将研究深度强化学习中最令人兴奋的新策略之一:好奇心驱动的学习。

如果你喜欢我的文章,请点击👏下面是你喜欢文章的次数,所以其他人会在媒体上看到它。别忘了跟着我!

如果你有任何想法,评论,问题,欢迎在下面评论或者发邮件给我:hello@simoninithomas.com,或者发推特给我 @ThomasSimonini

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不断学习,保持牛逼!

深度强化学习课程:

我们正在用 Tensorflow 制作深度强化学习课程的视频版本📹这里我们重点关注 tensorflow 的实现部分这里。****

第一部分:强化学习简介

第 2 部分:用 Q-Learning 更深入地研究强化学习

第 3 部分:深度 Q 学习简介:让我们玩毁灭战士

第 3 部分+: 深度 Q 学习的改进:决斗双 DQN,优先体验重放,固定 Q 目标

第四部分:关于厄运和翻转的政策梯度的介绍

第五部分:优势演员介绍评论家方法:我们来玩刺猬索尼克吧!

第七部分:好奇心驱动的学习变得简单第一部分

心理学——可能改变总统选举的数学

原文:https://towardsdatascience.com/psychographics-the-math-that-may-have-turned-a-presidential-election-d4b24363b2a3?source=collection_archive---------10-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

除非你一直躲在岩石下或社交媒体自由区,否则你一定听说过脸书/剑桥分析公司的丑闻。如果指控属实,那么剑桥分析公司所做的事情的合法性(或者说非法性)是毋庸置疑的;他们使用的数据是非法获得的(未经适当同意)。然而,这一事件也引起了人们对他们用来将数据转化为可操作见解的实际算法技术的强烈关注。心理剖析的神秘艺术和微妙科学。

“貌相”这个词会立刻让我们大多数人产生负面情绪。我们都听说过基于种族、性别或年龄的貌相。没有人喜欢因为我们无法控制的特征而被放在一个盒子里。但是,我们不能把貌相和刻板印象混为一谈。种族或性别貌相是刻板印象的例子。侧写是根据对个人的了解来预测一个人的选择和行动的行为。刻板印象是一种狭隘的、完全不科学的形象化形式;这是一种基于无根据的概括对个人形成看法的行为,这种概括主要源于偏见和无知。刻板印象和剖析之间的关系类似于智能设计和物种起源研究之间的关系。这两者都是很大程度上不可信的方法论,用来支持一个人未经证实的信念,它们给整个领域带来了坏名声。

任何科学方法的基础都是从证据中学习。至少一个世纪以来,心理学家一直试图通过分析模型来捕捉人类行为。然而,这些模型的成功和可靠性是相当有限的,尤其是与它们在物理科学中的同行相比。这主要是因为人类远比原子或分子复杂。任何有用的人类行为模型都必须能够将个人的可观察特征与他/她的选择联系起来。然而,可能的特征和选择的空间即使不是无限的,也是非常大的。我们现在知道,人们需要复杂的算法来确定哪些选择是可预测的,哪些特征是重要的预测因素。这些算法的复杂性的一个直接后果是,它们需要大量的数据和计算能力来工作。

人类行为定量理论所需的数据和计算能力直到大约十年或二十年前才出现。心理学家和市场商人一直试图在调查的基础上理解行为。然而,调查作为数据收集机制从根本上说是有限的。他们受到自我选择偏差(即,你只从那些选择回答调查的人那里获得数据)、调查设计偏差(即,你只问那些你根据你的偏差或模型认为重要的问题)和数据稀缺(在前互联网时代,你可以通过调查接触的人数有严重的限制)。因此,这种分析得出的结果根本不足以被称为定量科学。像往常一样,当科学还没有到来时,生活还在继续。一些人(主要是营销人员)试图使用人口统计学参数,如年龄、性别、种族、地点等。,混合了一些描述性统计数据和直觉的魔力酱,对人类行为做出过于简单的概括。这被称为人口统计细分。其他人只是用偏见取代统计数据,并诉诸刻板印象。

随着新世纪的到来,一切都变了。我们将计算转移到了云端,这使得越来越多的人能够训练和验证越来越复杂的算法。然后,社交媒体网络出现了。脸书、推特、Instagram 和它们的表亲是名副其实的人类行为实验室。社交媒体网络摆脱了传统调查所面临的问题。另一方面,他们的问题是数据爆炸。表面上看,脸书或推特上的大部分数据都是琐碎的,可能看起来像噪音。脸书上的赞真的能说出你性格中的有趣之处吗?它们能用来预测你未来的选择吗?在一系列的论文中,Michal Kosinski 和他的合作者发现答案是肯定的。在一篇里程碑式的论文中,他们令人信服地证明了脸书的“喜欢”可以用来辨别个人的性格特征。在接下来的一篇论文中,他们展示了给定足够的数据,计算机算法在这方面比人类更好,包括亲密的家人和朋友。最后,在另一个重要的后续研究中,他们表明这些性格特征可以用来预测一个人可能做出的选择。

这些研究人员的主要贡献不是革命性的新算法。这也不是第一次证明一个领域中过去的行为可以用来预测同一领域中未来的行为;亚马逊和网飞等公司已经在各自的领域展示了这一点。科辛斯基及其合作者展示的是,由看似微不足道的互动(如脸书的“喜欢”)组成的大量数字足迹的总和可以用来预测未来的选择,从而影响完全不相关领域的未来行动。这是一个令人难以置信的强大的认识。

《剑桥分析》利用这些见解来影响选举。但是他们不是第一个使用心理测量学的人,也不会是最后一个。事实上,在科辛斯基的研究之前,心理测量学的潜力在很多方面都是显而易见的。在 T2,有很多公司和机构正在以完全合法的方式使用某种形式的心理图形。例如,经济合作与发展组织正在进行一项研究,研究各种个人和环境因素对不同城市学生社交和情感技能的影响。目标是为政策制定者提供设计更好的政策工具的见解,以便在学生中促进这些社会情感技能。这项研究将使用人格特质的五因素模型;剑桥分析公司用来建模的模型。经济合作与发展组织的研究是一个明显的例子,表明心理学可以用于明确的好处。

自从认知诞生以来,侧写就一直存在。任何时候你和一个人互动,或者可能和一个有知觉的生物互动,你都会被侧写。大多数或者几乎所有这样的剖析都是基于不完整的信息和“有缺陷的”算法。人们经常因为肤色在机场被骚扰,或者因为姓氏被列入禁飞名单。在这种情况下,很难认为无偏见的数据驱动算法不会提供更好的替代方案。

很大一部分关于心理图形的歇斯底里源于缺乏关于心理图形是什么以及它能做什么的知识。我们每个人都愿意相信自己是独一无二的。在很多方面我们都是。但是,在许多其他方面,我们是可以预测的。心理学不是魔术,它是数学。它只能学习可以学习的东西,只能预测可以预测的东西。使一个人独一无二的东西将永远隐藏在心理分析之外。甚至当涉及到可以被认为是可预测的影响时,它也只能对大型群体做出预计在大部分时间内成立的统计预测。换句话说,给定足够多的数据和足够强大的算法,对于你个性的可预测方面,心理测量学可能在大多数时候都是正确的,但不是所有时候。

区分数据收集的合法性和我们处理数据的道德性是非常重要的。围绕剑桥分析丑闻的问题首先与数据是如何获得的有关。这些问题最容易回答。几乎任何理智的人都会同意,应该有关于收集个人数据的合理法律。更难回答的是,这些数据的合法用途是什么,即使这些数据是在尽可能广泛的同意下收集的。

概括地说,心理测量学可以以两种不同(但相关)的方式使用。第一个是理解并提供大规模的人类行为的见解。经合组织的研究就是这种用法的一个例子。第二是微观目标和说服。这种用法在营销中最有效。它在选举政治中的效力充其量可能是微不足道的。在这两种情况下,人们可以认为心理测量学中使用的(数学)方法比现状更符合伦理(更公正)。因此,在目前的状态下,除了数据隐私之外,很少有关于心理测量学的伦理问题;数据隐私并不是心理学独有的问题。

然而,我们关心的是未来。心理测量学,当与认知科学相结合时,有可能通过说服塑造人类行为。人们可以设想将这种技术用于善的方面,例如增强我们的良性方面,如利他主义或帮助有抑郁症症状的个人,或者用于恶的方面,例如利用仇外心理或与病理成瘾相关的特征。这种未来心理学的伦理有点类似于基因编辑的伦理。就像基因编辑、原子能或互联网一样,心理学的这种未来科学将不会受到道德判断的影响。但它的用途不会。我们作为当代的居民,有责任放眼我们集体的道德景观,并确定这一未来的界限。

社交媒体分享心理学:关注、情绪和反应

原文:https://towardsdatascience.com/psychology-of-sharing-on-social-media-attention-emotion-and-reaction-707f164e4136?source=collection_archive---------6-----------------------

我很高兴看到我的 《波士顿环球报》/脸书的研究受到好奇的读者的欢迎,并被几个组织特别报道,如哈佛尼曼新闻实验室Chartbeat社会新鲜ISHP 咨询。与此同时,我一直在不同的地方就这项研究发表演讲,包括波士顿环球报、伦敦 Mozilla Festival、汉堡 Spiegel Online 和 Hacks/Hackers Berlin。如果你觉得这项研究很有趣,并想进一步讨论,请在 Twitter 上给我打电话 @sonya2song 或给我发邮件 sonya2song#gmail。也请随意下载为我的演讲开发的幻灯片(最后更新于 2013 年 12 月 9 日)。

在之前的研究中,我展示了数据分析,研究用户如何阅读和分享《波士顿环球报》在脸书页面上的帖子。在这个扩展分析中,我加入了定性分析,重点是内容、认知和情感。我的目标是帮助新闻编辑室更好地在社交媒体上推广他们的故事,并吸引更多的关注。

为了实现这个目标,我一直在挖掘心理学文献寻找灵感。欣喜之余,我发现了一些适用于社交媒体环境的理论和发现:

  • 快速和慢速两种思维模式会吸引不同类型的注意力。
  • 在社交媒体上分享是
  • 充满感情,
  • 受自我形象管理的约束,也
  • 担心与他人的关系。

同样,这份报告是基于脸书洞察的三个关键指标:触达、参与用户和谈论这个。根据脸书的说法, reach 被定义为“看过你帖子的独特人数”;参与用户为“点击过你帖子的唯一人数”;将此描述为“从你的页面帖子中创造故事的独特人数。当有人喜欢、评论或分享你的帖子时,故事就产生了;回答您发布的问题;或响应您的事件”。这些指标以各种方式作为独立访问者的绝对数量,反映了从被动消费到主动互动的用户行为。

# # # # # # # # # # # # # # # # # # # # # #

在对脸书的波士顿环球报流量的原型分析中,我报告了关于图像大小和“突破”标签的发现。一般的模式是,与没有图像相比,用图像来说明帖子与更高的流量相关联,与缩略图相比,大图像也是如此。这个模式适用于脸书的三个关键指标(图 2)。此外,仅仅“打破”与更高的触及度相关,尽管与参与或谈论这一点无关(图 1)。事实上,不仅是突发新闻,其他大写单词也与更高的触及范围相关联,包括天气监视、重大更新、大图、NOW LIVE 等。作为一名努力工作的记者,你可能会告诉我,读者被这种肤浅的东西吸引,比如大照片和突发新闻,这令人不安。但对你来说好消息是,原始伎俩引发的关注是相当廉价的。为了获得更多的关注,复杂的信息会是一个更好的选择,我们将在认知紧张和系统 2 一节中讨论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 1: “Breaking” is associated with higher “reach”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 2: Larger images are associated with higher traffic

作为一个不太正面的例子, 麻省理工科技评论 可能会告诉我们如何获得很少的关注。看它的脸书页,我们可以看到很多大大的 T,肯定是杂志的 logo。很明显,故事是以链接的形式分享的,脸书会自动提取其徽标。因此,这些故事没有有趣或简单相关的视觉伴侣。重复的 T 也可能让粉丝们对这个符号视而不见。可悲的情况是,尽管这篇评论产生了许多激动人心的故事,但它在脸书的存在远非令人信服——你可能已经注意到了图 3 中的少量分享和喜欢。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 3: Facebook Page of MIT Technology Review

# # # # # # # # # # # # # # # # # # # # # #

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

理解我们如何处理简单和复杂的刺激(如文本、图片、谜题等)。),(2011)思维,快与慢的 是一本好书。在本书中,卡尼曼考察了与人类两种思维模式相关的各种理论和发现:系统 1(快)和系统 2(慢)。

系统 1——无意识注意

系统 1 处理对生存至关重要的先天技能,它快速自动地工作。一个例子是,在我们意识到发生了什么之前,我们把手指从火中抽回。还有一个就是在空旷的高速公路上开车。系统 1 是完全无意识的,例如,当看到 1 + 1 = ____,我们会觉得必须去填空。换句话说,系统 1 不能关闭,因为它对我们的生存至关重要。当听到像爆炸这样的突然噪音时,我们会把头转向声源,想知道危险是否出现。除了天生的技能,通过长期练习获得的能力也可以由系统 1 处理,例如为国际象棋大师设想下一步,或者为计算机科学家设想 210 = 1024。

系统 2——有意识的注意力

相比之下,系统 2 处理习得的技能,如外语、逻辑推理、数学等。又慢又费力,就像我们计算 23 x 67 = ____ 时的感受。换句话说,它需要更多的关注,就像如果有人以前没有这样做过,就从左边开车。与系统 1 不同,系统 2 并不总是袖手旁观,这就是为什么我们容易受到营销和广告技术的影响。此外,当我们累了、饿了或心情不好时,可以停止使用系统 2。想象一下熬夜备考后参加考试有多艰难。

分工和最小努力定律

在系统 1 和系统 2 之间,劳动力被划分。大多数时候,我们处于系统 1 的快速模式。同时,系统 1 评估环境,并确定是否需要调用系统 2 进行额外的工作。当检测到困难、冲突和压力时,系统 2 将被调动并控制局面。系统 2 处理由系统 1 感知的信息,并在必要时纠正它。此外,系统 2 克服了系统 1 的冲击。例如,当争论升级时,我们必须努力抑制工作中的情绪。因此,系统 2 拥有最终决定权。

然而,懒惰是我们作为动物的天性,我们倾向于为未来意想不到的威胁保留能量。因为脑力劳动也消耗资源(例如葡萄糖),所以它的能力有限。因此,我们天生厌恶努力,让系统 1 领先。

现在考虑我们如何使用社交媒体:我们浏览帖子的速度相当快。虽然我们偶尔会在快速滚动或大或小的屏幕时陷入在线辩论,但我们通常会感到放松、宽慰,甚至高兴。换句话说,我们来到社交媒体是为了一段轻松的时光,而不是挑战。

认知易与系统 1

这种社交媒体上的轻松时光就是卡尼曼(2011)所说的“认知轻松”。他将认知放松描述为“事情进展顺利的迹象——没有威胁,没有重大新闻,不需要转移注意力或调动努力”(第 59 页)。换句话说,系统 1 在负责,系统 2 在打瞌睡。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 4:Causes and consequences of cognitive ease

图 4:认知容易的原因和后果图 4 说明了认知容易的各种原因和后果。(也许你已经感觉到广告商一直在利用的认知理论:重复、清晰和快乐更有可能让你感觉更好,并说服你相信某些产品或服务值得你花钱)。就像清晰的显示一样,易读性影响我们解析一条信息的难易程度。

突发新闻和易读性

高度易读的文本将导致认知上的放松,并很好地纵容系统 1。看看下面卡尼曼给出的例子:

阿道夫·希特勒出生于 1892 年。

阿道夫·希特勒出生于 1887 年。实验表明,与第二种说法相比,更多的人会相信第一种说法是正确的——事实是希特勒出生于 1889 年。正如您所猜测的那样简单:第一条语句用粗体显示,更加易读。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们将这一心理发现移植到社交媒体上,我们可能会意识到突发新闻也在扮演类似的角色,从而吸引更多的注意力,尽管几乎是无意识的。由于我们无法定制我们在社交媒体上发布的文本的大小、颜色或字体,使用大写字母是我们改变帖子易读性水平的唯一选择。如果你不顾一切地想要克服社交媒体上的障碍,你可能会发现 lolcats 很鼓舞人心。

像大写文字一样,大图片也是抚慰系统 1 的养眼糖果,吸引社交媒体用户几乎无意识的注意。

简单的文本和可读性

迎合系统 1 的另一种方法是使文本简单且易于解析。可读性用来衡量这方面。已经建立了许多公式来测量可读性。

正如所料,每个词的平均音节数与所有三个指标负相关,即“触及”、“参与用户”和“谈论这个”。这对社交媒体编辑的启示是准备迎合快速阅读的信息,因为人们经常被社交媒体上的系统 1 所引导,即使各种媒体渠道的受众在不同的水平上说出可读的语言(查看图 8 中跨新闻编辑室的可读性水平)。据推测,一旦人们被带离脸书,他们就会从快节奏转为慢节奏。但在此之前,每个帖子都只有一瞬间来吸引人们的注意力。

在简单语言的主题上,奥威尔强调,不管文学用途如何,简单的词语增强了语言作为表达思想的工具。你可以用下面的例子来测试自己,看看你是否能顺利地将注意力从这个句子的第一个词移到最后一个词。

对当代现象的客观考虑迫使我们得出这样的结论:竞争活动中的成功或失败并不表现出与先天能力相称的趋势,而是必须始终考虑相当多的不可预测因素

政治和英语乔治·奥威尔,1946

这一段实际上是奥威尔从《传道书》中“翻译”出来的,以表明文本可能会不必要的困难。原文如下:

“我又转念,见日光之下,跑得快的不一定能赛跑,强壮的不一定能争战,智慧的不一定能得食物,聪明的不一定能致富,有才能的不一定能得宠。但时间和机会发生在他们身上。”

为了让奥威尔的观点更加准确,根据弗莱斯奇-金凯德公式,原文得分为 18.5,而译文得分为 27.5,我将在认知压力和系统 2 一节中介绍这个公式。

启动效应和在社交媒体上提问

与系统 1 相关,心理学家发现了很多有趣的现象,比如启动效应。启动效应是一个总括性的概念,讨论人们在几乎无意识的影响下的行为。例如,让两组人完成 SO _ P;在这个任务之前,一组看吃的,另一组看洗的。吃组更有可能以汤和其他肥皂的形式完成。在这里,吃素汤,洗素皂。

另一个与无意识影响相关的实验是在纽卡斯特大学进行的(巴特森等人,2006 )。一个诚实的盒子被放在办公室里,用来收取茶和咖啡的费用。价目表上方依次展示了不同的海报。海报没有文字,但有两个主题,眼睛或花朵。结果(图 5)显示,在“有眼睛”的几周里,比“有花”的几周支付了更多的钱。这个实验很好地证明了“启动现象出现在系统 1 中,而你没有意识到它们”(Kahneman,2011 年,第 57 页)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 5: Eyes on you, Bateson et al., 2006

如果我们将这一概念应用于社交媒体,我们会发现什么?我从一个小任务开始探索证据。研究的问题是:在社交媒体上提出的问题能引导人们回答这些问题的行为吗?也就是说,一个问号会在一篇帖子上产生更多评论吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 6: Asking questions is associated with more comments.

是的,在控制新闻部分、分享时间和其他因素后,问题与更多评论显著相关(注意:与喜欢或分享无关)。一般模式是,更多的接触与更多的参与相关,更多的参与与更多的喜欢、分享和评论相关(见图 10)。相比之下,有问题的帖子更有可能出现在趋势线上方,表明表现更好,尽管下方有一些异常值。根据两周内收集的样本,有问题的帖子会有 80%以上的评论。

同样,这个发现的概念是不要像突发新闻的诱惑一样过度使用它。虽然人们说没有所谓的愚蠢问题,但当你的问题不那么聪明时,你会很清楚。此外,“素数的影响很大,但不一定很大”(Kahneman,2011 年,第 56 页)。这表明内容本身仍然是流量的主要驱动力,而促销在一定程度上有所帮助。

在讨论各种启动效应和锚定效应这两种与快速思维模式(系统 1)相关的现象时,卡尼曼指出,尽管我们可以做出额外的努力来控制我们的系统 1,但无意识地受到影响是人类的本性。下面的引语应该可以缓解读者和记者对这些发现的道德担忧:

你的思想和行为可能会受到你根本没有注意到的刺激的影响,甚至是你完全没有意识到的刺激。启动研究的主要寓意是,我们的思想和行为受到当下环境的影响,比我们知道或想要的要多得多。许多人发现启动结果不可信,因为它们不符合主观经验。许多其他人发现结果令人不安,因为它们威胁到主观能动性和自主性……如果风险很高,你应该动员自己(你的系统 2)来对抗这种影响。(第 128 页)。

现在,你们这些辛勤工作的记者将会从这项研究中了解到一些令人鼓舞和兴奋的发现:你们复杂的信息应该得到更多的关注,不一定是更高的数量,但可能是更高的质量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 7: Causes and consequences of cognitive strain

与认知放松相反,认知紧张具有相反的原因和后果(图 7)。在系统 2 的指导下,人们变得更加警惕,犯的错误更少,但同时变得更没有创造力,感觉更加努力。

给定漂亮的流程图,在实践中,我们应该如何激活系统 2 并让人们的慢思维参与进来?这里有一个有趣的实验。有些棘手的问题人们经常会弄错。其中三个包含在 Shane Frederick 的认知反射测试中。这个测试非常棘手,即使是顶尖学校的学生也会给出错误的答案。然而,当用褪色的劣质印刷品进行测试时,错误率从 90%下降到 35% ( Alter 等人,2007 )。这个实验表明,认知紧张会调动第二系统,而第二系统会进行缓慢而仔细的思考。

复杂文本和更多评论

在社交媒体上,我们可以用什么样的认知压力来吸引读者?更复杂的文本可能是一种方法,例如包含更多单词的句子和包含更多音节的单词。

为了衡量脸书文本的复杂程度,我在研究中采用了 Flesch-Kincaid 等级水平。这个工具已经被调整以反映美国读者理解给定文本所需的教育年限。例如,一篇得分为 5.2 的文章可以被五年级以上的学生理解。F-K 水平建立在每个单词的平均音节数和每个句子的平均单词数的基础上,计算如下:

Flesch-Kincaid Grade Level =(每个单词 11.8 *音节)+(每个句子 0.39 *单词)-15.59 在脸书,各种媒体渠道以反映在它们自己的出版物中的风格呈现它们自己。图 8 中的可读性分数是根据七家媒体在脸书的最新 200 篇文章计算出来的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 8: The median score of Flesch-Kincaid. BuzzFeed: 4.83, Boston.com: 6.01, Boston Globe: 7.23, Washington Post: 7.37, CNN: 9.69, New Yorker: 12.91, The Economist: 14.62.

记者们的激动人心的消息来了。更复杂的文本与更多的评论相关(再次注意:与分享或喜欢无关)!不过,效果并不明显:K-F 水平多 12 分,评论就多 12%。在图 9 中,点的饱和度和大小表示文章的可读性分数。更大和更饱和的点更有可能落在趋势线之上,表明表现更好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 9: Harder text is associated with more comments

快速和慢速思维模式可能有助于解释这一证据。当文字看起来很难时,一些社交媒体用户会放弃,继续下一篇文章。那些决定阅读复杂帖子的人实际上是在进行缓慢的思考,缓慢的思考让他们更好地理解信息并形成观点。因此,就像糟糕的印刷与更好的答案相关一样,复杂的文本似乎与读者更多的评论相关。

除了心理学角度,其他因素也可能有助于解释这一证据。1)文本的整体复杂性可以暗示帖子的重要性,因此更复杂的文本可以吸引更多的查看和点击。以及 2)复杂的消息往往更长,并且更长的消息显示在更大的文本块中。因此,对于脸书用户来说,更复杂、更长的帖子需要花费更多的时间来解析,从而吸引更多的注意力。在我的统计分析中,这两个参数(消息的重要性和解析时间)没有被控制,所以不能排除它们的影响。

紧张+放松=交谈

三个脸书 KPI 之间的一般模式是,更多的接触与更多的参与相关联,更多的参与与更多的喜欢、分享和评论相关联(图 10)。这种趋势出现在 reach、参与用户和谈论这之间的大致线性关系中(经过对数转换)。同时,我们可以很容易地辨别趋势线上下的异常值。那么,为什么这些故事产生的活动较少呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 10: Reach vs. Engagement vs. Talking about this (log-transformed)

为了量化这个问题,一些人开发了一个叫做对话率的指标。此指标计算为“谈论此事”与“达到”的比率。我将列出最少和最多的对话故事,并对内容中观察到的模式进行快速总结。让我们先来看看对话最多和最少的故事,并试图调查它们为什么会变成这样。

最会说话的故事

  1. 俄克拉荷马城雷霆队的明星凯文·杜兰特今天承诺为昨天毁灭性的 T2 龙卷风后的恢复工作捐赠 100 万美元。【http://b.globe.com/191OR6r
  2. 夏天住在波士顿公园(冬天住在富兰克林公园动物园)的天鹅罗密欧与朱丽叶,今天回到那里,标志着春天的季节真正到来了。见照片:http://b.globe.com/ZOid4O
  3. 阿诺德树木园的紫丁香盛开了。这张照片是昨天在植物园拍摄的,官方名称是丁香星期天。如果你有机会顺便来看看。环球员工照片/ Yoon S. Byun
  4. 向飞行员问好。它今天进行了首次运行,并计划于下周末正式亮相,这是大约 25 年来第一次从波斯顿到科德角的服务。http://b.globe.com/13xiois:你会骑它吗?
  5. 马拉松爆炸 在一毫秒内切断了马克·富卡里勒(如图,和他的未婚妻珍·雷根)的右腿。它放过了左派,但也差不了多少。现在,他和他的家人正处于痛苦的等待游戏中,看他的“好的”腿 能否保住http://b.globe.com/11igVlA
  6. 在一场 EF-4 龙卷风袭击后,一名儿童被从俄克拉荷马州摩尔市广场塔小学的废墟中救出。风速高达每小时 200 英里的龙卷风,宽度达一英里,并留下大片破坏区域。http://b.globe.com/12pP8KY
  7. “这是波士顿体育史上最伟大的时刻之一,”《环球时报》的丹·沙乌格内西写道,布鲁因斯队激动人心地战胜了枫叶队。“然后奇迹出现了……布鲁因斯进球了,进球了,进球了http://b.globe.com/18H5GTZ
  8. 波士顿运动协会邀请所有未能完成 2013 年波士顿马拉松的参赛者参加明年的比赛。这影响了 5633 名跑步者。
  9. 布拉德·马尔尚在加时赛的 15:40 分钟时,为布鲁因斯队攻入制胜一球。故事:【http://b.globe.com/10vZlak(图片来源:美联社)
  10. 在得知她有 87%的机会患乳腺癌后,女演员安吉丽娜·朱莉接受了预防性的双乳房切除术。朱莉今天在纽约时报专栏上分享了她的故事:http://nyti.ms/18HZFX3环保局照片

最少对话的故事

  1. 基思·雷丁的惊悚片《几乎是蓝色的》在查尔斯镇工作剧院上映,与其说是蓝色,不如说是 http://goo.gl/PwlBT 的黑色
  2. #海鲜饭辣椒的配方http://goo.gl/PwlBT
  3. 新:马修吉尔伯特的 Buzzsaw 专栏。环球影评人马修·吉尔伯特(Matthew Gilbert)问道,作为最受崇拜的“发展受阻”,带着一季大小的“集转储”回归,给观众太多会让他们无话可说吗?http://b.globe.com/10a7Sg5
  4. 用这些时尚的母亲节礼物让妈妈感到更加特别。
  5. 菲尼克斯太阳队任命前波士顿凯尔特人队的 33 岁的瑞安·麦克多诺为他们的新总经理。
  6. 专辑评论:巴兹·鲁赫曼改编的电影《了不起的盖茨比》(The Great Gatsby)的配乐由 Jay-Z 策划,是对那个时代的梦幻再现,将 20 世纪 20 年代的爵士乐置于现代流行音乐和嘻哈音乐的背景下。奇怪的是,原声音乐缺少的是心。
  7. 创新的躁动和冒险的感觉是 Iron & Wine 最新专辑《幽灵上的幽灵》(Ghost on Ghost)的核心,萨姆·梁(Sam Beam)将于今晚在伯克利表演中心(Berklee Performance Center)举行一场演出来庆祝这张专辑。
  8. 书评:深受喜爱的《追风筝的人》的作者卡勒德·胡赛尼,带着《群山回响》回到了他的祖国阿富汗崎岖的土地上
  9. 乔恩·莱斯特在芝加哥的六局比赛中失六分,白袜队以 6 比 4 击败红袜队。
  10. 雅虎将以 11 亿美元收购 Tumblr。你认为这将有助于重振雅虎品牌吗?Tumblr 是一个好的投资吗?

下面是我对故事对话潜力相关模式的快速总结。

  • 漂亮和令人愉快的东西是最容易交流的,比如照片幻灯片。
  • 也是高度对话式的:有一个问题,但已经(或将会)有一个解决方案:
  • 在体育比赛中奇迹般获胜,打破了平局
  • 未能完成马拉松,但被邀请回来做这件事
  • 马拉松爆炸受害者,但得到了医疗护理
  • 自然灾害,但孩子们得救了
  • 癌症的机会,但干预使其最小化
  • 两个城市分开了 25 年,但最近联系起来了
  • 最不健谈的:
  • 艺术相关(音乐、电影、书籍等。)
  • 事实信息(体育比分、已达成的商业交易等。

对话也可以通过快速和慢速思维框架来解释。两种美丽的照片(天鹅和紫丁香)可能会吸引系统 1,并有助于对话。相比之下,其他八个热门对话故事根本没有漂亮的照片。相反,他们首先提出一个问题(平局、龙卷风、癌症、断线等。)然后提供一个解决方案或者一个凯旋。这种模式我命名为张力释放,由一个转折点组合而成。由于转折点扰乱了信息的流动,它可能会减缓人们的思维,并使系统 2 发生反应。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 11: How to attract System 1 and System 2 for higher traffic

综上所述,在社交媒体上吸引眼球的方式多种多样。漂亮的照片、简单的信息和大写的单词可能会吸引系统 1 的一些无意识的注意。为了吸引更多有意识的和有意义的注意,我们可以在信息中强调惊喜、复杂的语言和转折点。这两种方法都有助于在社交媒体上获得更多的关注和流量(见图 11)。有些人可能会说这些方法是骗人的。然而,我认为,判断取决于目标。如果我们的目标是真诚地接触更多的观众,增加新闻编辑室的公民影响力,那么这些技术的使用是合理和恰当的。在这里我想引用卡尼曼对此的看法:

所有这些都是很好的建议,但我们不应该忘乎所以。如果你的信息明显是无意义的,或者与你的听众知道是真实的事实相矛盾,那么高质量的纸张、明亮的颜色、押韵或简单的语言都不会有太大的帮助。做这些实验的心理学家并不认为人是愚蠢的或容易受骗的。 心理学家认为,我们生活中的大部分时间都是由系统 1 的印象引导的……——如何写一条有说服力的信息,丹尼尔·卡内曼(2011 年,第 64 页)

    • — * — * — * — * — * — * — * -

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 12:评论与分享(对数转换)
人们在脸书上有三种表达方式:喜欢、分享和评论。一般来说,喜欢超过分享和评论,因为这是人们可以承受的最便宜的表达方式,除了一些负面或有争议的信息(图 12),这些信息使“喜欢”与人们的认知相矛盾。这一发现并非脸书独有,其他网络媒体也是如此。在 YouTube 上,尽管有大量的观看,但竖起大拇指或向下只占总观看数的 0.22%,评论占更小的比例 0.16%的人会留下评论( Cha et al .,2007);在维基百科上,4.6%的访问与编辑有关;在 Flickr 上,20%的用户曾经上传过照片( Auchard,2007 )。当我问评论和分享哪个数字更大时,问题就变得棘手了。对此的最佳回答是:视情况而定。在图 12 中,线条标记了匹配注释的股份;上面有更多的分享,下面有更多的评论。这里有一对案例(图 13)。第一个帖子是滚石封面,以波士顿爆炸案嫌疑人为主角。它收集了大约 600 条评论和 100 条分享(你可能也注意到了,它只获得了 57 个赞,比分享和评论都少)。第二个例子是以英雄警察和受害者为主题的另类封面,吸引了约 100 条评论和 600 次分享。这两个帖子是关于同一个主题,但是它们引发的活动是不同的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure 13: Contrast between comments and shares

为了回答为什么人们会通过分享或评论做出反应,让我们来看看更多的例子。它们是股票超过评论最多的极端例子,反之亦然。

  1. 你留在了芝加哥:黑鹰队今天投放了一整页的《波士顿环球报》广告,向布鲁因斯和波士顿人民表达感谢和赞扬。http://bo.st/14BGdHL
  2. 昨晚,旧金山市政厅被彩虹旗的颜色点亮,最高法院的裁决为同性婚姻在经历了长达五年的激烈法律斗争后在加州恢复扫清了道路。故事:http://bo.st/18inxlD环保局照片
  3. 这可能是我们见过的波士顿上空最好的烟火照片。《环球时报》摄影师马修·j·李摄我们希望每个人都有一个美好的 7 月 4 日!更多庆祝活动的照片:http://bo.st/18AIVmv
  4. 德文·文森特与我们分享了一张《T4》的另类滚石封面。
  5. 大卫·奥尔蒂斯在他的第一次击球中击出二垒安打,成为棒球史上安打次数最多的指定击球手,并在一局后击出两分全垒打,带领红袜队在周三晚上以 11 比 4 战胜西雅图水手队http://bo.st/16t6Wpz
  6. “波士顿强”是第十届里维尔海滩沙雕节的中心主题,该节将持续到周日。
  7. 我们今年最喜欢的摄影作品之一:2013 年国家地理旅行者摄影比赛的获胜者。这里可以看到东方尖叫猫头鹰在做它们最擅长的事情。你最好有一双锐利的眼睛来发现这些小猛禽。
  8. 上个月出生在圣安东尼奥动物园的一只双头龟变得如此受欢迎,以至于它现在有了自己的脸书主页。你可以在这里找到《末路狂花》的剧情:http://on.fb.me/1e4rdWB
  9. 红袜队在从七月开始到八月结束的 15 局胜利后,又回到了第一的位置。在周四午夜过后 14 分钟结束的比赛中,斯蒂芬·德鲁最终以决定性的一击帮助波士顿以 5 比 4 战胜西雅图水手队。http://bo.st/169Fcrn
  10. 今晚在芬威公园,红袜队以 8 比 2 轻松击败水手队。http://bo.st/158PjQu
  11. 《滚石》杂志的最新封面刊登了一张马拉松爆炸案嫌犯焦卡尔·萨纳耶夫的照片。这样合适吗?http://bo.st/15lJKKX
  12. 非常悲伤的消息:宾夕法尼亚州西部两岁的洛根·史蒂文森在上周父母的婚礼上担任伴郎后,昨晚死在了母亲的怀里。
  13. 这条死去的鲨鱼今天早上被发现躺在楠塔基特的海狗酿酒酒吧前。
  14. Tedeschi 食品店和 CVS 都承诺不刊登封面上有马拉松爆炸案嫌疑人 Dzhohkar Tsarnaev 的《滚石》杂志。
  15. 一名英国研究人员声称,规律的性生活(T3)可能是看起来年轻 7 岁的秘密。
  16. 乔治·齐默尔曼判决之后,前奥巴马顾问范·琼斯在推特上发布了这张照片,照片上小马丁·路德·金穿着帽衫……你认为这张照片上 MLK 穿着帽衫合适吗?
  17. 南茜·克里根和棠雅·哈丁将会在二月份作为一部新纪录片的一部分回到聚光灯下,这部纪录片将会在奥运期间在 NBC 电视台播出。你会看吗?
  18. 据 TSN 报道,作为周四多方交易的一部分,布鲁因斯将把泰勒·塞金送到达拉斯来交换路易·埃里克森。这笔交易用塞金、里奇·佩维利和小联盟球员瑞安·巴顿来交换埃里克森、乔·莫罗、雷利·史密斯和马特·弗雷泽。http://bo.st/17Or9Jv
  19. 一名康涅狄格州八年级学生拼错了“危险”的正确答案问题,并为此丢了钱说他被骗了。你同意吗?
  20. 我们正处于热浪之中,所以让我们来谈谈冰淇淋吧。新英格兰最好的冰激凌店是哪家?请在评论中发表你最喜欢的。谢谢!

# # # # # # # # # # # # # # # # # # # # # #

审视以上 20 个帖子的一个角度是情绪。一些心理学家研究情绪与信息传播的关系( Rimé,1991;彼得斯,2009 年。当故事是关于其他人的插曲时,情绪会起到如下作用:

  • 人们与不同的观众分享充满不同情感的故事,比如家人和朋友,而不是陌生人。
  • 在不同类型的情绪中,有些比其他的更常见。在离线环境中,人们发现兴趣、快乐和厌恶更容易被分享。
  • 一种情感越强烈,一个故事就越有可能被分享。

一些学者已经将情绪研究应用到媒体领域。例如, Berger 和 Milkman (2012)研究了从《纽约时报》头版收集的 6956 篇文章和电子邮件分享的频率。他们发现,高唤醒情绪与更多的电子邮件分享有关,包括积极(敬畏和娱乐)和消极(焦虑和愤怒)情绪。此外,研究人员发现,当一个故事变得不那么情绪化时,读者可能会分享它。他们控制了其他因素,如头版位置,并讨论了情绪和信息传递之间的复杂关系。他们的发现与之前在离线环境下进行的研究一致。

请注意,这项研究是在 2008 年进行的,当时调查人员关注的是新媒体而不是社交媒体,以及通过电子邮件进行的窄播而不是通过社交媒体进行的广播。尽管如此,他们的发现对社交媒体仍有影响。从脸书上面的 20 个帖子中,我们还可以观察到一个与情绪有关的模式。快乐的(同性婚姻,红袜队的胜利)和有趣的(最佳烟火,双头乌龟)故事被分享的比评论的多。

社会关系维护

相比之下,悲伤的(死亡,损失)和可鄙的(各种嫌疑人,体育丑闻)故事被评论多于分享。看看脸书,我们认识到它是一个连接朋友和家人的场所。这一特点可能会导致分享和评论之间的分歧,因为评论将允许用户在半匿名的空间内参与,远离他们的朋友和家人。

也许还有其他原因可以解释为什么脸书的一些故事比其他故事更容易分享。脸书以积极的情感氛围(皮尤研究,2012 )和和谐的社会关系而闻名——猜猜为什么没有不喜欢按钮被引入脸书。

我们可以怀疑为什么我们更喜欢保持良好的社会关系有各种各样的动机。一些学者认为,良好的社会关系表明人际吸引和信任,有助于获得社会支持,并有助于传递对职业表现至关重要的信息和资源( Podolny 和 Baron,1997 )。另一些人则称之为互惠,假设人们给予,同时期望在以后得到回报。

尽管这些动机多种多样,但人们通常都是为了保持良好的社会关系。因此,这种行为也应该在脸书这个社交网络中心观察到,它的用户应该努力取悦他人,避免冒犯他人。这意味着,如果一个帖子警告恶劣天气,人们更有可能在社交关系中分享它(信息交换)。另一方面,如果一个政治或宗教故事肯定会让一些用户的父母、朋友或老板感到不安,他们会不愿意通过分享来羞辱他们。或者,如果它与社交圈的信仰一致(体育胜利、同性婚姻、正义感),分享是首选。

尽管如此,当一个故事读起来有争议和情绪化时,人们会产生一种冲动去表达他们的观点。在这些情况下,我们会注意到一个帖子下产生了很多评论,尽管它可能不会导致很多分享。

自我形象管理

除了维持与他人的关系,人们还倾向于改善和管理他们在社会生活中的存在。高夫曼 (1959)将日常生活比作戏剧表演;在这两种情况下,人们会认出一个特定的场景,并把自己呈现在一个已知的观众面前。不仅通过面对面的互动,人们还试图通过将自己与有形物体(如品牌商品)联系起来来建立理想的自我形象。正如汤普森和赫希曼指出的:“消费通过一个人的财产所传达的形象和风格来产生一个想要的自我”(1995 年,第 151 页)。

类似的现象在网上也观察到了。例如,个人网站所有者可能会遵循“我们就是我们发布的东西”的座右铭,因为他们可以通过随心所欲地展示品牌标志和产品来管理他们的在线自我形象,而不是财务拮据的现实生活( Schau & Gilly,2003 )。在约会网站上,人们变得相当谨慎,因为个人资料和照片往往是精心挑选的,如果不是完全误导的话。我们还听说,青少年痴迷于频繁改善他们的网上形象,并为此感到疲惫不堪。同样,我们怀疑脸书页面(品牌、名人、新闻媒体等。)也被用来塑造和提高人们在网上的形象,或者理想的自我形象。

在社交媒体上,“我分享所以我在”。脸书用户策划和分享的新闻故事不可避免地也传达了他们理想的自我形象。以 Wired 为例,它频繁“极客”粉丝。复杂的电路和图表往往是高度共享的,如下图截图所示。我相信连线拥有高科技受众,但这些“极客”故事仍然可以被非技术读者策划为装饰品。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

再比如*《纽约时报》*的脸书页面,如下图截图所示。它的帖子既时髦又聪明(科学、健康、可爱的小贴士),被高度分享。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

# # # # # # # # # # # # # # # # # # # # # #

在这篇文章中,我强调了我对社交媒体的研究,尤其是脸书如何看待《波士顿环球报》的帖子。这是我第一次分析后的后续研究,重点是实证证据。解释为什么观察到各种类型的阅读和分享行为是这项研究的目的。我采用的理论和得出的结论包括:

  • 人们不断地在快速和慢速思维模式之间切换。
  • 在社交媒体上,人们大多被快速模式所引导。
  • 为了迎合快速思维模式,我们应该更好地利用形象,保持语言简单。
  • 另一方面,不要犹豫地讲述复杂的故事,因为它们可能会让人们慢慢思考,从而获得更多的反馈。
  • 如果你想鼓励讨论,请提问。
  • 如果你想让一个故事变得有对话性,用一种紧张感和一种解脱感来表现一个转折点,因为转折点会吸引注意力。
  • 如果你想看到更多的分享,考虑在故事中注入情感;积极的(敬畏和娱乐)和消极的(愤怒和焦虑)情绪都可能起作用。
  • 除了情绪,聪明也有用,因为人们试图以一种理想的方式呈现自己。在科学、健康和时尚故事方面表现出一些好的品味,他们将有更好的机会被选中。
  • 如果你的故事没有被广泛分享,而是被狂热地评论,这可能是由其中的争议引起的,因为人们珍惜社会关系,避免通过分享令人不快的故事来扰乱家人、朋友和同事。

随着我的研究的发展,这一指导方针将会持续更长时间,但我绝不把它作为新闻编辑室应该严格采用的处方,因为 1)过度使用这些策略可能会让读者疲惫不堪,2)创造力最有效。我认为,这个列表的目的是作为一个营养事实标签,帮助新闻编辑室调查为什么有些帖子会出现,而另一些则不会,因为你包括或排除了一些成分。尽管如此,这完全取决于个体社交媒体编辑来制定他们的最佳策略,以推广已经发布的新闻故事。也就是说,在我看来,在社交媒体上分享新闻故事可能比新闻更与广告相关,因为这些故事已经作为最终产品完成了。接下来是一场注意力之战,以及说服读者分享的努力。

# # # # # # # # # # # # # # # # # # # # # #

我在分析中使用的统计工具是负二项式回归来控制新闻报道的各个方面。我控制的因素是新闻部分(由波士顿环球报定义)和一天中的共享时间以及一周中的一天。在分析这三个 KPI 时,我控制了另外两个。关于省略变量的更详细的解释,请查看我以前的博客文章“独立变量、因变量和负二项式回归”中关于实证的部分:对脸书的波士顿环球报流量的原型分析。

另一个值得注意的是,脸书最近重新定义了指标,所以未来的研究可能会显示不同的数字。尽管如此,潜在的理论应该仍然适用,因为我们人类对自己的行为相当执着。

作为 Knight-Mozilla OpenNews 的研究员,我一直得到《波士顿环球报》的持续支持,他们的支持使得这项研究得以进行。我非常感谢《环球时报》的工作人员与我分享数据,因为他们的好意帮助我和许多其他新闻编辑室了解人们如何在社交媒体上阅读和分享新闻。我希望这项研究有助于确保其在网络媒体世界的领先地位,不仅通过响应性设计,还通过社交媒体的战略使用。

与《波士顿环球报》合作是一种特权,这种特权是通过 OpenNews 提供的。我无法表达丹·辛克艾丽卡·欧文斯的感激之情,他们是伙伴计划背后的人,感谢他们的信任和支持。今年太棒了!

此外,我要感谢我在密歇根州立大学的导师史蒂夫·怀尔德曼,他一直支持我的研究。丹尼尔·卡内曼的思考,快与慢,史蒂夫推荐的那本书,在这项研究中给了我很多启发。我还要感谢安·克朗罗德教授和我在 MSU 的同学黄冠雄。他们在广告和营销方面的专业知识帮助我丰富了这项研究。

原载于 2013 年 11 月 14 日 sonya2song.blogspot.com

Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档),个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的人脸识别系统 深度学习 (源码+文档)Python毕业设计-基于Python的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值