原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
DialogFlow:构建语音机器人和聊天机器人的简单方法
原文:https://towardsdatascience.com/dialogflow-a-simple-way-to-build-your-voicebots-chatbots-27949a1ac443?source=collection_archive---------31-----------------------
了解 DialogFlow 的基础知识
如今,无论是 B2B 还是 B2C,企业都在很大程度上依赖聊天机器人来实现流程自动化和减少人工工作量。有各种各样的 NLP 聊天机器人平台被聊天机器人开发公司用来构建聊天机器人,其中最好的平台之一是 DialogFlow。该平台此前名为 API.AI,2016 年被谷歌收购,更名为 DialogFlow。
DialogFlow 是谷歌旗下的自然语言处理平台,可用于构建聊天机器人和语音机器人等对话应用。这是一个由人工智能驱动的平台,提供特定用途、引人入胜的语音和基于文本的对话。人类对话的复杂性仍然是机器缺乏的艺术,但特定领域的机器人是我们能够克服这些复杂性的最接近的东西。它可以与多个平台集成,包括 Web、脸书、Slack、Twitter 和 Skype。
对话流术语:
了解 DialogFlow 的基础知识
1.代理人:
DialogFlow 代理处理与最终用户的对话流。要开始使用 DialogFlow,首先,我们需要使用 Dialogflow 控制台创建一个代理。
它是意图、实体、集成和知识的顶级容器。代理将终端用户对话期间的文本或音频转换为应用和服务可以理解的结构化数据。
2.意图:
意图用于理解和处理用户意图和上下文,以指导与最终用户的对话流程。
意图包含一些训练短语及其相应的响应。
当一个意图的训练短语与用户输入相匹配时,它就会被调用。并向最终用户提供其响应中定义的输出。如果输入有多个响应,那么响应将随机显示给用户。
如果我们有多个具有相同训练短语的意图,那么或者更高优先级的意图将匹配,或者具有活动输入上下文的意图将匹配。
意向优先级:
如果用户输入有可能与多个意图匹配,则可以设置意图优先级。具有较高优先级的意图将被调用。
回退意图:
当用户输入与任何意图都不匹配时,调用回退意图。
当我们创建一个代理时,代理中会添加两个默认意图。
欢迎意图和默认回退意图。
上下文用于理解自然语言用户上下文。也就是用户想要信息的环境。
例如:
一个人可以输入“橙色是我最喜欢的。”
现在,这种橙色可以与颜色或水果搭配。那么在这种情况下应该匹配哪个意图呢?
为了解决这个问题,在 DialogFlow 中使用了上下文。
上下文生命周期:
上下文有一个保持活动的生命周期。默认的生命周期是 5 次请求,但是可以更改。
这意味着在接下来的五个匹配的意图中,上下文将存在更长时间。
上下文有两种类型:
a)输入上下文:
只有当具有一些输入上下文的意图的所有输入上下文都是活动的时,才可以匹配该意图。
比如:
我们有两个相同的训练短语“橙色是我最喜欢的。”
但是这两种意图有不同的输入环境。一个包含颜色作为输入上下文,而另一个包含水果作为输入上下文。
输入上下文活动的意图将与用户输入相匹配。
b)输出语境:
如果具有一些输出上下文的意图与用户输入匹配,则其所有输出上下文将被激活。
例如:
用户输入“你了解颜色吗?”的颜色意图匹配
它会回答用户“你最喜欢的颜色是什么?”输出上下文“颜色”可以由意图设置为活动的。
当用户说“橙色是我的最爱”时,输入上下文“颜色”的意图将与用户输入相匹配。
4.实体:
实体用于从最终用户输入中提取一些有用的信息和参数。实体可以是系统定义的,也可以是开发人员定义的。
DialogFlow 提供了许多预定义的实体,如日期、时间、颜色、温度,称为系统实体,以处理最流行的常见概念。
然而,自定义实体也可以由开发人员根据他们的需求来定义。
从用户输入中提取的参数可以在意图之间传递,以引导对话流。
5.回应:
代理可以向最终用户提供两种类型的响应。
a)默认响应。
b)丰富的回复。
a)默认响应:
默认响应也称为平台未指定响应。这些响应是显示给最终用户的简单文本响应。这些可以用于任何平台,包括网络,脸书,松弛。
b)丰富的响应:
丰富响应也称为特定于平台的响应。丰富的响应被用来显示按钮,卡片,快速回复,通过脸书,slack 平台到用户的链接。
然而,要在 web 应用程序中使用丰富的响应,聊天机器人需要定制。
丰富的响应可以通过 DialogFlow 控制台进行配置,也可以在 webhook 响应中发送。
6。Webhook:
可以集成一个 Webhook 来给出我们的应用程序的响应。Webhook 集成很简单,可以使用履行选项来实现。可以在那里配置一个 URL,并且对于您想要调用 webhook 的意图,webhook 调用需要被设置为活动的。
结论:
DialogFlow 是一个非常简单的平台,可以用最少的编码工作构建快速聊天机器人和语音机器人。它可以很容易地处理自然语言错误,并且可以与多种平台集成。它基本上是一个工具,允许建立聊天机器人,清楚地理解人类的对话,并在用相关参数解析对话后用适当的答案回复它们。更多了解可以参考这个链接。
原载于https://www . signity solutions . com/blog/dialog flow-voice bots-chatbots/2019 年 10 月 1 日。
80 年代真的有最多的昙花一现的奇迹吗?
原文:https://towardsdatascience.com/did-the-80s-really-have-the-most-one-hit-wonders-356d3c545f43?source=collection_archive---------10-----------------------
还是看数据会偷走我们的阳光?
注意:如果你对阅读我的想法或发现不感兴趣,只想直接跳到结果,点击这里。
所以在最近的一次公路旅行中,当我们听着保罗的《T2》时,我和我的家人都在问自己这个问题。
这让我想到——当我问我的朋友、同事或街上的陌生人时,每个人似乎都同意 80 年代是昙花一现的黄金时代。但事实真的是这样吗?80 年代真的有最多的一炮走红的奇迹吗?或者这只是那些我们都认为是真的事实之一,尽管事实并非如此,就像口香糖在你的胃里呆了 7 年?
显然这是一个我们必须解决的问题——用科学!
我最初的计划是在 BigQuery 中完成这一切,因为这是我的 jam 中的类 ,但是当我开始以容易查询的形式搜索 Billboard top 100 数据时,我在 data.world 上偶然发现了这个数据集,它似乎拥有我需要的一切。所以我最后用的就是这个。
请注意,我与这家公司没有任何关系,但我喜欢他们写得很好的服务条款,这很了不起。
获得每首歌曲的最高位置
因此,第一步是获取这个数据集(每周有一行是 Billboard Hot 100 中列出的歌曲),并将其压缩为一个列表,其中包含每首歌曲在排行榜中的最高位置以及它们达到最高位置的日期。
我最初有一个关于我如何做到这一点的更详细的分解,但我将跳过它,因为坦率地说,它并不那么有趣。
现在我们已经有了一个很好的数据集,让我们问自己一个更有趣的问题…
是什么让一击成名?
我最初的想法是,如果你只有一次进入公告牌百强,你就有资格成为一个昙花一现的奇迹。这里的问题是,进入热门 100 是一个真正的“击中”的慷慨定义。
你还记得,例如,80 年代的经典"夜脉"由重影(排行榜第 92 名)?我猜不会,除非你真的是“双重影像”乐队的前成员。
It’s as if Tommy Wiseau decided to direct music videos
同样,我认为 Kajagoogoo 是他们的歌曲“太害羞”的昙花一现。但是他们的第二首歌“坚持住”达到了 78 分。从技术上来说,他们会把两连击算作奇迹吗?大概不会。如果一次成功的奇迹的定义不包括 Kajagoogoo,这可能不是一个好的定义。哦,太好了。让我们把它放在引用中。
如果一次成功的奇迹的定义不包括 Kajagoogoo,这可能不是一个好的定义。
所以我决定,一个同样简单,但可能更准确的衡量一个热门奇迹的方法是简单地找到任何一个有一首歌达到 40 或更好排名的乐队。这似乎是一个很好的截止日期,因为前 40 名是美国文化的主要组成部分。
因此,让我们列出所有只有一首热门歌曲进入前 40 名的乐队,以及他们的热门歌曲名称、年代和排名:
好吧,这看起来很有希望。
然后,当然,很容易将这些按年代分组并计数。
十年来最大的轰动奇迹(初步发现)
那么,当我把这个列表按十年分组时,我们发现了什么呢?
没错。根据我们的数据,实际上 20 世纪 80 年代的昙花一现最少,而 2000 年代的昙花一现最多。我们完事了吗?我们能不能简单的指着我们的数据,喊 Whoomp!(就是它),继续前进?
好吧,等一下,因为我想解决两个数据问题。
眨眼 182 问题
根据我们的初步调查结果,Blink-182 被认为是一个昙花一现的奇迹,因为他们的歌曲中只有一首(“所有的小事”)实际上进入了前 40 名。其他一切都徘徊在 40 到 60 岁之间。我觉得这很奇怪。
我认为这很大程度上是因为,到了 90 年代,另类音乐变得更加主流。因此,有可能有一张五次获得白金的流行朋克专辑几乎没有进入前 100 名排行榜,因为这些单曲在 Billboard 替代排行榜上获得了成功。我猜有很多乡村和 R&B 的艺术家也属于这一类。
但这一切都不能真正原谅这样一个事实,即有许多乐队在技术上被认为是基于这一定义的昙花一现,只是感觉不对。这包括威泽,奥兹·奥斯朋,梅西·埃丽奥特,贝克,拉什和柏树山。
所以我决定将我对昙花一现的定义修改为:
如果一个艺术家有一首歌进入前 25 名,但没有其他歌曲进入前 75 名,那么他就被认为是一个成功的奇迹。
这很好地解决了 Weezer、Blink-182 等不再被认为是昙花一现的奇迹。但是,最重要的是,Kajagoogoo 仍然是。
所以,做了一点工作,我就可以重新运行我的查询来查找有一首歌在前 25 名,没有其他歌在前 75 名的乐队。
这产生了一个更小的每十年一次的奇迹列表(如果你仔细想想,这是有道理的),但当你把它们都分组在一起时,你仍然会看到 80 年代的一次奇迹最少。
同样有趣的是,2000 年有着最多的轰动奇迹。这实际上给我们带来了下一个问题…
二重唱的问题,以小客串为特色
如果你浏览这些结果,你会开始注意到有许多由二重唱组成的昙花一现的奇迹。
就拿“乌木和象牙来说吧。这首歌在排行榜上排名第一,从技术上来说,这是一个成功的奇迹,因为表演者“保罗·麦卡特尼和斯蒂维·旺德”再也没有一首歌登上排行榜。《肯尼·罗杰斯与多莉·帕顿对唱》也是如此,该片发行了《群岛在流》。但我不会把这些艺术家称为昙花一现的奇迹。除非我想被永远禁止进入好莱坞。
Ohh… on second thought, I might be okay with that.
所以让我们来看看名字中有“&”、“和”或“与”的艺术家,以及名字中有“特色”的艺术家。
我们可以看到,这个问题在大多数十年中相当一致(尽管在 20 世纪 60 年代“和”艺术家有少量增加)。也就是说,直到你达到 90 年代中期。从那里开始,加速到 2000 年及以后,你会看到大量的艺术家“扮演”另一个表演者。
所以,如果我们看一下早期的结果,你会发现《50 美分》和《阿肯》都多次被认为是昙花一现的奇迹(我知道这有点多余),因为他们的每首热门歌曲都有稍微不同的艺术家名字。
Both 50 Cent and Akon shouldn’t be on my one-hit wonder list. Afroman, you can stay.
现在,我可以通过使用一个小的正则表达式魔术来解决这个问题,将任何包含单词“Featuring”的艺术家姓名减少到首先列出的表演者。这意味着“以奈特·道格为特色的 50 美分”只是被认为是“50 美分”的点击率。
这个问题伴随着那个棘手的小词“And”(或“与”符号,或其他一些变体)。在某些情况下,将这些浓缩到首先列出的执行者可能是有意义的。这意味着你可以拿“大卫·鲍依&米克·贾格尔”的《在街上跳舞》来完全归功于大卫·鲍依——不管他愿不愿意。
问题是,没有办法仅凭名字来区分一个乐队名称中碰巧有一个&符号(如“船长与坦尼尔”)和一个真正的二重唱(如“阿撒·富兰克林与乔治·迈克”)。
在大多数情况下,这没什么大不了的。你只会得到一些奇怪的乐队名字。胡蒂&河豚现在只是“胡蒂”。但是在一些情况下,你最终会把两个完全不同的波段浓缩成一个。例如,80 年代的乐队“爱与火箭”和 70 年代的乐队“爱与吻”现在都被认为是同一个名为“爱”的艺术家。
好消息是,这种情况似乎非常罕见——我只发现了少数两个完全不同的波段合并成一个波段的例子。也许如果我真的在乎,我会想办法把这些非二重唱乐队从真正的二重唱中分离出来。但那比我现在想处理的工作要多得多。我认为就目前而言,结合这些艺术家的好处超过了少量的误报
十年来最大的轰动一时的奇迹(最终结果)
也就是说,这是我对 one hit wonders 的查询,其中一个 one hit wonders 至少有一首歌进入前 25 名,但没有其他歌曲进入前 75 名,任何二重唱或歌曲“主打”别人都归功于首先列出的艺术家。
最终的统计结果是什么样的?
你可以看到二重唱和客串的结合严重减少了 2000 年代的昙花一现的数量。在 20 世纪 60 年代有所减少,但没有你想象的那么多,因为有很多艺术家的名字中带有“和”的字样。我怀疑(但无法证明)这是因为这些艺术家很少是真正的二重唱,而更多的是像“兰迪&彩虹这样的名字的乐队
昙花一现的奇迹
由于篇幅原因,我不能在这里列出所有轰动一时的奇迹,但这里列出了按十年细分的轰动一时的奇迹:60 年代, 1970 年,80 年代,90 年代,2000 年代
但在这一切之后,我们最初的结果基本上仍然成立。20 世纪 80 年代的一次性奇迹最少,而 20 世纪 60 年代仍然最多。
这就引出了我们的下一个大问题…
为什么每个人都认为 80 年代有最多的轰动一时的奇迹?
那么,如果 80 年代的昙花一现最少,为什么看起来他们最多呢?我真的不知道,但这里有一些理论:
理论 1:80 年代是我们第一次接触流行音乐的时代
也许我们都认为 80 年代是最热门的奇迹,因为那是我们最初接触流行音乐的时代。也许如果我伴随着 60 年代的音乐长大,我会回忆起“我是一个女孩观察家”,就像我现在回忆“来吧艾琳”一样。
…or maybe not. I don’t think that song aged well.
但是,正如我的朋友萨姆指出的那样,他也认为 80 年代是昙花一现的巅峰,而他在 80 年代并不活跃。这大大削弱了我的理论。也让我觉得自己真的老了。谢谢你萨姆。
理论 2:80 年代有最好的昙花一现的奇迹
因此,如果你曾经查看过“有史以来最受欢迎的单曲榜”,你会发现它们通常都是 80 年代的歌曲。会不会是 80 年代简单地创造出了更好的昙花一现的奇迹?因此,这十年与昙花一现的奇迹联系在一起,因为它有太多太棒的奇迹了?
To be fair, nobody can pull off a bagpipe solo like The Church
这里我有点怀疑。我可能把因果关系搞混了。如果我们走来走去都认为 80 年代是昙花一现的年代,那么当有人投票给我们列出最伟大的昙花一现的奇迹时,我们可能会自然而然地想到我们最喜欢的 80 年代的热门歌曲。
Photo by israel palacio on Unsplash
但仍然值得研究。显然,要客观地判断出哪一个创造的奇迹是“最好的”是很难的。但是作为一个次要特征,我们可以看看这些昙花一现的奇迹在公告牌百强榜上停留了多长时间,以及它们的顶峰有多高。如果一首歌很好(或至少令人难忘),你会希望它在排行榜上停留更长时间或达到更高的最高评级。
那么,当我们按十年细分这些统计数据时,会发生什么呢?
哼。嗯,看起来数据并不能真正支持我的理论。说到平均排名,这几十年是非常相似的。说到昙花一现的歌曲在排行榜上停留的时间更长,的确,60 年代和 70 年代的热门歌曲更短暂,但 90 年代的歌曲似乎在排行榜上停留的时间最长。
哦,如果你好奇的话,那是在最长的一段时间里排名前 100 的昙花一现的奇迹吗?邓肯·谢克的《勉强呼吸》,在排行榜上呆了整整 55 周。
Also, if you haven’t ever listened to the acoustic version of Barely Breathing, you really should.
理论三: 视频杀了电台明星
我的最后一个理论是,MTV 在某种程度上对这一切负有责任。
仔细想想,80 年代是 MTV 在音乐视频影响力上如日中天的时代。网络变得越来越受欢迎,但真人秀还没有接管,所以大多数节目是实际的音乐视频。还有(嗨,小朋友们!)这一切都发生在 YouTube 出现之前。
这意味着,与 60 年代和 70 年代不同,我们更多地注意到了一个奇迹,因为我们不仅仅是在收音机里听到它们;我们每天都在客厅里看到他们,接触到音乐背后的乐队——不仅仅是歌曲。
但与 90 年代末和 21 世纪初不同的是,看音乐视频没有其他选择,更不用说选择你要看的视频了。如果你想看音乐视频,你真的只有一个选择(好吧,如果算上 VH-1 的话是两个),而且主要是流行音乐。
所以,也许我们都记得 80 年代是昙花一现的时代的原因是因为那时它们是我们客厅的焦点,这种现象变得更加明显。然后,这一名称就流传下来并影响了后代。
It’s probably also the reason we all think A-ha was a one-hit wonder, even though they’re not (see below)
我不知道这是否正确——但这是我迄今为止最好的理论。
其他有趣的事实
有史以来最大的昙花一现的奇迹是什么?
历史上有许多伟大的昙花一现的奇迹,但谁是最昙花一现的呢?我决定列出一份艺人名单,a)有一首歌在排行榜上排名第一,但 b)再也没有另一首歌出现在前 100 名中。
他们在这里,按时间顺序排列在图表上…
不是我认为的昙花一现的乐队
有几个乐队不是昙花一现,因为他们还有其他一些我忘记的小热门:
- 阿哈有"承担 M e" (#1),但他们也有"太阳永远照在电视上 " (#20)和"狼来了 " (#50)
- 梦幻学院有北方小镇的生活,但是他们也有爱情游行
- 卡特里娜和海浪有"走在阳光下 " (#9),但他们也有"就是这样 " (#16)和"你要哭吗 " (#37)
- 大国有“在一个大国里”(#17),但他们也有“战场”(#52)
- 极端有"多于文字 " (#1),但他们也有"空洞的心 " (#4)
- 《生死时速》有“让我围着转”(#11),但他们也有“全新的情人”(# 15)
同样,有几个乐队不是昙花一现,因为他们的歌曲没有我想象的那么成功
- “视频杀死了电台明星”的 Buggles 仅在第 40 名达到顶峰
- “与你融为一体”到了现代英语顶峰才排在第 76 位
- 她又来了,洛杉矶的巅峰时期只有第 49 位(但是六便士的版本并没有变得更富有,它的巅峰时期是第 32 位,这阻止了这个乐队的昙花一现)
- 原始人的《撞车》、Semisonic 的《T2》【关门时间】、原始人电台大神的《站在破电话亭外手里拿着钱的 T4》甚至都没进热门 100 强。听到这个消息让我…沮丧,宝贝。
解释为什么 90 年代为我们提供了惊人相似的昙花一现的奇迹。“经 95 南”嗖!(就是它)”的标签团队,以及为什么后者被证明在长期内更令人难忘
我发现了这个命题的一个真正不可思议的证明,这个中等的文章太窄了,无法包含。
已经结束了,为什么不呢?
所以你去吧,伙计们;所有你想知道但又不敢问的关于一次性奇迹的事情。如果您有兴趣进一步研究数据,请继续查看该项目!也许你会发现一些我没有发现的见解。毕竟,每个人都得在某个时候学习。
让我们弄清楚——80 年代真的是一炮走红奇迹最多的十年吗?
数据世界](https://data.world/toddarooski/one-hit-wonders)
你遇到谷歌数据集搜索了吗?
原文:https://towardsdatascience.com/did-you-meet-google-dataset-search-2d04858de20f?source=collection_archive---------14-----------------------
谷歌搜索引擎搜索来自世界各地的数据集
几周前,我写了一篇文章,讲述了当开始一个新的 DS/ML 项目时,我们通常会面临的那种决定
- 话题
- 难度水平
- 项目的目标
- 我们会有观众吗?
- 时间和期限
这五点当然很重要,但除此之外,如果我们没有任何数据,我们就没有任何项目。数据为王。如果你不知道如何得到它,那么你就一无所有。除此之外,在我以前的文章中,我强调了一些你应该问自己的重要问题,关于来源、格式和必要的行动,以使自己掌握数据。
现在…如果我告诉你,有一个源,在那里你可以搜索成千上万的数据集,而且仅仅是来自世界各地的数据集,有几种格式,并且你可以很容易发现和访问?除了谷歌还有谁能提供这样的东西呢?欢迎来到数据集搜索…这不是什么新东西,但仍处于测试阶段——谷歌的数据集搜索引擎。
现在,如果你正在读这篇文章,并且在想:好吧,数据已经可以在网上获得了,这实际上并没有提供什么新的东西。公平地说,这实际上是真的。但是搜索数据可能会很麻烦,有时很难区分好的/真实的/完整的/可靠的和坏的/错误的/不完整的/不可靠的数据。这就是为什么,正如谷歌在推出该工具时所说,数据集搜索的诞生是为了方便访问网络上成千上万的数据仓库,提供对数百万数据集的访问;世界各地的地方和国家政府也发布他们的数据。
数据集搜索在移动和桌面上都可用,它已经在几种语言中工作,并且很快会有更多语言,除了搜索引擎之外,它没有任何科学。如果你知道如何使用谷歌主搜索引擎,那么你就会知道如何使用数据集搜索。只需键入您要查找的内容,Google 就会提供出版商提供的尽可能多的信息,包括:
- 源代码中下载页面的直接链接
- 谁在提供数据集
- 可用下载格式
- 涵盖的时间段
- 覆盖面积
- 测量的变量
- 以及数据集的简要描述
例如,我来自乌拉圭,所以我搜索“乌拉圭互联网渗透率”得到 37 个结果(有趣的是:自从我写了这篇文章并发表后,这个数字从 36 变成了 37)。考虑到我们谈论的是南美洲的一个小国,我个人认为这个数字相当可观。如果我们对英国进行同样的搜索,数据集搜索已经显示+100 个可用结果。
在 The Verge 不久前发表的一篇文章中,开放数据研究所的首席执行官林洋·坦尼森说:
“谷歌的参与应该有助于该项目取得成功(……)数据集搜索一直是一件难以支持的事情,我希望谷歌的介入将使它变得更容易”
当然,数据集搜索仍然有其局限性。正如你可以看到的权利时,进入它仍处于测试阶段。尽管谷歌还没有给出任何更新,但像高级搜索或过滤数据大小或列数这样的功能可能很快就会出现。
现在,如果你正在阅读这篇文章,并且你在网上某处有一个已发布的数据集,请仔细阅读下面几行:正如任何搜索引擎一样,数据集搜索将会变得越来越有用,因为人们可以获得越来越多的数据集。为此,谷歌正在遵循一种基于描述信息的开放标准(schema.org)的方法,任何发布数据的人都可以这样描述他们的数据集。此外,Google 还定义了一些标准来描述数据并使用户能够找到数据。因此,如果你想让你的数据出现在数据集搜索中,请访问谷歌关于数据集提供者指南的说明,以及开发者网站,其中也包括提问和提供反馈的链接。
以下是一些谷歌称之为数据集的例子:
- 包含一些数据的表格或 CSV 文件
- 一组有组织的桌子
- 包含数据的专有格式的文件
- 共同构成一些有意义的数据集的文件集合
- 一种其他格式的数据对象,使用特殊工具进行处理
- 图像捕捉数据
- 与机器学习相关的文件,如训练参数或神经网络结构定义
总而言之,无论你是一名经验丰富的研究人员还是像我一样热衷于数据科学家,你都应该对这一举措感到兴奋,并愿意传播消息,扩大当前可用数据集的数量。这非常好,不仅对数据科学界,而且对任何寻找数据集的人都是如此。我已经在着手发布我的一些数据,尤其是一个数据集,其中有我前段时间构建的数百名足球运动员的统计数据,当时我试图预测他们的市场价值。与此同时,请随意查看我的 GitHub 库并下载该数据,或者您可能找到的任何其他数据:)
别忘了看看我最近写的一些关于 6 个业余错误的文章,这些错误是我在使用火车测试分割、5 分钟内抓取网页或其他任何在我的个人资料中可以找到的。另外,如果你想直接在你的邮箱里收到我的最新文章,只需 订阅我的简讯 😃
jupytext——随心所欲地改变你的 Jupyter 笔记本
原文:https://towardsdatascience.com/diff-your-notebook-as-you-want-jupytext-e5df4db682f7?source=collection_archive---------13-----------------------
Jupyter 笔记本已经成为许多数据科学家的首选工具,由于能够逐个运行单元,它已经广泛用于教育。事实上,笔记本是一个巨大的 JSON 文件,这使得它很难与 git 等工具一起工作,如果你想看看 Jupyter 笔记本的输出,nbdime 是一个很好的替代选择,我在大约六个月前写了一篇关于 nbdime 的帖子。
nbdime 很棒,但是它不能很好地与像 VS Codes 和 PyCharm 这样的 ide 一起工作。如果有一个工具可以让你使用笔记本,但你可以像脚本一样不同,那该怎么办?有一个简单的解决方案——Jupytext。Jupytext 的神奇之处在于,它可以自动将您的笔记本与. py 脚本配对(您也可以与。html/。md 等……)。这是一个简单而有效的解决方案,让你享受双方的利益。这一对笔记本-脚本解锁了一些很酷的东西。
- 像笔记本一样打开一个. py 脚本
- 版本控制简单
- Jupyter 笔记本的完整 IDE 重构功能
1.像打开笔记本一样打开. py 脚本
你可以用这个命令很容易地安装 Jupytext,它会安装 Jupytext 和笔记本扩展。
pip install jupytext
You can open a py script like a .ipynb file with Jupyter notebook
如果你注意了文件名,它实际上是一个. py 文件,但是你可以把它当作一个笔记本。您可以以各种方式交互处理该文件,只是它仍然是一个. py 文件,因此输出不会缓存在脚本文件中,它只存在于您的浏览器中。
将你的笔记本与脚本配对
使用笔记本扩展,只需点击一下鼠标即可配对您的笔记本。在这里,我把我的笔记本和轻型脚本配对。如果你不在乎它是什么格式,就使用轻量级脚本。根据 Jupytext 文档,这些是当前支持的格式。
Markdown 和 R Markdown 文档,Julia,Python,R,Bash,Scheme,Clojure,Matlab,Octave,C++和 q/kdb+脚本。
File → Jupytext →Pair Notebook with script
2.版本控制很容易
它将您的笔记本与脚本配对的事实意味着,嗯,**您可以对。py 文件。**笔记本不必再添加到存储库中,只要您想要显示输出。
Simply diff the .py file instead of the .ipynb file !
3。笔记本电脑的全面重构功能
Jupytext 非常努力地想弄清楚你们配对的笔记本和脚本的变化。如果您在笔记本上进行更改,脚本将同时更新。
Sync Notebook with the script!
这是我正在做的事情的描述。
- 在 VS 代码中进行重构
- 保存脚本文件。
- 按 F5 刷新笔记本以获取新的更改
Refactor in IDE -> Refresh in Notebook and continue
结论
这是我使用 Jupytext 最常见的用例,但是它可以做更多的事情。请查看他们的 Github 页面,了解更多高级用法。Marc 自己也写了一篇关于 Jupytext 1.0 发布的博客,他在博客中详细解释了该功能。让我们对笔记本进行更多的重构。
局部响应标准化和批量标准化的区别
原文:https://towardsdatascience.com/difference-between-local-response-normalization-and-batch-normalization-272308c034ac?source=collection_archive---------2-----------------------
深度神经网络中使用的不同规范化技术的简短教程。
为什么要正常化?
归一化对于深度神经网络已经变得很重要,深度神经网络补偿某些激活函数的无界性质,例如 ReLU、eLU 等。使用这些激活函数,输出层不会被限制在一个有限的范围内(例如[-1,1]代表 tanh ),而是可以增长到训练允许的高度。为了限制无限制激活增加输出图层值,在激活函数之前使用了归一化。深度神经网络中使用了两种常见的规范化技术,并且经常被初学者误解。在本教程中,将讨论这两种规范化技术的详细解释,突出它们的主要区别。
局部响应标准化
本地响应规范化(LRN)首先在 AlexNet 架构中引入,其中使用的激活函数是 ReLU ,而不是当时更常见的 tanh 和 sigmoid 。除了上述原因,使用 LRN 的原因是为了促进*侧抑制。*它是神经生物学中的一个概念,指一个神经元降低其邻居活动的能力[1]。在 DNNs 中,这种横向抑制的目的是执行局部对比度增强,使得局部最大像素值被用作下一层的激励。
LRN 是一个不可训练层,它在局部邻域内对特征图中的像素值进行平方归一化。基于所定义的邻域,有两种类型的 LRN,如下图所示。
通道间 LRN: 这是 AlexNet paper 最初使用的。定义的邻域是穿过通道的**。对于每个(x,y)位置,归一化是在深度维度上进行的,并由以下公式给出**
LRN used in AlexNet [2]
其中 i 表示滤波器 I 的输出, a(x,y),b(x,y) 分别为归一化前后 (x,y) 位置的像素值,N 为通道总数。常数 (k,α,β,n) 是超参数。 k 用于避免任何奇点(被零除), α 用作归一化常数,而 β 是对比常数。常数 n 用于定义邻域长度,即在执行归一化时需要考虑多少个连续的像素值。( k,α,β,n)=(0,1,1,N) 的情况为标准归一化)。在上图中,当 N=4 时,N 等于 2。
让我们看一个通道间 LRN 的例子。请看下图
不同的颜色表示不同的通道,因此 N=4。假设超参数为( k,α,β,n)=(0,1,1,2)。**n = 2的值意味着在计算位置 (i,x,y) 的归一化值时,我们考虑上一个和下一个滤波器在相同位置的值,即 (i-1,x,y) 和 (i+1,x,y) 。对于 (i,x,y)=(0,0,0) 我们有值(I,x,y)=1 ,值(i-1,x,y) 不存在,值(i+,x,y)=1 。因此 normalized_value(i,x,y) = 1/( + ) = 0.5 ,可以在上图的下半部分看到。其余的标准化值以类似的方式计算。
信道内 LRN: 在信道内 LRN 中,邻域仅在同一信道内扩展,如上图所示。该公式由下式给出
其中(W,H)是特征图的宽度和高度(例如上图中的(W,H) = (8,8))。通道间和通道内 LRN 的唯一区别是归一化的邻域。在通道内 LRN 中,在所考虑的像素周围定义了 2D 邻域(与通道间的 1D 邻域相反)。例如,下图显示了在 n=2(即大小为(n+1)x(n+1)的 2D 邻域以(x,y)为中心)的 5×5 特征图上的通道内归一化。
批量标准化:
批量标准化(BN)是一个可训练层,通常用于解决 内部协变量移位(ICF)【1】的问题。 ICF 的产生是由于隐藏神经元分布的改变/激活。考虑下面这个二元分类的例子,我们需要对玫瑰和非玫瑰进行分类
Roses vs No-roses classification. The feature map plotted on the right have different distributions for two different batch sampled from the dataset [1]
假设我们已经训练了一个神经网络,现在我们从数据集中选择两个明显不同的批次进行推断(如上所示)。如果我们对这两个批次进行正向传递,并绘制隐藏层(网络深处)的特征空间,我们将看到分布的显著变化,如上图右侧所示。这称为输入神经元的 协变移位 。这在训练时有什么影响?在训练期间,如果我们选择属于不同分布的批次,那么它会减慢训练,因为对于给定的批次,它会尝试学习某个分布,而该分布对于下一批次是不同的。因此,它不断地在分布之间来回跳跃,直到它收敛。这个 协变偏移 可以通过确保一个批次内的成员不属于相同/相似的分布来减轻。这可以通过随机选择批量图像来完成。隐藏神经元也存在类似的协变量移位。即使这些批次是随机选择的,隐藏的神经元也可能最终具有某种分布,从而减慢训练速度。隐藏层的这种协变量移位称为内部协变量移位。问题是我们不能像对输入神经元那样直接控制隐藏神经元的分布,因为它会随着训练更新训练参数而不断变化。批处理规范化有助于缓解这个问题。
在批量标准化中,隐藏神经元的输出在被馈送到激活函数之前以下面的方式被处理。
- 将整批 B 标准化为零均值和单位方差
- 计算整个小批量产量的平均值: u_B
- 计算整个小批量产量的方差:s igma_B
- 通过减去平均值并除以方差来标准化小批量
2.引入两个可训练参数( Gamma: scale_variable 和 Beta: shift_variable)来缩放和移动标准化小批量输出
3.将该缩放和移位的标准化小批量馈送到激活功能。
BN 算法可以在下图中看到。
Batch Normalization Algorithm [2]
在一批所有激活中对每个像素进行归一化。考虑下图。让我们假设我们有一个 3 号的小批量。隐藏层产生大小为(C,H,W) = (4,4,4)的激活。由于批量大小是 3,我们将有 3 个这样的激活。现在,对于激活中的每个像素(即,对于每个 4x4x4=64 像素),我们将通过找到所有激活中该像素位置的平均值和方差来对其进行归一化,如下图的左部所示。一旦找到平均值和方差,我们将从每次激活中减去平均值,然后除以方差。下图的右半部分描述了这一点。减法和除法是逐点进行的。(如果你习惯 MATLAB,除法就是点分**。/** )。
步骤 2(即缩放和移位)的原因是让训练决定我们是否需要归一化。在某些情况下,不进行规范化可能会产生更好的结果。因此,BN 不是预先选择是否包括归一化层,而是让训练来决定。当 Gamma = sigma_B 和 Beta = u_B 时,不进行归一化,恢复原始激活。吴恩达在 BN 上的一个非常好的视频教程可以在这里找到
比较:
LRN 有多个方向来跨(通道间或通道内)执行归一化,另一方面,BN 只有一种执行方式(针对所有激活中的每个像素位置)。下表比较了这两种标准化技术。
参考文献:
[1]https://www . learnopencv . com/batch-normalization-in-deep-networks/
[2]约菲、谢尔盖和克里斯蒂安·塞格迪。“批量标准化:通过减少内部协变量转移加速深度网络训练.” arXiv 预印本 arXiv:1502.03167 (2015)。
奖金:
可以在下面的链接中找到这个主题和机器学习中许多其他重要主题的紧凑备忘单
ML 面试的视觉备忘单(www.cheatsheets.aqeel-anwar.com)
medium.com](https://medium.com/swlh/cheat-sheets-for-machine-learning-interview-topics-51c2bc2bab4f)
如果这篇文章对你有帮助,欢迎鼓掌、分享和回复。如果想了解更多关于机器学习和数据科学的知识,请关注我@Aqeel an war或者在LinkedIn上与我联系。
用 Python 代码解释 NFD、NFC、NFKD 和 NFKC 之间的区别
原文:https://towardsdatascience.com/difference-between-nfd-nfc-nfkd-and-nfkc-explained-with-python-code-e2631f96ae6c?source=collection_archive---------6-----------------------
Unicode 规范化形式之间的区别
Photo by Joel Filipe on Unsplash
最近我在做一个日文的 NLP 任务,其中一个问题是将特殊字符转换成标准格式。所以我做了一些调查,为有同样需求的人写了这篇文章。
日语包含不同形式的字符,例如,拉丁语有两种形式,全角形式和半角形式。
在上面的例子中,我们可以看到全幅形式是非常丑陋的,也很难利用后续的处理。所以我们需要把它转换成规范化的形式。
TL;速度三角形定位法(dead reckoning)
使用NFKC
方法。
>>> from unicodedata import normalize
>>> s = "株式会社KADOKAWA Future Publishing"
>>> normalize('NFKC', s)
株式会社 KADOKAWA Future Publishing
Unicode 规范化形式
from Wikipedia
有 4 种 Unicode 规范化形式。这篇文章给出了非常详细的解释。但我会用一种简单易懂的方式解释其中的区别。
首先,我们可以看到下面的结果以获得直观的理解。
アイウエオ ==(NFC)==> アイウエオ
アイウエオ ==(NFD)==> アイウエオ
アイウエオ ==(NFKC)==> アイウエオ
アイウエオ ==(NFKD)==> アイウエオ
パピプペポ ==(NFC)==> パピプペポ
パピプペポ ==(NFD)==> パピプペポ
パピプペポ ==(NFKC)==> パピプペポ
パピプペポ ==(NFKD)==> パピプペポ
パピプペポ ==(NFC)==> パピプペポ
パピプペポ ==(NFD)==> パピプペポ
パピプペポ ==(NFKC)==> パピプペポ
パピプペポ ==(NFKD)==> パピプペポ
abcABC ==(NFC)==> abcABC
abcABC ==(NFD)==> abcABC
abcABC ==(NFKC)==> abcABC
abcABC ==(NFKD)==> abcABC
123 ==(NFC)==> 123
123 ==(NFD)==> 123
123 ==(NFKC)==> 123
123 ==(NFKD)==> 123
+-.~)} ==(NFC)==> +-.~)}
+-.~)} ==(NFD)==> +-.~)}
+-.~)} ==(NFKC)==> +-.~)}
+-.~)} ==(NFKD)==> +-.~)}
这 4 种形式有两种分类方法。
# 1 original form changed or not
- A(not changed): NFC & NFD
- B(changed): NFKC & NFKD# 2 the length of original length changed or not
- A(not changed): NFC & NFKC
- B(changed): NFD & NFKD
1 .是否改变了原来的形式
abcABC ==(NFC)==> abcABC
abcABC ==(NFD)==> abcABC
abcABC ==(NFKC)==> abcABC
abcABC ==(NFKD)==> abcABC# 1 original form changed or not
- A(not changed): NFC & NFD
- B(changed): NFKC & NFKD
第一种分类方法是基于原始形式是否改变。更具体地说,A 组不包含K
,但是 B 组包含K
。K
是什么意思?
D = Decomposition
C = Composition
K = Compatibility
K
意为兼容,用来与原始形态相区别。因为K
改变了原来的形式,所以长度也改变了。
>>> s= '…'
>>> normalize('NFKC', s)
'...'>>> len(s)
1
>>> len(normalize('NFC', s))
1
>>> len(normalize('NFKC', s))
3
>>> len(normalize('NFD', s))
1
>>> len(normalize('NFKD', s))
3
2 原始形式的长度是否改变
パピプペポ ==(NFC)==> パピプペポ
パピプペポ ==(NFD)==> パピプペポ
パピプペポ ==(NFKC)==> パピプペポ
パピプペポ ==(NFKD)==> パピプペポ# 2 the length of original length changed or not
- A(not changed): NFC & NFKC
- B(changed): NFD & NFKD
第二种分类方法是基于原始格式的长度是否改变。一组包含C
(构图),不会改变长度。b 组包含D
(分解),会改变长度。
你可能想知道为什么长度是变化的?请看下面的测试。
>>> from unicodedata import normalize
>>> s = "パピプペポ"
>>> len(s)
5
>>> len(normalize('NFC', s))
5
>>> len(normalize('NFKC', s))
5
>>> len(normalize('NFD', s))
10
>>> len(normalize('NFKD', s))
10
我们可以发现“分解”法使长度加倍。
from Unicode 正規化とは
这是因为NFD & NFKD
将每个 Unicode 字符分解成两个 Unicode 字符。比如ポ(U+30DD) = ホ(U+30DB) + Dot(U+309A)
。所以长度从 5 变到 10。NFC & NFKC
将分开的 Unicode 字符组合在一起,因此长度不变。
Python 实现
您可以使用 unicodedata 库获得不同的表单。
>>> from unicodedata import normalize
>>> s = "パピプペポ"
>>> len(s)
5
>>> len(normalize('NFC', s))
5
>>> len(normalize('NFKC', s))
5
>>> len(normalize('NFD', s))
10
>>> len(normalize('NFKD', s))
10
长度
拿走
通常,我们可以使用NFKC or NFKD
中的任何一个来获得规范化形式。只有当你的 NLP 任务对长度敏感时,长度才不会带来麻烦。我一般用NFKC
的方法。
查看我的其他帖子 中等 同 一分类查看 !
GitHub:bramble Xu LinkedIn:徐亮 博客:bramble Xu
参考
- https://unicode.org/reports/tr15/#Norm_Forms
- https://www . wiki wand . com/en/Unicode _ equivalence #/Normal _ forms
- http://nomenclator.la.coocan.jp/unicode/normalization.htm
- https://maku77.github.io/js/string/normalize.html
- http://tech.albert2005.co.jp/501/
套索、脊和漏失正则化—它们对共线性的影响
原文:https://towardsdatascience.com/different-forms-of-regularization-and-their-effects-6a714f156521?source=collection_archive---------11-----------------------
介绍
这是我上一篇业余的、晦涩的文章的续篇——关于正规化的简短说明。这篇文章提供了它所承诺的东西,但它不足以回答这些问题——正则化做了什么,为什么它可以工作,而相应的没有正则化的模型却不能?本文的目的是试图用线性代数(正规方程)和统计学(估计量的偏差-方差权衡)来回答这些问题。
让我们假设感兴趣的隐藏层的工程变量为 X 或 X,这是输入特征 Z 或 Z 的函数。在本文中,我们假设截距为 0,因为在一般情况下截距不会缩小。为简单起见,我们将导出线性回归的分析结果并将结果推广到逻辑回归,假设 真实模型在(工程)特征的空间中是线性的 。
重要
Collinearity problem in linear regression. Image source: https://medium.com/@rrfd/what-is-ridge-regression-applications-in-python-6ed3acbb2aaf
我有意以机器学习中正则化的重要性开始这篇文章。这一部分可能含义模糊;本文的其余部分将从头开始构建思路,试图理解这些模糊的陈述。
- 沿着具有 h 个神经元的全连接隐藏层对深度神经网络进行切片,得到具有 h 个特征的更小的下游神经网络
- 如果上面选择的隐藏层是输出层之前的层,则生成的神经网络相当于逻辑回归
- 可以应用于线性/逻辑回归的简单线性代数可以扩展到深度神经网络,该深度神经网络在完全连接的隐藏层被切片
线性回归
模型定义
True model, unknown
估计的
Estimated
损失函数
Square loss in terms of matrix product
解决办法
ML / OLS estimate for coefficients
阅读:线性回归中极大似然估计和 OLS 的等价性
解析
Normal equation — MLE by analytical method
L2 正则化线性回归
模型定义
True model, unknown
估计的
Estimated
损失函数
Loss in terms of matrix product
解决办法
Solution
解析
Ridge estimate using analytical method
理解差异
考虑一种设计矩阵不是满秩的情况(我上一篇文章中定义的几种情况:正则化的简短说明)。因此协方差矩阵是不可逆的。因此,MLE 不存在。
在这种情况下,考虑两种极端情况:λ = 0 和λ = ∞
Case 1
Case 2
在这两种极端情况之间,修正的协方差矩阵由下式给出
Modified covariance matrix for ridge regresion
将随着λ的增加而成为对角优势。所以保证是可逆的。这证明了即使设计矩阵不是满秩的,非零λ的岭估计总是存在的(在这篇 StackExchange 文章中提供了严格的证明)。
因此,我们得出结论,使用 L2 正则化解决了共线性问题。与岭回归不同,Lasso (L1 正则化)回归没有解析解。在存在共线性的情况下,预计其行为类似于岭回归。Lasso 回归也是随着λ(小于∞)的增大,将变量的系数收缩到 0 来进行剪枝,这在 ridge 中是观察不到的(lasso 对剪枝的严谨分析可以在我的 Quora 答案上找到)。为方便起见,L1 正则化线性回归公式如下所示:
L1 正则化线性回归
模型定义
True model, unknown
估计的
Estimated
损失函数
Loss in terms of independent variables
解决办法
Solution
我们假设 lasso 的行为在协方差矩阵的可逆性方面类似于 ridge 的行为(严格的分析可以在这篇论文 —第 5 页中找到,也解释了使用坐标下降的原因)。lasso 的解析解不存在,除了一个简单的情况-当协方差矩阵是对角矩阵时。
**对角协方差注意:**参数估计变得类似于轮廓似然性——在一次坐标下降迭代中所选β的变化不会影响其他β。因此,坐标下降在一次迭代中收敛。
注意:我将在两篇独立的文章中用几何解释以更严格的方式讨论 L1 和 L2 正则化。
拒绝传统社会的人
辍学通常被视为调整神经网络的一种实用方式。很难以完全分析的方式处理辍学问题,因为:
- 它涉及到一些随机化—只有期望值是已知的,实际上各个实现会根据种子而变化
- 对(随机)梯度下降的每个样品/小批量/批量进行测试
该模型可以被视为:
Masking variables in X at random; excluding intercept/bias
Linear regression on M vs y
在实践中,为了避免权重之间的相关性,已经使用了丢弃。实际上,这是通过随机化掩码来实现的,从而减少变量的同现。理论上,当相应的预测值相关时,权重是相关的。因此,使用压差进行掩蔽有助于减少过拟合。
把东西放在一起
让我们在输出层之前选择隐藏层。对于 h << n (sample size) we observe that the problem of overfitting occurs when variables are collinear. L2 regularization explicitly removes the effect of collinearity by modifying the covariance matrix; L1 regularization affects the covariance matrix indirectly. Dropout affects the covariance between the weights by sampling from the set of features and masking the features that are not chosen (similar to random forest) during each update based on gradients.
Conclusion
Linear models and deep neural networks are related through linear algebra. Over determined systems (number of predictors >个样本)和共线系统(秩< number of predictors) lead to unstable solutions and overfitting that can be resolved using regularization. The 3 most common forms of regularization — ridge, lasso and droupout — reduce overfitting by reducing the collinearity among predictors (or hidden layer in deep neural networks). But it is important to note that collinearity is not the only cause of overfitting. There are other forms of regularization that penalize the curvature in each dimension (check smoothing splines).
A more rigorous analysis with geometric interpretation of ridge and lasso will be published in the future.
Further reading
Research paper: 通过去相关表示减少深度神经网络中的过拟合
研究论文:用基于集成的去相关方法正则化深度神经网络
相关研究论文:神经网络解释和对称破缺的权重集去相关训练算法
相关研究论文:多层感知器网络剪枝的去相关方法
将单词表示为向量的不同技术(单词嵌入)
原文:https://towardsdatascience.com/different-techniques-to-represent-words-as-vectors-word-embeddings-3e4b9ab7ceb4?source=collection_archive---------4-----------------------
从计数矢量器到 Word2Vec
Photo by Romain Vignes on Unsplash
目前,我正在做一个 Twitter 情感分析项目。在阅读如何向我的神经网络输入文本时,我发现我必须将每条推文的文本转换成指定长度的向量。这将允许神经网络对推文进行训练,并正确地学习情感分类。
因此,我简要地分析了将文本转换成向量的各种方法——通常称为单词嵌入。
单词嵌入是自然语言处理(NLP)中一套语言建模和特征学习技术的统称,其中词汇表中的单词或短语被映射到实数向量。— 维基百科
在本文中,我将探索以下单词嵌入技术:
- 计数矢量器
- TF-IDF 矢量器
- 哈希矢量器
- Word2Vec
示例文本数据
我正在创造 4 个句子,我们将在上面应用这些技术并理解它们是如何工作的。对于每种技术,我将只使用小写单词。
计数矢量器
Photo by Steve Johnson on Unsplash
将文本转换为矢量的最基本方法是通过计数矢量器。
步骤 1: 在完整的文本数据中识别唯一的单词。在我们的例子中,列表如下(17 个单词):
['ended', 'everyone', 'field', 'football', 'game', 'he', 'in', 'is', 'it', 'playing', 'raining', 'running', 'started', 'the', 'towards', 'was', 'while']
步骤 2: 对于每个句子,我们将创建一个长度与上面(17)相同的零数组
第三步:一次看一个句子,我们将阅读第一个单词,找出它在句子中的总出现次数。一旦我们知道了这个词在句子中出现的次数,我们就可以确定这个词在上面列表中的位置,并在那个位置用这个计数替换同一个零。对所有的单词和句子重复这一过程
例子
就拿第一句话来说吧, 他在打野战。 其向量为[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
。
第一个词是He
。它在句子中的总数是 1。还有,在上面的单词列表中,它的位置是从开始算起的第 6 位(都是小写)。我将更新它的向量,现在它将是:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
考虑第二个词,也就是is
,向量变成:
[0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
类似地,我也将更新其余的单词,第一句话的向量表示将是:
[0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0]
同样的情况也会在其他句子中重复出现。
密码
sklearn
提供了 CountVectorizer()方法来创建这些单词嵌入。导入包后,我们只需要在完整的句子列表上应用fit_transform()
,就可以得到每个句子的向量数组。
上述要点中的输出显示了每个句子的向量表示。
TF-IDF 矢量器
Photo by Devin Avery on Unsplash
虽然计数矢量器将每个句子转换成它自己的矢量,但它不考虑单词在整个句子列表中的重要性。例如,He
出现在两个句子中,它不能提供区分这两个句子的有用信息。因此,它在句子的整个向量中应该具有较低的权重。这就是 TF-IDF 矢量器的用武之地。
TF-IDF 由两部分组成:
- TF(词频) —定义为一个词在给定句子中出现的次数。
- IDF(逆文档频率) —它被定义为总文档数除以单词出现的文档数的以 e 为底的对数。
步骤 1: 识别完整文本数据中的唯一单词。在我们的例子中,列表如下(17 个单词):
['ended', 'everyone', 'field', 'football', 'game', 'he', 'in', 'is', 'it', 'playing', 'raining', 'running', 'started', 'the', 'towards', 'was', 'while']
步骤 2: 对于每个句子,我们将创建一个长度与上面(17)相同的零数组
步骤 3: 对于每个句子中的每个单词,我们将计算 TF-IDF 值,并更新该句子的向量中的相应值
例子
我们将首先为所有句子组合中的所有 17 个唯一单词定义一个零数组。
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我就拿第一句的he
这个词, 他在打野战 为它申请 TF-IDF。然后,该值将在句子的数组中更新,并对所有单词重复。
Total documents (N): 4
Documents in which the word appears (n): 2
Number of times the word appears in the first sentence: 1
Number of words in the first sentence: 6Term Frequency(TF) = 1Inverse Document Frequency(IDF) = log(N/n)
= log(4/2)
= log(2)TF-IDF value = 1 * log(2)
= 0.69314718
更新的向量:
[0, 0, 0, 0, 0, 0.69314718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
对于所有其他单词,情况也是如此。但是,有些库可能使用不同的方法来计算该值。例如,sklearn
,计算逆文档频率为:
IDF = (log(N/n)) + 1
因此,TF-IDF 值为:
TF-IDF value = 1 * (log(4/2) + 1)
= 1 * (log(2) + 1)
= 1.69314718
重复时,该过程将第一句的向量表示为:
[0, 0, 1.69314718, 0, 0, 1.69314718, 1.69314718, 1.69314718, 0, 1.69314718, 0, 0, 0, 1, 0, 0, 0]
密码
sklearn
提供了计算 TF-IDF 值的方法TfidfVectorizer
。但是,它对其应用了l2
规范化,我会忽略使用标志值None
并保持smooth_idf
标志为假,因此上面的方法被它用于 IDF 计算。
上述要点中的输出显示了每个句子的向量表示。
哈希矢量器
Photo by Nick Hillier on Unsplash
这个矢量器非常有用,因为它允许我们将任何单词转换成它的散列,并且不需要生成任何词汇。
**第一步:**定义为每个句子创建的向量的大小
步骤 2: 对句子应用哈希算法(比如 MurmurHash)
步骤 3: 对所有句子重复步骤 2
密码
由于这个过程只是一个散列函数的应用,我们可以简单地看一下代码。我将使用来自sklearn
的HashingVectorizer
方法。将规范化设置为“无”会将其删除。鉴于以上讨论的两种矢量化技术,我们在每个矢量中都有 17 列,我也将这里的要素数量设置为 17。
这将生成必要的散列值向量。
Word2Vec
Photo by Mahesh Ranaweera on Unsplash
这些是一组神经网络模型,其目的是在向量空间中表示单词。这些模型在理解语境和词与词之间的关系方面是高效的。相似的单词在向量空间中被放置得很近,而不相似的单词被放置得很远。
描述单词是如此令人惊奇,它甚至能够识别关键关系,例如:
King - Man + Woman = Queen
它能够解释男人对于国王,女人对于王后的意义。通过这些模型可以确定各自的关系。
该课程有两种模式:
- **CBOW(连续单词包)😗*神经网络查看周围的单词(比如左边 2 个和右边 2 个),并预测中间的单词
- **跳跃图:**神经网络接受一个单词,然后尝试预测周围的单词
神经网络有一个输入层、一个隐藏层和一个输出层,用于对数据进行训练和构建向量。由于这是神经网络如何工作的基本功能,我将跳过一步一步的过程。
密码
为了实现word2vec
模型,我将使用gensim
库,它提供了模型中的许多特性,比如找出奇怪的一个,最相似的单词等等。然而,它没有小写/标记句子,所以我也这样做了。然后将标记化的句子传递给模型。我已经将 vector 的size
设置为 2,window
设置为 3,这定义了要查看的距离,sg
= 0 使用 CBOW 模型。
我用most_similar
的方法找到所有和football
这个词相似的词,然后打印出最相似的。对于不同的培训,我们会得到不同的结果,但在我尝试的最后一个案例中,我得到了最相似的单词game
。这里的数据集只有 4 个句子。如果我们同样增加,神经网络将能够更好地找到关系。
结论
我们找到了。我们已经了解了单词嵌入的 4 种方式,以及如何使用代码来实现这一点。如果你有任何想法,想法和建议,请分享并告诉我。感谢阅读!
Pytorch 神经网络的不同类型正则化
原文:https://towardsdatascience.com/different-types-of-regularization-on-neuronal-network-with-pytorch-a9d6faf4793e?source=collection_archive---------14-----------------------
py torch 中正则化工具的实现
Image by Gerd Altmann from Pixabay
我在做一些关于神经元网络框架中的稀疏性的研究,我看到了文章“ 深度神经网络的组稀疏正则化 ”。本文解决了同时优化(I)神经网络的权重,(ii)每个隐藏层的神经元数量,以及(iii)活动输入特征子集(即特征选择)的挑战性任务。他们基本上提出了在神经元网络的正则化框架中整合套索惩罚。关于正规化的定义和重要性,有大量的帖子和广泛的研究。比如这些帖子【1】**【2】都是对正规化的快速介绍。****
为了重现深度神经网络中的实验,我决定使用众所周知的深度学习框架 PyTorch 来构建我的项目。据 Medium 称,这是第第四最佳深度学习框架。它在学术层面越来越受欢迎,因为它易于模块化,比大多数竞争对手更快地测试新想法。****
**我意识到没有这样的工具可以做任何类型的正则化,除非 L2 正则化。在 pyTorch 中,L2 是在优化器的“权重衰减选项中实现的,不同于 千层面 (另一个深度学习框架),在其内置实现中提供了 L1 和 L2 正则化。您可以找到许多 建议的解决方案 解释如何使用 pyTorch 框架实现 L1 正则化,但是没有简单的实现工具来插入您的实验。
为了弥补这种缺失,我决定使用 pyTorch 框架构建一些“随时可用”的正则化对象。实现可以在 这里找到 。我实现了 L1 正则化、经典 L2 正则化、 ElasticNet 正则化(L1 + L2)、 GroupLasso 正则化和一个更具限制性的惩罚 SparseGroupLasso ,这是在组稀疏正则化中为深度神经网络引入的。**
类对象被构建为将 pyTorch 模型作为参数。我们可以对特定的参数权重或模型中每一层的所有权重应用正则化惩罚。
Base model of regularizer object
Example of implementation of the L1 regularizer
我将这些实现应用于完全连接的神经元网络。这是最简单的模型架构,用于查看不同类型的正则化对模型性能的影响。
像最初的文章一样,我在代表图像分类问题的数字数据集上测试了实现。它由从几十个不同的人那里收集的 1797 个 8 × 8 的手写数字灰度图像组成。我使用了一个简单的全连接神经网络,它有两个隐藏层,分别有 40 和 20 个神经元。
Results Performances with different type of regularization applied to the simple FC model
从结果可以看出, L2 正则化模型和权重衰减正则化模型在测试集上具有相同的性能。这很好,也是我们所期望的,因为重量衰减是 pyTorch 已经提出的 L2 实现。较稀疏的方法(L1 正则化和 GL 正则化模型)也表现得相当好,但它们并不比权重衰减正则化模型更好。我们现在可以看看模型的真正稀疏性。为了对此进行研究,我们将绝对值低于 10e-3 的权重设置为 0。然后我们分析了每个模型中神经元的所有稀疏百分比。稀疏度百分比的计算方法是,取所有权重总和为 0 的神经元的数量,并将该数量除以每层的大小。正如所料, L1 正则化模型比 L2 正则化模型具有更稀疏的密度。但是在这种情况下,性能仍然很好。有时候,太多的稀疏对模型也不好。
总之,我提供了一个不同类型正则化选项的内置和自适应实现。我在 Digits 数据集上的一个更简单的全连接模型上测试了所有正则化,以查看不同正则化之间的性能。我们可以看到稀疏性在这些情况下仍然可以很好地执行任务。下一步是看看我们如何将 pyTorchReg 模块扩展到其他模型架构。
用 fastai 寻找 RNN 的差异化建筑
原文:https://towardsdatascience.com/differentiable-architecture-search-for-rnn-with-fastai-a5e247aeb937?source=collection_archive---------29-----------------------
刘韩啸等人提出的可微分结构搜索( DARTS )是一种使神经网络结构设计过程自动化的算法。它最初是在纯 pytorch 中实现的。这篇文章触及了飞镖背后的关键思想,并展示了我如何使用 fastai 重新实现飞镖,以达到清晰和易用的目的。
代码在https://github.com/tinhb92/rnn_darts_fastai。
飞镖
Overview of DARTS — from the paper
使用 AWD-LSTM 作为主干,目标是找到一个好的 rnn 单元来填充模型的“递归”部分(RNNModel.rnns)。尝试不同的配置以最终提取最合适的 rnn 小区。
DARTS Algorithm — from the paper
我们来解释一下算法:
- train_search:搜索好的 rnn 细胞基因型
- 训练:导出基因型,训练其收敛并在测试集上评估
第一部分,搜索好的 rnn 细胞基因型,包括连续松弛(即创建混合操作)和使用梯度下降交替更新架构α和权重θ
在 rnn 单元的一个节点上,我们不仅仅使用 1 运算 (tanh,sigmoid …),而是应用几个运算,并获得这些运算的加权和。实验中有 5 种运算 : none,tanh,relu,sigmoid,identity。在每个节点给予这些 5 操作中的每一个的权重是可学习的参数。
在 Pytorch 中,我们使用 torch.rand() 对此进行初始化,并设置 requires_grad = True 。作者称此为α/架构参数以区别于θ/网络的正常参数。更新θ需要通常的向前和向后传递。
α的梯度在论文的等式(7)中描述:
Eq (7) in paper: Gradient for alpha
“ω”表示一步向前模型的权重。
ω’
等式(7)的第一部分通过使用ω’对验证数据进行 1 次正向和 1 次反向传递来计算。等式(7)的第二部分使用有限差分近似来计算:
Finite difference approximation
ω+和ω-定义为:
ω+ and ω-
评估有限差分只需要对权重进行 2 次向前传递,对α进行 2 次向后传递。复杂度从 O(|α| |θ|)降低到 O(|α|+|θ|)。
训练后,我们选择概率最高的操作(忽略无)将连续松弛转换为单元的 1 个离散规格。然后,这种基因型被训练收敛并在测试集上进行评估
用 fastai 实现
在最初的实现中, train_seach 和 train 这两个阶段的训练循环用纯 pytorch 编码。如果循环不太复杂,这是没问题的,但是它会很快变得混乱,使代码难以破译。fastai 已经开发了一个回调 系统来将训练循环的组件归类为独立的部分,以保持清晰。
callbacks at a glance — thanks to Jeremy’s tweet — full notebook
您可以指定在训练的每个阶段做什么:on_train_begin、on_epoch_begin、on_batch_begin、on_loss_begin …等等,而不会弄乱代码。阅读文档了解更多信息!
在最初的实现之后,我还有 DartsCell、DartsRnn 模块(用于 train 阶段)和它们各自的子类 DartsCellSearch、DartsRnnSearch(用于 train_search 阶段)。不同的是,为了便于理解,其他有趣的附加组件被放入它们自己的回调中。
train search loop — link
上面的大 train_search 循环被一个带回调的学习者所取代,在回调中你可以快速看到所需内容的概述。
learner with callbacks — link
Train_search 有自己的 ArchParamUpdate 回调函数,上面提到的更新 alpha/architecture 参数的所有逻辑都存储在那里。
alpha(代码中的 arch_p)的优化器(arch_opt)是这个回调的一部分。
类似地,训练阶段有一个单独回调来触发 ASGD 优化器,且触发条件在回调中,与训练循环分开。 train 和 train_search 共享的其他任务如正规化、隐藏初始化、保存、恢复训练也有各自的回调。
更多细节,你可以查看我的代码并运行提供的笔记本。
可微智能体学习解决囚犯开关之谜
原文:https://towardsdatascience.com/differentiable-inter-agent-learning-to-solve-the-prisoners-switch-riddle-6b03f14ded7d?source=collection_archive---------24-----------------------
跨代理反向传播梯度以学习消息传递协议
强化学习是一个热门的研究领域。这主要是因为它旨在模拟那些看起来难以处理的系统。从 Deepmind 著名的 Atari 论文开始,我们已经走了很远。以下帖子来自我从以下文章中了解到的内容:
https://arxiv.org/pdf/1605.06676.pdf
强化学习中一个有趣的研究途径是交流代理:一种代理可以互相发送消息以进行合作的设置。通信必不可少的一个好例子是每个代理只能部分观察到的环境,而代理需要更多的信息来合作完成任务。这些代理必须相互传递有意义的消息,其中“有意义”代表与它们自己的环境或它们将要采取的行动相关的有用信息有某种关联。
这样一个传递消息的环境将有一些重要的要求。考虑一个代理 A 发送消息 m 给另一个代理 b。他们开发的用于通信的协议,正如他们所了解的,将必须具有某些属性。
- 给定系统的架构,这个消息协议应该是最佳的。一个代理人互相发送随机向量的系统显然是没有用的。这些被交换的向量( m )必须包含丰富的信息
- A 发出的信息必须被 B 理解
考虑到我们有多个代理,我们可以采用以下选项(甚至可能是中途退出):
- 参数共享:为所有代理获取一组公共参数。也就是说,对所有代理使用单个网络,但是在执行期间单独使用这些参数,每个代理将自己的观察和接收的消息插入到网络中。这种方法通常更稳定且易于学习,因为如果提取了有用的特征,这些特征将用于所有代理。它们不必单独学习。
- 没有参数共享:对每个网络使用不同的权重,让它们独立学习特征。这比前一个选项更不稳定。
一个早期设计的算法是 RIAL。RIAL 背后的思想很简单:只需在每个代理的动作选择器中提供消息作为动作选择。该消息被传递给其他代理。就这样。每个代理都单独接受培训。该框架遵循分散执行以及参数的独立更新,即梯度独立地通过每个代理并被更新。它们不会端到端地通过多个代理。
这种不通过多个代理传递梯度的实践在几个方面受到限制。很难找到最佳策略,因为消息类似于行动选择。
然后是拨(差分内部代理学习)。让我们为每个代理中的专用消息引入一个输出。添加与其他代理发送的消息相对应的输入。使用这个框架,在训练时,将所有网络与每一步连接在一起,并让梯度端到端地流过所有代理,同时最小化损失函数(这是我们从贝尔曼方程得到的通常的 Q 学习损失函数)。我们最终得到的是一个交换消息的最佳协议。在训练时,每个代理学习构建有意义的消息,并理解其他代理给出的消息。这种设置遵循集中学习和分散执行。每个代理在执行时在环境中单独行动,但在训练阶段一起学习。
Source: https://arxiv.org/pdf/1605.06676.pdf
这里需要注意的一点是,每条消息可以是离散的,也可以是连续的。问题定义可能会施加限制,只允许传递离散消息,如一位消息。我们如何将消息离散化?让我们介绍一个被称为 **DRU(离散化/正则化单元)**的单元,定义为:
我们将通过这个单元传递消息,而不是直接将消息从一个代理插入到另一个代理。由于噪声,该单元可以离散化消息。当我们在训练期间添加噪声时,我们迫使消息( m )朝向决策边界的最右边或最左边,以便添加噪声不会影响消息所在的一侧(即,正面或负面)。
让我们尝试实现这一点。考虑一下百名囚犯之谜。我直接引用论文中的谜语陈述:
一百名囚犯刚刚被带进监狱。典狱长告诉他们,从明天开始,他们每个人都将被安置在一个隔离的牢房里,彼此之间无法交流。每天,典狱长会统一随机选择一名囚犯替换,并把他放在一个中央审讯室,里面只有一个带拨动开关的灯泡。囚犯将能够观察到灯泡的当前状态。如果他愿意,他可以打开灯泡。他还可以选择宣布他认为所有的囚犯都在某个时间点参观过审讯室。如果这个公告是真的,那么所有的囚犯都被释放,但如果是假的,所有的囚犯都被处决。典狱长离开了,囚犯们聚在一起讨论他们的命运。他们能就保证他们自由的协议达成一致吗
显然,解决方案必须将信息编码到随时间变化的转换模式中,而且很可能需要无限多的步骤来执行。
现在让我们来解开这个谜。我们将使用 TensorFlow,特别是 2.0。我们将不得不为少数囚犯解决这个问题,例如 3 或 4 个,因为策略空间随着代理的数量呈指数增长。这个问题可以建模为每天从他们的牢房中随机选择囚犯,并允许他们向下一个囚犯传递 1 位信息。这个一位囚徒就是灯泡的状态。因此,房间中的囚犯从前一个囚犯处接收 1 位(如果是第一个囚犯,则为随机位),并被允许向下一个囚犯发送一位。记下天数,并用这一位发送给下一个囚犯,他们将不得不解决这个问题。
对于这篇文章,请参考我的实现。
环境
参考类 Jail ,它实现了我们将要使用的环境。每一步都随机选择囚犯。可以通过调用 step()方法来执行操作。采取“申报”行动时,根据申报正确与否,给予每个犯人 0.5 或-0.5 的奖励。
定义 DRU
以下代码片段显示了 DRU 的定义,该定义将仅在训练阶段中使用**(我已经为测试直接进行了离散化)😗*
代理网络
播放一集
现在核心部分。首先是一些重要的变量和初始化:
使用这些,让我们运行一个循环,直到我们没有完成:
第一部分通过代理运行消息。如果代理在房间中,则当前灯泡状态被给予代理,否则,DUMMY_MESSAGE 指示代理在其房间中,并且一天过去了。在不知道一天已经过去的情况下,代理将无法跟踪时间,当我们推送这个 DUMMY_MESSAGE 时,时间会被编码到 GRU 的隐藏状态中。我们将所有有用的变量记录到列表中,这样我们以后可以简单地通过迭代它们来计算损失。使用相同的、熟悉的、著名的贝尔曼方程计算目标,在损失函数中给出一项:
Link: https://i.stack.imgur.com/XBsvH.png
请注意,主 Q 网络和目标 Q 网络使用的协议会略有不同,因此我们也必须通过目标网络传递一组不同的消息,以便使用此更新规则。目标网络给出的 Q 值只有在我们让它们遵循之前设计的协议时才有意义。
主训练循环
想播多久就播多久。在一个 tf 下。GradientTape()对象,调用 play_episode 方法。然后,我们简单地计算梯度并更新权重,这是通常的做法。
请注意,我不得不从这些片段中删除一些细节来展示这个想法。您可以在实现中获得所有这些细节。一个重要的细节是,在上面的循环中,我们必须运行测试循环,其中我们使用离散消息 DRU,没有探索(没有随机动作选择)。它们反映了该系统运行得有多好。我们还必须更新目标网络,建议间隔为 100 集,如本文所述。
微分编程—逆向图形自动编码器
原文:https://towardsdatascience.com/differentiable-programming-inverse-graphics-autoencoder-e1b0fabe67bf?source=collection_archive---------16-----------------------
编程的未来是向量化的、可逆的和可微分的
介绍
深度学习分类器、LSTM、YOLO 检测器、变分自动编码器、甘——这些家伙是真正意义上的元程序架构,还是只是关于如何解决特定优化问题的想法的明智实现?机器学习工程师实际上是决策系统的开发人员,还是仅仅是具有预定义参数化优化程序的支持 GPU 的计算机的操作员?可微分编程可以回答这些问题和其他一些问题,如解释模型和停止使用蛮力端到端 DNNs 加热我们的星球。数据科学家已经做了大量定制编程,在将数据传递到标准神经网络块或堆叠模型以获得更好的结果之前,对数据进行清理、过滤和标准化。现在是时候做自定义编程后的标准神经网络块和这个编程必须是可微分的。
想法
让我们考虑使用 MNIST (EMNIST)的手写字符识别。经典的方法是标记数千个样本,并让它们通过卷积或密集神经网络。结果将是一些可以预测字母的模型。这种有监督的方法需要标记大量数据(有半监督的方法,如主动学习https://towards data science . com/Active-Learning-on-mnist-saving-on-labeling-f 3971994 C7 ba可以减少标记工作),它创建了一个无法解释数据本身和结果的模型。只有以相同的方式识别相同的分布式数据才有意义
如果我们勇敢地离开监督学习的安全港,使用 AutoEncoder 通过自回归来学习嵌入空间,我们会发现我们不是在标记数据,而是在检查 Z 空间中隐藏的特征和见解。这个过程的真正结果不是再现的图像,而是学习的嵌入,这些嵌入可以被聚类并用于识别、特征解释和操作。但是我们仍然不能使用自动编码器的瓶颈来将其连接到数据转换管道,因为所学习的特征可以是线条粗细和角度的组合。每次我们重新训练模型时,我们都需要重新连接瓶颈 z 空间中的不同神经元。
如果要求神经网络块从一开始就产生一些有用的东西,比如拿一支记号笔,画一个符号,会怎么样?这将更像是人类在学习。我们可以将 DNN 输出解释为用不同的标记大小(压力)和颜色强度绘制的点的列表,或者甚至将输出用作必须绘制手写符号的单个手势。在这种情况下,我们将把输出解释为一组速度记录(作为位置的一阶导数)。
为了使这些标记命令产生可完全微分的输出,并且因此对于反向传播是透明的,我们需要使用 DiffProg 方法。经典编程倾向于使用太多“数字”运算符,这些运算符无法传递梯度,例如阶跃函数无法用于调整初始参数,我们需要使用 sigmoid 来代替:
同样,我们可以使用高斯曲线来模拟标记点,只需将其呈现在 2D 空间中:
这里,𝜎可以用作反向标记尺寸, x 和 y 是标记点的坐标,颜色强度可以由附加的放大系数驱动:
为了将多个标记点组合在一起,我们可以使用 max 功能。然后可以将生成的图像传递给损失函数——相同的 MSE:
作为一个实际的结果,我们会收到一个可以在空间和时间上分解图像信息的模型(!),创建一个程序,它将在一个简单的动作中,比如说,机械臂,画出所需的符号。
履行
我们将不关注神经网络块的细节,因为这篇文章是关于 DiffProg 的概念。我们只是使用一些具有密集层的 DNN 作为统计估计量。实施的详细信息可以在参考资料部分列出的笔记本中找到。让我们关注 TensorFlow 实现的细节。
静态点
加载 MNIST 数据后,我们创建模型。这里我们从一些参数开始。需要 varcoef 参数将标记的大小(以像素为单位)转换为公式中的方差。
points = 10 #number of points to fit the image in
varcoef = 0.01 #coefficient of the point size
epsilon = 0.0001 #fixing dividing by zero
我们使用输入数据点作为地面真值:
X = tf.placeholder(tf.float32, [None, dim]) #input
Y_ = X #autoregression labels
L = X
神经网络用于将 728 个 MNIST 像素翻译成 10 个标志点。每个都有垂直和水平的位置和大小。我们使用 sigmoid 函数来激活所有三点参数。这是一个简化的变体,结果应该不会让我们吃惊。
#two layers of fully connected NN
L = tf.layers.Dense(units=300, activation=tf.nn.sigmoid)(L)L = tf.layers.Dense(units=200, activation=tf.nn.sigmoid)(L)
#three output nodes (hor, ver and size) as logits to use with possibly different activations
LOGITS = tf.layers.Dense(units=points * 3, activation=None)(L)
#reshape and activations
LOGITS_ver, LOGITS_hor, LOGITS_size = tf.split(tf.reshape(LOGITS, [-1, points, 3]), 3, axis=2)
POS_ver = tf.nn.sigmoid(LOGITS_ver)
POS_hor = tf.nn.sigmoid(LOGITS_hor)
POS_size = tf.nn.sigmoid(LOGITS_size)
在这里,DiffProg 部分开始了——我们需要将高斯公式转化为矢量化形式,并通过批量大小、10 个标记点和图片的两个维度进行传播。为此,我们需要在公式中准备 GRAD_*为 𝑥 ,MEAN_*为 𝜇 和 VAR2 为 2 𝜎 :
结果,我们将得到具有形状的标记张量:[批量大小,点,垂直,水平]。
#constant grid with gradients over coordinates
GRAD_ver = tf.tile(tf.expand_dims(tf.range(0., 1., 1\. / dim_ver), axis=1), [1, dim_hor])
GRAD_hor = tf.tile(tf.expand_dims(tf.range(0., 1., 1\. / dim_hor), axis=0), [dim_ver, 1])
#broadcasted marker point centers (gaussian means)
MEAN_ver = tf.tile(tf.expand_dims(POS_ver, axis=-1), [1, 1, dim_ver, dim_hor])
MEAN_hor = tf.tile(tf.expand_dims(POS_hor, axis=-1), [1, 1, dim_ver, dim_hor])
#broadcasted marker point size (gaussian variation)
VAR2 = tf.tile(tf.expand_dims(POS_size * varcoef + epsilon, axis=-1), [1, 1, dim_ver, dim_hor])
#gaussian marker points vector
MARKER = tf.exp((tf.square(GRAD_hor - MEAN_hor) + tf.square(GRAD_ver - MEAN_ver)) / -VAR2)
头部部分非常经典,除了我们将使用 max 函数来连接一个字形中的标记点:
#head of the model - predict, loss, train step
Y = tf.reshape(tf.reduce_max(MARKER, axis=1), [-1, dim])
LOSS = tf.losses.mean_squared_error(Y_, Y)
TRAIN = tf.train.AdamOptimizer().minimize(LOSS)
#we set two points accurate if their absolute error is less than 0.5
ACC = tf.reduce_mean(tf.cast(tf.less(tf.abs(Y_ - Y), 0.5), tf.float32))
在 10 个时期的训练之后,对于训练和测试数据集,准确度度量将为大约 97%。
复制的训练数据集图片:
复制的测试数据集图片:
培训过程的可视化:
动态手势
现在,我们将从静态点的集合转到可以再现字形的线。为此,我们将稍微更改代码,以便将点位置计算为速度的积分,由神经网络预测。我们正在增加点数,因为现在不是所有的点数都可见。我们还需要一个参数来表示两点之间的最大步长。
points = 25 #number of points to fit the image in
step_size = 3 #maximum velocity in pixels to move the marker
varcoef = 0.01 #coefficient of the point size
epsilon = 0.0001 #fixing dividing by zero
使用更深的 NN 块并引入颜色强度作为附加标记点参数。
#four layers of fully connected NN
L = tf.layers.Dense(units=600, activation=tf.nn.sigmoid)(L)
L = tf.layers.Dense(units=500, activation=tf.nn.sigmoid)(L)
L = tf.layers.Dense(units=400, activation=tf.nn.sigmoid)(L)
L = tf.layers.Dense(units=300, activation=tf.nn.sigmoid)(L)
#four output nodes (hor, ver velocity, size and intensity) as logits to use with possibly different activations
LOGITS = tf.layers.Dense(units=points * 4, activation=None)(L)
对于每一步标记的速度,我们现在需要-1:1 的输出范围,因此我们将使用 tanh 激活并在 step_size 上乘以它们。为了计算最终点的位置,我们需要所有先前的速度值加上初始点(左中)的累积和。
#reshape and activations
LOGITS_ver, LOGITS_hor, LOGITS_size, LOGITS_color = tf.split(tf.reshape(LOGITS, [-1, points, 4]), 4, axis=2)
#velocity in range -1:1
VELO_ver = tf.nn.tanh(LOGITS_ver) / dim_ver * step_size
VELO_hor = tf.nn.tanh(LOGITS_hor) / dim_hor * step_size
#position as an integral of velocity (we start from the middle left point)
POS_ver = 0.5 + tf.math.cumsum(VELO_ver, axis=1, exclusive=True)
POS_hor = 0.1 + tf.math.cumsum(VELO_hor, axis=1, exclusive=True)
#size and color intensity in range 0-1
POS_size = tf.nn.sigmoid(LOGITS_size)
POS_color = tf.nn.sigmoid(LOGITS_color)
标记现在用表示每个点的颜色强度的附加 AMP 张量来计算。
#broadcasted marker point color (gaussian amplitude)
AMP = tf.tile(tf.expand_dims(POS_color, axis=-1), [1, 1, dim_ver, dim_hor])
#gaussian marker points vector
MARKER = AMP * tf.exp((tf.square(GRAD_hor - MEAN_hor) + tf.square(GRAD_ver - MEAN_ver)) / -VAR2)
在训练 50 个时期时,我们将实现训练和测试数据集的 98%的准确性。这些是通过训练数据集的一个手势再现的字形:
测试数据集:
培训过程可视化:
结果
正如我们已经讨论过的,实际的结果是能够像人类一样学习绘制符号字形。这些是带有标记大小和颜色的手势轨迹的图片。请注意,颜色强度对于绘制需要多条线的更复杂的符号至关重要。
如果我们对训练进行多次实验,我们将观察到每次的风格都会不同,这取决于随机种子。
让我们转向更实际的结果——如何使用这种新技术进行符号分类。首先,让我们在测试数据集上对整个 728 像素的 MNIST 数据进行聚类。这将产生以下结果:
Errors: 4113 of 10000\. Accuracy: 58.87 on 10 clusters(labeled samples).
我们为每个聚类分配一个主导样本标签,并将其用于分类错误和准确性度量。当我们对学习的反向图形命令空间的速度和颜色强度进行相同的聚类时,我们将得到:
Errors: 1883 of 10000\. Accuracy: 81.17 on 10 clusters(labeled samples).
如我们所见,错误数量减少了两倍多。准确率提高了 81%以上。这意味着使用这种无监督学习,我们能够更好地理解数据,并比一组不相连的点更好地对 10 个手写数字进行分类。
EMNIST 测试
使用相同数量的训练/测试数据快速检查 EMNIST 数据集— 60K/10K。
为训练数据复制的字形:
对于测试数据:
训练动态可视化:
结论和下一步措施
这只是一个例子,说明如果我们停止简单地重用现有的香草神经网络块,并开始做一些具体的问题。端到端网络不能以有效的方式工作,因为效率是智能的指示,不能是人工的。它只是一种智能,数据科学家或未来的差分编程开发人员可以将它添加到解决方案中。如果我们用建造世界的方式来建造模型,我们需要让一切都联系起来,就像一个量子场,这种联系就是求导的能力。一点的多重导数给出了整个宇宙的信息。
此特定模型的后续步骤可能包括:
- 由于多重不平衡损失,差分规划模型可能不稳定。这必须通过正则化和更好的初始化来解决。
- 在该模型中,我们为手势选择了一个初始点,但我们没有强制在图片的反面完成,以使手写符号连接成一个单词。这样的修改可以解决单词级的手写识别问题。
- 用实线反推图形会更好,但需要高级的数学模型。
- 预测命令链需要更好的 NN 块,可能需要使用特殊的 r NN 块。
参考
代码和示例
https://github . com/Andy-bosyi/articles/blob/master/DiffProg-MNIST-position . ipynb
https://github . com/Andy-bosyi/articles/blob/master/DiffProg-MNIST-velocity . ipynb
https://github . com/Andy-bosyi/articles/blob/master/DiffProg-EMNIST-velocity . ipynb
关于 DiffProg 的文章
https://skymind.ai/wiki/differentiableprogramming
https://flux ml . ai/2019/02/07/what-is-differentiable-programming . html
附言(同 postscript);警官(police sergeant)
如果你有私人问题,请在 Linkedin 或脸书联系我,有时我会在那里发布关于人工智能的简短新闻和想法。
我要感谢我的同事们亚历克斯·西姆基夫、米科拉·科兹连科、沃洛季米尔·森德茨基、维亚奇·博西和纳扎尔·萨维琴科富有成效的讨论、合作和有益的建议,以及整个 MindCraft.ai 团队的持续支持。
Andy Bosyi,
mind craft . ai 首席执行官
信息技术&数据科学
微分方程—基础
原文:https://towardsdatascience.com/differential-equations-basics-c72db0a8c42a?source=collection_archive---------8-----------------------
订单概述和标准符号
Originally Published On https://www.setzeus.com/
在微分方程 (DFQs)的优美分支中,存在着许多、多种已知的 类型的 微分方程。事实上,加深对 DFQ 的理解的最好方法之一是首先解决基本分类系统。为什么?因为你可能永远不会遇到一个完全陌生的 DFQ。大多数 dfq 已经解决了,因此很可能已经存在一个适用的、通用的解决方案。
除了描述方程本身的性质之外,分类和识别差异的真正附加值来自于提供起点的地图。解微分方程的诀窍是 不是 创造原创方法,而是分类&应用已证明的解决方案;有时,可能需要一些步骤来将一种类型的方程转换成另一种类型的等价方程,以便得到可实施的、通用的解决方案。
虽然有数百个附加类别和子类别,但用于描述 dfq 的四个最常见的属性是:
- 普通 vs 部分
- 线性与非线性
- 同质与非同质
- 微分指令
虽然这个列表并不详尽,但它是一个很好的垫脚石,通常在 DFQ 学期课程的前几周复习;通过快速回顾这些分类类别,我们将具备解决常见 DFQ 问题的基本入门工具。
普通与部分
第一,在野外发现的 dfq 的最常见的分类源于在手边的问题中发现的 衍生 的类型;简单来说,方程是否包含任何偏导数?
如果不是,那就是一个常微分方程 ( ODE )。如果是,那就是一个偏微分方程 ( PDE )
ODEs 包括单个独立变量*,微分基于该单个变量*。一个常微分方程有一组离散的(有限的)变量;他们经常模拟一维动力系统,比如钟摆随时间的摆动。
另一方面,偏微分方程要复杂得多,因为它们通常包含不止一个自变量和多个偏导数,这些偏导数可能基于也可能不基于某个已知的自变量。偏微分方程在 STEM 中非常受欢迎,因为它们被用来描述自然界中各种各样的现象,如热、流体流动或电动力学。这些看似不同的物理现象被形式化为偏微分方程;他们在随机偏微分方程中找到它们的推广。
下面是几个例子,有助于识别 DFQ 方程包含的导数类型:
Originally Published On https://www.setzeus.com/
线性与非线性
第二个共同的性质,线性,是二元的&直截了当:一个方程中的变量&导数乘以常数&仅仅是常数吗?
如果是这样,那就是线性 DFQ。否则,它被认为是非线性的。变量及其导数必须 总是 以简单的一次幂出现。考虑到它们天生的简单性,求解线性方程的理论得到了很好的发展;很可能你已经在物理 101 课上遇到过他们。
不过,为了清晰起见,还是有几个例子值得回顾一下——下表列出了 dfq 中的线性度:
Originally Published On https://www.setzeus.com/
同质与非同质
对微分方程进行分类的第三种方式,DFQ 被认为是齐次的如果&只有当 被加法或减法运算符分隔的所有 项包括相关的变量;否则就是非齐次。检验这一性质的一个简单方法是将包含因变量的所有项移到等号的左边,如果右边不是零,则它是非齐次的。
下面是一个更正式的定义。参考微分方程的定义,由左侧的下图表示:
如果图的右边 g(x)等于零,则认为 DFQ 是齐次的。以下是一些例子:
Originally Published On https://www.setzeus.com/
在现实生活场景中,g(x) 通常对应一个动态物理模型中的 强迫项 。例如,在电动摆中,驱动摆&的电机将会导致 g(x)!= 0.
一阶,二阶
最后一个基本分类,这肯定是你在数学预备分支中已经确定的性质:微分方程的 阶 。与多项式中描述最高 n 次的阶不同,对于微分,函数的阶等于等式中的 最高导数 。最基本的是:
Originally Published On https://www.setzeus.com/
最后
我们走吧!用于识别和分类微分方程的四个最常见的性质。正如你现在可能知道的,DFQ 巷的道路与植物学相似;当你第一次学习微分方程时,培养一种识别和分类 dfq 到它们适当的组的眼光是很实际的。一旦确定了,很有可能你就离找到通用的、适用的解决方案很远了。
诚然,我们只是为深入探索 STEM 每个领域背后的驱动分支搭建了舞台;要彻底了解解决方案,可以从研究更简单的设置开始,比如齐次一阶微分方程!
最初发表于
https://www.setzeus.com/
来源
微分方程
微分方程——简明教程
微分方程——历史与概述
原文:https://towardsdatascience.com/differential-equations-history-overview-a1d45ebc1a8b?source=collection_archive---------2-----------------------
第一部分——它是什么,为什么与今天相关?
Originally Published On Setzeus
数学家和物理学家往往在很多问题上意见不一致。一个不容置疑的事实似乎渗透到每一个 STEM 主题&统一双方,然而,主要的信念是*分析单个组件之间的动态关系会导致对系统作为一个整体的更好理解。与本系列探索的更抽象的主题形成鲜明对比,如逻辑理论、数论、& 集合论我们现在正前往普遍适用的测量世界*、解释变化的&**。
微分方程是数学的一个分支,以一个或多个记录的变化观察开始,&以一个或多个预测未来结果的函数结束。一个代数方程,如二次方程,用一个值或一组值求解;相比之下,微分方程是用一个函数或一类函数求解的。简称“DFQ ”,几乎所有 STEM 本科项目都将其作为核心要求,原因很简单:DFQ 是任何领域或行业模拟情况的绝佳工具。
Originally Published On Setzeus
在实际应用中,模型通常涉及对象&记录它们之间的变化率(导数/微分)——DFQ 的目标是定义两者之间的一般关系。这种系统在自然现象中极其常见,这也正是为什么 DFQ 在从物理学到经济学再到生物学的课题中扮演着重要角色。
站在巨人的肩膀上——牛顿和莱布尼茨
考虑到它作为任何数学家或科学家的基础部分的长寿和持久的影响,DFQ 的历史相当丰富也就不足为奇了。正如我们很快会看到的,现代 DFQ 是几个世纪以来进步的顶点——许多是家喻户晓的名字。然而,这种朝向既定分支的公共渐进过程,只有两位数学巨人才成为可能:艾萨克·牛顿 & 戈特弗里德·莱布尼茨。
历史告诉我们,两个人都有争议地声称在同一时期独立发明了微积分。这是关键,因为微积分,随着积分和导数的文字发展,为未来的数学家奠定了基础。
确定起源的确切时间的模糊性是多种因素的结果,例如竞争性/隐秘性的一般氛围,以及私人出版物的时间(一些笔记几十年后才被发现)。有一点是肯定的:它们既是理所当然地归功于 DFQ 的起源,下面的例子就说明了这一点。
据说早在 1671 年,牛顿在未发表的草稿中提出了以下三种“类型”的微分方程:
上面的前两个方程只包含一个或多个因变量的普通导数;今天,这些被称为 常微分方程 。最后一个方程包含因变量的偏导数,因此,命名为、、、、。注意,这两个术语都是现代的;当牛顿最终发表这些方程时(大约在 1736 年),他最初将它们命名为“通量”。
大约在同一时期(~1675 年),德国数学家戈特弗里德·莱布尼茨也在未发表的笔记中,介绍了两个关键的观点:他自己的微分&第一次记录了整数符号的实例:
尽管这些现在发现的草稿起源很早,但更大的数学界第一次听说这个话题还是在 20 年以后。具体来说,在 1693 年,莱布尼茨&牛顿最终都正式发表了&他们的微分问题的分布式解决方案——标志着 1693 年微分方程作为一个独特的数学领域的开端。
Gottfried Wilhelm Leibniz & Isaac Newton
随着基础的奠定,通往 DFQ 的道路是缓慢而稳定的——解决物理问题的尝试逐渐产生了模型,而模型又需要创新的解决方案。这些问题及其解决方案导致了一门独立学科的发展。社区的努力迅速加速了该领域的发展,超越了牛顿和莱布尼茨的贡献。
以下是历史上重要的 DQF 问题和发表了令人满意的解决方案的归因数学家的列表:
上面的列表只是所有造成 DFQ 问题的一小部分;然而,即使是这个删节的列表也凸显了数学家们的才能,他们为这个被认为是 STEM 基础之一的分支做出了贡献。从可识别的名字如拉格朗日、欧拉和伯努利,以及最初的牛顿和莱布尼茨,显而易见数学家对 DFQ 的持续发展有多么重要。
关于这个系列
当谈到现实世界的分析,DFQ 是真正的交易。用半衰期方程预测化学反应,用人口增长预测生态系统的文化数量,或者描述波浪的轨迹——对于任何对 stem 职业感兴趣的人来说,对 DFQ 的基本了解是的必备。
接下来我们去哪里?首先,探索 DFQ 符号&回顾不同类型的订单。接下来,我们将回顾拉格朗日力学&运动方程。之后,我们将讲述应用数学中最重要的公式之一:拉普拉斯变换。最后,我们将通过约瑟夫·傅立叶的眼睛探索热流的领域。
来源
微分方程
Setzeus 个人网站
微分方程——简明教程
差异隐私注释 2:来自隐私圣经的强有力的概要
原文:https://towardsdatascience.com/differential-privacy-note-2-a-powerful-synopsis-from-the-bible-of-privacy-51e2f99d3900?source=collection_archive---------16-----------------------
“告诉我,我会忘记的。教我,我会记住。让我参与,我学习。”
—班哲明
好吧,对于那些不知道差分隐私博客系列第 1 部分的人,只需阅读这篇博客“差分隐私注释 1:来自隐私圣经的强大概要”,让自己完全了解隐私的新定义,以及这个新定义(即差分隐私)如何在解决隐私保护数据分析的竞争中脱颖而出。
在这篇博文中,我将阐明
- 关于为什么私有数据分析系统有缺陷,以及为什么将一个语义安全密码系统与私有数据分析进行比较是不可行的。
然后在后面的部分
2.将给出差分隐私的更正式的定义,特别是如何通过引入随机性来提供隐私。
3.差别隐私承诺了什么
4.差异隐私不能承诺什么
5.微分隐私的定性性质
私人数据分析:由于辅助信息导致的有缺陷的系统
私有数据分析的一个形式化目标是,分析者在分析完成后对数据集中任何个体的了解不会比分析开始前多。
同样,对手(对手)关于个人的之前和之后的观点(即,在访问数据库之前和之后)不应该“太不同,”或者对数据库的访问不应该改变对手关于任何个人的观点“太多”。
此外,如果分析师或对手对一个人一无所知,那么这个人就不会受到分析的伤害。此后,这种直觉被普遍地称为“无所不知”的方法,由于辅助信息,这种方法被证明是错误的。
因此,各种各样的研究人员试图提出一个观点,即在标准计算可用的情况下,我们为什么不能建立语义安全的私有数据库机制,在对查询产生答案的同时对单个行保密呢?
但是事实证明,语义安全密码系统(SSC) 和私有数据分析之间的类比也是有缺陷的,在某些方面并不完美。
在 SSC 中有三方:
- 消息发送者(加密明文消息的人)
- 消息接收者(解密密文)
- 窃听者(她因无法了解任何关于明文的信息而感到沮丧,因为她在发送之前并不知道这些信息)。
然而,在私有数据分析的环境中,只有两方:
1.馆长,运行隐私机制(类似于发送者)
2.数据分析师,他接收对查询的信息性响应(就像消息接收者一样),并且还试图挤出关于个人的隐私泄露信息(就像窃听者一样)。
因为合法接收者与窥探对手是同一方。因此,SSC 和私有数据分析之间的类比是错误的,因为拒绝向对手提供所有信息意味着拒绝向数据分析师提供所有信息。
差分隐私的正式定义
让我们听听这个领域的先驱之一“辛西娅·德沃克”关于差分隐私和为什么随机性是必不可少的。
现在,是时候从数学上引入差分隐私的正式定义了,
差分隐私:一个具有域 N |X |的随机化算法 m 是(ε,δ)-差分隐私的,如果对于所有的 S ⊆范围(m)和对于所有的 x,y ∈ N |X |使得∨x y∨1≤1:
pr[m(x)∈s]≤exp(ε)pr[m(y)∈s]+δ,
其中(∨x y∨1)衡量 x 和 y 之间有多少记录不同,如果δ = 0,我们说 M 是ε差分私有的。
通常,研究人员对小于数据库大小中任何多项式的倒数的 δ(delta) 的值感兴趣。特别是, δ 的值在 1/∨x∨1 的数量级上是非常危险的:它们允许通过公布少量数据库参与者的完整记录来“保护隐私”,这被精确地称为“仅仅几个”哲学。
什么差别隐私承诺?
从一个非常基本的意义上来说,差分隐私的想法承诺保护个人免受由于其数据在私有数据库(x)中而可能面临的任何额外伤害,如果他们的数据不是 x 的一部分,他们就不会面临这些伤害。尽管一旦差分私有机制 M 的结果 M(x)被发布,个人确实可能面临伤害,但差分隐私承诺伤害的概率不会因他们选择参与而显著增加。
因为当一个人决定是否将他/她的数据包含在一个以不同的私人方式使用的数据库中时,他/她考虑的正是这种差异:他/她参与的伤害概率,与他/她不参与的伤害概率相比。
鉴于差别隐私的承诺,从未来伤害的角度来看,个人确信他/她的存在在参与和不参与之间应该是几乎无关紧要的。
有哪些差分隐私不承诺?
简而言之,差别隐私并不保证无条件免于伤害,更一般地说,差别隐私并不保证一个人认为是自己的秘密将保持秘密。它只是确保个人参与调查本身不会被披露,也不会导致个人参与调查的任何细节被披露。从调查中得出的结论很可能反映了个人的统计信息。但是,如果调查告诉我们,特定的私人属性与公共可观察属性密切相关,这并不违反差分隐私,因为这种相同的相关性几乎以相同的概率被观察到,而不管任何个人是否存在。
微分隐私的定性性质
因此,在对这个有缺陷的系统、它所包含的差别隐私、承诺和非承诺的正式定义感到恐惧之后,我们来到了这篇博文的最后一节,在这里我将列举它的一些关键属性。
- 防范任意风险。
- **链接攻击的自动中和:**包括所有那些
试图用所有过去、现在和未来的数据集和其他
形式和来源的辅助信息。 - 隐私损失的量化:差别隐私不是二元
概念,有隐私损失的衡量标准。这允许在不同的技术之间进行比较:对于隐私损失的固定界限,哪种技术提供更好的准确性?对于固定的精度,哪种技术提供更好的隐私? - **组成:**也许最关键的是,损失的量化还允许通过多次计算对累积隐私损失进行分析和控制。理解组合下差分私有机制的行为使得能够从较简单的差分私有构建块设计和分析复杂的差分私有算法。
- 后处理下的闭包:差分隐私不受
后处理的影响:数据分析师在没有关于私有数据库的额外知识的情况下,无法计算差分私有算法 M 的输出的函数并使其不那么差分私有。也就是说,无论是在正式的定义下,还是在任何直观的意义上,数据分析师都不能仅仅通过坐在角落里思考算法的输出来增加隐私损失,无论有什么辅助信息可用。
这就是差分隐私的最后一个属性,《差分隐私的算法基础》这本书的另一章的总结到此结束。我希望你在总结第二章中提到的概念时,已经学到了和我一样多的东西。
感恩角:
非常感谢 Udacity 和 Akshit Jain 为我提供了这个成长和学习人工智能这一新领域的机会,特别感谢 Trask 为像我这样的学习者提供最新、可靠的知识资源。最后,我很高兴成为这个充满活力的年轻社区的一员。
感谢您的关注
你用你的时间阅读我的作品对我来说意味着一切。我完全是这个意思。
如果你喜欢这个故事,疯狂鼓掌吧👏 ) 按钮!这将有助于其他人找到我的工作。
此外,如果你愿意,可以在 Medium、LinkedIn 或 Twitter 上关注我!我很乐意。
阅读纳文·曼瓦尼在媒介上的作品。一个机器学习工程师,一个深度学习爱好者|谷歌印度…
medium.com](https://medium.com/@naveenmanwani) [## 纳文·曼瓦尼
纳文·曼瓦尼的最新推文(@纳文·曼瓦尼 17)。机器学习工程师@ AIMONK Labs Pvt ltd,深…
twitter.com](https://twitter.com/NaveenManwani17) [## Naveen Manwani -机器学习工程师- AIMonk Labs Private Ltd | LinkedIn
计算机软件加入 LinkedIn siddaganga 理工学院学士学位,电气,电子和…
www.linkedin.com](https://www.linkedin.com/in/naveen-manwani-65491678/)
挖掘深层数据:真实世界的全球寻宝
原文:https://towardsdatascience.com/digging-on-deep-data-a-real-world-global-treasure-hunt-b0ab4329b51c?source=collection_archive---------12-----------------------
深度挖掘数据:一场真实的全球寻宝
数据科学家能让地质学成为真正的科学吗?
地质学家经常被其他科学家(和电视角色)认为地质学更多的是一门艺术而不是一门科学;解开为什么揭示了数据科学家的巨大机遇。
一场令人难以置信的 45 亿年的混乱创造了我们今天所知的地球——所以矿藏的位置和类型是由于史诗般的空间碰撞、大规模移动的岩石和岩浆板块,以及太阳中心的发电机以某种方式产生稳定的磁场。
回到基础,大多数现代科学遵循科学方法来测试和修改假设;观察、测量、实验、分析、报告等等。嗯,在地质学中,这并不容易。例如,包括造山运动、地震活动和地下水流在内的矿化过程是一个紧密耦合的因果网络,从纳米级到地球半径,时间尺度从微秒到数十亿年。这使得为矿体的形成建立一个严格的、定量的物理模型变得非常困难(除了我们居住的星球这个昙花一现的奇迹)。在某种程度上,地质学家是被动的科学家,仅仅是围绕着我们同一个地球发生的惊人过程的见证者。
由于我们无法使用物理模型在我们需要的比例下轻松解释矿体,因此数据科学家有巨大的机会用数据来解释它!
现行的矿产勘查标准是:一个收集不同数据集并对已知矿床类型进行主观描述性地质解释的迭代过程,一点一点地进行,得到的有价值的结果少之又少。这很像盲人遇到他们的第一只大象,每个人只调查动物的一部分,但声称有一个整体。由于对数据的解释是由地质学家主观进行的,因此有大量的例子(如西澳大利亚的 Mt 显著的)表明探险者错过了摆在他们面前的事情,因为他们在寻找不同的矿床类型,或者因为他们对地球物理的解释不正确而钻错了地方,或者仅仅是因为地质学家更擅长用二维切片而不是三维体积可视化矿床模型。
这种整体解释和测试的现状,猜测地球深处的秘密,导致发现任何矿床所需的时间延长。
所有这些都使矿产勘探成为数据科学家的一个有趣领域,同时也使数据科学家成为勘探公司的无价资产。
有如此大量的领域要覆盖,数据要处理,故事要讲述,这是机器学习再次证明自己的完美领域。
机器学习已经推动我们在几个领域向前发展,这些领域在挑战和机遇方面与矿产勘探没有什么不同——例如,遥感和农业。
深度学习和深度递归网络已被应用于遥感,以执行图像处理、解释、数据融合和时间序列分析——如去除云层、对物体进行分类、检测和跟踪目标。
近年来,遥感技术的进步甚至影响了地质学界;例如,澳大利亚地球科学与 CSIRO(澳大利亚最高公共研究机构,联邦科学与工业研究组织)合作,开发了生成覆盖深度预测的算法。
在农业领域,同样的机器学习方法有应用于检测杂草和疾病,预测产量和作物质量,以及管理动物、水和土壤。
但是,即使在这些领域取得了长足的进步,数据科学仍然有很多机会应用于矿产勘探。
那么,怎么做,为什么呢?
您可能已经从本文的“地质学 101”前半部分中了解到,识别经济矿藏并不容易。因为很少有正面的结果,数据科学的应用不像简单的剪切和粘贴那样简单,传统的机器学习算法——反演的物理模型也不可用。该领域需要更复杂的深度学习应用,而不是简单的人工智能或初级的机器学习。
Deep learning in the broader field of AI — Goodfellow et al 2016
正确的方法可以克服一些特殊的挑战。
例如,虽然识别不同的地质数据标志对机器来说很容易,但每个矿床都是不同的。因此,寻找矿床并不像在大型训练数据集中根据确定的正面和负面进行训练那么简单——因为每一个可识别的过去情景都可能永远不会再次发生。然而,机器可以在强有力的先验知识的指导下,在数据集中识别有用的信息,这些信息可能聚集在一起,暗示着一个矿床。
地质数据也很复杂,维度很高,但通常也很有限。例如,我们知道基于岩石成分、温度和压力,某些矿物质总是会一起形成。流形学习旨在降低非线性数据集的维度,有助于解决将数据集中存在的大规模地质过程(如区域变质梯度)与指示矿床的小规模过程(如含金矿脉周围的局部化学变化)分离的挑战。
在矿产勘探中使用人工智能技术的 OreFox 的创始人 Warwick Anderson 同意这一观点,他告诉我们“机器和深度学习显示出巨大的潜力。”
“我认为地质学家和数据科学家需要合作的地方是标准化、变换和异常值检测(或去除)等方面!”安德森说。
"地质图可以被大量外推,那么我们能对从中得到的数据赋予什么价值呢?"这里可以引入多尺度方法来处理数据的多样性和稀疏性——在巨大的、嘈杂的数据集下构建矿产勘探中有用的模型。
作为一个额外的奖励,应用数据科学也将把这个领域从描述性的、主观的分析转向一种经验的、可再创造的科学。
“地质学是混乱的,”安德森说。“[它]可能会非常有偏差……[使用]视觉方法来确定岩石类型。岩石类型可以在一米的空间内变成其他类似的类型;例如花岗岩到花岗闪长岩,这可能有统计学差异。”
但随着数据科学方法中反馈循环的创建,它将确保当正确的地质学家没有在正确的时间查看正确的数据时,没有知识被遗忘或忽略。
数据科学当然不是万能的,没有一种方法能够一次性解决资源发现的问题。要向前发展,减少域名是至关重要的,以便朝着可管理的问题前进,并改善现状。
为此,一个澳大利亚项目正在开放一个大型勘探项目的多年数据,供数据科学家研究,作为众包竞赛的一部分,奖金池为 100 万澳元。
Data scientists and geoscientists working together on data (photo courtesy Unearthed Solutions)
然而,对地质学家的回报不仅仅是经济上的回报。几个世纪以来,地球结构的全部历史一直困扰着人类,矿物和金属需要通讯设备、运输、能源和医疗技术。
寻找急需的经济矿藏就像在大海捞针一样困难。
在数据科学领域,这有点像大海捞针的比喻,但它很适合。这同样适用于地球科学。我们实际上可以抛开整个干草和针的例子,说数据科学通常就像寻找所需材料的经济矿化,反之亦然,但它并不那么简洁。
数据科学找到针的速度比矿物勘探快得多,并在这个过程中在干草中找到更多丢失的宝藏。地理世界有许多真正的宝藏有待发掘!
感谢 Holly Bridgwater、Jess Robertson 和 Warwick Anderson 对本文的贡献。
数字鸟类夜间飞行第一部分:人工智能模拟环境
原文:https://towardsdatascience.com/digital-birds-fly-at-night-part-i-ai-simulation-environment-242fac9d67d8?source=collection_archive---------20-----------------------
在这一系列中,我将讲述我创造人工智能驾驶的固定翼飞机的努力。
在去现场之前,我们将在模拟环境中训练一个神经网络。我们可以从简单的东西开始,随着时间的推移提高模拟质量和飞行模型的准确性,最终在无人机拍摄的空中镜头上训练我们的神经网络。
对于模拟环境,我选择使用 V-Rep 进行初步实验,因为它有 Python 绑定和非常方便的 API 远程接口,但主要是因为 Unity 和 Unreal Engine 占用了太多的空间和资源,而 V-Rep 是一个简单的 tarball,笔记本电脑可以轻松运行它的多个无头实例。
创建了一个基本的“飞机”,并将其放置在由西蒙·d·利维创建的这个可爱的英国乡村场景中。
与大多数流行的模拟环境一样,V-Rep 实际上并不考虑空气阻力,因此不需要空气动力学模型。这个身体只不过是一个框架,当接收控制输入时,力被施加到四肢。
也没有飞行模型——模拟飞机飞行行为的数学模型,所以我对飞机施加了固定的推力和升力。
由于上述原因,该飞行器比固定翼飞机更像无人机或直升机——没有空气阻力意味着它可以转弯,漂移并失去所有动力。它在飞行中的表现也非常不稳定,这使得它极难用键盘控制。
从一个简单的任务开始——尽可能靠近目标飞行。为此,我创建了一个模拟,在这个模拟中,我将一个目标物体放在水面上,在鸟的视野范围内,让它自由飞行 3 秒钟。
期望——训练后,鸟会尽可能飞近目标区域。
现实——嗯,还没有完全实现,但已经有所改善。
我们将在本系列的下一篇文章中更多地讨论人工智能,但是在这个阶段我们已经被迫做出了一些设计决策:
监督学习与强化学习
当训练一个神经网络时,我们通常从一个大的数据集开始——过去的输入和与之相关的输出的例子。如果我们要训练一个对象分类器网络,我们会给它看很多狗和猫的图片,并附上“猫”/“狗”的标签,让网络“学习”什么是狗。
在我们希望人工智能驾驶我们的飞行器的情况下,我们将从视觉传感器捕捉图像,并与所需的控制输入配对。例如,如果我们看到我们将要撞上一棵树,输入将是“左转”。
这种训练方法非常有效,你的训练数据越多——你的模型就越精确。为了生成所述训练数据,人们将手动驾驶鸟,同时记录给定的控制输入。
然而,如前所述——我的模拟飞机是不可能控制的。我甚至不能用键盘保持它在空中飞行,更不用说让它接近目标了…
另一方面,强化学习假设不存在训练数据。取而代之的是,一个代理人执行一个动作,并因期望的结果而被奖励。在我们的例子中,一个成功的人工智能将是飞得离目标最近的那个。
为此,我们将培育多个候选人工智能模型,并让它们在我们的模拟世界中自由活动,只挑选冠军,并从其神经网络的权重中培育出略有变异的下一代。
但下一次会更多;)
直到那时!
轻松实现数字营销
原文:https://towardsdatascience.com/digital-marketing-made-easy-6c19dc597f6?source=collection_archive---------17-----------------------
我们将扮演营销顾问的角色,专注于在 Udacity 、**、数字营销纳米学位项目、**和 Tableau 中的免费课程 数据可视化两个 B2C 产品的营销。我们将一步一步地利用各种渠道开展活动,为这些项目吸引潜在的学生。更具体地说,我们的目标是收集可能对纳米学位课程或免费课程感兴趣的潜在学生的线索。
Photo by Reza Rostampisheh on Unsplash
目录
在了解这些活动之前,我们将一步一步地做以下事情:
1 |营销策略
ⓐ 假设
ⓑ 营销目标& KPI
ⓒ 价值主张
ⓓ 移情地图和客户角色
ⓔ 营销策略
2 |预算分配
ⓐ 媒体上的成本与回报
t31】ⓑ建议
3 |展柜作品
ⓐ 营销我们的内容 : 博客和社交帖子 s
ⓑ 运行 Facebook 广告活动 : Facebook 广告图片和结果
ⓒ 进行 SEO 审核 : 审核和建议
ⓓ 运行 AdWords 活动
1 |营销策略
Photo Courtesy by Udacity
我们将专注于应用基于客户旅程的营销计划。在制定营销策略之前,我们将陈述我们的假设以及我们的营销目标和 KPI。我们将阐明我们活动的营销目标和 KPI,同时确保我们的目标是 SMART。
SMART 目标是:
Sspecific、Mmeasurable、Aachievable、 R ealistic、TI bound。
ⓐ假设
- 预算::5 万美元**
- 利润 : 纳米学位项目的成本是 999 美元,我们假设利润率为 30%,也就是说 Udacity 每个报名的学生可以获得 299 美元的利润。
- 活动 : 我们希望大力发展该项目,但是,我们希望在不赔钱的情况下实现。
未来的学生可以下载免费的电子书,如果他们通过这个登陆页面向我们提供他们的电子邮件地址;这本电子书——社交媒体广告指南——是数字营销纳米学位项目的简短摘录。
ⓑ营销目标和关键绩效指标
总体营销目标是在三个月内获得至少 200 名报名参加我们数字营销纳米学位的新生,总预算为 5 万美元。
营销目标的总体主要关键绩效指标(KPI) 是在保持正投资回报的同时,当月注册课程的客户总数。
ⓒ价值主张
利用杰弗里·摩尔的模板得出的T21 的价值主张是:****
对于希望进入数字营销领域
的学生和营销人员来说,他们渴望利用社交媒体营销、搜索营销和电子邮件营销等在线营销策略,我们的数字营销 Nanodegree 是一个项目,让你学习如何创建营销内容,使用社交媒体放大你的信息,使内容在搜索中可被发现,在脸书上开展广告活动和做广告。
****与Udemy 提供的完整数字营销课程不同,我们的课程将让您在向该领域顶级专家学习的同时,获得现场营销活动的实际经验。以对数字营销的 360 度理解开启你的职业生涯。
ⓓ移情图和顾客角色
接下来,我们将关注我们的客户是谁来帮助我们编写内容、开展活动和审核网站。这可以通过创建移情图和采访潜在客户来实现。****
移情图用于理解和总结客户研究。因此,在采访了至少三个潜在客户来为我们的移情图收集信息后,我们将有四个象限,分为思考、观察、行动和感受。
客户角色是一个虚构的角色,它总结并传达了我们目标客户的关键特征。当创建人物角色时,我们将使用移情图中的信息来告知我们的虚构人物将具有什么样的特征。
ⓔ 营销策略
在这里,我们将概述并提供客户旅程每个阶段的营销策略,包括信息传递和渠道。
登陆页面:一个目的页面,或者一个独立的网页,开发来引导流量以采取行动,达到营销或广告活动的目的。当客户点击谷歌 AdWords 或社交媒体上的任何广告时,就会登陆这个网站。**
有机社交媒体:这完全是关于社交媒体上出现的东西,没有付费推广。通常,有机社交媒体与用户在任何社交媒体网络上发布的任何内容相关联。
展示广告:一种吸引网站、社交媒体平台受众注意力以采取特定行动的技术。这是一种在线付费广告的方式,可以是设计好的图像或照片和广告文案。
反向链接:反向链接,或入站链接,是一个网站上的超链接
,指向另一个外部网站。**搜索引擎营销:显示在搜索引擎结果页面上的付费广告。另一方面,在搜索引擎优化(SEO)中,一家企业不会为流量和点击量向谷歌付费;更确切地说,他们在搜索结果中获得了一个免费的位置,因为他们拥有与给定关键词搜索最相关的内容。
关键词:根据 MOZ 的说法,“关键词是定义你的内容是关于什么的想法和主题。就 SEO 而言,它们是搜索者输入搜索引擎的单词和短语,也称为搜索查询。**
重定向广告:重定向广告是一种在线定向广告,是为已经访问过我们网站的人制作的。这有助于在网站访问者离开页面后将他们转化为顾客。
97%第一次访问你网站的人什么都没买就离开了,然后他们就永远消失了。除非你能把他们带回来。——Mailchimp.com
2 |预算分配
营销成本将分几个阶段下降:
- 创意: 广告文案、图片、视频等
- 媒体:
- 时间和资源 : 管理社交媒体营销渠道需要大量的时间。
在这里,我们将只关注媒体**:T2 媒体的成本和回报。**
ⓐ媒体的成本和回报
准确、有效的数字营销预算在任何活动中都扮演着重要的角色,同时还能保持积极的投资回报。下面,我们将针对客户旅程的认知、兴趣和需求阶段,对媒体进行预算分配。
****
ⓑ建议
在认知阶段,我们应该把重点放在脸书和 Adwords 上的展示广告上,尽可能多地吸引客户,帮助他们了解这个项目。我们需要优秀的创意来反映项目的目标。在 desire 阶段,我们需要应用更多的重新定位的广告来再次推动该计划的流量。脸书在任何阶段的每次点击费用都是最低的,我们建议增加计划支出,因为它比其他渠道产生更多的销售。
3 |展示作品
陈述完营销目标和我们活动的关键绩效指标后,我们将通过在脸书**、 Instagram 、 LinkedIn 、 Twitter 和Google上的**、短期广告、*、、活动、的、一些细节然后,通过与 MailChimp 进行电子邮件营销 战略来完成我们的工作。*******
每个活动或广告都有其营销目标和 KPI ,所有这些都与我们之前陈述的总体营销目标和 KPI 相关。
这些广告和广告将短时间播放,以便在本文中展示它们的表现。
Photo by Prateek Katyal on Unsplash
营销目标和 KPI
营销目标是通过在一个月内让大约 300 人访问这篇文章来建立意识和兴趣。
文章营销目标的主要 KPI 是当月的访客总数。
Sharing a post in Twitter to reach prospective students
Sharing a post in Linkedin to reach specific target students and analysts who may want to learn marketing
Sharing a post in Instagram to reach prospective students
Photo by NeONBRAND on Unsplash
这项活动的主要焦点将集中在年龄在 25 岁到 35 岁之间的男性身上,他们认为自己是企业家或初创公司的创始人,并希望将他们的业务提升到一个新的水平。处于旅程的开始表明目标客户想要省钱和削减开支。因此,提供一个项目来学习社交媒体广告和数字营销的整体概念是至关重要的,并且可以为客户提供许多机会来将这些概念应用到他们的业务中。
下载免费电子书是客户旅程的第一步,他们可以更进一步,考虑参加完整的计划。因此,广告文案和广告创意与边做边学的理念有关。这些图片显示了通过不同的数字设备在线学习并在现实世界的项目中应用所学是多么的纵容。
所有人一起传递信息;阅读,学习,然后应用。你可以通过在 Udacity 学习社交媒体营销和广告的概念来增强自己的能力。
我们不是针对对数字营销或社交媒体营销/广告感兴趣的普通人,而是试图专注于那些希望将这些概念应用到自己业务中的自雇人士。
营销目标和 KPI
营销目标是建立知名度和兴趣,在 3 天内使用 100 美元的总预算获得至少 50 次免费电子书下载。
活动营销目标的主要 KPI 是三天内的下载量。
A summary that shows the target criteria, ad placement, and schedule.
Here is the goal of the campaign (conversions) with a budget of $100
我们想告诉观众为什么他们应该下载电子书,阅读它,并在考虑学习数字营销和社交媒体广告时将该计划作为首选。
有一个清晰的行动号召让我们简洁而直接,例如,通过下载电子书了解更多。此外,添加引人入胜的图像来反映广告文本,同时代表目标受众,这一点至关重要。
这是两个广告的例子和活动的最终结果。
The results that show the number of conversions and the costs per each
- 这场运动没有达到我们的营销目标。在过去的 4 天里,只有 11 次点击,9 次下载和 1982 次点击。然而,考虑到整体正投资回报率,它赚了 3.54 美元。
- 尽管广告五有 6 个结果,但它的投资回报率为 4.81 美元,低于广告二有 3 个结果的投资回报率。
- 总体印象不是很好,但是,这将有助于推动我们想要的意识。
- 我们建议使用不同的图片,因为印象/接触结果显示一些创意对客户更有吸引力;图 2 和图 5 是相似的创意,也是唯一有结果的。
- 有了额外的预算,我们可以制作更少的广告,并应用 A/B 测试在两幅图像中进行选择;一个用特定性别反映标题,另一个没有特定性别。
- 我们会调整目标受众,针对所有性别,而不仅仅是男性。我们相信没有什么不同,努力接触普通客户可以让我们获得更多的结果,从而实现我们的营销目标。
An overall view of the ads performance where we can see the best ad with 6 leads and costs $2.60 each
An overall view of the ads engagement with customers
An overall view of the ads delivery where the best ad reached 985 people
A chart that shows the demographics as all men mostly between 25–34 years old
Facebook Audience Network is an off-Facebook, in-app advertising network for mobile apps. Advertisers can serve up their ads to customers who are using mobile sites and apps other than Facebook, extending their reach beyond the platform (adespresso)
Photo by Stephen Dawson on Unsplash
搜索引擎优化(SEO) :优化有机搜索引擎结果,以提高我们网站流量的质量和数量。
营销目标和 KPI
营销目标是建立知名度和兴趣,让至少 100 名访客在 7 天内访问登录页面。
活动营销目标的主要 KPI 是这三天的访客数量。
内容审核:关键词
首先,我们将使用 Moz Keyword Explorer 工具来识别我们可能会将用户导向登录页面的关键词。我们应该确保混合使用品牌和非品牌关键词。
然后,我们将确定最有潜力的头尾关键词。最后,我们将编写三个博客主题,其中包含了最有潜力的关键词。关键词可以是广泛而深远的(这些通常被称为“头部关键词”),或者它们可以是几个术语的更具体的组合——这些通常被称为“长尾关键词”
Photo Courtesy by Moz
**头部关键词:**一两个词 **尾部关键词:**非常有针对性的搜索短语
优先级得分:根据 MOZ 的说法,关键词优先级是“通过查看所有其他指标(数量、难度和有机点击率)计算出的满分 100 分。较高的优先级代表了较高容量和较低难度的最佳点”。
Based on the priority scores, digital marketing is the best head keyword with a score of 78%, and digital marketing certificate is the best tail keyword with a score of 64%
技术审核:元数据
我们将通过创建一个包含我们选择的页面的当前元数据和我们建议的修订的表格,对元数据进行技术审核。
技术审计:反向链接审计
使用 Moz OpenSite Explorer 工具,我们将对我们选择的网页执行反向链接审计。
然后,我们将列出我们为网站发现的三个顶级反向链接 URL。这些反向链接应该增加网站的价值,而不是垃圾邮件。
域名权威:根据 MOZ 的说法,域名权威(DA)是“由 Moz 开发的一种搜索引擎排名分数,可以预测一个网站在搜索引擎结果页面上的排名。一个领域权威的分数范围从 1 到 100,分数越高,对应的排名能力越强。”
链接构建
使用 SEMRush 工具和研究,我们将策划一个链接建设活动。我们将确定三个我们认为相关的高流量网站,我们希望从这些网站获得反向链接,以帮助提高我们网站的流量。
现场性能审计:性能测试
- 使用Pingler Google Indexed Pages Checker工具,我们将研究有多少数字营销 Nanodegree 的页面被 Google 索引。解释为什么索引的页数很重要。
基本上,没有它谷歌不能索引我们的页面,页面不会在搜索引擎上显示。不幸的是,平勒显示 dmnd.udacity.com 和udacity.com都不适用。无论如何,我们应该确保谷歌蜘蛛捕捉尽可能多的链接,为我们的网站带来更多的流量。
Google spider 又称网络爬虫,是一种抓取网站并存储信息供搜索引擎索引的互联网机器人。
—WordStream.com
- 使用Google Page Speed Insights工具,我们将对登录页面的移动显示进行速度测试。然后,我们将解释为什么评估页面速度很重要。
页面的速度与客户的购买行为相关,也就是说,页面速度慢不会引起客户的兴趣,他们会在几秒钟内离开网站。不需要很长时间来显示内容的更快的页面效率更高。结果表明,我们需要提高手机的登陆页面速度。
- 使用 Think with Google 工具,我们将评估登陆页面的移动友好性。然后,我们将解释为什么拥有手机优化版很重要。
拥有一个移动友好页面可以让我们接触到更多的客户。它表明页面将考虑客户访问页面时使用的每个设备,从而改善用户体验。结果显示装载速度很慢,这会让我们的客户付出代价。
推荐
- 首先需要调整的是页面元数据,添加 alt-tag 和描述,允许我们添加和优化更多的关键字。这让我们进入下一步,使用 MOZ 来监测和识别新的和更有效的关键字。利用 MOZ 的力量可以帮助我们根据客户的习惯和趋势来优化头尾关键词。
- 正如我们从性能测试的结果中看到的,我们需要优化页面加载速度,并通过拥有一个移动友好的页面来改善用户体验。我们需要一个速度和响应页面,考虑到不同的设备。页面速度很重要,优化页面速度的一个方法是删除所有不必要的代码、图片等。此外,增加离开页面可能性的最令人沮丧的因素之一是弹出窗口。我们需要避免在页面中使用它们。如前所述,我们需要优化元描述,然而,当我们试图拥有一个移动友好的页面时,我们需要简洁,因为它没有桌面的大空间。
- 我们应该调查页面索引问题。这可能是 Pingler 的一个错误,因此,我们应该使用另一个工具来评估我们的页面索引。如果页面不在谷歌的索引中,我们就不会获得有机的流量!我们需要专注于我们的 SEO 策略,优化页面,让谷歌的蜘蛛索引页面,然后建立排名,吸引流量,达到我们的网站目标。提高页面索引的重点是确保我们考虑了谷歌关于信任、权威和质量的指导方针。
Photo by Arthur Osipyan on Unsplash
营销目标和 KPI
营销目标是在 5 天内建立对印度的认知和兴趣,通过 4 个广告获得至少 3 个报名关于免费课程:Tableau中的数据可视化。
活动营销目标的主要 KPI 是五天内的注册转换率。
重点是为 Tableau 中的免费课程数据可视化创建两个针对印度**客户的广告组。**两组代表客户旅程中的两个不同客户: 认知度 和 兴趣 。
处于旅程的开始表明处于认知阶段的目标客户想要了解更多关于数据可视化的知识以及他们可以使用哪种工具。因此,引入一门免费课程来学习数据可视化的概念,然后在 Tableau 中应用它们,可以为学生提供许多将这些概念应用到职业生涯中的机会。关键词范围很广,重点关注客户在搜索数据可视化时可能遇到的问题。
另一方面,对数据可视化和 Tableau 特别感兴趣的客户需要知道如何使用 Tableau 中的工具或部分工具。也就是说,我们添加了更具体的关键字来反映他们的关注点,如如何在 tableau 中创建图表,或创建仪表板等。
总的来说,认知组的关键字包括关于数据可视化和 Tableau 的信息,而兴趣组的关键字针对的是对 Tableau 有一定了解的客户的问题。
设置我们的广告
- 竞价 策略:手动每次点击费用(增强 CPC)
- **预算:**每天 10 美元
- 时间 : 5 天
A summary that shows and summerizes the ads for each target
An overview evaluation per ad group; as we can see that we have only 2 conversions from the interest ads
Overview of each ad; while one ad performed well with 36 clicks, it didn’t lead to any conversions
The tail keyword “business certificate online” lead to having the only 2 conversions with cost of $5.43 each
评估活动绩效
- 在两个广告组中,只有“兴趣广告”产生了 2 的转化率。因此,每条线索的成本为 9.75 美元,转化率为 16.67%。
- 尽管“认知广告”总共有 55 次点击和更高的点击率;与“兴趣广告”的 12 次点击和 3.54%的点击率相比,它的转化率为零。
- 导致 have 转化的唯一关键词是“网上商业证书”。CTR 为 5.15%,CR 为 28.57%,每次转换的成本为 5.35 美元。
- 我们的营销目标是至少招收 3 名学生,然而,在五天的时间里,该活动只产生了 2 次转化,每次成本为 30.39 美元。只要课程是免费的,投资回报率就会是负数。一旦我们有了更多关于这些线索质量的信息,他们是否为纳米学位项目付费。如果 2 次转化产生的收益超过 60.74 美元(成本),那么我们将获得正的投资回报。
- 虽然我们假设转化率为 5%,但我们得到的转化率为 2.99%,低于我们的预期。
- 在总共 1638 次展示中,我们总共收到了 67 次点击。这使我们的点击率(CTR)为 4.09%,平均每次点击成本(CPC)为 0.91 美元,低于我们的最高出价 3.00 美元。
推荐
- 由于“意识广告”有更好的点击率,我们将专注于优化我们对目标受众的信息,以鼓励学生采取下一步行动并加入课程。
- 我们将改变广告的标题“Tableau for 初学者|查看和理解您的数据”,因为它的点击率最低。
- 分析产生两条线索的广告:“免费在线 tableau 培训|提升您的技能”。虽然它的印象最差,但它的点击率最高。为此,我们将应用一个 A/B 测试并一次改变一个元素。然后,我们将转换表现不佳的广告,使其在头部关键词、尾部关键词等方面具有相似的广告文案。
An overall view of each ad group performance where we can see a total of 67 clicks with 4.09% CTR and a total cost of $60.79
An overview analysis of the ads by gender
An overview analysis of the ads by age
A comparison between male and female with respect to the number of clicks and impressions; overall, males have seen the ads and click on one them more than females.
An overall view of each ad’s performance where we can see that we paid only for one add as it was the one with 2 conversion.
An overall view of each keyword performance
Photo by Alex Holyoake on Unsplash
这一部分包括评估三个不同的活动。陈述完假设后,我们将回顾每个活动的结果。
Evaluating the first ad that shows a positive ROI of $597.4
Evaluating the second ad that shows a positive ROI of $67.01
Evaluating the third ad that shows a positive ROI of $363.5
到目前为止,我们已经关注了客户获取漏斗的第一个方面,例如建立意识和收集潜在线索。这些营销漏斗顶端的活动包含了从设计优秀的内容并通过社交渠道分发这些内容,到通过搜索引擎优化提高我们网站的知名度,或者付费在搜索引擎上做广告的所有内容。现在,我们将把重点转移到电子邮件营销,这是转化率较高的营销渠道之一。
特别是,电子邮件营销是营销中使用的最佳手段之一,其重点是在客户获取和购买漏斗中加强参与、提高转化率和保留率。
现在,我们已经收集了销售线索(电子邮件地址),并成功获得了客户的兴趣,是时候创建一个电子邮件营销活动来吸引这些销售线索,并最终将其转化为客户旅程中的后续阶段。
就当是礼貌好了。当有人开始听的时候,你应该说你好,对吗?当有人要求更多时,给他们你最好的。我认为欢迎系列既是聪明的营销,也是普通的礼貌。”——安迪·克雷斯托迪纳, 轨道传媒
既然我们已经在上面规划了我们的电子邮件内容和活动日历,我们将使用上面的模板通过电子邮件服务提供商 MailChimp 创建我们的第一封电子邮件。
Photo used in the email by Austin Distel on Unsplash
测试是提高转化率的一个有效方法。实现这一点的方法之一是通过对我们的电子邮件内容进行 A/B 测试。
现在我们已经创建了序列中的第一封电子邮件,并对其进行了测试,是时候发送了!分析电子邮件营销活动的结果是电子邮件营销活动的重要组成部分。检查对电子邮件营销活动很重要的指标有助于指导我们为未来的电子邮件发送提出建议。
对电子邮件二和三的建议
我们应该考虑到我们有 225 封退回的电子邮件和 30 个未订阅的客户。首先,我们应该确保取消订阅的电子邮件从邮件列表中删除。然后,我们需要通过处理被退回的电子邮件来调整列表,并根据需要通过归档错别字或删除它们来找到解决方案。
根据 A/B 测试的结果,我们应该调整邮件正文、主题行、CTA、视觉效果等元素。然后,我们可以对这两封邮件进行 A/B 测试。我们应该留出一些时间来发送每封电子邮件。分析完邮件二,我们需要一些时间来分析,然后调整邮件三。
无论是你的盛大开业还是你的公司已经建立,一个有效的电子邮件营销计划是促进和发展你的业务、增加收入和销售更多东西的关键。—Mailchimp.com
最终想法— 2019 年及以后
第四次工业革命代表了由于采用信息物理系统和物联网,人们生活、工作和相互交往方式的逐步改变。
信息物理系统是一种由基于计算机的算法管理的机制,该算法随着网络连接(互联网)及其用户而增强。
Infographic by Andrew Churchill at Raconteur
我们应该承认机器学习(ML)和人工智能(AI)促使我们进行更有效的数据分析的方式。人工智能使数字营销人员更易于管理,可以向客户提供更相关的内容、产品和服务信息,也称为“超个性化”。
第五次工业革命,或称工业 5.0,将聚焦于人与机器的合作,因为人类智能与认知计算和谐相处。通过协作机器人将人类重新投入工业生产,工人将获得更高技能,在生产中提供增值任务,从而为客户带来大规模定制和个性化。本·罗西
Infographic by Joydeep Bhattacharya at Single Grain
数字技能即服务(DSaaS)
原文:https://towardsdatascience.com/digital-skills-as-a-service-dsaas-1c5a7878b6be?source=collection_archive---------38-----------------------
你有没有想过,以你有生之年所获得的经验和技能,未来会是怎样?
第 1 章——知识是死资产
你有没有想过,以你有生之年所获得的经验和技能,未来会是怎样?
我们平均工作 40-50 年,在此期间,我们每天都获得新的知识。当我们谈论 IT 行业时,这个行业的人正在使用一些特定的软件或技术,因此他们在某个时间点成为专家。
在 40-50 年内,我们所有的技能对我们来说都变成了死资产。当然,我们可以培养新人,我们可以把一部分知识转移给他们。我找不到任何关于这方面的研究,但是我相信如果我们把我们所有的知识和技能作为 100%,那么最有可能的是我们最多可以转移其中的 0.000001%。其余的都是无用的资产。
几年前,我开始问自己,是否有办法将我的知识转化为数字资产,以便专业知识在未来发挥作用,而不会成为死资产。我知道这在今天是不可能的,当然,也没有办法将我们的大脑数字化。前一段时间,我决定尝试转换我的知识的一小部分。
第 2 章——挫折
我曾经做过八年的 SAP 顾问。我为不同的客户实施过新的 SAP 项目,也在 SAP 支持部门(服务台)工作过。
SAP 服务台的工作很糟糕,因为我的主要职责是解决终端用户的问题,所以我的大脑专注于维护现有的东西,而不是创造新的东西,这是一个遗憾。在工作中,我发现服务台收到的所有问题中有高达 40%是相同的;他们直截了当,我觉得自己是一只猴子。
我需要做的是每个月重复同样的行动来解决问题。这让我好心疼。从一个方面来说,这是好的,我收到了钱,我甚至不需要思考和强调我的大脑。另一方面,我工作的动力是零以下。
第 3 章—机会
服务台的工作成果非常好。即使是不好的经历也可以变成好的经历。
我开始思考:如果我在一家特定的公司工作,在服务台做同样重复的工作。那么最有可能的是,有成千上万像我一样的人在全球所有其他公司做着同样的事情。
我的下一个想法——“如何复制我并卖给世界上所有的公司来覆盖重复的工作?”
更重要的是,我开始不仅考虑服务台,还考虑一般的企业软件和企业软件的用户。我会解释的。在一家大型国际公司(FMSG)的销售部门,销售人员不是每天都在 ERP(例如 SAP)中工作,他们也没有在桌面前花费太多时间。但是他们使用来自 ERP 的信息,并且每次他们都需要关于客户信用限额的信息。
关于如何获得信贷限额,他们有两种选择。第一个选项是记住 SAP 在哪里,如何登录 SAP,凭证,交易,并找到具有所需信用限额的字段。第二种选择是给财务部门写一封邮件,因为财务部门的男生女生可以很快查到这些信息。每次他们选择第二个选项。为什么?他们更容易使用自然语言来获取信息;他们不想使用图形用户界面,因为这需要更多的努力。他们忘记了,对财务部的同事提出这样的要求,他们会花费更多的时间,他们自己的时间和同事的时间。
同样,如果在一个特定的公司存在这样的问题,那么很可能在所有其他公司,销售人员都面临着类似的问题。
新想法——如何复制我并销售给世界上所有的公司,让他们检查企业软件中的简单信息并提供答案?
第 4 章—解决方案
三年前,第一次看到 AI 解决方案的 demo——IP Soft 的 Amelia。我意识到了人工智能技术的能力,尤其是在处理自然语言方面。这改变了我的想法。
如果机器可以理解自然语言和请求的上下文,那么我们可以通过使用公式 If This Then That 来对流程流(对话树)进行编程以执行一些操作。
然后,市场上没有太多的人工智能服务(NLP,语法分析)允许一个没有任何人工智能/ML 知识的人开始构建聊天机器人解决方案。
第 5 章—数字技能
一方面,我们有商业面临的问题,另一方面,人工智能技术的能力。
为了从技术和问题中提取协同效应,我开始思考我们如何回答这个主要问题:如何复制我自己并出售给世界上所有的公司来覆盖重复的工作?
答案很简单——数字技能!
所以我试着把我在 SAP 中的知识分割成最小的片段(原子),每一个小片段都变得等同于数字技能。
一个简单的例子,我知道如何在 SAP 中重置密码,我可以在世界上任何一家使用 SAP 的公司开始工作,我可以从工作的第一秒开始重置密码。这是我的知识,如何在 SAP 中重置密码只有一种方法。因此,在 SAP 中重置密码的过程正在成为一项数字技能。
因此,通过使用人工智能技术,我们可以理解自然语言和上下文。另一方面,通过使用我们在 SAP 中的知识,我们可以构建 API 来重置密码。最后,通过结合人工智能技术和技术专业知识,我们可以与最终用户创建一个对话对话框来重置密码。
通过这种方法,我们已经回答了最初的问题。当然,这是一个高层次的回答,还有许多关于网络集成、安全性等问题。但是方法是明显的。
最后,我们建立了一个平台,允许我们创造数字技能并发布它们。
第 6 章—知识的数字化
我也非常喜欢亚马逊 Alexa 的整体概念。对终端客户来说,真正的价值不是设备或技术,而是 Alexa 技能和即插即用安装。你需要在家里花五分钟安装 Alexa,然后你就可以开始用你的声音获取天气或播放音乐等。对我来说,作为一个 Alexa 客户,真正的价值是技能,因为它们可以简化我的生活。
我们决定使用同样的方法。如果世界各地的人们可以创造企业软件或 IT 产品/程序的技能,并在市场上发布它们,会怎么样?
这将意味着任何人/开发者/顾问都可以通过创造数字技能来转移他们的知识,并在市场(技能商店)上发布它们,指定技能的价格并出售它们。
现在我们可以回到最初的问题:
" 你有没有想过,以你有生之年所获得的经验和技能,未来会是怎样??”
答案将是:
“你的经历可以造福世界,甚至在你退休后也能给你带来金钱。”
…或者您可以将这些技能传授或分配给孩子,让他们从中受益!
问候,
Andrii Rudchuk,首席执行官@ Hala.ai
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/97456.html