TowardsDataScience 博客中文翻译 2020(四百一十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

用于 Python 的谷歌翻译 API

原文:https://towardsdatascience.com/google-translate-api-for-python-723093c2144b?source=collection_archive---------6-----------------------

在本教程中。我将演示如何使用 Google Translate API 将数据从印地语翻译成英语。

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

图片来源 : API 布道者

有些事情我想在教程开始的时候说清楚。首先,我会将数据从印地语翻译成英语。此外,我将在一个 Pandas 数据框上演示翻译,这意味着我将把整个数据框从印地语转换成英语。这不是很好吗?好吧,我们开始吧。另外,你可以使用 Google Colab 笔记本来输入代码。我建议每个人都通读一下 Google Translate API for Python 的文档,这样当你开始编码的时候,你可能就知道我的意思了。这将是一件轻而易举的事,因为你在编码时会知道大部分的术语。

[## googletrans

快速和可靠-它使用相同的服务器,translate.google.com 使用自动语言检测批量翻译…

pypi.org](https://pypi.org/project/googletrans/)

打开你的 Google Colab,新建一个笔记本,命名为“Google _ translations . ipynb”。在实际输入代码之前,我希望你们所有人都在笔记本里手动安装谷歌翻译库。为此,只需键入!pip install googletrans。该命令自动下载并安装库,如下所示:

# install googletrans using pip
!pip install googletrans

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

!pip 安装 googletrans

导入必要的库

在这一步中,我们将导入我们将在整个教程中使用的必要库。库 熊猫 用于将 CSV 数据存储到数据帧中。而 googletrans 显然是用于翻译的,我们也将使用它的一个方法 Translator ,你将在后面的教程中看到。

# Importing the necessary librariesimport pandas as pd
import googletrans
from googletrans import Translator

将 CSV 文件存储为数据帧

在这一步中,我们将在 pandas 的帮助下将 CSV 文件存储为数据帧。要获取 CSV 文件,请单击下面的链接:

[## Vegetables_names_in_hindi.csv

编辑描述

drive.google.com](https://drive.google.com/open?id=1UZl-vf7uBh80GaQFk1-kxsa_zI-_rwFm)

下载 CSV 文件后,将文件上传到 Google Colab。左手边有 3 条水平线,悬停时提示“ 显示目录 ”。点击转到 文件 选项卡后再按 上传 。然后上传 CSV。

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

上传 CSV 文件

现在,您必须读取 CSV 文件并将其存储在数据框中。为了清楚起见,我显示了数据框的前 10 行。

# Reading and storing the CSV file as a dataframedf = pd.read_csv('/content/Vegetables_names_in_hindi.csv')
df.head(10)

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

在熊猫图书馆的帮助下,CSV 文件存储为数据帧

构建翻译器函数并翻译数据帧

这是我们将数据帧从印地语翻译成英语的地方。原始代码是从一篇[文章](http://translator = Translator() translations = {} for column in df.columns: # Unique elements of the column unique_elements = df[column].unique() for element in unique_elements: # Adding all the translations to a dictionary (translations) translations[element] = translator.translate(element).text translations)中获取的。但是我做了一些改变。因此,要了解更多关于翻译功能的信息,请点击[这里](http://translator = Translator() translations = {} for column in df.columns: # Unique elements of the column unique_elements = df[column].unique() for element in unique_elements: # Adding all the translations to a dictionary (translations) translations[element] = translator.translate(element).text translations)。

[## 使用 googletrans 库翻译熊猫数据框

Googletrans 是一个使用 Google Translate API 的免费 python 库。在这篇文章中,我们解释了如何使用…

towardsdatascience.com](/translate-a-pandas-data-frame-using-googletrans-library-fb0aa7fca592)

translator = Translator()
translations = {}
for column in df.columns: # Unique elements of the column unique_elements = df[column].unique()
    for element in unique_elements: # Adding all the translations to a dictionary (translations) translations[element] = translator.translate(element).texttranslations

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

存储在字典中的印地语到英语的值

基本上,我将所有独特的元素存储在一个数据帧中,然后在 translator 函数(Translator())的帮助下将每个元素翻译成英语。通过这样做,您可以从上面的输出中看到,所有的元素现在都被从印地语翻译成了存储在字典中的英语。

将翻译后的单词替换到原始数据帧

现在,最后一步是将转换后的数据替换或保存到新的或原始的数据框中。在这里,我将借助熊猫替换功能用原始数据帧替换它。

# Replacing all the translated words from the dictionary to the original dataframedf.replace(translations, inplace = True)
df.head(10)

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

最终翻译的数据(英语)

您已经成功地将 CSV 文件中的数据从印地语翻译成了英语。将来,默认情况下,您可以使用本教程作为参考,将数据从不同的语言翻译成英语。我希望你们今天学到了新东西。如果你对教程有任何疑问,请在下面的评论区提问。在那之前,下次见。再见。

用于 Python 的 Google 趋势 API

原文:https://towardsdatascience.com/google-trends-api-for-python-a84bc25db88f?source=collection_archive---------2-----------------------

在本教程中,我将演示如何使用 Google Trends API 来获取互联网上的最新热门话题。

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

图片来源:谷歌趋势

介绍

Google trends 是一个基于各种地区和语言,分析并列出 Google search 上热门搜索结果的网站。Google Trends 是 Google 的网站(很明显)。在本教程的帮助下,您可以使用 Python 从 Google trends 网站获得趋势分析结果(以及更多)。您不需要手动搜索和复制趋势分析结果,名为pytrends的 Python API 会为您完成这项工作。在开始之前,我希望你们所有人浏览一下pytrends API 的官方文档。

[## pytrends

谷歌趋势的非官方 API 允许从谷歌趋势自动下载报告的简单界面。主…

pypi.org](https://pypi.org/project/pytrends/)

在开始之前,本教程的全部代码可以在我的下面给出的 GitHub 资源库 中找到。请随意探索。

[## 塔努-北帕布/Python

permalink dissolve GitHub 是 4000 多万开发人员的家园,他们一起工作来托管和审查代码,管理…

github.com](https://github.com/Tanu-N-Prabhu/Python/blob/master/Google_Trends_API.ipynb)

装置

第一步是手动安装库。所以,打开你最喜欢的 IDE 或者笔记本开始输入下面的代码。我将使用 Google Colab ,因为这是我最喜欢的笔记本。

**如果你用的是 jupyter notebook,就按原样输入代码(确保你有“!”**开头)

!pip install pytrends

或者,如果您使用的是 IDE,只需键入以下代码

pip install pytrends

执行上述代码后,您应该会得到如下所示的成功消息:

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

库成功安装

履行

连接到 Google

您必须首先连接到 Google,因为毕竟我们是从 Google Trends 请求 Google Trends 主题。为此,我们需要从pytrends.request库中导入名为TrendReq的方法。此外,我将导入 pandas 库来存储和可视化数据,您将在后面的教程中看到这些数据。

import pandas as pd                        
from pytrends.request import TrendReqpytrend = TrendReq()

按地区划分的利息

让我们看看世界范围内该地区流行的术语。我会选择,要搜索的词为“ 泰勒斯威夫特 ”(我好喜欢她……).

pytrend.build_payload(kw_list=[‘Taylor Swift’])# Interest by Region
df = pytrend.interest_by_region()
df.head(10)

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

按地区划分的利息

现在你可能在想什么是价值观,它们代表什么?这些值是按 0 到 100 的范围计算的,其中 100 是最受欢迎的位置,作为该位置中总搜索数的一部分,值 50 表示该位置受欢迎程度为一半。值为 0 表示没有足够的数据用于此项的位置。来源谷歌趋势

让我们把结果绘制在柱状图上,因为有时视觉表现能给出一个清晰的图像。

df.reset_index().plot(x=’geoName’, y=’Taylor Swift’, figsize=(120, 10), kind =’bar’)

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

条形图

同样,您使用参数resolution = 'COUNTRY_NAME'来过滤结果。

每日搜索趋势

现在,让我们来了解一下全球每日热门搜索趋势。为此,我们必须使用trending_searches()方法。如果你想在全球范围内搜索,不要传递任何参数。

# Get Google Hot Trends data
df = pytrend.trending_searches(pn=’united_states’)
df.head()

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

趋势搜索

确保您输入小写的国家名称pn = "canada"。另外,你可以将上述结果与 google trend 的结果进行比较。要了解今天的热门话题,只需使用:

df = pytrend.today_searches(pn=’US’)

排行榜

让我们看看 2019 年的趋势。在top_charts方法的帮助下,我们可以得到每年的热门搜索。

# Get Google Top Charts
df = pytrend.top_charts(2019, hl='en-US', tz=300, geo='GLOBAL')
df.head()

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

去年的热门标题(2019)

要比较结果,只需访问谷歌趋势。我们可以指定想要查看趋势搜索的年份和国家。

谷歌关键词建议

让我们看看如何才能获得谷歌的关键词建议。如果你不知道我在说什么?下图更清楚地解释了事情。

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

关键词建议

# Get Google Keyword Suggestionskeywords = pytrend.suggestions(keyword='Mercedes Benz')
df = pd.DataFrame(keywords)
df.drop(columns= 'mid')   # This column makes no sense

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

关键词建议

相关查询

当用户搜索一个主题时,他们也会搜索一些相关的东西,这是很常见的事情。这些被称为相关查询。让我们看看题目“ 冠状病毒 ”的相关查询有哪些。请记住,当您想要更改主题名称时,只需使用新名称作为参数再次运行下面的代码。

pytrend.build_payload(kw_list=['Coronavirus'])

现在让我们运行方法related_queries,该方法返回一个字典,其中包含与主题“ 冠状病毒 ”相关的所有查询

# Related Queries, returns a dictionary of dataframesrelated_queries = pytrend.related_queries()
related_queries.values()

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

对冠状病毒的相关疑问

同样,您也可以搜索相关主题,只需运行以下代码即可:

# Related Topics, returns a dictionary of dataframesrelated_topic = pytrend.related_topics()
related_topic.values()

本教程到此结束,我希望你们已经学到了一些东西。如果你们对教程有任何疑问,请在评论区告诉我。虽然这是一个简短的教程,但有很多东西需要学习。好的,下节课再见,祝你有美好的一天!!!

谷歌在机器学习中的灵活性方法

原文:https://towardsdatascience.com/googles-approach-to-flexibility-in-machine-learning-170bd9d8f169?source=collection_archive---------37-----------------------

如何建立一个亚麻阿尔法版本的 CNN?

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

UnsplashMusicFox Fx 拍摄的照片

想到机器学习,首先想到的框架是 Tensorflow 和 PyTorch,如果你想与深度神经网络合作,这是目前最先进的框架。技术变化很快,需要更多的灵活性,因此谷歌的研究人员正在为开源社区开发一个新的高性能框架:Flax。

计算的基础是 JAX 而不是 NumPy,NumPy 也是谷歌的一个研究项目。JAX 最大的优势之一是使用了 XLA,一个特殊的线性代数编译器,支持在 GPU 和 TPU 上执行。对于那些不知道的人来说,TPU(张量处理单元)是一个专门为机器学习优化的芯片。JAX 重新实现了 NumPy 的一部分,在 GPU/TPU 上运行你的函数。

Flax 专注于以下关键点:

  • 轻松阅读代码
  • 更喜欢复制,而不是糟糕的抽象或膨胀的功能
  • 有用的错误消息,似乎他们从 Tensorflow 错误消息中吸取了教训
  • 基本实现的易扩展性

赞够了,现在开始编码吧。

因为 MNIST 的例子变得很无聊,我将为辛普森一家建立一个图像分类,不幸的是,Maggie 在数据集中丢失了:-(。

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

数据集的样本图像

首先,我们安装必要的库并解压缩数据集。不幸的是,此时您仍然需要 Tensorflow,因为 Flax 缺少一个好的数据输入管道。

现在我们导入库。你可以看到我们有两个“版本”的 numpy,普通的 numpy 库和 JAX 实现的 API 的一部分。print 语句根据可用的硬件输出 CPU、GPU 或 TPU。

为了训练和评估,我们首先必须创建两个 Tensorflow 数据集,并将它们转换成 numpy/jax 数组,因为 FLAX 不接受 TF 数据类型。这是目前有点 hacky,因为评估方法不采取批次。我必须为 eval 步骤创建一个大的批处理,并从中创建一个 TF 特征字典,它现在是可解析的,并可以在每个时期后提供给我们的 eval 步骤。

模型

CNN-class 包含了我们的卷积神经网络。当你熟悉 Tensorflow/Pytorch 时,你会发现它非常简单。我们的flax.nn.Conv的每个调用都定义了一个可学习的内核。我使用了 MNIST 的例子,并用一些额外的层来扩展它。最后,我们有四个输出神经元的密集层,因为我们有一个四类问题。

与 Tensorflow 不同,激活函数是显式调用的,这使得测试新的和自己编写的激活函数变得非常容易。FLAX 基于模块抽象,启动和调用网络都是通过 apply 函数完成的。

亚麻的度量标准

当然,我们想衡量我们的网络变得有多好。因此,我们计算损失和准确性等指标。我们的精度是用 JAX 库计算的,而不是 NumPy,因为我们可以在 TPU/GPU 上使用 JAX。

为了测量我们的损失,我们使用交叉熵损失,不像在 Tensorflow 中它是由你自己计算的,我们还没有可能使用现成的损失对象。如你所见,我们使用@jax.vmap作为损失函数的函数装饰器。这将我们的代码矢量化,以便在批处理中高效运行。

cross_entropy_loss是如何工作的?@jax.vmap接受两个数组,logits 和 label,并对每一对执行我们的cross_entropy_loss,从而允许批处理的并行计算。单个示例的交叉熵公式为:

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

对于四个输出神经元中的一个,我们的基本事实 y 是 0 或 1,因此我们的代码中不需要求和公式,因为我们只需要计算正确标签的 log(y_hat)。在我们的损失计算中使用平均值,因为我们有批次。

培训

在我们训练步骤中,我们再次使用函数装饰器@jax.jit,来加速我们的函数。这与 Tensorflow 非常相似。请记住batch[0]是我们的图像数据,batch[1]是我们的标签。

损失函数loss_fn返回当前模型optimizer.target的损失,我们的jax.grad()计算其梯度。在计算之后,我们像在张量流中一样应用梯度。

在 FLAX 中,评估步骤非常简单。请注意,完整的评估数据集将传递给此函数。

经过 50 个纪元后,我们有了非常高的精确度。当然,我们可以继续调整模型和优化超参数。

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

对于这个实验,我使用了 Google Colab,所以如果你想自己测试,用 GPU/TPU 创建一个新环境,并从 Github 导入我的笔记本。请注意,FLAX 目前不在 Windows 下工作。

结论

值得注意的是 FLAX 目前仍处于 alpha 阶段,并不是谷歌的官方产品。

到目前为止,这项工作给快速、轻量级和高度可定制的 ML 框架带来了希望**。目前完全缺少的是数据输入管道,所以 Tensorflow 仍然必须使用。目前的一组优化器很不幸地仅限于带有动量的 ADAM 和 SGD。我特别喜欢如何使用这个框架的非常严格的前进方向和高度的灵活性。我的下一个计划是开发一些目前还没有的激活功能。Tensorflow、PyTorch 和 FLAX 之间的速度比较也会非常有趣。**

如果你想尝试一下 FLAX,可以查看一下文档和他们的 Github 页面

如果你想下载我的带有数据集的例子,只需克隆 SimpsonsFaceRecognitionFlax。

谷歌的数据科学面试脑筋急转弯

原文:https://towardsdatascience.com/googles-data-science-interview-brain-teasers-7f3c1dc4ea7f?source=collection_archive---------3-----------------------

简单、直观地解释谷歌的一些问题解决方案

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

照片由米切尔罗Unsplash

作为谷歌数据科学面试的一部分,他们喜欢问一些他们称之为“解决问题”的问题,这些问题非常类似于脑筋急转弯。在这篇文章中,我们将看看谷歌提出的六个问题,并提供以下答案!

如果你对更多的问题和解决方案感兴趣,请点击这里的 查看谷歌数据科学访谈中问到的一堆 产品、SQL 和编码问题。否则,这里有一个关于 在谷歌数据科学面试 中期待什么的伟大指南。

问题和答案

1。一个盒子里有 12 张红卡和 12 张黑卡。另一个盒子里有 24 张红牌和 24 张黑牌。你想从两个盒子中的一个里随机抽取两张卡片,一次抽取一张。哪个盒子得到同色卡片的概率更大,为什么?

有 24 张红卡和 24 张黑卡的盒子获得两张同色卡片的概率更大。让我们走过每一步。

假设你从每副牌中抽出的第一张牌是红色的 a。

这意味着在有 12 个红和 12 个黑的牌组中,现在有 11 个红和 12 个黑。因此,你再抽一张红色的几率等于 11/(11+12)或 11/23。

一副牌中有 24 个红和 24 个黑,那么就有 23 个红和 24 个黑。因此,你再抽一张红色的几率等于 23/(23+24)或 23/47。

由于 23/47 > 11/23,所以卡数较多的第二副牌有较大概率得到相同的两张牌。

2。你在赌场,有两个骰子可以玩。你每掷一次 5 就赢 10 美元。如果你一直玩到你赢了然后停止,预期的回报是多少?

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

  • 我们假设每次你想玩的时候要花 5 美元。
  • 两个骰子有 36 种可能的组合。
  • 在 36 种组合中,有 4 种组合会掷出 5(见蓝色)。这意味着有 4/36 或 1/9 的机会掷出 5。
  • 1/9 的胜算意味着你会输八次,赢一次(理论上)。
  • 因此,您的预期支出等于$ 10.00 * 1-$ 5.00 * 9 =-35.00。

编辑:谢谢各位的评论和指出,应该是-$35!

3。如何判断给定的硬币是否有偏差?

这不是一个难题。答案很简单,就是进行假设检验:

  1. 零假设是硬币没有偏向,翻转头的概率应该等于 50% (p=0.5)。另一个假设是硬币有偏差,p!= 0.5.
  2. 抛硬币 500 次。
  3. 计算 Z 得分(如果样本小于 30,则需要计算 t 统计量)。
  4. 对比 alpha(双尾检验所以 0.05/2 = 0.025)。
  5. 如果 p 值>α,则不拒绝 null,硬币不偏。
    如果 p 值<α,则 null 被拒绝,硬币有偏差。

在这里 了解更多假设检验

4。让不公平的硬币变得公平

由于抛硬币是二进制的结果,你可以通过抛两次硬币来使不公平的硬币变得公平。如果你掷两次,有两种结果可以赌:正面跟着反面或者反面跟着正面。

P(正面)* P(反面)= P(反面)* P(正面)

这是有意义的,因为每一次抛硬币都是一个独立的事件。这意味着如果你得到正面→正面或反面→反面,你需要重新抛硬币。

5。你即将登上去伦敦的飞机,你想知道你是否必须带雨伞。你随便打电话给三个朋友,问他们是否在下雨。你的朋友说实话的概率是 2/3,他们通过撒谎对你恶作剧的概率是 1/3。如果他们三个都说在下雨,那么伦敦下雨的概率是多少。

你可以看出这个问题与贝叶斯理论有关,因为最后一个陈述本质上遵循这样的结构,“假设 B 为真,A 为真的概率是多少?”因此,我们需要知道某一天伦敦下雨的概率。假设是 25%。

P(A) =下雨的概率= 25%
P(B) =三个朋友都说在下雨的概率
P(A|B)假定他们说在下雨的概率
P(B|A)假定在下雨的情况下三个朋友都说在下雨的概率= (2/3) = 8/27

第一步:求解 P(B)
P(A | B)= P(B | A) * P(A)/P(B),可以改写为
P(B)= P(B | A)* P(A)+P(B |非 A)* P(非 A)
P(B)=(2/3)* 0.25+(1/3)* 0.75 = 0.25 * 8/27+0.75 * 1

第二步:求解 P(A | B)
P(A | B)= 0.25 *(8/27)/(0.25 * 8/27+0.75 * 1/27)
P(A | B)= 8/(8+3)= 8/11

因此,如果三个朋友都说在下雨,那么有 8/11 的几率是真的在下雨。

6。给你 40 张四种不同颜色的卡片——10 张绿卡,10 张红牌,10 张蓝卡,10 张黄牌。每种颜色的卡片都从一到十编号。随机抽取两张牌。找出所选卡片不是相同号码和相同颜色的概率。

由于这些事件不是独立的,我们可以使用规则:
P(A 和 B) = P(A) * P(B|A),也等于
P(非 A 非 B) = P(非 A) * P(非 B |非 A)

例如:

P(非 4 非黄)= P(非 4) * P(非黄|非 4)
P(非 4 非黄)= (36/39) * (27/36)
P(非 4 非黄)= 0.692

所以,挑出来的牌不是同号同色的概率是 69.2%。

就是这样!如果任何答案没有意义,请让我来,我会尽我所能解释得更透彻:)

如果你对更多数据科学问题感兴趣,请查看面试提问

感谢阅读!

Google 的 EfficientDet:概述

原文:https://towardsdatascience.com/googles-efficientdet-an-overview-8d010fa15860?source=collection_archive---------7-----------------------

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

来源

使用网络优化网络

如果你像我一样,读了谷歌的 EfficientDet 论文,你会问“到底发生了什么?”。不要担心,我已经审阅了论文,并将尽我所能解释这个模型。

这个模型建立在以前的工作(像许多其他模型一样)之上,更具体地说,是一项被称为 EfficientNet 的关键工作:

  1. EfficientNet:反思卷积神经网络的模型缩放

在我们深入研究谷歌新的目标检测模型的细节之前,让我们先做一下 EfficientNets 的背景工作。

效率网

本文作者关注如何有效地扩展卷积神经网络(ConvNets)以提高性能。缩放网络以提高性能的典型方法是增加以下之一:网络深度、宽度或图像分辨率。虽然有可能将两个或更多的这些一起缩放,但是目前这是一个冗长的过程,并且通常导致模型具有次优的准确性和效率。下面是不同缩放方法的图示,直接摘自该论文:

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

缩放神经网络模型的方法。摘自谭&乐 2019

作者旨在回答这个问题:

有没有一种原理性的方法可以提高网络的精度和效率?

你可能已经猜到了,但答案是肯定的。他们发现平衡网络宽度/深度/分辨率的所有维度非常重要。让你吃惊的是他们的缩放方法的简单性。他们只是用一个恒定的比例来缩放每个维度。就是这样!他们称这种方法为复合缩放。随着用于训练神经网络的图像变得更大,复合缩放开始变得有意义,因为更大的图像需要更深的网络来增加感受域,并需要更多的通道来捕捉更大图像中的更小细节。

我们很快发现,模型缩放带来的性能提升在很大程度上依赖于基线网络。作者更进一步,使用一种叫做神经结构搜索(NAS)的算法来寻找最佳基线网络。在给定目标函数的情况下,高级 NAS 算法使用强化学习来确定最佳结构。使用 NAS 创建了一个新的模型系列,称为 *EfficientNets。*在 ImageNet 数据集上将这些模型的性能与 ConvNets 进行了比较,结果如下图所示:

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

与其他分类器相比,EfficientNet 系列的性能。摘自谭&乐 2019

从这些结果中引人注目的是,这些模型在准确性和参数数量方面都优于其他先进模型。作者还表明,这些模型可以很好地转移到其他数据集,在 8 个公开可用的数据集中,有 5 个成为得分最高的模型,同时参数减少了 21 倍。

复合模型缩放

那么复合缩放实际上是如何工作的呢?首先,让我们将 ConvNet 定义为:

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

谭&乐,2019 一个共网的定义

他们本质上将其描述为由应用于输入张量的运算(例如卷积)组成的层列表。

复合缩放试图扩展网络长度(Lᵢ)、宽度(Cᵢ)和/或分辨率(Hᵢ、Wᵢ),而不改变基线网络中预定义的 Fᵢ。固定 Fᵢ的基本原理是为了减少设计空间,但考虑到 Lᵢ、Cᵢ、Hᵢ和 Wᵢ仍然可以探索每一层,设计空间仍然相当大。为了进一步减小设计空间,施加了一个限制,即所有层必须以恒定的比率均匀缩放。复合缩放的目标是在给定资源约束的情况下最大化模型的准确性,这被公式化为一个优化问题:

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

复合扩展的目标是优化系统资源约束。摘自摘自谭&乐,2019

w、d 和 r 是用于缩放网络宽度、深度和分辨率的系数。预定义参数的符号上方有一个^。预定义网络的示例如下所示:

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

预定义的高效网络。摘自谭&乐 2019

缩放尺寸

扩展 ConvNet 的深度(d)、宽度(w)和分辨率®的难点在于,这三者相互依赖,并且会在不同的资源限制下发生变化。因此,通常只在一个维度上缩放。

**深度:**缩放深度是缩放 ConvNet 最常见的方式。网络变得更深,因为更深的网络可以提取更丰富和更复杂的特征。不利的一面是,由于梯度消失的问题,更深的凹网更难训练。这个问题通过跳过连接和批量标准化得到了缓解,但是对于非常深的网络来说,回报是递减的。

**宽度:**通常用于较小的车型。这些网络通常更擅长捕获图像的细粒度特征,并且更容易训练。

**分辨率:**提高图像的输入分辨率,ConvNets 可以捕捉图像中的细粒度模式。早期的 con vnet 在 224x224 上训练,而较新的 con vnet 在 480x480 上训练。下图显示了分别扩展这些维度的性能(在预定义的网络上执行扩展,如上所示):

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

通过单独扩展每个维度来提高性能。左边是宽度,中间是深度,右边是分辨率。摘自谭&乐 2019

这一结果的主要观察结果表明,扩大网络的深度、宽度和分辨率可以提高精度,但对于更深、更大的模型,精度会降低。

复合缩放

到目前为止,显而易见的是,标度维数不是独立的。例如,作者指出:

更高分辨率的图像应该需要更深的网络,以便更大的感受野可以在更大的图像中捕获包括更多像素的类似特征。

作为提高分辨率的结果,网络宽度也应该增加以捕捉更精细的细节。这些直觉表明,模型需要在所有这些维度上进行缩放,而不是在单一维度上。为了验证他们的直觉,作者在深度(d)和分辨率®的不同组合上测量了网络的宽度(w)(下图)。下图中的缩放示例从基线网络(d=1.0,r=1.0)开始,有 18 个分辨率为 224x224 的卷积层。最后一个基线网络(d=2.0,r=1.3)产生 36 个卷积层,分辨率为 299x299。

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

扩展网络宽度。每条线代表由图例中定义的系数缩放的不同作品。每条线上的一点显示不同的宽度。该网络是从前面显示的预定义网络扩展而来的。摘自谭&乐 2019

这一结果使作者观察到,为了获得更好的模型精度和效率,在缩放过程中平衡网络的所有维度是重要的。根据这一观察,他们提出了一种复合缩放方法。该方法使用复合缩放系数φ来统一缩放网络尺寸:

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

在等式中,α、β和γ是常数,可以通过网格搜索来确定。用户定义的系数(φ)控制如何为模型缩放分配资源。而α、β和γ分别定义了如何将这些资源分配给网络的宽度、深度和分辨率。

通过缩放现有的 ConvNets 来评估缩放方法。为了真正利用这种新方法,一个名为 **EfficientNet 的新架构家族应运而生。**他们通过使用 NAS 优化准确性和 FLOPS 来构建基线网络。他们的研究产生了一个叫做 EfficientNet-B0 的高效网络。下表说明了 EfficientNet-B0 网络(它与前面显示的预定义网络完全相同):

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

高效网络-B0 网络。摘自谭&乐 2019

他们的下一步是通过分两步应用复合扩展来扩展 EfficientNet-B0:

  1. 将φ固定为 1。对α、β和γ进行网格搜索。他们发现 EfficentNet-B0 的最佳值为α = 1.2,β = 1.1,γ = 1.15。
  2. 将α、β和γ固定为常数,并按比例放大不同φ的基线网络,以获得到 B7 的有效 Net-B1。

下表显示了这些新网络与其他先进网络相比的性能:

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

EfficinetNet 模型系列与其他分类器相比的性能。摘自谭&乐 2019

与现有的 ConvNets 相比,EfficientNets 的性能始终更好,并且减少了参数和触发器的数量。下表和下图进一步证实了这一点:

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

通过高效网络实现的速度提升。摘自谭&乐 2019

与 ResNet-152 相比,EfficientNet-B1 的 CPU 延迟快 5.7 倍,尽管它们具有相当的准确性。在精确度范围的顶端,GPipe 模型对于数据集上具有 84.3%精确度的单个图像具有 19.0 秒的延迟。最大的 EfficientNet 型号(B7)只有 3.1 秒的延迟,这是 6.1 倍的加速。下图显示了 FLOPS 与 Imagenet Top-1 精度的对比。

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

与其他分类器相比,EfficientNet 模型系列的 FLOPS。摘自谭&乐,2019

该图清楚地显示了 EfficientNet 系列更好地利用了可用资源,该模型在准确性方面表现更好,并且显著减少了 FLOPS 的数量。

单维缩放

为了消除复合缩放方法对 EfficientNet 架构的影响,B0 架构仅在一维上进行缩放。这些结果如下图所示:

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

用不同的方法扩展 EfficientNet-B0 网络。摘自谭&乐 2019

显而易见,复合比例远远优于单一维度的比例,后者很快导致收益递减。这突出了复合缩放的重要性。为了进一步理解为什么复合缩放如此有效,下图比较了一系列缩放 B0 模型的类激活图:

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

不同缩放方法的类激活图。显示复合缩放提供了更多相关的激活。摘自谭&乐 2019

复合缩放模型倾向于关注具有更多相关对象细节的区域。其他型号对这些细节关注较少。

总体而言,本文作者表明,在给定一组资源约束的情况下,平衡网络深度、宽度和分辨率对于优化性能至关重要。复合缩放方法提供了一种在所有这些维度上有效缩放模型的优雅方式。这就引出了本文的下一部分,Google 的 EfficientDet,它建立在上面讨论的工作之上。

EfficientDet:可扩展且高效的对象检测

近年来,在对象检测方面取得了巨大的进步,产生了更精确的模型,但代价是增加了计算量。这些巨大的计算成本将阻碍它们在许多现实世界应用中的部署,例如自动驾驶汽车,其中低延迟预测是必要的。在这样的约束下,模型效率对于对象检测来说非常重要。模型检测器架构,如一级和无锚检测器更有效,但通常以精度为代价。因此,人们自然会问:

是否有可能建立一个可扩展的检测架构,同时具有更高的准确性和更好的效率?

Google 的 EfficientDet 旨在解决这个问题,要回答这个问题,我们首先需要了解当前物体探测器设计选择的挑战:

**挑战 1——高效的多尺度特征融合:**特征金字塔网络(FPN)广泛用于多尺度特征融合。最近的工作,如 PANet 和 NAS-FPN 允许跨尺度特征融合。先前的特征融合方法简单地将特征相加在一起,然而,这些特征具有不同的分辨率,并且已经观察到对输出融合特征的贡献不相等。为了解决这个问题,提出了加权双向特征金字塔网络。BiFPN 具有可学习的权重来确定不同输入特征的重要性,其应用自顶向下和自底向上的多尺度特征融合。

**挑战 2 -模型缩放:**对象检测器的模型缩放通常会牺牲准确性或效率。受 EfficientNets 作者所做工作的启发,提出了一种用于对象检测器的复合缩放方法。像 EfficientNets 一样,这种缩放方法也可以缩放网络的深度、宽度和分辨率。

EfficientNet 与提议的 BiFPN 和复合缩放的结合创造了一个新的检测机系列,称为 EfficientDet 。与以前的物体检测器相比,该系列模型始终实现了更高的精度,并将触发器数量减少了一个数量级。EfficentDet 对目标探测社区的贡献可以总结为三点:

  • BiFPN 简介。这是一个加权的双向特征网络,便于进行多尺度特征融合
  • 提出一种缩放方法,以原则方式缩放主干、特征网络、盒/类网络和分辨率
  • 结合以上两点,产生了 EfficientDet,一种新的物体检测器系列。这些模型在广泛的资源限制范围内具有更好的准确性和效率

BiFPN

为了理解 BiFPN 的贡献,我们需要首先将问题公式化。多尺度特征融合旨在聚合不同分辨率的特征。这可以表示为多尺度特征的列表:

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

其中上面的每个元素代表 lᵢ.级别的特征目标是找到一个转换 f ,它可以聚集特性并输出一系列新特性:

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

为了理解这一点的重要性,我们来看一下传统的 FPN,它集成了不同尺度的功能:

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

传统的 FPN 网络。摘自 谭等著 2019 年

它有 3–7 个输入要素(P₃ - P₇),其中每个输入要素代表一个具有给定分辨率的要素级别。该 FPN 以自上而下的方式聚合多尺度要素:

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

Resize 通常是分辨率匹配的上采样或下采样操作。最后, Conv 是用于特征处理的卷积运算。

上面显示的 FPN 固有地受到信息单向流动的限制。为了解决这个问题,PANet 增加了一个自下而上的路径,NAS-FPN 使用神经架构搜索来寻找更好的跨尺度特征网络拓扑。下图显示了这两种网络设计:

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

三种不同的 FPN 结构。★2019*谭等。*

作者表明,PANet 比 NAS-FPN 获得了更好的精度,但代价是更多的参数和计算。提出了几项优化措施:

  1. 移除只有一条输入边的结点。如果某个结点只有一条输入边,且没有要素融合,则该结点对要素网络目标的贡献可能较小。这导致了一个简化的面板(见上图)
  2. 从输入节点到输出节点只在同一层增加一条额外的边。这将融合更多的功能,而不需要太多的额外成本
  3. 存在双向信息流(自上而下和自下而上)。每个双向路径被视为其自己的层,因此允许这些层重复,从而实现更高级别的特征融合(BiFPN,如下)

通过这些优化,新的特征网络被命名为**双向特征金字塔网络(BiFPN)。**BIF pn 如下图所示:

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

BiFPN 结构。摘自 谭等译 2019

加权特征融合

如前所述,不同分辨率的特征融合通常包括调整它们的大小,然后进行求和运算。这种方法的缺点是所有特征都被同等对待。由于这些特征具有不同的分辨率,它们通常对输出特征的贡献是不相等的。为了解决这个问题,计算每个输入特征的额外权重,以允许网络学习每个特征的重要性。总共测试了三种加权融合方法:

  1. 无界融合:包含一个无界可学习权重。但是,因为它是无界的,所以会导致训练不稳定,所以被丢弃
  2. 基于 Softmax 的融合:对每个权重应用 softmax,从而将权重限制在 0 到 1 之间,但这导致延迟显著增加。
  3. 快速归一化融合:等式如下。通过 Relu 的应用,确保每个权重(ωᵢ)大于或等于零。ϵ设置为 0.001 以避免数值稳定性。与基于 softmax 的方法相比,这种计算在 GPU 上要快 30%。

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

快速标准化融合。摘自 谭等著 2019

最终的 BiFPN 集成了双向跨尺度连接和快速归一化方法。这方面的一个例子如下所示,它是 BiFPN 中的第 6 层:

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

P6 层中跨尺度连接的集成示例。摘自 谭等译 2019

上面的等式是自上而下路径的中间等式,下面的等式是自下而上路径的等式。

效率检测

随着 BiFPN 的发明,一种新的检测器系列被创造出来,称为 EfficientDet。EfficientDet 的架构如下所示,使用 EfficientNet 作为主干网络。

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

具有 EfficientNet 主干和 BiFPN 结构的 EfficientDet 架构。摘自 谭等著 2019 年

该网络中的 BiFPN 用作特征网络。它从主干网络中提取第 3 - 7 层的特征,并重复应用 BiFPN。融合后的特征被输入到一个类和盒网络中,以预测物体的类和包围盒。

复合缩放

受 EfficientNets 中复合缩放的启发,提出了一种新的复合缩放目标检测方法。该方法使用系数(φ)来联合放大主干网络、BiFPN 网络、类/箱网络和分辨率的所有维度。每个网络组件的扩展描述如下:

  • **主干网络:**使用 B0-B6 中定义的相同系数,以便可以重复使用其 ImageNet 预训练权重
  • BiFPN: 宽度呈指数增长(通道),深度呈线性增长(层)。形式上,宽度和深度使用以下等式进行缩放:

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

  • **框/类预测网络:**宽度固定为与 BiFPN 中相同,但深度线性增加,如下所示:

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

  • **输入图像分辨率:**由于分辨率必须能被 2⁷ = 128 整除,因此分辨率也线性增加。这是通过以下等式实现的:

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

使用上面所示的三个等式,创建了从 efficient det-D0(φ= 0)到 D6(φ= 6)的家族网络。下表进一步阐述了这一点:

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

不同 EfficientDet 模型的架构总结。摘自 谭等著 2019

该表还包含一个 D7 模型,除非更改批量大小或其他设置,否则该模型无法放入内存。结果,通过仅增加输入图像分辨率,D6 模型被扩展到 D7。

性能

这些型号与其他探测器相比如何?下表显示了 EfficientDet 系列与按精度分组的其他型号的比较:

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

与其他检测机相比,EfficientDet 系列型号的性能。摘自【谭】等著 2019

与以前的检测机相比,EfficientDet 系列型号在各种精度水平和资源限制下实现了更高的精度和效率。

为了了解 BiFPN 对模型性能的贡献,下表比较了主干网和 BiFPN 的影响:

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

EfficientDet 模型中每个组件的贡献(根据 mAP)。摘自 谭等著 2019 年

很明显,强主干结构提高了性能,但是 BiFPN 的增加不仅通过增加 mAP 而且通过减少参数和触发器的数量进一步提高了性能。另一个关键的补充是加权连接。与其他 fpn 相比,加权连接如何影响性能:

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

加权连接对地图的影响。摘自 谭等译 2019

你可以看到,受到单向信息流限制的普通 FPN 精确度最低。PANet 和 NAS-FPN 模型显示了更高的精度,但需要更多的参数和触发器。总体而言,BiFPN 以更少的参数和触发器实现了最佳精度。

结论

EfficientDet 网络深受 EfficientNet 模型工作的启发。使用复合缩放,与其他现代对象检测模型相比,该模型在准确性和效率方面的性能都得到了提高。事实证明,EfficientDet 系列模型在 GPU 和 CPU 上具有显著的加速性能,这对于要求低延迟的应用程序来说至关重要。我相信我们正在进入一个目标探测发展的阶段,在这个阶段优化当前的模型将变得至关重要。我们总是可以建立更大更深的模型以获得更高的精确度,但是我们能优化它们以充分利用它们吗?

基于 Python 的戈登增长模型

原文:https://towardsdatascience.com/gordon-growth-model-with-python-c2670c8022a9?source=collection_archive---------27-----------------------

使用 Gordon 增长模型评估 Python 公司的价值

戈登增长模型(GGM)是一种用来评估公司价值的工具。这一理论假设公司的价值是所有未来股息支付的总和贴现到今天的价值(即现值)。也可以称为股利贴现模型。在这篇文章中,我们将学习如何使用 Python戈登增长模型对一家公司进行估值。

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

照片由 Aditya VyasUnsplash 拍摄

理解戈登增长模型(GGM)

GGM 模型的优点之一是计算起来非常简单。

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

评估公司价值的戈登增长模型

为了计算我们的模型,我们只需要三个元素:

  • 股息(Do) :公司支付的股息。通过查看公司公开的年度/季度报告,我们可以很容易地获得公司支付的最新股息。
  • 增长(g): 是红利预期的常数增长率。计算 g 的一种方法是,取一家公司最近支付的两到三次股息,计算增长,并用它来代表持续增长。这种方法的问题是,如果一家公司保持其股息支付年复一年不变,在我们的计算增长率将为零。为了解决这个问题,我们将采取不同的方法,用可持续增长率来代替。可持续增长率是指一家公司无需通过额外股本融资就能实现的增长率。
  • 权益成本(ke): 我们将使用资本资产定价模型(CAPM)来估算所需的权益成本。如果你想进一步了解 CAPM 模型,我推荐你 看看下面这篇文章

戈登增长模型假设

该模型使用了一些假设,我们需要记住这些假设:

  • 股息增长率逐年保持不变。
  • 股息是股东财富的核心。
  • 权益成本必须大于股息增长。否则,我们的模型会给出负值。

计算戈登增长模型所需的数据

我们将使用免费 API、financialmodelingprep 和熊猫数据阅读器来检索公司信息和市场数据。以下是使用 GGM 模型得出公司估值所需的数据:

  1. 最新公司分红

2.为了通过 CAPM 模型计算权益成本(ke) ,我们需要:

  • 公司 Beta ( B )。它可以从financialmodelingprepAPI 中提取。
  • 无风险利率( RF )。我们将使用 1 年期国库券作为我们的模型无风险利率
  • 市场预期收益( ERm )。我们将计算标准普尔 500 指数最近一年的回报,作为我们市场预期回报的代理。另一种方法是采用美国股票的超额历史年回报率。

3.为了计算可持续增长率,我们需要支付率和股本回报率(ROE)。

资本资产定价模型:

预期收益(即权益成本)= Rf + B (ERm — Rf

用 Python 计算戈登增长模型

现在我们对 GGM 模型(或股息贴现模型)有了更多的了解,让我们开始构建我们的脚本。

这个想法是构建一个 Python 函数,它将一个公司股票代码作为参数。该函数将返回公司价值作为结果(即股票价格)。

import requests

def valuecompany(quote):
 #getting the latest dividend
   dividend = 
requests.get(f'https://financialmodelingprep.com/api/v3/financials/income-statement/{quote}')
    dividend = dividend.json()
    dividend = dividend['financials']
    Dtoday = float(dividend[0]['Dividend per Share'])
    print(Dtoday)

valuecompany('JNJ')
#Return:
3.47931249313
3.47 is the dividend paid by Johnson & Johnson in the latest year

在函数的第一部分,我们对 API 端点进行 http 调用,以检索作为参数传递的公司的股息值。在我们的例子中,我们传递了 Johnson & Johnson 的股票代码(注意,API 通过股票代码来识别公司)。

如代码所示,我们解析财务列表的第一个元素*,它包含一个*字典。在这个字典中,我们提取关键字**“每股股息”**的值。在将该值转换成浮点型数据后,我们将它存储在变量调用 Dtoday 中。

如果你不熟悉如何用 Python 解析字典,我推荐你看一下下面的文章

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

用 Python 解析 API

太好了,我们有了模型的第一部分。接下来,我们需要计算 可持续增长率 。计算比率的公式如下所示:

SGR =净资产收益率 (1 —股息支付率)*

我们可以从公司关键指标 API 终点得到净资产收益率股利支付率。为了提取这些值,我们需要解析指标字典并提取关键字 ROEpayout_ratio 的值:

metrics = requests.get(f'https://financialmodelingprep.com/api/v3/company-key-metrics/{quote}')
    metrics = metrics.json()

    ROE = float(metrics['metrics'][0]['ROE'])
    payout_ratio = float(metrics['metrics'][0]['Payout Ratio'])

    sustgrwothrate = ROE*(1-payout_ratio)
    print(sustgrwothrate)

#Result
0.097024
The sustainable growth rate for JNJ is of 9.7%

现在我们已经计算了 可持续增长率 以及。最后,我们可以使用 CAPM 模型计算权益成本:

用 Python 计算权益成本(Ke ):

为了通过 CAPM 计算权益成本(ke) 我们需要的第一个要素是无风险利率。我们将使用 1 年期国库券作为代理,因为国库券被认为是无风险证券。

我们将使用 Pandas DataReader 和 FRED 作为数据提供者。网。DataReader 方法将返回一个 Pandas DataFrame,其中包含一个 1 年期国库券提供的利率时间序列。

我们使用 iloc[-1] 方法来检索数据帧的最新元素,因为我们的 Pandas 数据帧 Treasury 的最新元素包含最新的可用利率

import pandas as pd
    #if you get an error after executing the code, try adding below:
    pd.core.common.is_list_like = pd.api.types.is_list_like

    import pandas_datareader.data as web
    import datetime

    start = datetime.datetime(2019, 2, 1)
    end = datetime.datetime(2020, 2, 27)

    Treasury = web.DataReader(['TB1YR'], 'fred', start, end)
    RF = float(Treasury.iloc[-1])
    RF = RF/100
    print(RF)

#Result:
0.0149 or 1.49%

接下来,我们需要为公司获得测试版。它可以很容易地从 API 公司简介端点中提取出来:

beta = requests.get(f'https://financialmodelingprep.com/api/v3/company/profile/{quote}')
    beta = beta.json()
    beta = float(beta['profile']['beta'])
    print(beta)

#Result:
0.70 is the Beta for JNJ

最后,计算权益成本的最后一个要素是预期市场回报(即 CAPM 模型中的市场溢价)。

我们将使用指数 S & P 500 作为市场回报的代表。然后,我们将计算去年的市场回报。这是我们用来代表预期市场回报的指标。

正如我的另一篇文章所示,使用 Pandas DataReader 和 FRED 作为数据提供者,我们可以很容易地检索标准普尔 500 的价格并计算市场回报:

start = datetime.datetime(2019, 2, 15)
    end = datetime.datetime(2020, 2, 15) 
    SP500 = web.DataReader(['sp500'], 'fred', start, end)

    #Drop all Not a number values using drop method.
    SP500.dropna(inplace = True)

    SP500yearlyreturn = (SP500['sp500'].iloc[-1]/ SP500['sp500'].iloc[0])-1
    print(SP500yearlyreturn)

# Result:
0.34666119528451844
The market return from the last year was around 34%

注意,我们可以使用 iloc 来提取熊猫数据帧的第一个元素。即 iloc[0] 包含去年的 S & P 500 价格。另一方面, iloc[-1] 包含最近的 S & P 500 价格。

然后,我们使用以下公式计算年回报率以获得回报率:

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

简单收益率

完美!我们拥有计算权益成本 ( Ke )所需的所有要素。现在我们只需要应用公式通过 CAPM 模型得到 Ke

ke = RF+(beta*(SP500yearlyreturn - RF))
print(ke)

#Response:
0.24735644374478466
24% is the cost of equity for JNJ

把所有这些放在一起,计算公司的价值

最后,我们拥有了通过戈登增长模型和 Python 计算公司价值所需的所有元素。

Johnson & Johnson 的案例中,我们看到根据模型得出的股价为 25.38 美元,远低于当前每股 150 美元的股价。

戈登增长模型的问题之一是返回值对模型的输入非常敏感。例如,权益成本的轻微增加/减少会对计算的价值产生很大影响。

DDM = (Dtoday*(1+sustgrwothrate))/(ke-sustgrwothrate)
    return DDM

#Result:
25.38 is the value of JNJ stock according to the DDM model

模型限制和总结

在这篇文章中,我们建立了一个模型,并使用戈登增长模型对一家公司进行了估值。您可以通过将这个脚本作为函数 valuecompany 的一个参数来对任何公司进行估值。Python 将为您完成这项工作。

然而,当使用戈登增长模型对一家公司进行估值时,有一些限制需要考虑,这将使模型不起作用:

  • 这种模式不适用于不支付股息的公司
  • 权益成本必须大于股息增长。否则,我们的模型将给出负值(即分母 ke-g ,将为负值)
  • 假设每股股息不变在现实世界中是不现实的

希望你喜欢这篇关于如何用 Python 计算戈登增长模型的文章!请参阅下面的完整代码,以供参考:

import requests

def valuecompany(quote):
    #Latest dividend of the company
    dividend = requests.get(f'https://financialmodelingprep.com/api/v3/financials/income-statement/{quote}')
    dividend = dividend.json()
    dividend = dividend['financials']
    Dtoday = float(dividend[0]['Dividend per Share'])

    #ROE and PAyout Ratio
    metrics = requests.get(f'https://financialmodelingprep.com/api/v3/company-key-metrics/{quote}')
    metrics = metrics.json()

    ROE = float(metrics['metrics'][0]['ROE'])
    payout_ratio = float(metrics['metrics'][0]['Payout Ratio'])

    sustgrwothrate = ROE*(1-payout_ratio)
    print(sustgrwothrate)

     ##Cost of equity:

    #Risk Free Rate

    import pandas as pd
    #if you get an error after executing the code, try adding below:
    pd.core.common.is_list_like = pd.api.types.is_list_like

    import pandas_datareader.data as web
    import datetime

    start = datetime.datetime(2019, 2, 1)
    end = datetime.datetime(2020, 2, 27)

    Treasury = web.DataReader(['TB1YR'], 'fred', start, end)
    RF = float(Treasury.iloc[-1])
    RF = RF/100

    #Beta
    beta = requests.get(f'https://financialmodelingprep.com/api/v3/company/profile/{quote}')
    beta = beta.json()
    beta = float(beta['profile']['beta'])

    #Market Return
    start = datetime.datetime(2019, 1, 1)
    end = datetime.datetime(2020, 2, 27)

    SP500 = web.DataReader(['sp500'], 'fred', start, end)
    #Drop all Not a number values using drop method.
    SP500.dropna(inplace = True)

    SP500yearlyreturn = (SP500['sp500'].iloc[-1]/ SP500['sp500'].iloc[0])-1

    ke = RF+(beta*(SP500yearlyreturn - RF))

    DDM = (Dtoday*(1+sustgrwothrate))/(ke-sustgrwothrate)
    print(DDM)
    return DDM

valuecompany('JNJ')

原载于 2020 年 2 月 19 日【https://codingandfun.com】

R 中漂亮(简单)的地理空间数据可视化

原文:https://towardsdatascience.com/gorgeous-simple-geospatial-data-visualizations-in-r-878b41e8bb9a?source=collection_archive---------39-----------------------

使用 ggplot2、rgdal 和 maptools 制作华丽的渐变

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

我最近在 R 中写了一篇关于地理空间可视化的介绍文章,这篇文章很快成为我阅读量最大的文章,增加了 5 倍(谢谢,顺便说一句!).看到人们对地理空间数据可视化如此感兴趣真是太棒了,因为在这一点上,它已经成为我在这个星球上最喜欢的事情之一。

话虽如此,我觉得我已经在桌子上留下了一些卡片;首先,我没有讨论过 ggplot2。更好的是,第二种方式甚至更漂亮。

在本教程中,我们将使用 2010 年的人口普查数据来展示用 R 的 ggplot2 库绘图的奇迹。就像上次一样,只有 3 步—所以拿些爆米花,让我们开始吧!

步骤 1:下载 2010 年人口普查数据集

史上最简单的一步;去我的 Github repo 下载 county_census.zip 就行了。

这是一个相当大的文件;一旦下载完毕,解压,你就可以开始了。

步骤 2:安装库并上传普查数据到 R

我们将使用 3 R 库,它们是maptoolsrgdalggplot2。我们还将运行一个命令readShapeSpatial(),它将提示您输入想要使用的文件。

  • 出现提示时,一定要打开County_2010Census_DP1.shp (这是上一步下载的)。

步骤 3:地理空间制图

例 1:佛罗里达州&中位年龄

现在,我们将选择一个状态,创建一个模板,并用颜色填充它:

图表显示:

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

**左:**粉色&面霜,例 1;:蓝色&绿色,前。2

在重新创建时,“GEOID10”只是指 2010 年的人口普查,不需要更改。另一方面,第一行中的“12”代表佛罗里达州的 FIPS 代码,如果你绘制不同的州,这个代码改变。 FIPS 代码是常用的唯一标识符,它将每个州定义为一个从 1 到 50 的数字(美国领地也有自己的 FIPS 代码)。

DP_TableDescriptions.xlx提供了我们可以根据人口普查中提供的答案绘制的所有变量的列表(对于本例,我选择了 DP0020001,各县的平均年龄)。你可以在county_census.zip文件中找到这个 Excel 表格。

佛罗里达&中位年龄图很好,因为老年人和年轻人的高数量组合构成了一个超级漂亮的梯度(谢谢你,雪鸟!).如果你想描绘另一个州,你可以参考这一页,找到你选择的 FIPS 代码。否则,坚持佛罗里达就好了。

不要画俄亥俄州,因为…嗯,你知道的。

例 2:路易斯安那州和平均家庭规模(+趣味色彩!)

我们将再做一次,改变我们选择使用的州和人口普查数据——我喜欢提供两个例子,以便有人可以看到代码如何响应变化。

让我们使用 R 颜色来挑选一两个令人愉快的配色方案,并进行绘图:

图表显示:

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

左: Camo,Ex.3:红色,白色&蓝色,例如。四

这一次,我选择了迷彩的颜色(在美国农村长大,迷彩已经深深印在我的脑海里)和另一种红色、白色和蓝色,奇怪的是,这让我想起了黏糊糊的冰棍,而不是美国国旗。

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

尼克·托伦塔利在 Unsplash 上拍摄的照片

另外,你会注意到在第二个例子中渐变的范围发生了巨大的变化——因为我们是手动插入的,所以在你精确地描绘了整个范围并设置了一个精确的中间值之前,对它进行试验是很重要的(稍微搜索一下就可以避免太多的猜测)。如果任何州县持有超出指定范围的值,它们在绘制图表时将显示为令人讨厌的灰色。

结论

我希望你对这个教程有一点兴趣(我非常喜欢想象伪装中的路易斯安那州!).如果你有任何问题,运行代码的问题,或者只是想打个招呼,请在下面评论🙂。你也可以通过我的个人网站或推特联系我。

谢谢,祝你一周愉快!

——阿曼达·❤️

有 50 美元吗?把你的手机变成一个可编程机器人

原文:https://towardsdatascience.com/got-50-turn-your-phone-into-a-programmable-robot-bf69d3df1231?source=collection_archive---------38-----------------------

OpenBot 计划旨在利用现有设备实现边缘机器人的大众化。

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

梁杰森Unsplash 上的照片

英特尔实验室刚刚公布了其 OpenBot 项目,该项目旨在提供低成本的实时先进机器人技术,以激励该领域的大规模社区采用。低成本是通过大规模生产的传感器、3d 打印的身体和你自己的智能手机的结合来实现的。

我喜欢这种系统的设计。公司太专注于将他们的数据和逻辑放入云中,他们常常忘记了引入的延迟。在某些情况下,边缘设备除了读取传感器测量值并将其上传的最小处理能力之外,几乎没有任何其他处理能力。

最佳方法(对许多行业而言)是在边缘处理尽可能多的可行内容,而在其余部分求助于更强大的设备。这是为什么呢?边缘是所有活动的地方。优势就是你这么在意的消费活动。边缘是…嗯,赚钱的地方。简单地在集中式云数据处理服务之间来回铲取数据远不如在整个生态系统中分配计算工作负载那样具有可扩展性。对于除了极低功耗物联网应用之外的所有应用,您希望您的边缘设备在一次充电后运行数月,您希望您的边缘设备完成更多任务。

不太尖锐的边缘

请注意,我使用了“更强大的设备”而不是“你的云”来管理你的非边缘计算的剩余部分。您的架构不仅仅是边缘和云的二元划分。你可以拥有一个由越来越强大的设备组成的“中间件”,这些设备仍然非常接近你的第一跳边缘设备;这些设备可以为您的第一跳设备提供更多的计算能力,同时仍然允许您避免往返于您的云和。这就是智能手机在 OpenBot 架构中发挥作用的地方。

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

作者在其论文中制作的应用程序设置框图。

Tensorflow Lite 这样的努力已经在将机器学习带到边缘方面取得了长足的进步。在不久的将来,我们可能会拥有如此高效的算法和硬件,以至于对于嵌入式设备是否可以运行复杂的神经网络预测不再有第二个问题。然而,在那之前,没有什么可以阻止我们使用我们的第一跳和后端云设备之间的设备,比如我们心爱的智能手机。

在这种设置中,您可以在边缘设备上保留所有传统的嵌入式操作(主要是传感器和驱动),同时将更多计算密集型操作(机器学习推理、状态估计和更新等)卸载到智能手机的“本地主力”上。这可能看起来是一个小步骤,但解决了两个关键问题:避免昂贵的往返到您的云,并避免您的边缘设备的缓慢/棘手的片上计算。边缘设备将智能手机视为一种快速的场外计算,而你的云服务对此一无所知(希望现在能自动缩小规模🤑).

平台注意事项

不幸的是,就目前而言,该应用程序仅适用于 Android。但是,要记住开源的妙处。假设这个项目受到社区的欢迎,我们将很快有几个额外的选择。是的,可能会创建一个 iPhone 应用程序。然而,更多的人可以胜任“本地主力”的职位。可能无非就是一个更强大的嵌入式设备(咳咳树莓 Pi 咳咳)。

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

OpenBot 对类似机器人项目的市场调查,由作者在他们的论文中做出。

送行

OpenBot 的新设置为机器人原型开发提供了一种新的低成本方法,进一步增加了该领域的民主化。无论是用于控制系统、边缘计算还是机器学习,这个项目必定会被整个社区广泛采用。

你打算尝试一下吗?在合作项目中,你独立完成了吗?在这里让我知道。如果有足够多的人想在某件事情上合作,我会安排一些事情!

资源

保持最新状态

除了在 Medium 上,用 LifeWithData 博客、机器学习 UTD 时事通讯和我的 Twitter 让自己保持更新。通过这些平台,我分别提供了更多的长文和简文思想。

有数据吗?我如何在几个小时内自学如何浏览网站(你也可以)

原文:https://towardsdatascience.com/got-data-how-i-taught-myself-how-to-scrape-websites-in-a-few-hours-and-you-can-too-2fe19889d6b0?source=collection_archive---------26-----------------------

找不到任何有趣的、高质量的数据集?生成你自己的数据集出奇的容易——下面是方法(包括代码)。

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

从网站到数据和信息:网站:抓取本网站

我有一个可耻的秘密。它影响了数据科学社区中数量惊人的人。我懒得面对这个问题,也懒得正面解决它。

我不知道如何收集数据。

大多数时候,这并没有影响我的生活——我可以访问数据集,或者其他人已经为我的需要开发了定制的抓取器/API。

但我偶尔会浏览一个网站,希望我能获得一些有趣的原始数据来做一些严肃的分析。

嗯,不会再有了。

最近,我自学了如何用 Python 结合使用 BeautifulSouprequests正则表达式来抓取网站。

我有一个可耻的秘密…我不知道如何收集数据。

整个过程比我想象的要简单得多,因此我能够制作自己的数据集。

所以在这里,我想分享我的经验,这样你也可以自己做。与我的其他文章一样,我在这里的 git repo 中包含了完整的代码,因此您可以按照自己的目的使用或修改代码。

在开始之前

包装

我假设您熟悉 python。即使你相对较新,这个教程也不应该太难。

你需要BeautifulSouprequestspandas。用pip install [PACKAGE_NAME]安装每个(在您的虚拟环境中)。

你可以在这里找到我的代码:https://github.com/databyjp/beginner_scraping

让我们制作一个数据集

一旦我们学会了如何收集数据,这种技能几乎可以应用于任何网站。但重要的是要把基本面搞对;所以让我们从容易的地方开始,同时反映现实世界。

你们很多人都知道我是一个体育迷——所以让我们从搜集我们的数字数据开始吧,这些数据将从ScrapeThisSite.com那里获得。

顾名思义,这个网站是用来练习刮痧的。假设数据在表中,也很容易检查数据是否被正确抓取。

获取原始数据

在我们做任何事情之前,我们需要原始数据。这就是requests库的用武之地。获取数据很简单,只需如下代码行:

*import* requests
page = requests.get("https://scrapethissite.com/pages/forms/")

获得网页的副本是如此容易。要检查页面是否已正确加载,请尝试:

*assert* page.status_code == 200

如果你没有得到一个错误,这应该意味着该页面已被正确下载。那有多好?现在到了肉的问题;从我们的页面获取数据。

进入你的元素

要抓取一个网站,我们需要确定网站的哪一部分包含了我们想要的信息。尽管这在视觉上很容易,但在代码中却很难做到。

在这项任务中,您最好的朋友是浏览器上的“检查元素”按钮。有不同的方法来处理要抓取的元素,但这是次要的。首先,您需要识别被抓取的数据。

例如,让我们说,我想刮这一页。

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

我们的第一桌给刮了(https://scrapethissite.com/pages/forms/)

在我们继续之前,先看一下底层代码。这是它的一个小样本。

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

页面的源代码

鉴于它是为学习刮擦的人设计的,阅读起来并不困难。尽管如此,将你在这里看到的与你所看到的渲染关联起来还是很痛苦。

您应该做的是突出显示页面上的相关元素,右键单击并选择“检查元素”。这将显示一个类似于下图的布局,尽管会因浏览器而异。

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

“检查元素”按钮—您的新好朋友

将要调出的代码是 DOM(文档对象模型)。不用太专业,这允许代码与呈现的最终结果相匹配。

我强烈推荐滚动浏览这里的各种元素,选择它们,并大致观察 DOM 的结构。

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

探索你的王国

更具体地说,让我们看看我们将做什么来刮出显示如下会议排名的表。

小步前进——收集一份数据

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

使用“检查元素”按钮

对元素的检查表明,我们希望获得该表的内容。尽管它没有唯一的 id,但它确实驻留在一个具有idhockeysection中。

BeautifulSoup 发现所有这些都很容易,参数id可以被传递(html 中的id值是唯一的),或者只是标签的一个默认参数。

我们可以通过以下方式找到所有这些:

div = soup.find(id="hockey")  # Find the right div
table = div.find("table")

您可以通过运行以下命令来验证该 div 中只有一个表:

assert len(soup.find_all("table")) == 1

我们注意到该表包括标题行<th>和数据行<tr>。让我们只抓取这些行——我们还注意到这里的每个数据行都有一个值为teamclass属性,所以让我们也按照这个属性进行过滤。这可以通过将它们作为字典传递来实现,允许我们根据人们定义的任何自定义属性进行过滤!

team_elm = table.find("tr", attrs={"class": "team"})

收集的元素如下所示:

如果我们想从这些乱七八糟的东西中提取出球队的名字呢?

我看到 name 列由它的class属性标记,所以我可以通过它的标签(td)和属性找到该列。

team_name = team_elm.find("td", attrs={"class": "name"}).text

但是由于结果包含大量空白:

>>> team_name
'\n                            Boston Bruins\n                        '

这是正则表达式的工作!

team_name = re.sub(r"^\s+|\s+$", "", team_name)

如果你不确定这是怎么回事,那么正则表达式将字符串的开头^空格\s+或字符串的结尾|空格不替换任何内容。如果可能会超过多行,您可以添加一个re.M标志。

太棒了。现在,我们如何扩展它来收集整个表呢?

变得舒适—抓取整个数据表

为此,我们将像以前一样识别表,隔离每一行数据,然后遍历该行以收集数据元素。

在查看元素时(参见下面的屏幕显示),我注意到每一列都有一个带有不同data-stat属性的<td>标记,例如“wins”、“loss”、“win_loss_pct”等。

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

调查每个要刮除的列

我们可以对它们进行硬编码,并手动遍历它们。但是,更有趣的方法是实际获取一行,并生成这些列属性的列表,如下所示。

stat_keys = [col.attrs["class"][0] for col in data_rows[0].find_all("td")]

这为我们提供了一个值列表:

['name', 'year', 'wins', 'losses', 'ot-losses', 'pct', 'gf', 'ga', 'diff']

使用这个代码片段,我们只需编写几行代码来执行获取数据的任务。在较高层次上,代码循环遍历行,确保该行不是标题行,循环遍历列,将数据收集到一个字典中,并将其整理到一个列表中。

整个结果数据然后被放入熊猫数据框架。

这应该是相对清楚的,但如果这没有什么意义,那也没关系。相反,看看下面的代码。实际代码非常简洁,几乎比我的描述还要短!

重复该任务—抓取多个页面

让我们通过从多个页面抓取数据来总结这一点。你可能已经注意到了底部各个页面的链接。

再一次,看看这个元素——根据我们的发现,我们可以决定我们的策略。

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

检查底部分页栏

我们可以用多种方法中的一种来处理这个问题,但是这一次,我们将抓取这里的每个链接,然后抓取每个结果页面。

我选择的方法是用 class 属性值为paginationul标记元素。然后,我找到每个li元素,获取 href 目标(即链接),然后通过一个集合转换它以删除任何重复的内容。

pagination = soup.find("ul", attrs={"class": "pagination"})
link_elms = pagination.find_all("li")
links = [link_elm.find("a").attrs["href"] for link_elm in link_elms]
links = list(set(links))

直截了当,不是吗?

我们现在需要做的就是创建一个函数来概括我们抓取上面页面的任务,并连接每个页面返回的结果。

temp_dfs = list()
for link in links:
    tmp_df = scrape_this(uri=link)
    temp_dfs.append(tmp_df)
hockey_team_df = pd.concat(temp_dfs, axis=0).reset_index(drop=True)

为了更好地衡量,我们可以对结果进行排序,并将它们保存为一个文件:

hockey_team_df.sort_values(["year", "name"], inplace=True)
hockey_team_df.to_csv("hockey_team_df.csv")

综上所述,我们得到:

就是这样!只需几行代码,我们就可以从这个网站上收集几十年的数据来生成我们自己的数据集。

只是为了检查一下,让我们用绘制一些数据,看看胜率和一些不同指标之间的相关性。需要注意的一点是,在操作下载的页面之前,我们需要转换数据帧中的数据类型!

为什么?嗯,你可能已经知道了——或多或少所有的网站数据都是以文本形式呈现的。文本,即使是数字,也不能被操纵。因此,举例来说,需要对成功进行操作,以便:

hockey_team_df.wins = hockey_team_df.wins.astype(int)

一些可视化库会在内部进行这种转换,但是如果你在 pandas 中操作数据,你肯定需要这样做。

(这里我不会展示完整的代码,但它在我的GitHub reposcraper_mult_pages.py文件中。)

这是一张图表,对比了本赛季的胜率和进球数:

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

关联得分目标与获胜百分比

这并不可怕,但看起来没有那么大的相关性。允许进球(对手进球)呢?

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

关联允许的目标与成功百分比

那更好!也许防守确实能赢得冠军/比赛。我们可以将这两者结合起来看目标差异:

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

将目标差异与成功百分比相关联

哇哦。如果我自己这么说,这有什么关系。

这不是很棒吗?嗯,我觉得是。你可能对这些特定的数据不感兴趣,但关键是——你现在也拥有了所有你需要的工具来获取你感兴趣的数据。

我希望那是有用的。我很高兴我费心去学习如何做到这一点。

当你认真对待它的时候,你会发现还有很多事情要做——使用像 selenium 这样的包对某些网站来说可能是必要的,而像 scrapy 这样功能更全面的框架可能会为你的大项目节省时间。但是通过采用这些技术,我们已经可以做很多事情了。

来吧——试试看!

有一点要注意:我用过的这个网站明确允许抓取,但不是每个人都允许。网络抓取一直是一个有点争议的话题,最近的一个案例甚至上了法庭。一如既往,明智并尊重他人的网站和潜在的知识产权。

你可以在这里了解更多:https://www.scraperapi.com/blog/is-web-scraping-legal/

但是在你离开之前——如果你喜欢这个,请在 twitte 上打个招呼/关注,或者关注这里的更新。ICYMI:我也写过这篇关于可视化隐藏信息的文章,以 NBA 助攻数据为例:

[## 如何用 Python 可视化数据中的隐藏关系 NBA 助攻分析

使用交互式快照、气泡图和桑基图操纵和可视化数据,使用 Plotly(代码和数据…

towardsdatascience.com](/how-to-visualize-hidden-relationships-in-data-with-python-analysing-nba-assists-e480de59db50)

最近,这个展示了我在互联网上发现的一些令人惊叹的数据科学投资组合。

[## 这些数据科学产品组合将让您惊叹不已并深受启发(2020 年中期版)

使用这些来改进您自己的数据科学产品组合,学习新技能或发现新的有趣项目。

towardsdatascience.com](/these-data-science-portfolios-will-awe-and-inspire-you-mid-2020-edition-728e1021f60)

有写作障碍吗?是 GPT 2 号来救援了!

原文:https://towardsdatascience.com/got-writers-block-it-s-plotjam-to-the-rescue-e555db9f3272?source=collection_archive---------45-----------------------

使用人工智能创造不存在的书的情节概要…还没有。

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

故事图片说明基于 alexkerhead CC 2.0 的一张照片

在这篇文章中,我将向你展示如何使用人工智能(AI)和机器学习(ML)来帮助你开始写你一直想写的小说。我将从计算机如何使用人工智能处理文本的简单背景开始。然后,我将描述我如何建立一个名为 GPT-2 的 ML 模型来生成新的情节概要,并就如何为自己创造一些新的故事想法给出指导。

这是我关于如何将人工智能用于创造性努力的系列文章的第二部分。第一部分是关于如何使用 ML 来创造抽象艺术,这里有

背景

自然语言处理

自然语言处理(NLP)是语言学和计算机科学的一个领域,它研究具有 Java 和 Python 等计算机语言的机器如何与具有英语和斯瓦希里语等自然语言的人类进行交流。艾伦·图灵是教计算机理解人类语言的第一批支持者之一。他在 1950 年写了关于它的文章。

我们可能希望机器最终能在所有纯智力领域与人类竞争。但是哪些是最好的开始呢?即使这是一个艰难的决定。许多人认为像下棋这样非常抽象的活动是最好的。还可以维护的是,最好给机器提供钱能买到的最好的感觉器官,然后教它理解和说英语。艾伦·图灵,数学家和计算机科学家

文本到令牌

处理文本的第一步是将单词转换成数字。这个过程叫做标记化。对文本进行标记的最简单方法之一是,按照输入序列中出现的顺序,简单地为唯一的单词和标点符号分配一个数值。例如,想想《双城记》的第一句开场白。

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

标记文本

您可以看到,单词“was”、“the”、“of”和“times”中的四个出现了两次,并且它们在两个实例中获得了相同的令牌值。在这个方案中,像“it”这样的大写单词与小写的“It”有不同的标记。此外,标点符号,像逗号,得到自己的令牌。你可以在 Srinivas Chakravarthy 的帖子中阅读各种标记化方案。

变形金刚(电影名)

一旦单词被标记化,它们就可以被机器学习系统处理来完成各种任务。例如,可以训练 ML 模型将文本从一种语言翻译成另一种语言。在下面的例子中,一个转换器被训练成从英语翻译成西班牙语。

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

使用转换器进行语言翻译

输入的英文文本在输入到转换器之前被转换成标记。在转换器内部,令牌被编码成内部的“通用”形式,然后解码成西班牙语令牌,再转换成西班牙语单词。想了解更多关于变形金刚的信息,请看马克西姆·阿拉德的帖子

GPT-2

2018 年,OpenAI 创建了一个名为生成式预训练变压器(GPT)的系统[2]。他们解释说,NLP 任务的巨大收益…

…可以通过对不同的未标记文本语料库进行语言模型的生成性预训练,然后对每个特定任务进行有区别的微调来实现。— 亚历克·拉德福德和 OpenAI 的同事们

来自 OpenAI 的团队在 2019 年创造了一个名为 GPT-2 的改进版变压器[3]。在这篇论文中,他们说…

…具有足够能力的语言模型将开始学习推断和执行自然语言序列中展示的任务,以便更好地预测它们,而不管它们的采购方法如何。来自 OpenAI 的亚历克·拉德福德及其同事

下图显示了 GPT-2 的主要组成部分。GPT-2 没有使用单一值的令牌,而是使用单词嵌入,即多个数字的数组来表示每个单词。这使系统有能力捕捉对单词更完整的理解。

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

GPT-2 组件

GPT 新协议模式分为三个阶段:

  1. 初始训练——学习理解一般语言
  2. 微调—学习执行特定任务
  3. 提示—启动系统开始生成输出文本

请注意,该模型在生成文本时利用了所有三个阶段的输入。你可以在杰伊·阿拉玛的帖子中阅读更多关于 GPT-2 如何工作的信息。

情节混乱

PlotJam 是我创建的一个系统,用来帮助有创造力的作家发现新的故事。PlotJam 使用 GPT-2 模型,该模型根据超过 16,000 本英文书的标题和情节摘要进行了微调,创建了带有标题和简短情节摘要的新故事。这是一个显示主要组件的图表。

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

PlotJam 组件

准备文本以进行微调

微调文本的来源是来自卡内基梅隆大学的图书摘要数据集。我通过分离每本书的类型、标题和第一部分情节概要来准备数据。

以下是其中一本书的原始数据示例:

**Wikipedia ID** 1166383
**Freebase ID** /m/04cvx9
**Book title** White Noise
**Book author** Don DeLillo
**Publication date** 1985-01-21
**Genres** Novel, Postmodernism, Speculative fiction, Fiction
**Plot summary**
Set at a bucolic Midwestern college known only as The-College-on-the-Hill, White Noise follows a year in the life of Jack Gladney, a professor who has made his name by pioneering the field of Hitler Studies (though he hasn’t taken German language lessons until this year). He has been married five times to four women and has a brood of children and stepchildren (Heinrich, Denise, Steffie, Wilder) with his current wife, Babette. Jack and Babette are both extremely afraid of death; they frequently wonder which of them will be the first to die. The first part of White Noise, called "Waves and Radiation," is a chronicle of contemporary family. ...

下面是预处理书籍摘要的 Python 代码。

对文本进行预处理的代码

这是预处理后的 CMU 书籍摘要数据集中的一个条目。

**GENRE:** Novel, Postmodernism, Speculative fiction, Fiction **TITLE:** White Noise **PLOT:** Set at a bucolic Midwestern college known only as The-College-on-the-Hill, White Noise follows a year in the life of Jack Gladney, a professor who has made his name by pioneering the field of Hitler Studies (though he hasn't taken German language lessons until this year). He has been married five ...

训练模型

在书摘要文本被预处理之后,我用它来微调 GPT-2 模型。我运行了 10,000 步的微调,这似乎足够系统生成新的情节摘要。下面是源代码:

代码训练模型

生成图

模型微调后,可以通过调用 generate 函数来创建新的图。我传入一个提示“流派:”来指示系统创建一个随机流派的故事的标题和情节。

生成新图的代码

以下是输出,显示了由 GPT-2 合成的新图:

**GENRE**: Mystery **TITLE**: Deadright’s Corner **PLOT**: The novel’s protagonist is Edward Wells, a young policeman who is given the job of turning around the case of a manslaughter in which a man killed his wife’s valet – the killing was clearly premeditated – after which he is induced to investigate the matter further. It is during this investigation that Wells discovers the terms of a secret contract between the police and a deceased man's ...

好的。在这里。第一个新故事。它属于神秘类型,标题是“死亡之角”。而且好像是一个以年轻警察为主角的犯罪故事。还不错。

检查原创性

GPT-2 系统被设计成以用于微调的数据的风格“开始写”。当以前缀“流派:”提示时,它将选择它在微调中看到的流派之一,然后创建一个标题和一个简短的情节概要。但是,不能保证它总能创造出新的标题和独特的情节。有时它选择一个现有的标题,它可能会也可能不会想出一个类似于已发表作品的情节。

我通过对结果进行后处理来过滤掉明显重复的故事,看看标题是否独特。我在 CMU 数据集中查找以前用过的书名,也在书评网站 Goodreads 和 IMDB 数据库中查找电影和电视节目的书名。下图显示了这三个数据集中的图书数量。

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

文氏标题图

您可以看到,与 CMU 数据集和 Goodreads 相比,IMDB 数据库有一个庞大的书目列表。下面是一个代码片段,展示了我如何累积标题列表以用于重复检查。

代码积累大量现有标题

请注意,我从标题的开头删除了冠词“the”和“A”。如果 GPT-2 想出的标题是“了不起的盖茨比”,我们会认为这是一个骗局,并将其过滤掉。此外,请注意,标题列表并不详尽。有很多出版的书籍没有维基百科页面,没有 Goodreads 上的评论,或者被拍成了电影或电视剧。因此,如果你看到一个你喜欢的故事情节,请在写作之前先做一点研究,以确保它确实是独一无二的。

不要重复自己。不要重复自己。

有时,GPT-2 文本生成器会卡在一个特定的短语上,并在情节摘要中重复多次。在这个例子中你可以看到一些重复。

**GENRE**: Science Fiction **TITLE**: Baseline Behavior **PLOT**: In the preface, Guy Sager explains his term for the branch of psychology that emphasizes **the individual’s sense of themselves** vs. the collective and their social relations. He believes that **the individual’s sense of themselves** can be affected by the environment (via the “environment in which they find themselves”). In other words, **the individual’s sense of themselves** can be saved by the environment (via their …

注意短语“个人对自己的感觉”是如何被重复三次的。我写了一个小函数,寻找这个工件来过滤掉有重复的条目。这是 Python 代码。

检查重复短语的代码

如果函数在输入中一次或多次看到给定长度的短语,它会被标记为重复。我用短语长度五来过滤掉重复的情节概要。

在 Google Colab 中生成新故事

以下是运行 PlotJam 的说明。它作为一个谷歌实验室运行,这是一个使用高端 GPU 进行人工智能实验的免费服务。请注意,有一个谷歌帐户是必需的。

[## PlotJam 采样

使用 GPT-2 创建新的情节提要

colab.research.google.com](https://colab.research.google.com/github/robgon-art/PlotJam/blob/master/PlotJam_Sampling.ipynb)

  1. 点击上面的链接。
  2. 登录您的谷歌账户,如果您尚未登录,请点击
  3. 单击第一个运行单元格按钮(悬停在[ ]图标上并单击播放按钮)。将出现一条警告,指出此笔记本不是由 Google 创建的。
  4. 点击无论如何都要运行初始化系统。下载数据集和配置预训练的 GPT-2 模型大约需要 5 分钟。
  5. 选择你想尝试的类型,点击第二个运行单元按钮,生成一些新的故事情节。
  6. 选择一个你喜欢的故事,点击第三个运行单元按钮,生成所选故事情节的五个变体。

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

PlotJam Google Colab

你可以看到每个情节变化都以相同的类型和标题开始,但在情节概要如何展开方面有所不同。

未来的工作

PlotJam 系统基于 GPT-2 的“大型”模型。这个模型有 7.74 亿个参数,运行在 Google Colab 系统上。未来的工作将是使用具有 16 亿个参数的“超大”模型,这可能会有更好的结果。OpenAI 最近发布了他们的 GPT-3 模型的测试版,他们声称该模型有 1750 亿个参数。这可能会在创建情节概要方面做得更好。

感谢

我要感谢詹尼弗·林对这个项目的帮助和反馈。

源代码

这个项目的所有源代码都可以在 GitHub 上找到。这些源代码在 CC BY-NC-SA 许可下发布。

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

归属共享

参考

[1] A. M .图灵,《计算机器与智能》头脑。1950 年 10 月,49:433–460

[2] A .拉德福德,k .纳拉西姆汉,t .萨利曼斯,I .苏茨基弗,《通过生成性预训练提高语言理解》,2018 年 6 月

[3] A .、j .吴、r .蔡尔德、d .栾、d .阿莫代伊和 I .苏茨基弗。“语言模型是无监督的多任务学习者”,2019 年 2 月

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

照片由王思然·哈德森Unsplash 上拍摄

附录 A:样本输出

这里有一些来自 PlotJam 的“精选”样本。

**GENRE**: Historical fiction, Historical novel **TITLE**: Banner in the Storm **PLOT**: The story begins with Bertie finding himself at sea with the second Continental Spice Company. The story follows him as he joins the company, and encounters some of the Continental crew, including Captain Harvey Hatcher, a former Ballista, and Professor Appleby, who has joined the company to search for the Northwest Passage. Hatcher and Appleby have a small sailboat that is quite beat up. They set out to sea in a stormy sea with a group of American and ...**GENRE**: Science Fiction **TITLE**: Faso **PLOT**: The novel opens in a post-apocalyptic Southern California, in a hellish world shattered by nuclear war decades before. Fifteen-year-old Alex Hunter and his ten-year-old friend Sean Collins go to visit a mysterious old building called the Basement. The Basement is an old bunker owned by the U.S. military that is filled with ancient artifacts and military technology. Alex and Sean are separated as they are pursued by a horde of evil ...**GENRE**: Crime Fiction **TITLE**: Physical Damage **PLOT**: The police report finding a bloody scene of apparent murder, but do not find any suspects. The case becomes more complicated when two bodies are found wearing the same cologne and gloves. The case becomes more personal for Detective Chief Inspector Alan Banks when he is called to a murder scene by two of his colleagues, both of whom are lying in their own ...

为了无限制地访问 Medium 上的所有文章,成为会员,每月支付 5 美元。非会员每月只能看三个锁定的故事。

抓住你了。递归全局变量

原文:https://towardsdatascience.com/gotcha-when-using-global-variable-with-recursion-ea92e16a8799?source=collection_archive---------12-----------------------

注意参数顺序和返回值

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

安德里亚·费拉里奥在 Unsplash 拍摄的照片

我用回溯法解决了这个 leetcode 问题https://leet code . com/contest/weekly-contest-212/problems/path-with-minimum-effort/,花了一些时间调试奇怪的输出。本文讨论了对全局变量使用递归时的一些陷阱,如何处理它们,以及如何将代码从全局改为局部。

免责声明:回溯只通过 15/75 的测试用例,其余的超过了时间限制,本文的目的是强调全局变量的可能问题,而不是给出最佳解决方案。更多使用二分搜索法、迪克斯特拉和克鲁斯卡尔的美丽解决方案,请观看亚历克斯在 https://www.youtube.com/watch?v=AM__3Zx1XNw 的演练(从 7:26 开始)

问题

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

问题是从左上走到右下,每走一步允许上、下、左、右四个方向,然后用最小的努力找到路径。effort定义为任意两个连续方块之间数值的最大绝对差值。

包含具有全局非全局变量的实现的笔记本:https://gist . github . com/git Han/a 818d 336 c 2309852 a 21d 99 EFD 619238d

回溯概述

我的回溯解决方案是使用一个visited 2D 数组来跟踪访问。
从左上角的单元开始,如果在矩形边界内并且之前没有被访问过,我们尝试以向下、向右、向上、向左的顺序移动(该顺序比其他一些顺序更快地到达目的地,因此全局最小值可以更早地被更新,并且用于限制/加速未来路径的探索)。在移动(递归)之前,访问被标记,因此对于if valid(),将来的访问尝试将返回 False。

在此过程中,使用我们要访问的单元和当前单元之间的 abs 差来更新路径的努力(初始化为 0)。如果我们到达基本情况(右下角的单元格),返回努力。

一旦一个方向的递归完成,我们就更新全局最小值min_effort(初始化为math.inf)并取消该方向的单元格标记。

一旦当前单元格的所有 4 个方向都完成,我们返回math.inf备份调用堆栈,这样它就不会错误地影响调用者的 min()。

病菌

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

这个 5 ^ 2,后面跟着 2 个 inf 的输出令人难以置信。看起来像是全局变量min_effort在第一个解(1,下到 3,下到 5,右到 3,右到 5)回到 inf 后从 inf 更新到 2!最终答案(路径 1,2,3,4,5)也被错误地推断,而不是 1。

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

这五个 2 对应于从目的地 5 回溯到 4,3,2,8,3,5 的算法,因为所有这些都具有所有 4 个已访问或出界的方向,所以下一个要尝试的路径是从 1,0 向右到 1,1 (3 到 8)。

全局变量如何回到未更新的状态?

问题出在第min_effort = min(min_effort,find_path(...))
行,因为 python 从左到右计算参数,在进入递归之前已经计算了全局变量min_effort,所以递归中发生的任何事情(包括对全局变量的更新)对min_effort都没有影响。

在网格底部中间的 3 的范围内,算法还没有找到成功的路径(第一条路径是 1,3,5,3,5),所以此时min_effort还是math.inf,而min(math.inf,math.inf)变成了 inf。

3 个修复

  1. 交换参数

一种解决方法是简单地将参数的顺序换成min_effort = min(find_path(...), min_effort)。这使得递归有机会在比较之前先更新全局变量。

2.先存成变量

如果您仍然希望优先保持旧的顺序,可以先计算递归并保存到变量中。

recursion_res = find_path(...)
min_effort = min(min_effort, recursion_res)

3.完全删除全局变量

这是由于 Leetcode 在运行所有测试用例时给出了错误的测试结果,但是作为定制输入单独运行失败的用例给出了正确的结果。如果您坚持在 leetcode 上使用全局变量,那么复制结果,清除全局变量,并返回复制的结果,以便清除的全局变量为下一个测试用例做好准备。

两个变化:
1。将之前的全局变量添加到递归函数签名中find_path(...,min_effort)

2.返回min_effort而不是math.inf

这将确保最小努力路径总是通过递归调用传播。如果你问为什么在使用全局变量时不返回min_effort,这也是可行的,但是没有必要,因为如果你避免了上面提到的问题,在min(min_effort,find_path(...))比较之前,min_effort将被更新为非 inf 值,所以即使第二个参数返回 math.inf,一旦任何路径首先到达目的地,第一个参数将总是被更新为正确的值。另外,math.inf更能代表“无解/不好的价值”。

然而,支持return min_effort而不是return math.inf的理由是它更准确地代表了最新的程序状态。此外,我们可以完全避免 gotcha 处理(前面描述的两个修复),直接使用min(min_effort,find_path(...)),因为有了return min_effort,第二个参数将总是被更新,所以在第一个参数中包含其初始化的math.inf的“预递归求值”min_effort不会造成任何伤害。(与上一段完全相反的情况)。

改进解决方案

因为我们正在寻找全局最小值,所以任何路径都可能受到任何其他路径的结果的影响。这为当前最佳结果提供了一个机会,一旦发现它们比当前min_effort具有更长的努力,就短路未来路径。这可以通过用额外的检查if updated_effort < min_effort:包装回溯部分(visit,recurse,unvisit)来实现,以大大减少探索步骤,使用“小于”,因为尝试不会减少当前最佳结果的东西是没有意义的。

if updated_effort < min_effort:
                visited[row,col] = 1
                min_effort = min(min_effort,find_path(heights_arr,visited,row,col,updated_effort,max_row,max_col))
                visited[row,col] = 0

全球与本地比较

全球优势:

  1. 允许的宽松返回值(math.infmin_effort)
  2. 方便的编码(更少的参数传递和更简单的递归函数)

全局不利因素:

  1. 不要使用在线编码平台(对工作面试自动编码评估有风险)
  2. 必须时刻注意不在当前堆栈中的副作用和变量
  3. 对函数参数排序敏感(所有这些问题的根源)

本地优点:

  1. 专注于局部问题空间的更容易的调试/跟踪
  2. 副作用更少

当地不利因素:

  1. 更详细的函数签名(要跟踪的项目越多,意味着签名越长)
  2. 失去返回math.inf的能力,必须返回min_effort以将更新的结果传播回程序的其余部分

做错比做对更有价值

当使用全局变量时,如果我最初使用上面的 fix 2 返回了min_effort或正确编码,我根本不会看到这个问题。塞翁失马,焉知非福,返回最直观的正确值和对(可能)无关变量赋值的懒惰让我加强了对 python 求值顺序和调试技巧的理解。

必须把它们分类

原文:https://towardsdatascience.com/gotta-classify-em-all-5f341d0c0c2?source=collection_archive---------49-----------------------

我如何建立一个分类模型来区分传奇和非传奇的神奇宝贝

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

图片由 PIRO4D 来自 Pixabay

当我还是个孩子的时候,我对神奇宝贝很着迷。我每天下午放学后都会看这个节目,周六早上早早醒来看更多的节目,收集卡片,当然,还会在我的游戏机上玩游戏。通常,我和我的朋友会出去玩,在我们各自的设备上玩游戏,互相帮助在广阔的地区导航,捕捉每个游戏中介绍的独特的神奇宝贝。对于其中的一个游戏《神奇宝贝蓝宝石》(我个人最喜欢的),我甚至买了一本指南书,在我一个城市一个城市、一个健身房一个健身房地行进时帮助我,告诉我关于这个游戏的秘密。不用说,在我年轻的时候,神奇宝贝是我生活中很重要的一部分。然而,不幸的是,随着年龄的增长,神奇宝贝在我的生活中几乎不存在了,除了偶尔出现在我最喜欢的消遣中。

去年冬天,我完成了一次数据科学训练营。在训练营期间,我们会被分配一些项目,在这些项目中,我们必须找到自己的数据用于分析和强化各种数据科学概念。做了一些关于体育的项目,并且知道我正在为我的最终项目保存音乐数据,我思考我想为我的分类项目做些什么。在花了一些时间思考想法并尝试跳出框框思考后,我过去对神奇宝贝的喜爱浮现在脑海中,成为一个分类模型可能建立的基础。虽然我最初对尝试按神奇宝贝的类型进行分类感兴趣,但很明显,由于类型的数量庞大以及每种类型的神奇宝贝比例不平衡,我决定将它们分类为传奇与非传奇是我要走的路线。

我是这样做的:

数据

对于这个项目,我最终从三个不同的来源获得了我的神奇宝贝数据,以满足我的分类需求。我使用了 BeautifulSoupPandas read _ html函数从下面的站点中抓取数据。

  1. 神奇宝贝数据库 —全部 8 代神奇宝贝的完整神奇宝贝指标(最终仅使用 1-7 代),具有类型、总量、HP、攻击、防御、特殊攻击、特殊防御和速度等特征(最终未使用类型或总量)
  2. 神奇宝贝 API——使用官方神奇宝贝 API 获得每个神奇宝贝的身高和体重,作为我认为重要的附加功能
  3. sere bii——在这里获得新的神奇宝贝 API 中没有的高度和重量,在这里获得传奇神奇宝贝的列表用于标记目的 (0 =非传奇,1 =传奇)

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

用于分类模型的数据帧部分

总的来说,我看了:

809 个独特的神奇宝贝(第 1-7 代),其中 80 个被认为是传奇

特性:HP,攻击,防御,特殊攻击,特殊防御,速度,身高,体重

探索性数据分析

1。神奇宝贝功能相关热图:

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

2。显示非传奇与传奇神奇宝贝所有特征分布的重叠直方图:

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

正如我们所见,特殊攻击、特殊防御、身高和体重是与传奇属性相关性最高的四个特征,也是非传奇和传奇神奇宝贝之间分布的最大间隔。

建模

1.为设置 xy 变量,其中传奇系列为 y 变量,其余特征的数据帧为 x 变量

2.使用 SMOTE (合成少数过采样技术)合成虚假数据,原因是传奇与非传奇神奇宝贝中的等级不平衡,因为数据中只有约 10%的神奇宝贝是传奇

3.尝试了不同的模型,看看哪种效果最好:

# Created list of different classifiers/models I wanted to runclassifiers = []model1 = xgboost.XGBClassifier()
classifiers.append(model1)model2 = svm.SVC()
classifiers.append(model2)model3 = tree.DecisionTreeClassifier()
classifiers.append(model3)model4 = RandomForestClassifier()
classifiers.append(model4)# Fit each model with synthesized training data; found accuracy, precision, recall, and F1 score; printed out confusion matrix and classification reportfor clf in classifiers:
    clf.fit(X_synth, y_synth)
    y_pred= clf.predict(X_test)
    acc = accuracy_score(y_test, y_pred)
    prec = precision_score(y_test, y_pred)
    recall = recall_score(y_test, y_pred)
    f1 = f1_score(y_test, y_pred)
    print("Accuracy of %s is %s"%(clf, acc))
    print("Precision of %s is %s"%(clf, prec))
    print("Recall of %s is %s"%(clf, recall))
    print("F1 Score of %s is %s"%(clf, f1))
    cm = confusion_matrix(y_test, y_pred)
    print(cm)
    print(classification_report(y_test, y_pred)) # Code above originally seen in this Medium story on [Choosing the Best Algorithm for your Classification Model](https://medium.com/datadriveninvestor/choosing-the-best-algorithm-for-your-classification-model-7c632c78f38f)

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

4.在最佳模型上运行【GridSearchCV】,在这种情况下是 SVM(支持向量机),以便找到模型的最佳参数****

最优参数为:C = 1000,核= rbf(径向基函数)

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

最终模型总体显示 97%的准确性

尽管回忆在最终模型中失败了,但我对此没意见,因为:**

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

最终,我得到了一个非常准确的传奇与非传奇神奇宝贝分类模型。在深入研究了哪些神奇宝贝被错误分类后,很明显,这更多是因为这些神奇宝贝与相反类别的神奇宝贝相似(传奇而非非传奇,反之亦然),而不是模型本身的错。

做这个项目非常怀旧,让我怀念我作为一名神奇宝贝训练师试图“抓住它们”的日子。“由于世界的现状和我们所处的隔离状态,我最终买了一台任天堂 Switch Lite 和最新的神奇宝贝游戏神奇宝贝剑,重温美好时光来打发时间。即使过了这么多年,如果我自己这么说的话,我也没有失去一步。**

如果你有兴趣看我项目的完整代码,可以在我的 GitHub 上查看!

必须全部模拟——口袋妖怪

原文:https://towardsdatascience.com/gotta-simulate-em-all-pokemon-390553008e2d?source=collection_archive---------27-----------------------

模拟第 1 代的口袋妖怪战斗来识别等级

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

图片来源:剪影旅行者山脉口袋妖怪星球口袋妖怪风格文字

我们中的许多人都是在这个系列的各种迭代中玩口袋妖怪长大的。我十岁的时候,美国出了第一代(红蓝)口袋妖怪。我花了无数个小时和我的朋友玩那个游戏。2018 年,我偶然看到 PyData 的一个演讲,“ Vincent Warmerdam:用简单甚至线性的模型取胜| PyData London 2018 ”,其中提到获取口袋妖怪数据是多么容易。这个演讲并没有把重点放在口袋妖怪战斗模拟上,尽管它启发了我,让我创建了一个口袋妖怪战斗模拟器,并写了这篇文章。

在本文中,我将讨论:

  • 这种实现的局限性
  • 数据收集过程
  • 模拟器中使用的算法
  • 我对口袋妖怪的排名

**注:**如果您想查看所有源代码,请在github.com/tylerwmarrs/pokemon-battle-simulation找到。

实施限制

虽然我试图捕捉游戏中的大部分战斗机制,但有些机制被遗漏了。

  • 诸如瘫痪、中毒等疾病被排除在外,以简化战斗。
  • 口袋妖怪不可能恢复健康。
  • 战斗由口袋妖怪通过升级学习的破坏性能力组成。
  • 攻击机制可以通过排列效率来改进,而不是随机选择。

这些限制可能会影响一些口袋妖怪的行列。我强烈鼓励任何感兴趣的人通过对资源库做出贡献来实现缺失的细节。

数据收集

数据收集过程没有痛苦。一个网站为我提供了我需要的关于口袋妖怪的大部分信息。网站pokeapi.co,以 JSON 格式提供开放的 API 结果。网站的文档相当全面。获得口袋妖怪属性和涉及的移动:

  1. 从红色/蓝色版本中识别口袋妖怪
  2. 对于每个口袋妖怪,下载属性
  3. 识别红色/蓝色版本的移动
  4. 对于每次移动,下载属性

一旦下载了所有的动作和口袋妖怪,我就使用熊猫连接将动作映射到每个口袋妖怪。

数据转换

与 JSON 相比,我更喜欢使用 CSV 文件,所以我花了一些时间来简化模拟战斗所需的属性结构。JSON 结构由可选属性组成,嵌套很多层。展平属性使得查询变得更加容易。

口袋妖怪属性

  • 名称——口袋妖怪的名称
  • 惠普—健康点
  • 攻击—一般攻击统计
  • 速度——速度是用于计算伤害的统计数据
  • 特殊攻击—特殊攻击统计
  • 防御——统计数据,用于确定对常规攻击造成的损害
  • 特殊防御——用于确定针对特殊攻击的损害的统计数据
  • 类型——口袋妖怪的类型;火、水、岩石等。

移动属性

  • 名称—移动的名称
  • PP-可以应用移动的次数
  • 类型—移动的类型;火、正常、水等。
  • 暴击率——调整招式暴击几率的标志
  • 功率-功率是一种用于计算伤害的统计数据
  • min _ hits——在给定回合中,移动的最小次数。
  • max _ hits——在给定回合中,移动可以应用的最大次数。

损坏计算

类型修饰符

除了招式和口袋妖怪,我还需要获得数据来帮助量化伤害。口袋妖怪是一个回合制游戏,玩家选择一个动作来应用。这个模拟只关注计算伤害的攻击动作。每个口袋妖怪都是特定的类型,每次攻击也是如此。目标是要么打败对方的口袋妖怪,要么捕获它。这个模拟只捕捉胜利和失败。如果受到攻击,可能会造成更大的伤害:

  • 攻击型口袋妖怪
  • 攻击的类型
  • 保卫口袋妖怪类型

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

口袋妖怪的类型修改器图表

该表显示了攻击伤害如何适用于给定的口袋妖怪类型。我是从这个网站用回来的,清理过了。该表捕获默认类型修饰符值为 1 的异常。

临界机会算法

基于随机数生成器的临界机会算法取决于攻击。有些攻击比其他攻击更容易致命一击。我从这个网站获得了公式,并移除了游戏实现中的一些瑕疵。

几个明显的缺陷包括:

  • 最初的游戏规则是 100%的临界几率;然而,实现的结果是最高 99.6%。我的实现允许 100%的临界几率。
  • 一些助推技能在应该增加致命几率的时候降低了致命几率。然而,在这个模拟中,助推移动被完全忽略。

该算法采用口袋妖怪的基本速度和攻击的临界几率来确定是否发生了临界击中。口袋妖怪的速度是决定成败的一个重要因素。

损坏算法

给定口袋妖怪属性和来自暴击算法的暴击布尔,伤害算法决定应用多少伤害。这些算法都是从这个网站上的公式推导出来的。

战斗模拟

选择移动算法

根据攻击口袋妖怪的招式列表,随机选择一个有灵能点剩余的招式。当所有移动都用尽时,返回 null。这是在两个口袋妖怪会打成平手的情况下需要的;否则,apply_move 算法中会出现无限循环。

应用移动算法

该算法管理:

  • 临界机会随机化
  • 同类攻击奖励(一个火口袋妖怪使用火招)
  • 攻击口袋妖怪的灵能点(PP)
  • 保卫口袋妖怪的生命值(HP)
  • 应该应用移动的次数

注意这个函数有一个硬编码的等级值 10,这可能会影响伤害的计算。

战斗算法

战斗算法跟踪模拟状态:

  • 随机选择可能首先攻击的口袋妖怪
  • 轮到哪个口袋妖怪了
  • 寻找赢家
  • 检查领带

战例

这是一个皮卡丘对抗鬼斯的战斗的例子。

pikachu = Pokemon('pikachu')
gastly = Pokemon('gastly')
battle(pikachu, gastly)Output
------
gastly damaged pikachu with night-shade for 2.0 hp
gastly pp for night-shade is 14/15
pikachu hp is 33.0/35
pikachu damaged gastly with thunder-shock for 10.0 hp
pikachu pp for thunder-shock is 29/30
gastly hp is 20.0/30
gastly damaged pikachu with dream-eater for 22.0 hp
gastly pp for dream-eater is 14/15
pikachu hp is 11.0/35
pikachu damaged gastly with thunder-shock for 11.0 hp
pikachu pp for thunder-shock is 28/30
gastly hp is 9.0/30
gastly damaged pikachu with lick for 6.0 hp
gastly pp for lick is 29/30
pikachu hp is 5.0/35
pikachu damaged gastly with thunder-shock for 10.0 hp
pikachu pp for thunder-shock is 27/30
gastly hp is -1.0/30{'pokemon': 'pikachu',
 'pokemonb': 'gastly',
 'moves': 6,
 'winner': 'pikachu',
 'first_attack': 'gastly'}

口袋妖怪排名

随着战斗算法的完成,我创建了一些逻辑来模拟所有口袋妖怪之间至少包含一个破坏性动作的战斗 1000 次。同种的口袋妖怪被排除在战斗之外。比如皮卡丘大战皮卡丘就不是模拟的。在每场战斗开始时,每只口袋妖怪被随机分配最多四种伤害能力。结果被记录在每对口袋妖怪之间,跟踪谁输了,谁赢了,以及平局的数量。单个口袋妖怪战斗 14.6 万次。

随着统计数据的汇总,我以两种方式对口袋妖怪进行了排名:

  1. 贝叶斯排名 —先验被设定为 50/50 几率
  2. 百分比排名

下面根据贝叶斯排名显示的前 20 名口袋妖怪,Mewtwo 排名第一似乎是合乎逻辑的。Mewtwo 被认为是第一代中最好的口袋妖怪,具有使它如此的属性。它也是最稀有的口袋妖怪之一。

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

倒数 20 名口袋妖怪似乎也合乎逻辑,因为鲤鱼王是最后一名。鲤鱼王在比赛中的防守和进攻都是最差的。

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

完整的排名列表,请访问此链接

包扎

虽然我对口袋妖怪战斗的实现是有限的,但结果似乎是合乎逻辑的。希望,我已经激励了另一个口袋妖怪迷去接受这些概念,这样他们可以在他们的模拟中应用它们。模拟和建模是一项非常重要的技能。将它应用到您熟悉的东西上,可以使建模过程更易于管理。

如果你觉得这本书有趣,请花时间评论它。

GPT-3 101:简介

原文:https://towardsdatascience.com/gpt-3-101-a-brief-introduction-5c9d773a2354?source=collection_archive---------16-----------------------

在过去的几周里,几乎不可能避免对 GPT-3 的大肆宣传。本文简要介绍了它的架构、已经可用的用例,以及关于它的伦理和绿色 IT 含义的一些想法。

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

照片来自https://unsplash.com/@franckinjapan

介绍

让我们从基础开始。GPT-3 代表生成式预训练变压器版本 3,它是一个序列转导模型。简单来说,序列转导是一种将输入序列转化为输出序列的技术。

GPT-3 是一种语言模型,这意味着,使用序列转导,它可以预测给定输入序列的输出序列的可能性。例如,这可以用来预测在给定的文本序列中哪个单词最有意义。

这些模型如何工作的一个非常简单的例子如下所示:

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

可视化神经机器翻译模型,作者 @JayAlammar

输入 :这是一个晴朗炎热的夏日,所以我打算去……

预测输出 :这是一个晴朗炎热的夏日,我正打算去海滩

GPT-3 基于一种称为 Transformer 的特定神经网络架构类型,简而言之,它比 RNNs(递归神经网络)等其他架构更有效。这篇文章很好地解释了不同的架构,以及序列转换如何从 GPT-3 使用的变压器架构中获益。

Transformer 架构并不新鲜,因为它们在两年前变得非常流行,因为 Google 将它们用于另一个非常著名的语言模型, BERT 。它们也在 OpenAI 的 GPT 的早期版本中使用。那么,GPT 3 号有什么新鲜事吗?它的大小。这是一个非常大的模型。正如 OpenAI 在这篇论文中披露的,GPT 3 号使用了 1750 亿个参数。作为参考,GPT-2“仅”使用了 15 亿个参数。如果规模是实现类人智能的唯一必要条件(剧透,它不是),那么 GPT-3 只是小了大约 1000 倍

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

L 语言模型是很少尝试的学习者,OpenAI 论文。

使用这种庞大的架构,GPT-3 也使用巨大的数据集进行了训练,包括通用抓取数据集和英文维基百科 ( 跨越约 600 万篇文章,仅占其训练数据的 0.6%),匹配“闭卷”问答任务的最先进性能,并为λ语言建模任务创造了新纪录。

用例

真正让 GPT-3 与之前的语言模型如 BERT 不同的是,由于它的架构和大量的训练,它可以在不需要微调的情况下在任务无关的性能上表现出色。魔法来了。自发布以来,GPT-3 已经在广泛的场景中得到应用,一些开发人员已经开发出了非常惊人的用例应用程序。他们中的一些人甚至在 github 或他们自己的网站上分享最好的,供大家尝试:

基于 GPT 协议-3 的非详尽应用列表如下所示:

文本总结

正则表达式

自然语言到 SQL

自然语言到乳胶方程

创意写作

界面设计和编码

文本到 DevOps

自动回复邮件

头脑风暴伴侣

对话框流程工作台

吉他琴谱生成

恐慌的时候到了?

作为一个在 IT 服务市场工作的人,当看到所有这些令人难以置信的基于 GPT 3 的应用程序时,首先想到的问题很明显:软件工程师会因为像这样的人工智能改进而失业吗?这里我首先想到的是,软件工程和写代码是不一样的。软件工程是一项意义深远的任务,它意味着解决问题、创造性,当然,还包括编写实际解决问题的代码。也就是说,我真的认为,由于启动,这将对我们通过软件解决问题的方式产生影响。

正如人类需要启动来识别我们以前从未注意到的东西一样,GPT-3 也是如此。启动的概念将是使这项技术变得有用的关键,为模型提供部分代码块、关于我们想要解决的问题的好问题等等。一些作者已经写了关于“提示工程的概念,作为一种通过 GPT-3 风格的人工智能解决问题的新方法。同样,一个工程过程仍然需要比目前 GPT-3 解决的更多的东西,但它肯定会改变我们作为它的一部分处理编码的方式。

GPT-3 推出的时间不长(实际上,目前对其 API 的访问非常有限),但开发人员通过使用该模型功能所能实现的创造力显然令人惊叹。这就引出了下一个问题。GPT-3 应该上市吗?如果这是用于错误的原因呢?

不久前,OpenAI 在展示其先前的 GPT-2 模型时写道这个:

“由于担心大型语言模型被用于大规模生成欺骗性、有偏见或侮辱性的语言,我们只发布了一个小得多的 GPT-2 版本以及采样代码。我们不会发布数据集、训练代码或 GPT 新协议模型权重。”

截至今天,OpenAI 仍然承认这种潜在的影响,但正在通过一个测试程序开放对其 GPT-3 模型的访问。他们对这一战略的想法可以在 twitter 上找到:

很高兴看到他们清楚地认识到,滥用 GPT-3 这样的生成模型是一个非常复杂的问题,应该由整个行业来解决:

尽管已经与已经在使用 API 的创作者分享了 API 指南,并声称使用 GPT-3 的应用程序在上线前要经过 OpenAI 的审查,但他们承认这是一个非常复杂的问题,仅靠技术无法解决。甚至 AI @脸书的负责人也在对话中举了几个例子,说明当被提示只写一个词(犹太人、黑人、女人等)时,是如何做到的。)GPT-3 可以显示有害的偏见。这可能与以下事实有关:GPT-3 已经在 Reddit 过滤的数据上进行了训练,并且“从这些数据中建立的模型产生了令人震惊的偏见

这不是唯一的威胁。先进的语言模型可以用来操纵公众舆论,而 GPT-3 模型及其未来的演变可能意味着未来民主的巨大风险。Rachel Thomas 分享了一个关于这个话题的精彩演讲,你可以在这里找到:

数据偏差不是语言模型的唯一问题。正如我在之前的一篇文章中提到的,人工智能系统的政治设计是关键。就 GPT-3 而言,这可能对未来的工作以及已经边缘化的群体的生活产生巨大影响。

作为一个有趣(或者可怕)的注意,甚至 GPT-3 认为 GPT-3 应该被禁止!

多大才算够大?

回到 GPT-3 的架构,就计算资源而言,训练 1750 亿个参数的模型并不便宜。据估计,仅 GPT-3 就需要超过 350GB 的内存和超过 1200 万美元的培训费用。

很明显,结果是惊人的,但是,代价是什么呢?就所需的计算能力而言,人工智能的未来是可持续的吗?让我用我为我的“深度学习是不是太大而不能倒”写的一些句子来结束这篇文章文章:

我们不要忘记,更多的数据并不一定意味着更好的数据。我们需要高质量的数据:无偏见和多样化的数据,这些数据实际上可以帮助人工智能造福于许多社区,这些社区远未获得像玩 AlphaStar 所需的最先进的计算能力。

只有当我们使用用有偏见和多样化的数据训练的高效算法(因此绝大多数公民都可以使用)时,深度学习才会“大到不能倒”。它太大了,因为它将为那些大到不能倒的人服务:人民。

如果你喜欢阅读这篇文章,请 考虑成为会员 以便在支持我和媒体上的其他作者的同时,获得每个故事的全部信息。

GPT-3:自然语言处理的创造潜力

原文:https://towardsdatascience.com/gpt-3-creative-potential-of-nlp-d5ccae16c1ab?source=collection_archive---------0-----------------------

OpenAI 的新 ML 里程碑—在行动中

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

照片:Merzmensch

更新时间:2021 年 11 月 18 日: 无等待名单进入

去年二月,OpenAI 公布了他们对无监督语言模型 GPT-2 的训练结果。接受了 40Gb 文本(800 万个网站)的训练,能够预测邻近的单词。GPT-2,一个基于 transformer 的语言应用于自我关注,允许我们生成非常令人信服和连贯的文本。质量是如此之好,所以拥有 15 亿个参数的主要模型最初是不公开的,以防止不受控制的假新闻。幸运的是,完整的模型后来出版了,甚至可以和 Colab 笔记本一起使用。

今年,OpenAI 用新的语言模型 GPT-3 反击。拥有 1750 亿个参数(另读:【GPT-3】论文 )。
不必要的剧透:好得不可思议。

已经有一些关于 TDS 的深刻文章考察了 GPT-3 的特点和论文:

* [## 越大也越聪明吗?—开放人工智能发布 GPT 3 语言模型

对更大的语言模型的竞争正在进入下一轮。

towardsdatascience.com](/is-bigger-also-smarter-open-ai-releases-gpt-3-language-model-adbb8b3b8126) [## GPT-3:来自 OpenAI 的新的强大语言模型

用 175B 参数将深度学习推向极限

towardsdatascience.com](/gpt-3-the-new-mighty-language-model-from-openai-a74ff35346fc) [## GPT-3,深度学习和自然语言处理的一大步

使用大量数据训练一个足够大的 LM 就能产生智能吗?OpenAI 试图这样做,用 1750 亿…

towardsdatascience.com](/gpt-3-for-the-people-2cdd003d9a89)

但是它实际上是什么样的呢?

OpenAI 正在构建一个 API,目前可以通过等待列表访问:

[## OpenAI API

用于访问 OpenAI 开发的新人工智能模型的 API

beta.openai.com](https://beta.openai.com/)

幸运的是,我可以直接进入 GPT 3 号进行实验。以下是我的一些初步成果。

更新(18.11.2021): OpenAI 的 API 现已可用,无等待列表

界面,设置,预设。

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

截图:beta.openai.com//作者:默兹曼施

AI 游乐场界面看起来很简单,但它承载着内在的力量。首先,这里有一个设置对话框,让你配置文本长度,温度(从低/无聊到标准到混乱/有创意),以及其他功能。

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

截图:beta.openai.com//作者:默兹曼施

您还可以定义生成文本的开始和结束位置,这些是对文本结果有直接影响的一些控制功能。

这个简单的界面还提供了一些 GPT-3 的预置。变压器驱动的 GPT 模型的惊人之处在于能够识别特定的样式、文本字符或结构。如果你从列表开始,GPT-3 会继续生成列表。万一你的提示有 Q & A 结构,会保持连贯。你要一首诗,它就写一首诗。

您可以进行自己的预设,或使用现有的预设,它们是:

聊天。

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

截图:beta.openai.com//作者:默兹曼施

聊天机器人的典型设置。你问-人工智能回答。也可以改变“角色”或设置。如你所见,聊天的情形完美地完成了(即使我的,人类的,第三个问题有点不公平)。

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

截图:beta.openai.com//作者:默兹曼施

为了演示上下文影响,让我们将 AI 角色从“乐于助人”和“非常友好”改为“野蛮、愚蠢和非常不友好”。你会看到整个对话会受到怎样的影响:

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

截图:beta.openai.com//作者:默兹曼施

我认为,我们重新发明了偏执机器人马文。

问&答

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

截图:beta.openai.com//作者:默兹曼施

这个预设由一个清晰的双重结构组成:问题和答案。在它开始回答问题(并获得规则)之前,你需要一些训练,但之后它就完美地工作了。我问了一些来自不同领域的随机问题,你看:

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

截图:beta.openai.com//作者:默兹曼施

我会说,完美!

解析非结构化数据

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

截图:beta.openai.com//作者:默兹曼施

这一个很吸引人,显示了对非结构化文本的良好理解——从全文中提取结构化数据。

为二年级学生总结

这种预设显示了另一种理解水平——包括用清晰的词语重新表述困难的概念和句子。

我试过维特根斯坦:

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

截图:beta.openai.com//作者:默兹曼施

这个简单的谚语可以令人信服地解释:

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

截图:beta.openai.com//作者:默兹曼施

或者看看西格蒙德·弗洛伊德的时间距离概念的这个非常清晰的转变:

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

截图:beta.openai.com//作者:默兹曼施

如你所见,压缩文本及其连贯的“翻译”是 GPT-3 的优势之一。

语言呢?

当它是关于英语的时候,GPT-2 已经是一个伟大的语言模型。你可以生成惊人的文本,尤其是有 15 亿个参数的文本。我用 GPT-2 作为这部短片的剧本——它的荒谬可以被理解为大卫·林奇和贝克特的良好传统:

对话是合乎逻辑的,即使是自发的。但是是关于英语的。如果你尝试过其他语言的输入,你会面临理解的障碍。GPT-2 试图模仿语言,但你需要在特定语言的文本语料库上进行微调,以获得良好的结果。

GPT 3 号不同。

它在其他语言中的处理是惊人的。

我试过德语、俄语和日语。

德语。

而是我的女儿,她试图让 GPT 3 写一个童话。她以“一只长着翅膀的猫在公园散步”开始。

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

下面是全文

出现的故事写得惊人的好。讽刺,生动的人物,和一些主旋律。这不仅仅是一个拓扑或连接句子的集合。这是…一个故事!

俄语。

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

全文在此。

我曾经用普希金的诗歌训练过一次 GPT 2 号,学到了一些有趣的新词,但语法一塌糊涂。在这里,我输入了普希金的几行诗——我得到的结果是……有趣。它不押韵,但风格强烈的力量。不过,这不是普希金风格。但几乎没有任何错误或奇怪的语法。而且……它像诗歌一样起作用(尤其是如果你准备好去解读它的话)。

日语。

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

全文此处

这很特别。我随便输入了一句话:

今日は楽しい一日になりますように!と言いました。// Today was funny and entertaining day, I said.

结果是一个关于祈祷、幸福、智慧和金融投资的小故事。用写得很好的日语(中性礼貌形式,如输入)。

这确实意味着:GPT 3 号已经准备好进行多语言文本处理。

各种实验(和警示信号)。

莎士比亚和写诗

当然,我的第一次尝试是写一首莎士比亚的十四行诗。所以提示只是:

here is a poem by Shakespeare

结果是这样的:

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

截图:beta.openai.com//作者:默兹曼施

完美的抑扬格诗,伟大的风格,优美的押韵…如果不是一件事:

前两行其实是出自**亚历山大·波普《锁之强奸》。**在这里,我们有理由保持谨慎:GPT-3 产生独特和不可重复的文本,但它可以重复使用它训练过的现有文本的全部引文。

如果你想保证文本的唯一性,对结果的重新检查是不可避免的。

我想知道, 【投影】是否有可能像 StyleGAN2 的特征 一样,正好与 StyleGAN2 相反(它将图像与潜在空间进行比较),在 GPT-3 中,它会与它接受训练的数据集进行比较?防止意外抄袭。

但事实是:GPT-3 可以根据需要写诗,以特定的风格。

这是另一个例子:

试图

由于我仍然没有访问,我请一个朋友让 GPT 3 写一篇关于德国艺术家库尔特·施威特斯和达达主义者的文章:

结果是:GPT 三号已经有了丰富的知识,可以回忆起来。它并不总是可靠的(你必须微调它以获得完美的意义匹配),但它仍然非常接近话语。

用 GPT-3 编码

另一个令人兴奋的可能性是使用 GPT-3 是完全不同的情况,而不仅仅是文本生成:

您可以通过 CSS 获得支持:

称之为一般智力已经是一件事了:

总结。

我们仍处于开始阶段,但人工智能社区对 GPT-3 的实验显示了它的力量、潜力和影响。我们只需要合理和善意地使用它。但那是人的因素。这并不总是最好的。

对于更多精彩的文本实验,我强烈推荐你阅读 Gwern:

[## GPT-3 创意小说

我用 OpenAI 的 2020 GPT-3 继续我的人工智能诗歌生成实验,它是 116 倍大,也更强大…

www.gwern.net](https://www.gwern.net/GPT-3)

让旅程继续!*

GPT-3:演示、用例、含义

原文:https://towardsdatascience.com/gpt-3-demos-use-cases-implications-77f86e540dc1?source=collection_archive---------2-----------------------

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

paweczerwiński 在 unsplash 拍摄的照片

GPT-3

OpenAI 的 GPT-3 是世界上最复杂的自然语言技术。这是最新最棒的文本生成神经网络。推特圈对此议论纷纷。

我想谈谈最近炒作的影响。但是首先,简单描述一下这头野兽。

虽然绝大多数人工智能系统都是为一个用例设计的,并为此进行了严格的训练,但 GPT-3 是自然语言处理技术谱系中最新的一种,被称为变形金刚,具有更广泛的通用性。

实际上,变形金刚处理大量文本来学习语言的一些一般属性(预训练)。然后,这些知识被用作精细处理特定语言理解任务(微调)的良好起点。这样,它大大减少了特定自然语言任务所需的标记训练数据的数量。

有什么新鲜事吗?GPT 3 号和它的前任 GPT 2 号的主要区别在于它的大小。

尺寸很重要。

在人工智能中,大小尤其重要。彼得·诺维格仍然是正确的,只是更加正确——“数量有它自己的质量”。具体来说,它的巨大(175 个参数)与其有效性直接相关(检测一篇文章是否是人工智能生成的平均人类准确度约为 52%)。

更具体地说:

  • 语言模型性能与模型大小、数据集大小和计算量的 幂律 成比例。
  • 在足够多的数据上训练的语言模型可以解决它从未遇到过的 NLP 任务。换句话说,GPT-3 将该模型作为许多下游工作的通用解决方案进行研究而不进行微调

GPT-3 个项目和演示

两天前,Twitter 上出现了基于 GPT 3 的有趣而优秀的演示和项目。这里有几个突出的例子,应该能让你很好地体会到什么是可能的。

单词

Sushant Kumar创建了这个微型网站,它获取一个单词,并在此基础上输出一个 GPT 3 生成的句子。把下面网址末尾的‘word’替换掉,就能看到 GPT-3 趾高气扬的样子:https://thoughts.sushant-kumar.com/word

这里有一些例子,只是稍微挑了挑。

  • GPT 三号正在进行中。“文明以指数曲线上升。我们不应该期望进步是一条直线。”
  • 技术方面的 GPT-3。“技术优化系统。人优化文化。”
  • 深度学习的 GPT-3。“深度学习研究的 M&A 就像圣诞老人的巧克力糖果。”
  • 区块链上的 GPT-3。“所有的加密货币都是欺诈。它没有任何真实的东西作为后盾,它是凭空制造的(除了所用的电)。”
  • GPT-3 设计。“错误是坏的,但删除错误更坏。”
  • GPT 三号在 UX。“用户体验首先是为了用户的体验。"

密码

debuild.co Sharif Shameem 已经制作了一些非常令人兴奋的演示。用简单的英语描述你的应用程序应该做什么,然后在几秒钟内开始使用它。

沙里夫在 debuild.co的展示

他已经为以下项目制作了演示:

图灵检定

凯文·拉克尔让 GPT 3 号坐下来,并对它进行图灵测试。凯文测试常识、琐事和逻辑。他的结论是:“GPT 3 号在某些方面给人留下了深刻的印象,但在另一些方面却明显不如人类。”有点像我自己。

传统上,人工智能在“常识”上挣扎。这是 GPT 3 号回答了很多常识性的问题。

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

GPT-3 在 lacker.io 的战斗截图

会话

Mckay Wrigley 设计了一个使用 GPT 3 的应用程序,允许你“向任何人学习”。有没有想过向埃隆马斯克学习火箭?如何写出更好的莎士比亚作品?亚里士多德的哲学?

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

示例截图来自 McKay Wrigley 的learnfromanyone.com

发帖时, learnfromanyone 宕机,但应该很快就会恢复运行。

设计

乔丹·辛格为 Figma 制作了一个插件,使用 GPT-3 为你设计。该插件与 Figma 对话,以说出诸如“添加一个蓝色方块”或“给我一个 500 像素的粉色圆圈”之类的话。乔丹在提供了一些原始文本示例后,制作了 GPT-3 生成的 Figma 画布的基本表示。这种表示然后被翻译成 Figma 插件代码来构建一个屏幕。

乔丹歌手的 GPT-3 Figma 插件

总结

卢沛宁用 GPT-3 建立了一个解释如我是 5 的网站。

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

卢沛宁简化的截图

思维能力

Paul Yacoubian 使用 GPT-3 种子引物产生无限想法。

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

保罗·雅库比安GPT-3 赚到它的养份的截图

GPT 三号协议的含义

GPT-3 是自然语言处理的一个拐点。但不是因为这是一个概念上的巨大飞跃。

GPT 3 号感觉不一样。演示的范围证明了这一点。它给一个易燃的炒作工厂浇上了燃烧的燃料。一家几乎虔诚地准备抓住任何看起来能智能行动的计算机承诺的工厂。

为什么?

首先,它比上一代型号要好。对于一个来自 GPT 2 号的新手来说,显然是有趣和有用的通过了一些看不见的门槛 ,这需要用户投入更多的时间(例如 Gwern )。

这也是高度可及的。通过 beta API 开放访问已经导致了演示和项目的疯狂传播——这将该技术的潜力带入了生活。有形性很重要。

最重要的是,你可以通过英语与 GPT 3 互动。它只需要最少量的特定知识。那些创作演示并在场外为其欢呼的人的形象与以前不同了。不仅仅是人工智能从业者和趋势观察者。是黑客。

我的预测是,GPT 3 的主要遗产将是一个戏剧性的扩展,谁将尝试人工智能的新事物,以及他们将被激励去尝试什么。

这很可能是最新一代 NLP 的自制计算机俱乐部。

那么接下来呢?

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

来自 simonoregan.com的 NLP 投资周期

我同意阿齐姆·阿兹哈尔的观点,他将机器视觉能力的繁荣如何引发人工智能初创公司、风险投资和企业支出的浪潮进行了类比。这就是纯人工智能风险投资在计算机视觉热潮开始时的样子。

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

来自simonoregan.com的风投投资 AI

阿齐姆说得好:

因此,在 2020 年的今天,我们认为高质量的图像计算处理毫无价值。我们用脸打开手机。我们用廉价的消费网络摄像头追踪访客。我有一个免费的应用程序,可以识别我用手机指向的任何植物。十年前世界上任何地方都没有的能力现在太便宜而无法计量。自动驾驶汽车依靠这些突破来导航道路。

如果 GPT-3 和自然语言处理遵循机器视觉的类似路径,我们可以预计在未来 3-5 年内使用文本的应用程序将会快速改进。

这很重要。

使用案例

对 NLP 的大量投资意味着什么?

首先,在性能改进和可访问性增加的驱动下,我们可以期待标准 NLP 用例的扩散。

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

来自 simonoregan.com的 NLP 用例

这些 NLP 任务不是新的;他们从 80 年代就存在了。我们大多数人定期或半定期地使用语义搜索、机器翻译和聊天机器人。相当大的改进将意味着更多的采用,并可能导致谁提供这些服务的变化。例如,建立在付费访问人工智能层上的显著改善的语义搜索会放松谷歌对搜索的控制吗?

对于声音的使用也有下游的影响。虽然可用,但今天的语音仍然很笨重。填补 Siri 和 Alexa 知识上的许多空白将大大增强用户的信心,并首先激发语音使用的增加。

然后是对内容生成的影响。当人工智能可以为你做的时候,谁还会去写呢?嗯,从我开始。还有无数更有才华的人。人工智能内容生成真正有潜力颠覆的是最低端。真正的输家将是长尾、低端内容生成者——维基百科及其以下的内容生成者。

然而,在我看来,最大的潜力就在这些常走的普通道路之外。放松对大量训练数据的需求改变了 NLP 可以指向的用例。将 NLP 引入被忽视的、不具吸引力的商业领域,将会改变金融报告、技术写作和医疗报告等领域的游戏规则。增强读者和作者的能力会改变这类内容的创作和消费方式,以及由谁来创作和消费。

最后,还有人工智能文本大规模生成的第二层含义。深度假冒不会很快消失,因此内容认证变得更加重要。

有趣的阅读

感谢您的阅读🙏🏻

这篇文章最初发表在 simonoregan.com。

如果你喜欢这个,你可能会喜欢——每周更新的工具和思考,揭示了 21 世纪 20 年代的新兴技术和趋势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值