TowardsDataScience 博客中文翻译 2021(六百一十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

Plotly Express 的堆积条形图

原文:https://towardsdatascience.com/stacked-bar-charts-with-plotly-express-85885e91874f?source=collection_archive---------6-----------------------

长格式与宽格式数据

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

图片来自 Unsplash 的 Bekir Donmez

阴谋地表达

总部位于加拿大蒙特利尔的计算公司 Plotly 开发了 plotly.py,这是一个用于 Python 的交互式开源可视化工具。2019 年,该公司发布了 Plotly 4.0,其中包括 Plotly Express,这是一个高级包装器,与 Plotly 生态系统的其余部分完全兼容。

Plotly Express (PE)是免费的,它提供了一个面向对象的图形创建接口。该工具不仅可以生成标准的 2D 图(条形图、折线图、散点图、饼图等)。),还包括复杂的 3D 散点图和曲面图。PE 可以将数据帧、列表和字典作为输入数据,用于快速绘图生成。特别是,“大多数情节都是由一个函数调用完成的,该函数调用接受一个 整齐的熊猫数据帧”(1)。

长格式数据,宽格式数据

数据有许多不同的格式。关于表格数据(以具有行和列的表格的形式呈现的信息),数据可以是长格式(整齐、窄或堆叠形式)或者可以是宽格式 ( 未堆叠或杂乱形式)。

宽格式数据的每个变量都有一个单独的列,而在长格式中,每一行都是一个单独的变量标识组合。长格式对于筛选和执行某些类型的聚合最方便,而宽格式通常用于随时间收集的数据。

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

来源:https://lost-stats . github . io/Data _ Manipulation/shape/shape _ panel _ Data _ from _ long _ to _ wide . html

Python 中的 Pandas 库有几种将长格式数据转换成宽格式的方法:df.pivot().reset_index();df.pivot_table();df.groupby();pd.crosstab.

从长型转换到宽型的过程通常被描述为枢转

要从宽格式转换为长格式,您可以使用: df.melt()or df.wide_to_long().

我们可能更熟悉宽格式,因为这是我们习惯于在 Excel 电子表格中工作的格式。所以,这种格式很直观,也更容易理解。宽格式的表格适用于汇总信息。尽管长格式数据不太常见,但它易于存储,允许快速转换为其他类型,并且对于某些可视化工具(如 Seaborn)来说很方便。长格式的表格适用于连续的数据记录。

该公司于 2020 年 5 月 26 日发布了 Plotly.py 版本。**以前的版本只支持长格式熊猫数据帧。**从现在开始,PE 也用宽格式的表格数据进行操作。他们还声称致力于混合格式数据,即长格式和宽格式数据的混合体。以下 2D-笛卡尔函数可以对宽格式和混合格式的数据进行操作:px.scatter, px.line, px.area, px.bar, px.histogram, px.violin, px.box, px.strip, px.funnel, px.density_heatmap and px.density_contour.

堆积条形图

堆积条形图(SBC)显示了主要分类变量及其子类之间的数量关系。每个条形代表一个主要类别,它被分成代表第二分类变量的子类别的段。该图表不仅显示了不同子类别之间的数量关系,而且还显示了与整个主要类别之间的数量关系。它们还用于显示子类别的组成如何随时间变化。

堆积条形图应用于比较和比例,但重点是成分。这种成分分析可以是静态的-对于某一时刻-或者是动态的-对于确定的时间段。

SBC 通过矩形条表示,可以像标准条形图一样水平或垂直定向。它们是二维的,有两个轴:一个轴显示类别,另一个轴显示数值。每个主要类别被分成代表第二分类变量的子类别的段。每个子类别的数量由水平或垂直首尾相连堆叠的矩形段的长度或高度表示。每个条形的最终高度或长度代表每个主要类别的总量(100%堆积条形图除外)。

同等子类别在每个条中必须有相同的颜色,以免混淆观众。主线条之间通常留有一些空间,以清楚地表明它们指的是离散的组。

有两种不同类型的 SBC:

1.- 简单堆叠条形图将每个子类别的绝对值放置在前一个子类别之后或之上。数轴具有数值的刻度。该图显示了每个子类别的绝对值,这些值的总和表示该类别的总数。通常,主杆具有不同的最终高度或长度。

2.- 100%堆积条形图将每个子类别的百分比放置在前一个子类别之后或之上。数轴具有百分比数字的刻度。该图显示了每个细分市场占整个类别的百分比。所有的主杆都有相同的高度。

带 Plotly Express 的堆积条形图

我们使用了从 Kaggle [2]下载的数据集。该数据集包括 10,000 名银行客户,其中提到了他们的年龄、工资、教育水平、婚姻状况、信用卡限额、信用卡类别和附加功能。银行经理对客户离开他们的信用卡服务感到不安(流失客户与现有客户)。因此,我们将确定一些分类变量(教育水平、婚姻状况)与流失情况之间是否存在任何关系。

首先,我们导入 Plotly Express 为 *px,*Pandas 库为 pd ,并将我们的 csv 文件转换成 dataframe:

import pandas as pdimport plotly.express as pxpath = 'your path'df = pd.read_csv(path + 'CreditCardCustomersCols.csv', index_col = 
     False, header = 0, sep = ';', engine='python')

然后,我们选择客户条件作为我们的主要分类变量,选择教育水平作为第二分类变量。在 Kaggle 数据集中,客户条件由attachment _ Flag列[2]描述。由于数据集中的记录是长格式,我们使用 df.groupby() 将它们转换成宽格式。我们使用函数 size( )以绝对值(计数)或百分比值*(百分比)*来计算要绘制的元素的数量。

df_stack=df.groupby(['Attrition_Flag','Education_Level']).
       size().reset_index()df_stack['Percentage']=df.groupby(['Attrition_Flag',
       'Education_Level']).size().groupby(level=0).apply(lambda 
        x:100 * x/float(x.sum())).valuesdf_stack.columns= ['Attrition_Flag', 'Education_Level', 'Counts', 
       'Percentage']df_stack['Percentage'] =  
       df_stack['Percentage'].map('{:,.2f}%'.format) 

对于本文中的堆叠条形图,Plotly Express 函数为 px.bar ,对应的参数为:data _ framex =表示主分类变量的数据帧中的列名; y =表示每个子类别的绝对值或百分比值的 data_frame 中的列名;颜色数据帧中的列名代表第二分类变量的子类; barmode 决定相同位置坐标的条如何在图形上显示。通过堆叠将棒材堆叠在另一个的顶部。我们可以选择 barmode = ‘overlay’ 来绘制重叠条形图,或者选择 barmode = ‘group’ 来将条形图并排放置在簇状条形图中(https://towards data science . com/clustered-overlapped-bar-charts-94 f1 db 93778 e)。

我们用 update.layout 更新了图表:设置标题、x 轴名称、y 轴名称,用宽度高度设置图形尺寸。最后,我们使用默认的模板( plotly 、【带 Plotly Express 的直方图、主题&模板】、https://towardsdatascience . com/Histograms-with-Plotly-Express-e 9e 134 AE 37 ad)绘制图表。

fig = px.bar(df_stack, x = 'Attrition_Flag', y = 'Counts', color = 
    'Education_Level', barmode = 'stack')fig.update_layout(title = "Education Level Customers' Composition",
     xaxis_title = 'Customer Condition', yaxis_title = 'Counts', 
     width = 1600, height = 1400)fig.show()

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

图 1:简单的堆叠条形图。作者用 Plotly Express 制作的图表。

图 1 显示了银行客户教育水平构成的简单堆积条形图。这种图形表示不允许我们进行很好的比较,所以我们决定用 100%堆积条形图( y='Percentage ')绘制相同的数据:

fig2=px.bar(df_stack, x='Attrition_Flag', y='Percentage',
     color='Education_Level', barmode   ='stack')fig2.update_layout(title = "Education Level Customers' Composition", 
      xaxis_title = 'Customer Condition', yaxis_title =  
      'Percentage', width = 1600, height = 1400)fig2.show()

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

2:百分比堆积条形图。作者用 Plotly Express 制作的图表。

现在我们可以做一个直观的比较,但如果能包括数值就更好了:

fig3=px.bar(df_stack,x='Attrition_Flag',y='Percentage',color=  
    'Education_Level', barmode = 'stack',  
     text=df_stack['Percentage'])fig3.update_layout(title = "Education Level Customers' Composition", 
     template = 'simple_white', xaxis_title = 'Customer Condition', 
     yaxis_title = 'Percentage', width = 1600, height = 1400)fig3.show()

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

图 3:带批注的百分比堆积条形图。作者用 Plotly Express 制作的图表。

我们使用text = df _ stack[’ Percentage ']作为注释。我们还把模板改成了‘simple _ white’,一个清晰图表的极简模板。现在,我们可以做一个适当的比较,结果我们可以说流失客户和现有客户的教育水平没有显著差异。

最后,我们想知道婚姻状况是否与减员情况有任何关系(color = ’ marriage _ Status’):

fig4= px.bar(df_stack2, x = 'Attrition_Flag', y = 'Percentage', 
      color = 'Marital_Status', barmode = 'stack', 
      text=df_stack2['Percentage'])fig4.update_layout(title = "Marital Status Customers' Composition ",
      template = 'simple_white', xaxis_title = 'Customer Condition', 
      yaxis_title = 'Percentage', width = 1600, height = 1400)fig4.show()

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

图 4:婚姻状况为第二分类变量的百分比堆积条形图。作者用 Plotly Express 制作的图表。

同样,我们可以肯定流失客户和现有客户的婚姻状况没有显著差异。

总结一下:

您可以用几行代码绘制简单的堆积条形图或百分比堆积条形图;

通常会先将数据集记录从长格式转换为宽格式;

请注意,虽然长格式也称为堆叠式,但使用宽数据或未堆叠数据的堆叠条形图可以更好地讲述故事。

如果你对这篇文章感兴趣,请阅读我以前的(【https://medium.com/@dar.wtz】T2):

带有 Plotly Express、趋势线和分面的散点图

带有 Plotly Express、主题和模板的直方图

参考文献

[1]:https://medium . com/plotly/introducing-plotly-express-808 df 010143d

2】:https://www.kaggle.com/sakshigoyal7/credit-card-customers

多元时间序列的堆积机器学习模型

原文:https://towardsdatascience.com/stacking-machine-learning-models-for-multivariate-time-series-28a082f881?source=collection_archive---------1-----------------------

实践教程,通过 Dataland 进行讨论

使用堆栈集合预报 PM 2.5 空气污染

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

北京雾霾来自北京

ime 序列分析经常被视为数据科学的一个深奥的子领域。它不是。其他数据科学子领域有它们的特质(例如 NLP、推荐系统、图论等。),时间序列也是如此。时间序列是有特质的,不是截然不同的

如果你的目标是预测,你可能不需要经典的计量经济学模型——ARIMA、ARDL、VAR——以及它们的假设,包括平稳性,这取决于你的需求、方法和数据。事实上,一些著名的计量经济学家长期以来一直认为,平稳生成的多元时间序列数据剥夺了有用的动态趋势和关系,因此你这样做可能会丢弃有价值的信息。

存在 VAR(向量自回归)中的变量是否需要是静态的问题。Sims (1980 年)和 Sims,Stock 和 Watson (1990 年)建议反对差分,即使变量包含单位根。他们认为,风险值分析的目标是确定变量之间的相互关系,而不是确定参数估计值。反对差异的主要论点是,它“丢弃”了关于数据中共同运动的信息(例如协整关系的可能性)。同样,有人认为数据不需要去趋势化。— *沃尔特·恩德斯,*应用计量经济学时间序列,第三版

让我来演示一下机器学习模型是如何很好地适用于时间序列预测的,我将通过堆叠一个机器学习模型来让它变得更有趣。您确实需要调整交叉验证过程,以尊重时间序列的时间顺序,但是一般的方法是相同的。同样,这是如果你的目标是预测,而你对假设检验和统计推断毫无兴趣的话。

从截面数据分析类比是显而易见的。如果你希望进行统计推断,那么你可能需要一个线性回归模型,并且(很大程度上)遵守高斯-马尔可夫假设。但是,如果你不需要假设检验,那么你可以使用随机森林或支持向量机或神经网络,完全不理会残差图和 p 值

正在讨论的数据集是与污染和天气相关的,目标是预测空气中每小时 2.5 微米颗粒物(“PM 2.5”)的浓度。它是一个连续变量。“PM 2.5”是微粒物质中最细的一类空气污染,并对健康构成重大威胁,因为这些微粒如此之细,以至于它们可以绕过人体的大部分自然防御,当被吸入时会进入肺部深处。这些数据可以在 UCI 资料库这里免费获取。[1]

[1]宋·(2016)。UCI 机器学习知识库[http://archive . ics . UCI . edu/ml];加州欧文:加州大学信息与计算机科学学院。

栈集合建模

我将用一些最成功的机器学习算法填充栈集合,但不会包括任何计量经济学时间序列模型。堆栈的第一阶段将包括以下基本模型**😗*

  • 套索回归(套索)
  • 多层感知器 (MLP),一种人工神经网络
  • 线性支持向量回归 (SVR)
  • 支持向量机 (SVM) —限于 rbfsigmoidpoly 内核
  • 随机森林回归器 (RF)
  • XG 升压回归器 (XGB)

堆栈的第二个(也是最后一个)阶段是一个单一的元模型,由最受欢迎的线性回归(“OLS”)模型表示。下面是代表我的方法的简单图表。

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

根据时间序列的时间流程的三层堆栈模型(图片由作者提供)

没有“正确的”方法来做系综叠加建模。这主要是实践经验加上大量的尝试和测试。一种相当典型的方法是在第一阶段中使用每种机器学习算法中的几个设置为不同的超参数,然后将它们的预测馈送给元模型,该元模型根据这些预测和目标变量进行训练。

更复杂的设置可能涉及元模型之前的模型的附加层。数据分析公司 SAS 的一篇博客文章在这里解释了堆叠的总体思路。

如果堆栈整体建模有什么原则的话,我会想到三个原则:

  1. 组合各种算法,可以对感兴趣的特定数据提供像样的预测,但使用不同的方法。例如,我在这个集合中混合使用了线性模型、基于树的模型、支持向量模型和神经网络。
  2. 过度拟合通常是一个问题,因此在评估堆栈模型时严格的交叉验证非常重要。
  3. 小心地分离各种培训、验证和测试数据层以防止它们“渗透”到下一层。

目标变量

该数据集包含从 2010 年 1 月 1 日到 2014 年 12 月 31 日的五年内每小时的数据,包括北京的 PM 2.5 颗粒读数以及选定的天气变量,如温度、风向和降雨量等。原始 csv 文件中有43824 行。这项工作的目标变量将是提前一个周期(即提前一小时)的 PM 2.5 读数

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

目标变量的折线图表明数据中有很强的季节性,但没有明显的多年趋势。PM 2.5 读数按年分布的箱线图也表明缺乏趋势,尽管数据被限制在零,并且在较高值时似乎受到**大量“异常值”**的困扰。我想空气中的微粒含量不可能是负数。

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

然而,这些“异常值”中的一些可能根本不是异常值,因为空气污染的某些高发生率可能有某种模式。这就是领域知识和/或普通的求知欲变得重要的地方。让我们先仔细看看这些数据。

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

前 15 名 PM 2.5 读数

左边的表格列出了数据集中前十五个小时 PM 2.5 读数。这可能不会立即显而易见,但前三名的读数来自 2010 年和 2012 年农历新年 (LNY)的第一个小时。阴历不同于阳历,因为 LNY 可能落在一年中不同的公历日。传统上,新年是通过燃放鞭炮来迎接的。鞭炮产生大量烟雾和空气中的碎片,通常会造成空气污染。因此,我们需要在模型中考虑 LNY 午夜前后的时间。我想知道汽车是否能够识别这个?

早春时节,北京也很容易出现偶尔的沙尘暴,2010 年 3 月 22 日就出现了一次大沙尘暴,这也导致了上述 15 个榜单中的两个榜单。因此,该模型还需要考虑重大沙尘暴的发生率。沙尘暴可能会提前预报,尽管可能不会提前太久,因此肯定可以作为提前一小时 PM 2.5 预报的解释变量**。**

在解释性分析的过程中,我还发现,作为一个整体,周末时段的 PM 2.5 读数高于工作日时段的 PM 2.5 读数。均值差异的 t 检验返回一个 4.6551t 统计量,意味着差异在 99%水平上显著。

复杂的季节性

此外,数据中还有复杂的季节性。每年 PM 2.5 读数的图表显示,在一年的开始和接近结束时出现明显的峰值,基本上是较冷的月份。这是因为北京的大部分污染是由室内供暖产生的,而且天冷时显然会有更多的供暖。这也可以解释为什么 PM 2.5 读数在周末往往更高。

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

2010-2014 年 PM 2.5 小时读数

当我们查看每月平均 PM 2.5 读数及其置信区间时,季节性变得更加明显。月度数据证实了上述假设的季节性,在温暖的月份记录的水平较低,在寒冷的月份记录的水平较高,在 2 月和 10 月达到高峰。顺便说一下,农历新年也往往是在 1 月下旬到 2 月下旬之间。

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

深入研究数据,还会发现明显的日内季节性。事实上,在这种情况下,每日的季节性几乎与每月的季节性一样重要。****PM 2.5 平均每小时读数在午夜左右开始达到一天中的最高水平,然后在下午 15:00 逐渐下降到底部,然后迅速上升到夜晚。这可能是加热效应,因为白天太阳升起时对加热的需求减少了。

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

所有这些数据分析表明了什么?我需要虚拟变量用于以下内容:

  • 每年 LNY 从晚上 9 点到凌晨 3 点的 7 个小时;
  • 大沙尘暴的日子;
  • 周末;
  • 月;和
  • 几个小时。

我对“大沙尘暴”的判断非常简单。只需在数据集中搜索每年的“北京沙尘暴 201x”,无论搜索结果的首页出现的房源日期如何,都将被记录为“重大沙尘暴”。**

但是在进行必要的数据工程之前,我首先需要处理缺失值的紧迫问题。**

缺少目标值

数据的一个主要问题是缺失值完全在目标变量中。几乎 5%的目标观测值是 NaNs ,而三分之二的缺失数据是在前两年,即 2010 年和 2011 年。这是一个问题,因为训练数据将来自早期,而训练集中扭曲的目标变量值可能会导致模型在后期测试期间表现不佳。**

上面描述的季节性表明,简单地用估算总体平均值、中位数或众数来代替 NaN 值不是一个好主意。现有数据中的随机赋值结转上一次观测值也不会。一些(每小时)丢失的数据也连续几天流动,因此从一天流动到第二天的线性插值也会引入失真(记住当天的季节性)。面对目标变量复杂的季节性,这些典型的易缺失数据插补方法肯定会导致数据失真。**

最后,缺失值完全在目标变量中的事实表明,任何从其他变量(即后续解释变量)中估算这些值的尝试都意味着,人们正在设置制造的目标值,这些目标值将很容易通过那些相同的解释变量预测*,无论人们选择使用哪种算法。***

这个练习不应该是对目标变量的插补方法的全面覆盖,所以我决定采用一个不太复杂的解决方案来解决这个问题,并考虑到每小时和每月的季节性。执行了一个三阶段流程:

  1. 删除遗漏的第一天的观测值(2010 年 1 月 1 日每小时 PM 2.5 读数全部为秒)。
  2. 在当天 0:00-14:00(含)之间的观测值内插“内”缺失值,然后在 15:00-23:00(含)之间的观测值内插。这一两步程序考虑了上述数据中的两部分日内季节性*。***
  3. 通过可用值中值估算剩余缺失值,可用值按各年的月份和小时分组。如前所述,鉴于 PM 2.5 读数中极值的显著出现,我决定使用中值而不是平均值。****

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

各日每小时 PM 2.5 的两步插值代码

相关矩阵

在缺失数据插补之后,我接着研究了目标变量相对于数据集中其他连续变量的相关矩阵。许多与天气相关的变量似乎与目标变量的相关性很弱。

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

同时,几个天气变量之间也有很高的相关性,例如“dewp”、“temp”和“pres”。这些是露点、温度和压力读数。如果要丢弃这三个变量中的一个,“pres”似乎是最明显的,因为它与其他两个变量(“temp”和“dewp”)成对相关,而这三个变量与目标变量的相关性最低。所以我从分析中去掉了的“pres”、“cr”和“cs”变量。

之前关于世界各地 PM 2.5 污染的研究风力*确定为主要解释因素。基本上,持续的大风条件能有效地驱散空气传播的污染。数据集中的“cws”变量是一个累积风力强度变量,从上面我们可以看出,它与目标变量的相关性为+0.25。*

*在这个特例中,风速和风向之间有一个有趣的相互作用 **。*偏北风使“cws”与 PM 2.5 之间产生更强的相关性,同时也降低了温度与 PM 2.5 之间的相关性。您可以在下面的两个相关矩阵中观察到这种现象,第一个是当风向混合/不确定时,第二个是当有东北风吹时。

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

研究结果表明,我应该在北风方向和“cws”之间设计一个相互作用变量。

自相关和平稳性

由于这是一个每小时的时间序列,并且是关于空气污染的,因此因变量中的自相关将会很高是合乎逻辑的。空气中的 PM 2.5 颗粒物不太可能从一个小时到下一个小时突然出现或消失。相反,它们会随着时间的推移逐渐积累或消散。因此,在目标变量的滞后中有显著的自相关,正如我们在下面的左图中看到的。

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

然而,部分自相关在两个滞后之后迅速消失。时间序列爱好者会立即意识到这是至少一个 AR(2) 序列的迹象。例如,如果我要运行一个 ARIMA 模型,我会在模型中包含目标变量的至少两个滞后。虽然我在分析中没有使用任何计量经济学时间序列模型,但它确实表明 PM 2.5 读数的滞后应该作为特征纳入模型中。

此外,PM 2.5 颗粒读数缺乏趋势表明目标变量自然是稳定的。事实上,数据集中所有的连续变量都是平稳的。增强的 Dickey-Fuller 测试证实非平稳零假设对于所有变量都被拒绝

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

Statsmodels 的 BIC 结果自动 arma* 工具仅推荐目标变量的两个滞后,而 AIC 结果建议十九个滞后。在这种情况下,我宁愿更节俭。有趣的是,AIC 得分在三次滞后时达到了最初的低点,随后随着更大的滞后进一步下降。最终,我决定采用目标变量的三个滞后值**。***

解释变量

这需要经历很多,但却是完全必要的。特征工程往往比运行花哨的算法或超参数调优更重要,我也会这么做!最终,我得到了下面的变量列表:

目标:

  • PM 2.5 读数提前一个周期

特点:

  • “PM 2.5”的当前和两个滞后
  • “温度”-温度(电流)
  • “露点”-露点(电流)
  • “CWS”-累积风速(海流)
  • 三个“cbwd”模型——风向(海流)
  • 北风方向的交互变量&“CWS”(海流)
  • 农历新年假人
  • 大沙暴假人
  • 周末假人
  • 小时假人
  • 月假人

最后五个虚拟变量都与目标变量提前一个周期或同时设置。这是因为 LNY 日期、主要沙尘暴、周末、时间和月份都可以至少提前一小时正确预测。我们可能不知道未来一两个小时的风向,但我们肯定会同意晚上 8 点之后是晚上 9 点,或者 9 月之后是 10 月,或者下一个农历新年将在 2022 年 2 月 1 日。

作为一个题外话,我意识到通过时间和日历变量的三角变换伪造的循环时间变量通常可以成为一个有用的替代品。但是循环时间变量不能在基于树的模型中使用,所以我决定在这里不使用它们,因为我对在栈集合中使用这样的模型感兴趣。

或者另一方面,在一个栈集合中,将不同定制的特性提供给不同的算法是完全可能的。我设计了这样的堆栈。然而,让我们在这个练习中让事情变得更简单。

堆叠过程和网格搜索

现在我们终于到达建模。我首先用三种方式对数据进行子集化:gridsearch 交叉验证训练数据、元模型训练数据和维持测试数据。在这种情况下,当我处理时间序列时,有必要一丝不苟地尊重分割中向前的时间流。

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

数据按照时间的向前流动分成三种方式(图片由作者提供)

数据的最新 10% (根据时间流程)被用作保持测试集,包括 4380 个观察值。其余 90%的数据中,最早的三分之二观测值被分配给 gridsearch 训练数据(第一批训练数据),而后来的三分之一被分配给元模型训练数据(第二批)。

对于使用 StandardScaler()数据缩放程序,只有 gridsearch(第一批)训练数据被**拟合转换**。另外两个子样本是仅经过变换的。我复制了下面的建模方法的早期图表。

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

根据时间序列的时间流程的三层堆栈模型(图片由作者提供)

通过 GridsearchCV (使用 TimeSeriesSplit==3 )调整每个基础模型,以在 gridsearch(第一批)训练数据上找到它们的最佳超参数设置。每个后网格搜索模型然后在完整的第一批训练数据上进行训练。为了避免任何混淆,在这种情况下我说“完整”,因为 GridsearchCV 过程仅使模型适合每次迭代的一部分 gridsearch 训练数据。

对于我上面的陈述,以及 Sklearn 的 GridsearchCV 函数是如何操作的,这里可能会有一些读者的进一步误解。在实际实现中,只要将 GridsearchCV 中的改装选项留在默认 设置,就不需要手动重新训练 gridsearch-tuned 模型。 GridsearchCV 随后将根据 gridsearch 中使用的全部训练数据自动训练最佳估计器(链接)。所以请把我的说法作为一个概念点。

元模型训练集(第二批数据)然后被馈送到每个训练的基础模型,以产生目标变量的预测。这些预测随后被用作元模型中的解释变量。在本练习中,元模型仅使用基础模型的预测作为其特征。换句话说,元 OLS 模型是通过基于基础模型的预测回归元训练集中的目标值来训练的。请注意,一些堆栈模型在训练元模型时包含了原始的解释变量,这很好,但是我在这里没有使用它们。

最后一步是让六个基本模型(仍然只对第一批数据进行训练)生成它们各自对维持测试集中的目标变量的预测。这些预测然后被馈送到元 OLS 模型(如上训练的),以产生测试集中目标值的堆栈模型的预测

该过程的摘要如下:

  1. 子集数据三路,持有最新的 10%的数据作为维持测试集,将剩余的 90%拆分为较早的 gridsearch 训练集(2/3)和较晚的元模型训练集(1/3);
  2. ***GridsearchCV***六个基础模型找到各自的最优超参数,然后在全 gridsearch 训练数据上训练调好的模型;
  3. 基模型对元训练集的预测形成解释变量对目标变量训练元模型*;和*
  4. 基础模型最终对维持测试集做出预测,这些预测再次被反馈到元模型,并且元模型对维持测试集中的目标变量的预测最终被评分(与基础模型的预测一起用于比较)。

所有型号仅安装/训练一次。基础模型只在 gridsearch(第一批)训练数据上训练,元模型在元训练集上的基础模型预测上训练。无论如何,完整的代码可以在我的 GitHub 页面上找到,文章底部的链接是给那些对细节感兴趣的读者的。

下面列出了 GridsearchCV 之后的调谐基础型号。没有对 OLS 元模型进行网格研究,也没有太大的必要,因为单个超参数只是一个常数项(在某种程度上,是否标准化解释变量的数据),我总是在这个练习中保留它。

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

基础模型的网格搜索后列表

正向链交叉验证

在对维持测试集进行评分之前,我使用基础模型的网格搜索后超参数设置对堆栈集合进行了一次 5 重交叉验证练习。对于交叉验证练习,我将训练集的两个批次(base+meta)组合起来,以将完整的 90%训练数据重新组成为 CV 集,并为迭代设置 CV==5

交叉验证通过正向链接或扩展窗口方法执行。在下面的 StackExchange 讨论中可以很好地解释这种时间序列 CV 方法。我复制了讨论中发布的图表来说明下面的方法,但应该强调的是,图表中的“数据”不包括维持测试集

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

https://stats . stack exchange . com/questions/14099/using-k-fold-cross-validation-for-time-series-model-selection

遗憾的是,Sklearn 的 TimeSeriesSplit 函数不能用于交叉验证过程。这是因为基础模型的预测形成了每个 CV 折叠中元模型的输入。我们需要在每个折叠中的交叉验证过程中提取每个基础模型的预测,然后将这些预测提供给元模型进行交叉验证。所以需要一个定制的代码。

为了确保在稍后对维持测试集进行评分之前,堆栈层之间没有任何数据污染的可能性,这里描述的交叉验证程序是在一个单独的 Jupyter 笔记本 上实现的,感兴趣的读者可以在我的 GitHub 页面上查看。

来自 5 重交叉验证程序的 MAE 和 RMSE 评分如下所示。我们看到“堆栈模型”,即 OLS 元模型,具有最低的平均值和第二低的中值 MAE 得分。然而,在 RMSE 得分中,“堆栈模式”的中值得分最低,但平均得分第二低。XGBoost 的平均 MAE 得分最低,而 Lasso 的平均 RMSE 得分最低。

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

交叉验证 MAE 分数&统计

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

交叉验证 RMSE 分数&统计

堆栈集成方法似乎在很大程度上如人们所愿地工作,即产生比集成中任何基础模型更精确的结果。它并不完全在那里,但是当我们走向坚持测试集时,它看起来很有希望。

保持测试结果

最好有一个基线模型进行比较,典型的时间序列基线是*“持续性模型】。这只是通过目标变量的滞后值**预测的目标变量的模型。在这种情况下,它将是由当前读数预测的提前一小时的 PM 2.5 读数。*

如前所述,基本模型只在 gridsearch 训练集上训练一次,然后它们在维持测试集中对目标变量的值进行预测。这些预测形成了在元训练集上训练的 OLS 元模型的特征,然后在测试集上做出堆栈的最终预测。

下面列出了测试集中烟囱模型预测值与实际目标值的一些图表。我将图表的覆盖范围缩短到 400 次(每小时)观察,以使它们更容易理解。下面我们看到的是前 400 次观察

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

在测试集的前 400 次观测中,预测与实际 PM 2.5 读数的对比

然后中间 400 观察值如下所示。

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

在测试集的中间 400 次观测中,预测与实际 PM 2.5 读数的对比

我们看到栈模型在维持测试集上获得了最低的 MAE 和 RMSE 分数。此外,与基线持久性模型相比,stack ensemble 在 RMSE (18.66 比 19.76)和 MAE (10.53 比 11.12)得分方面分别实现了 5.5%的改进。

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

维持测试集的测试分数

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

还可以观察到,测试集上的堆栈的 RMSE 分数在上述 5 重交叉验证过程中观察到的范围内,但是 MAE 分数低于该范围。一般来说,维持测试集的错误分数往往比所有模型的交叉验证过程中观察到的错误分数低,这意味着测试集通常更容易预测(因此错误更低)。这突出了在以更全面的方式评估模型性能时进行多重交叉验证的重要性。

结论

机器学习算法非常适合时间序列预测。我利用一个机器学习堆栈来预测未来一个时期的 PM 2.5 空气污染水平。stack ensemble 包括线性模型、基于树的模型、支持向量模型和神经网络的多样化组合,作为基础模型*。最终的超级模特是一直以来最受欢迎的 OLS。***

这些数据表现出显著的异常值和复杂的季节性,并受到缺少目标值的困扰。花哨的算法和方法永远无法替代精心的预建模数据分析和工程。在此之后,根据时间顺序,数据被分成三部分,最新的 10%的数据作为维持测试集*。剩下的 90%的数据又被分成用于基础模型的早期 gridsearch 训练集 (2/3),以及用于元模型的后期元训练集 (1/3)。***

训练数据(90%以上)还用于运行 5 重正向链交叉验证程序,以评估所有使用模型的模型性能。交叉验证发现堆栈模型在 MAE 和 RMSE 分数上大多优于单个基础模型*。***

维持测试集的后续结果显示了具有最佳 MAE 和 RMSE 分数的堆栈模型。栈的分数也证明了比基线持久性模型有5–6%的改进*。总之,该练习展示了机器学习集成堆栈方法对多变量时间序列分析的有效性。***

(本练习的完整 Python 代码和数据可在我的 GitHub 资源库中获得。如果直接渲染 GitHub 笔记本文件有问题,使用 nbviewer 。)

如果你看到了阅读这样的文章的价值,你可以在这里订阅 Mediumhttps://at-tan.medium.com/membership来阅读我和无数其他作家的其他文章。谢谢你。

**** https://medium.datadriveninvestor.com/bitcoins-shifting-relationship-to-macro-factors-5465d542078f ****

用于语音情感分析的堆叠机器学习模型

原文:https://towardsdatascience.com/stacking-machine-learning-models-for-speech-sentiment-analysis-adf433488845?source=collection_archive---------15-----------------------

如何建立一个从音频和文本记录中识别人类情感的模型?合著者:亚历山大洛朗

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

照片由你好我是 NikUnsplash

在 Le Wagon 的 bootcamp 的最终项目的背景下,我和我的团队决定承担一项令人着迷的任务:语音情感识别。

这是一个巨大的挑战,因为情感在文化、性别、语言甚至个人层面上都是主观的,因此很难对人类情感进行普遍分类。

我们的数据

我们从卡耐基甜瓜大学找到了一个名为CMU-莫塞 的数据集,这是在线视频中句子级情感分析和情感识别的最大数据集。它包含超过 65 小时的注释视频,来自 1000 多名演讲者和 250 个主题。

数据被分成不同长度的片段,每个片段代表一个完整的口语句子(特征)和情感,我们的目标,它在值-3 到 3 之间变化(从负到正,0 是中性的)。

我们决定分析录音和文字记录来预测一个人的句子背后的情绪。我们的直觉是,结合两个不同来源的两个模型,使用多模态学习,可以提高我们的性能。

数据预处理

我们工作的第一步是清理文本和音频数据。

虽然已经从视频中提取了文本,但编辑主要是对文本文件进行基本格式化(删除标点、数字和大写字母)。然而,在自然语言处理(NLP)中,很难选择去除文本的哪些部分以及保留哪些部分(单个单词、句子、整个会话)。我试图对单词进行词汇化和词干化,但是没有发现性能上的改进。

音频格式稍微复杂一些,我们尝试了两种方法:

1.首先是使用 Python 的库 librosa 进行音频特征提取。它能够从每个记录中提取 5 个主要特征(平均值):MFCC、色度、梅尔谱图、光谱质心& Tonnetz。从中,我获得了大约 190 个特征,这些特征可以作为表格数据用于建模。

2.第二个是音频到 Mel 声谱图,它允许我们将音频解释为图像,并从视觉角度对其进行建模。请看下图,x 轴代表时间(s),y 轴代表频率(Hz),颜色强度代表信号幅度(dB)。在这种情况下,图像允许在深度学习设置(卷积网络)中进行特征提取。

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

作者图片

堆叠机器学习模型

ML 文本模型

我首先尝试看看我们可以用一个简单的单词袋 NLP 模型实现什么结果。

单词袋表示包括对文本中每个单词的出现次数进行计数。每个单词的计数变成一列。我决定使用 scikit-learn 的 CountVectorizer,并执行网格搜索来寻找最佳的超参数。

这些超参数包括:

  • 忽略数据集中出现频率高于指定阈值(**max_df**)的单词
  • 指定矢量化时要保留的顶部特征的数量(**max_features**)
  • 指定要考虑的序列长度(**ngram_range**)。

令人惊讶的是,给出最好结果的**ngram_range**是在训练中只保持一个单词长度的那个(**(1,1)**)。因此,我们的模型可能无法检测出“不开心”是一种负面情绪。我们的解释是,大多数时候,我们的模型会关注关键词(“好”、“灾难”)来检测正确的情绪。

矢量化之后,我使用了一个具有岭正则化的回归模型:其想法是通过在基于回归系数(betas)的损失函数中添加一个惩罚项来避免我们的模型过度拟合。我们决定使用 L2 罚函数,因为我们假设所有系数对预测都有相似的影响。

为了评估模型的性能,我使用了平均绝对误差(MAE ),一种预测值和“真实”观察值之间的误差度量。在这里,这个基本的 NLP 模型给了我们 0.87 MAE,这意味着情绪的预测值和真实值之间的差异平均为 0.87,其中情绪等级为[-3,3]。

作为比较,我使用来自均匀分布的随机样本创建了一个基线模型,它给出了 1.77 MAE。

ML 音频模型

如上所述,音频的输入变量(X)是从音频文件中提取的声学特征。

为了预测情绪,我们使用 scikit-learn 构建了一个随机森林(RF)模型。RF 是一种集成方法,它在数据集的子样本上打包一组决策树。这种方法的优点是 RF 使用平均来提高预测精度和控制过拟合。

然后,我们进行了网格搜索,以优化 RF 的超参数,包括:

  • 森林中的树木数量(**n_estimators**)
  • 分割内部节点所需的最小样本数(**min_samples_split**
  • 树的最大深度(**max_depth**)。

在这里,这个安装在音频功能上的 RF 模型给了我们 0.91 MAE。

堆叠最大似然模型以改进我们的预测

一旦这两个模型建立起来,我们打算把它们的预测结合起来,看看是否能改进我们的结果。

首先,我创建了一个定制的特性选择器,使我们的管道能够在堆叠它们之前为每个模型选择正确的特性:

然后,我使用 scikit-learn 的堆叠回归和 MLP 回归来创建我们的堆叠模型的结构。想法是增加神经元层,在管道执行中结合两种模型。迭代之后,我们选择了一个有五个神经元的单层。

该模型作为一个深度学习神经网络工作:我实现了 500 个纪元(**max_iter**),这是一个在每个神经元中校正的线性激活函数(**activation='relu'** ) &,一个限制过度拟合的早期停止工具。

堆叠 ML 模型的过程能够显著改善我们的预测:我们的最终模型达到了 0.78 的 MAE。

堆叠深度学习模型

NLP CNN 模型

为了用神经网络分析文本,我选择了一个带有自定义嵌入的卷积网络模型。

嵌入包括将我们的训练集的每个单词放置在我们创建的多维空间中。我们决定创造自己的词汇,潜在地更加强调每个单词的情感‘价值&因此比例如 Word2Vec 更加精确。为此,我们创建了一个“词汇”类来训练&保存这个词汇以备将来预测。

至于模型,我们实现了一个卷积神经网络(CNN):这些类型的深度学习模型广泛用于图像,也执行某些 NLP 任务,这是情感预测的情况。

下面的代码展示了我们用 Tensorflowkeras库构建的神经网络。在集成嵌入之后,训练数据通过一个卷积层。然后将它压平,得到一个由 32 个神经元组成的致密层。所有神经元都具有校正的线性激活函数(**activation='relu'**)。

这个 CNN 模型在我们的测试数据中给了我们 0.75 MAE,成为我们最好的模型。

音频 CNN 模型

我们的下一个方法是使用音频 Mel 声谱图,这在深度学习中被广泛采用。我们将频率转换为 Mel 标度,结果成为 Mel 频谱图,它将成为 CNN 模型的输入(作为图像)。

因为人类不能在线性标度上感知频率,Mel 标度接近人类对音高的感知。因此,在我们的研究中,所有的频率都被映射到 128 个 Mel 波段。

由于 CNN 的所有输入应该具有相同的输入形状,因此我们为较短的音频填充静音,为较长的音频进行剪辑,以便获得唯一的输入形状(128,850,1),其中 128 表示 128 个 Mel 带,850 表示长度,1 表示 1 通道(灰度图像)。

这是我们使用 Mel 声谱图为情绪预测建立的最终 CNN 模型。

这种对 Mel 光谱图的图像分析给出了 0.89 MAE。

堆叠 DL 模型

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

两个原始模型后具有两层神经元的 DL 堆叠的视觉表示—图片由作者提供

从 ML 结果中,我们了解到堆叠 NLP 和音频模型可以改进我们的预测。因此,由于使用了keras*‘Concatenate’方法,我们在输出层之前堆叠了两个 DL 模型输出和一个密集层。*

使用与 ML 桩中相同的方法,模型本质上基于两个模型输出进行回归。不幸的是,它并没有改善我们对测试数据的预测,因为这个叠加模型也给出了 0.75 MAE。

结果和展望

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

作者图片

总的来说,我们任务的最佳模型是我们的 NLP 深度学习模型。我们发现最终的 0.75 MAE 是可以接受的,反映了项目所花费的时间、数据集的大小及其质量:

首先,它是由人类注释的:由于情绪和情感是高度主观的(文化、意义的不同解释、讽刺等等),模型的质量受到了损害。其次,大多数时候情绪是中性的,这意味着数据可能会被扭曲。这导致我们的模型不成比例地预测情绪为中性(尽管它是积极的或消极的)。在不牺牲数据集大小(数据平衡)的情况下,解决这个问题的方法是收集更多的负面和正面数据,以便提取预测更广泛情感的特征。

此外,我们认为我们的结果可以在几个方面得到改进:

  • 在模型调整上花费更多时间,关注超参数、文本清理步骤或内核大小。
  • 尝试堆叠其他深度学习模型,看看它们是否可以改善我们的预测。Mel spectrogram 似乎没有找到可以与我们的 NLP CNN 上分析的文本互补的模式。我们的结论是,这个问题值得深入挖掘,我们绝对欢迎来自社区的评论和建议!
  • 用不同的方法建立一个情绪分类器,能够预测快乐、愤怒、惊喜等,而不是情绪评级。

源代码可以在 GitHub 上找到。我们期待听到任何反馈或问题。

作为结论,我们相信从音频和文本中进行情感识别有一个非常令人兴奋的未来,因为它允许从人们那里收集很好的见解。如果进一步推进,并与情感分类相结合,这类项目的一些用例可以为社会增加巨大的价值。例如:

  • 改善电话客户服务。根据客户的情绪/观点重新引导客户。满意的客户可以被引导到销售部门,不满意的客户可以被引导到保留部门,困惑的客户可以被引导到技术支持部门,等等。
  • 这也是一种评估服务质量和品牌监控的好方法。我们绝对欢迎来自社区的评论和建议,并期待看到这一领域的改进。

[1]A,梁 PP,茯苓 S,Vij P,Cambria E,Morency L-P (2018),面向人类交流理解的多注意递归网络,第三十二届 AAAI 人工智能大会。

在数据洪流中坚守你的主张

原文:https://towardsdatascience.com/staking-your-claim-in-the-data-rush-97c3dd5e351f?source=collection_archive---------60-----------------------

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

亨妮·斯坦德在 Unsplash 上的照片

“数据是新的石油。”

除非你在过去的 15 年里一直生活在岩石下,否则你可能听说过“数据是新的石油”这句话。2006 年,数学家兼企业家克莱夫·亨比(Clive Humby)首次创造了这个短语——从那以后,成千上万的人都在重复这个短语。

克莱夫·亨比可能从未想到这句话会给人留下如此深刻的印象,但它确实是的完美比喻。石油和数据有很多共同点。

看看你的周围,以这样或那样的方式,石油对你周围的一切都起着至关重要的作用。许多日常用品都是石油的产品,它们在一个由石油驱动的工厂里生产,然后由船只运输,这些船只也是由石油驱动的,你猜对了。

今天,数据正在产生同样大的影响。数据的使用方式多种多样,影响着政府、公共政策、医疗保健、科学,当然还有商业决策。

社会依靠数据和石油让事情运转。由于这个原因,它们被认为是有价值的商品——许多政府、决策者和企业都拼命想得到它们。数据和油就是力量。没有他们,让事情发生会很有挑战性。

最重要的是,当我们钻探石油或开采数据时,要成功做到这一点需要一些知识和正确的工具。否则,这可能是对时间和资源的巨大浪费。钻探石油需要了解石油可能在哪里以及如何开采。它需要机械和人力。一旦石油被提取出来,它需要被精炼,这样它才能被充分利用。

数据也是如此。必须知道在哪里收集数据以及如何提取数据。它需要特定的技术和人力。然后,一旦收集了数据,就需要对其进行提炼,以便充分发挥其潜力。

与钻探石油不同,你不会为了收集数据而累死累活。但这确实需要一些努力。收集数据是回答那些有价值的问题的第一步,然后我们才能提炼它,得到它的真正价值。

以下是收集数据的一些最佳实践:

拥有强大的内部系统:

在解决内部业务挑战或发现机会时,在内部收集数据是最佳实践。在内部收集数据意味着信息被一致地记录和存储在内部。通常,数据被收集并存储在客户关系管理器(CRM)中。如果你的团队正在使用你的 CRM,你可能有一套相当不错的数据来获得洞察力。如果他们没有充分发挥 CRM 的潜力,你真的应该考虑一下。有一些数据,即使不完整,也比没有数据好。

如果您不确定要收集什么,尽可能多地收集数据仍然是一个很好的做法。永远不可能确切地知道未来什么是有价值的。因此,以结构化的格式收集数据,可以在未来转化为信息和见解,并在未来创造新的机会。好消息是,如今数据存储很便宜,所以保留这些数据不会对你的预算造成太大影响。

从第三方购买数据:

有时,一家公司无法收集自己的数据,因为他们可能是一家初创公司,一家希望进入新市场的公司,或者在当前的数据集中存在重大差距。与其从头开始,不如从第三方购买数据是个不错的选择。那里有大量的数据集,第三方数据经纪人已经仔细地花时间把它们放在一起。他们有各种各样的数据集,这些数据集通常由难以收集的数据、难以访问的数据或非常大的数据集组成,这些数据集可能需要几十年的时间来收集。

如果你不确定从哪里开始,Quandl 和 T2 Explorium 是著名的数据经纪人,他们有大量的数据。

使用第三方购买培训数据:。

如果你希望参与人工智能和机器学习的热潮,并希望承担一个项目,算法将需要一些训练数据来学习。如果缺少可用的培训数据,第三方也是一个很好的解决方案。第三方可以更快、更高效地提供数据集,而不是试图拼凑一组训练数据

训练数据有很多选项,查看蜂巢NTT 数据,或者权重和偏差

使用第三方收集培训数据:

有些时候,第三方数据经纪人没有准确的数据集来回答这个百万美元的问题。当需要特定数据,但您的团队可能没有人力、工具或时间来收集数据时,有第三方可以为您收集这些数据。龙再一次注意到了第三方数据收集者。最受欢迎的例子之一是亚马逊土耳其机器人。来自世界各地的个人根据提供给他们的指令收集数据的平台。

从互联网上抓取数据:

众所周知——万维网上有大量数据,随手可得。这种实践确实需要一些专业知识来创建特定的工具。但是一旦处理好了,非常具体的数据就可以很容易地从互联网上刮下来,进行相应的解析和使用。请尊重你从哪里收集数据的条款和条件!只有在你允许的情况下才这样做。

例如,我们的团队已经成功地从互联网上收集数据来进行销售线索挖掘。我们的团队没有让销售代表花费数小时寻找合格的潜在客户,而是开发了一个工具,从律师和会计师等服务提供商的网站上收集数据来挖掘潜在客户。信息被解析,然后直接放入 CRM 供销售团队访问。有了正确的专业知识,可以创建一个工具来收集任何数据,并用于回答这个百万美元的问题。

准备,开始,我的。

好了,我们最后的话。企业不收集数据的前两个原因是因为它看起来太吓人或者太耗时。这实际上是看不到价值和潜在的繁荣。数据推动决策并发现新的机会。如果数据收集不是重中之重,机会和见解就会被忽略,而挑战也会被忽略——无论是现在还是未来。这相当于几十万美元从你手中溜走。

收集数据是这个过程中最简单的部分,尤其是在一点点指导下。提炼它是事情开始变得有点棘手的地方。幸运的是,有数据专家可以帮助您发现数据的真正价值。

作者:

莎拉·韦斯特伯里 是 integrityCo 的一名人类学地下转需求生成专家。凭借以人为本的学术和工作背景,Sarah 热衷于与她的网络建立有意义和信任的关系。尽管数据科学、AI & ML 是一个高度技术性的领域,但 Sarah 努力使这些服务简化和可访问,以帮助公司实现他们的目标。

Hamid OmidintegrityCo 的创始人,在数据科学、机器学习、产品管理领域拥有多年的经验,并且极具幽默感,Hamid 喜欢帮助公司识别有价值的变革机会,专注于数字产品和大数据。随着行业开始了解人工智能等新技术的未开发资源,高管们正在寻找创新战略,并从他们的数据中创造价值。哈米德分享了他的专业知识,以帮助公司规划成功的人工智能产品,并实现其成功的最大潜力。

用这个有趣的 Python 项目脱颖而出

原文:https://towardsdatascience.com/stand-out-from-the-crowd-with-this-interesting-python-project-6f24c7ad0777?source=collection_archive---------23-----------------------

自动混合歌曲创作

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

StockSnapPixabay 上拍摄的照片

典型的数据科学家的目标是使用分析和机器学习为现实世界的问题提供解决方案,但不一定总是这样。你也可以是艺术家。

如果你把数据科学生命中的每一口气都花在解决业务问题上,那么到了某一点后,你就会筋疲力尽,有失去对数据的热爱的危险。如果你厌倦了详尽的数据科学项目,是时候做些有趣的事情来填充你头脑中的燃料,让火花继续燃烧。

除了成为一名数据科学家,我还一直希望成为一名音乐艺术家。这就是为什么作为一个有趣的项目,我决定做一些歌曲/音乐。

这是数据科学家成为艺术家的方式。

我这么做的灵感主要来自于洋红色。如果你在数据科学领域工作,处理音频文件,几乎不可能不碰到 Librosa 和 Magenta 库。这是我在这个项目中使用的两个主要的库。

我打算怎么做?

有了洋红色,你可以做很多艺术作品。不要相信我的话,看看 Magenta 博客就可以自己决定了。你可以找到各种聪明人的艺术作品,他们使用了品红色,创造了新的音乐,创造了钢琴曲,音调转换等等。

我将使用三首歌曲来创建一个自动使用 Python 的混合。使用的古典歌曲是从 cal500 数据集[1]下载的。

资料组

我从 Cal500 数据集【1】中选择了 3 首歌曲,这些歌曲被下载并上传到 Google Colab 运行时文件夹。

请随意尝试你喜欢的歌曲。我选择的歌曲如下(选择纯粹基于个人兴趣)

  • 披头士草莓地
  • 约翰·列侬的《想象》
  • 鲍勃·迪伦《今夜我将是你的宝贝》

如果你听过任何一首混合歌曲,你会发现一首好的歌曲会有一段共同的背景音乐,而且通常所有的歌曲都是由同一个人演唱的。

这意味着尽管有多首歌曲,但混合曲将有相同的声音和共同的音乐。

现在,你如何用 python 来做呢?我在这个项目中实现的解决方案是首先识别背景音乐,并将其与语音分开。

这意味着我们将有一些只有原声的文件,然后我们可以把所有的声音片段组合在一起,做成一个混音。你可以看下面的视频来清楚地了解这个计划。

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

Medley 创建计划[图片由作者创建]

从技术上讲,我们在这里要做的是

  • 移除背景音乐
  • 从裸音剪辑中找到最佳片段
  • 把最好的剪辑分开,然后组合成一首混合泳

你可以用 colab 笔记本或者 Github 直接跳转看代码自己跑。我在下面概述了我实施这个项目的思考过程。

从想法到行动——用 Python 实现

对于这个项目,您可以使用任何支持 python 的平台。我的建议是使用 Google Colab Notebook 或者你可以检查一下 block Deepnote 中的新成员。

开始之前,请确保您已经安装了必要的库。这个项目需要的主要库如下。

  • 分离人声和歌曲
  • librosa——加载和拆分歌曲
  • pydub —加入所有的声音

你可以使用pip install xxxx来安装上面的库

pip install spleeter
pip install librosa
pip install pydub

步骤 1 —分离声音

现在,作为第一步,我们需要从歌曲中分离出声音。这意味着程序应该能够识别背景音乐,并删除它。

为此,最简单有效的方法就是使用 spleeter 库。Spleeter 库是基于 Tensorflow 的。如果感兴趣的话,你也可以尝试使用 librosa 的声音分离。

当我尝试用 spleeter 和 librosa 搜索相同的歌曲时,与 librosa 相比,spleeter 给出了更有效的结果。Librosa 的输出不清晰,也更嘈杂。

要分离歌曲的声音,使用如下的 spleeter 功能。

!spleeter separate song1.mp3 -d 60 -o output/

这里-d 指的是要处理的歌曲的持续时间。我处理了前 60 秒,-o 表示输出路径。

要了解更多关于 spleeter 用法的信息,您可以运行!spleeter separate --help

对另外两首歌重复同样的操作,并将声音路径保存在songs_path

songs_path = ["/content/output/song1/vocals.wav",
"/content/output/song2/vocals.wav",
"/content/output/song3/vocals.wav"]

点击下面的播放按钮可以听到声音输出。

今夜我将是你的宝贝之歌

想象之声

草莓之声之歌

如果你观察到这些音频文件中有很多静音,因为背景音乐被移除了,只有音乐的部分会是静音的。

识别沉默

为了识别声音之间的寂静,我使用了 librosa 的特效。分割,为此我们需要将声音音频文件转换成波形 y ,采样率为 sr.

可以使用librosa.load()来完成。你可以在所有的语音音频文件中看到 for 循环的实现。

for song in songs_path:
  y, sr = librosa.load(song, duration=60)
  y_all.append(y)
  sr_all.append(sr)

现在,要知道文件中的静音并只分离有声音的音频,使用librosa.effects.split()并将 top_db 设置为 40 ,这样它将只考虑 40db 以上的声音。

for x in y_all:
 tr_all.append(
 librosa.effects.split(y=x, frame_length=8000,top_db=40))

选择最佳分割

在前面的步骤中,所有 3 首歌曲的声音文件被分割成更小的部分。因为想法是找到歌曲的最佳可能片段,所以我所做的是获得歌曲每个片段的开始时间、结束时间和持续时间,以获得最大持续时间片段的细节。

获得最大持续时间的想法背后的思想是选择最佳片段,这样任何人听到片段都应该能够识别歌曲。

您可以在下面看到安装代码

下一步是计算每首歌曲的选定片段的开始和结束时间的准确时间。它可以按如下方式实现。

for d in duration:
 song_snip_duration_index.append(d.index(max(d)))
 song_snip_duration.append(max(d))for i,s in enumerate(start_time):
song_offset.append(s[song_snip_duration_index[i]])

下一步是使用开始和结束时间,生成只有声音的原始歌曲的最终片段。

for n,new_song in enumerate(songs_path):
 new_y, new_sr = 
 librosa.load( new_song,
 offset=float(song_offset[n]),duration=song_snip_duration[n])
 sf.write("new_song" + str(n) + ".wav", new_y, new_sr)

最后,所有的片段可以按如下方式连接在一起

from pydub import AudioSegment
 sound1 = AudioSegment.from_wav("/content/new_song0.wav")
 sound2 = AudioSegment.from_wav("/content/new_song1.wav")
 sound3 = AudioSegment.from_wav("/content/new_song2.wav")
 combined_sounds = sound1 + sound2 + sound3
 combined_sounds.export("all_voices.wav", format="wav")

通过点击下面的播放按钮,可以听到带有裸露声音的混合泳的最终神奇输出

3 首歌曲的混合曲—只有声音

你现在已经做了什么,你还能做什么?

最终结果出来后,我非常兴奋,因为我可以用 python 做一些有趣而非正统的事情。我希望你也有同样的感觉。没有什么比学习新东西更甜蜜的了。拿起一个你自己的想法,自己去做。相信我,你不仅让自己感到自豪,还学到了很多东西。

你可以在 Colab 笔记本上看到完整的代码—

包含整个实现的笔记本

参考

[1]s-y Wang,j-c Wang,y-h Yang,h-m Wang,“基于 CAL500 扩展的时变音乐自动标记方法”,IEEE 国际多媒体会议论文集和博览会,西班牙巴塞罗那,2014。

从云中脱颖而出:如何塑造和格式化单词云

原文:https://towardsdatascience.com/standing-out-from-the-cloud-how-to-shape-and-format-a-word-cloud-bf54beab3389?source=collection_archive---------27-----------------------

在 Python 中使用和设计单词云的技巧

这个博客将涵盖单词云,它们的局限性,然后是一些格式化的例子。

好人

词云是一种简单的方法来总结文本,并使最流行的词引起你的注意。它们引人注目,易于理解,不需要任何额外的解释。

坏了

但是,词云确实有局限性。它们对深入分析没有帮助。它们可能比简单的条形图更吸引人——但是它们提供的信息要少得多。以下是词云的一些问题。

  • 字体大小并不是显示差异的有效方式。我们可以区分大、中、小字体;除此之外,事情就变得棘手了。
  • 我们不知道单词是如何加权的——大字体实际上意味着什么?大字体的单词是出现 10 次还是 1000 次?
  • 可视化中的定位通常非常重要。然而,在词云中,词序是随机的。
  • 较长的单词比较短的单词受到更多的强调,因为它们的长度占据了更多的空间。
  • 我们对单词的上下文一无所知。在某些情况下,相反的意思会被突出显示,例如,在“not”的停用词被删除后,短语“not good”会在词云上表示为“good”。

尽管有这些限制,单词云已经变得非常流行,主要是因为它们很容易创建。词云的流行和缺点意味着它们有许多诽谤者——我最喜欢的词云(或“标签云”)侮辱是它们是“新的鲻鱼”……哎哟。

何时使用文字云

你看这个博客不是为了了解字云有多可怕。有很多其他的博客都是关于这个的。文字云是吸引注意力的绝佳工具。它们作为介绍和打破沉重的文本段落是很方便的。那么,如何让你的字云从云端跳出来呢?

入门

对于这些例子,我将使用来自 OpenMoji 的表情符号和来自 Wikipedia 的关于表情符号的文本来形成云。

微微笑着的脸

一张黄色的脸,睁着简单的眼睛,带着淡淡的微笑。传达广泛的积极、快乐和友好的情感。它的语气也可以是居高临下、被动攻击或讽刺,就好像在说这很好,但实际上并不好

https://emojipedia.org/slightly-smiling-face/

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

来源埃米莉·耶格尔的 OpenMoji 。Unicode 1F642。牌照: CC BY-SA 4.0

以下是可以使用的库

from PIL import Image
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

默认字云

# Default WordCloud
wordcloud = WordCloud().generate(emoji_text)  
plt.figure(figsize=(10,6))
plt.imshow(wordcloud)
plt.axis(“off”)
plt.show()

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

默认单词云—按作者分类的图像

格式化

wordcloud = WordCloud(max_font_size=80, max_words=1000, background_color=”black”, colormap=’Paired’).generate(emoji_text)
# Use the lasst four lines from above (plt) to plot the Word Cloud
plt...

这里我们改变了一些默认参数——使用 background_color、max_font_size 和 colormap——任何 Matplotlib 调色板都可以工作并设置字体。

在这个例子中,我还使用 font_path 来选择自定义字体。您将此设置为所选字体的文件位置。例如:

font_path = “/Users/You/Fonts/Comfortaa-Bold.ttf”

WordCloud 还有一个内置的停用词列表,您可以忽略、调整或使用,如下所示:

stopwords = set(STOPWORDS)

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

格式化单词云—按作者分类的图片

形状

您可以使用遮罩为您的单词云创建一个形状。首先,上传一个 png 图像,并将其转换为数组。Wordcloud 会在图片非白色的位置画出文字。在数组中,255 是白色的,1 是黑色的。

mask2 = np.array(Image.open("paint1a.png"))
emo2 = WordCloud(font_path = font_path, background_color="white", max_words=100, mask=mask2, stopwords=stopwords,
               min_font_size=10, colormap='Dark2')# Generate a wordcloud
emo2.generate(emoji_text)# plt ...

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

单词云形状—作者图片

不良透明遮罩错误

如果你的图像有一个透明的背景,它将抛出一个错误。

ValueError: bad transparency mask

遮罩需要白色值为 255,而不是 0。您可以通过查看阵列来检查您的图像。

emoji_mask = np.array(Image.open(“1F642_color.png”))
emoji_maskarray([[0, 0, 0, …, 0, 0, 0],
…,
[0, 0, 0, …, 0, 0, 0]], dtype=uint8)# replace 0 with 255
emoji_mask[emoji_mask == 0] = 255
emoji_maskarray([[255, 255, 255, …, 255, 255, 255],
…,
[255, 255, 255, …, 255, 255, 255]], dtype=uint8)

颜色

您还可以使用 ImageColorGenerator 函数来设置色彩映射表以匹配图像。(深色斑块是我们表情符号的眼睛和嘴巴。您可能需要减小 max_font_size 以改善图像细节的外观)

# note — need to set max font size, or font extends over the colors
mask = np.array(Image.open(“paint1.png”))
emo_clr = WordCloud(background_color=”white”, mode=”RGBA”, max_words=3000, max_font_size=18, mask=mask).generate(emoji_text)# create coloring from image
image_colors = ImageColorGenerator(mask)plt.figure(figsize=[7,7])
plt.imshow(emo_clr.recolor(color_func=image_colors), interpolation=”bilinear”)
plt.axis(“off”)
plt.show()

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

文字云颜色示例—作者图片

表情符号确实展示了颜色效果是如何工作的,但这并不是一个很好的例子。黄色勉强显示在白色背景上,无法看清上面的字。为了显示眼睛和嘴巴的清晰度,这个词云使用了海量的最大字数和小的最大字体。我建议您尝试使用颜色,在保持每种颜色的边框的同时,尽可能将字体变大。有些图像比其他图像效果更好,直线颜色比曲线颜色效果更好。

灰度图像 TODO 错误

使用颜色时,有些图像会产生错误。

NotImplementedError: Gray-scale images TODO

color 函数寻找一个三通道数组,代表红色、绿色和蓝色(RGB)的值。有些图像只有一个通道。你可以通过在数组中增加两个额外的通道来解决这个问题——参见马修·亚瑟的博客中关于如何做的一个很好的例子。

或者,我发现通过在画板或画笔中打开图像并重新保存图像,它会转换成预期的格式。

通过检查形状来检查图像,如下所示:

test = np.array(Image.open(“1F642_color.png”))
test.shape(618, 618) # -> error example(618, 618, 3) # -> RGB example

这里有一个类似的例子,我调整了 NumPy 数组,使表情符号的眼睛和嘴巴保持空白。

mask2 = np.array(Image.open(“paint1.png”))
mask3 = np.where(mask2==0, 255, mask2)emo = WordCloud(background_color=”white”, max_words=500, mask=mask3, stopwords=stopwords, colormap=’Dark2')emo.generate(emoji_text)

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

字云反形—图片作者

反转

最后,你也可以用反转图像来做实验。这里,我们将单词 cloud 绘制在阴影周围,而不是形状内部。我在 MS Paint 中调整了这张图片,反转了颜色,这样我就有了一个围绕着白色圆圈的黑色轮廓。最后,我用 Python 打开它,把它作为一个词云加载——代码是一样的。

一旦你有了文字云轮廓,你可以把原始图像放在上面,就像这样。

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

左侧为反向文字云|右侧为反向文字云,图片由作者提供

摘要

文字云是吸引人们关注你作品的绝佳方式。它们可以成为更深入分析的良好开端。有许多不同的方法可以调整你的词云,使之适合你的项目,而不是局限于默认设置。我希望这篇博客的例子能给你一个创建你自己的单词云的起点。

快乐云!

附加资源

表情符号

https://open moji . org/library/# group = smileys-emotion % 2f face-smiling&e moji = 1f 642

Word 云文档

https://amueller.github.io/word_cloud/index.html

数据营 Word 云教程

https://www . data camp . com/community/tutorials/word cloud-python

将图像转换为 RGB

https://towards data science . com/transform-gray-images-to-RGB-using-python-matplotlib-6a 0625d 992 DD

斯坦福大学的 AIMI 通过向研究人员提供免费的大数据,正在彻底改变医疗保健人工智能

原文:https://towardsdatascience.com/stanfords-aimi-is-revolutionizing-healthcare-ai-by-providing-free-big-data-to-researchers-836b6284419f?source=collection_archive---------27-----------------------

斯坦福大学的 AIMI 图书馆是人工智能模型训练中使用的数据的一个令人难以置信的强大资源

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

来源:埃尔努尔 _/【depositphotos.com

人工智能系统的好坏取决于它的数据

人工智能正在医疗保健领域开辟新天地,创造一个一切都将自动化和一体化的可能性世界。事实上,人工智能、物联网和机器人正在联合起来,实现我们世界中几乎所有东西的自动化。查看我们关于物联网和机器人技术的结合如何改善世界医疗保健系统的许多方面的文章,了解关于这一现象的更多信息。

正如旅顺江和他的研究团队所指出的,影响人工智能在几乎所有行业的实施的最大挑战是获得良好的培训数据。

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

来源:video doctor/Depositphotos.com

任何给定的人工智能系统都只和它的训练数据一样好,这就是为什么人工智能和大数据是不可分割的一对。斯坦福大学医学和成像人工智能中心(AIMI)正在努力解决人工智能在医疗保健中的这一障碍。

人工智能的早期受到人工智能偏见带来的几个陷阱的困扰。在其他问题中,算法偏见造成了不公平的结果,使一组任意的用户优先于其他用户。这种不足导致许多人工智能算法被贴上性别歧视和/或种族歧视的标签。今天,随着像斯坦福大学的 AIMI 这样的程序为机器学习提供了几个数据集,这个古老的挑战得到了适当的关注。

关于斯坦福的 AIMI

斯坦福大学和微软创建了 AIMI 作为带注释数据集的一站式目的地,这些数据集可用作医疗保健模型的训练数据。它已经获得了超过 100 万张图像,并在不断增加,使其成为世界上最大的带注释的去识别医学图像数据库。这些图像免费提供给研究人员。

通过与微软的 AI for Health 项目合作,新的平台将具有高度的注释性、可访问性和可见性。它托管和组织来自全球医疗保健机构的大量额外图像,以创建一个开放的全球存储库。该平台将成为共享研究、完善模型和识别人群共同差异的中心。

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

来源:Depositphotos.com一切皆有可能/https://depositphotos.com/

这对人工智能和医疗保健意味着什么?

随着人工智能作为我们社会众多领域的解决方案不断扩大其作用,对更多高质量训练数据的需求也在增长。学习算法和模型只受到它们被馈送的数据的限制;这就是斯坦福大学的 AIMI 发挥作用的地方。

大人工智能、物联网、AIoT、机器人和支持 5G 的智能系统需要尽可能多的信息,以便创建实时解决方案。AIMI 图书馆预计将在 2022 年达到 200 万张图片。它是最强大的精选、患者身份识别和人工智能就绪数据资源,其对人工智能在医疗保健中的影响是不可想象的。

AIMI 的数字财富金矿将是开源的,这是人工智能世界一直在等待的,以便开辟更多新的领域。有了开源数据库,来自世界任何地方的研究人员都可以为他们的下一个人工智能项目访问数据。

所有的人工智能医学研究都将受到积极影响,而不仅仅是医学成像。它将允许人们探索人工智能的重要临床用途,而不仅仅是像素数据,包括伴随的多模态数据。

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

来源:光源/Depositphotos.com

由于大多数数据将免费提供给研究人员,他们将有机会探索几个利基领域,如大公司可能忽视的社区特有的医疗问题。

斯坦福大学的人工智能医疗数据集是去识别的,这一事实使它们变得更好,更有用。该平台还旨在创建一系列标准化的机器学习工具和预训练模型,这些工具和模型将利用开源数据及其通用架构。

关键的三点

1)更多的开源数据意味着更好的训练模型,这意味着更好的基于人工智能的模型。

2)斯坦福大学的 AIMI 通过开放世界上最大的训练数据库,解决了人工智能的长期挑战。它还在增长——到 2022 年底,它将拥有超过 200 万张图片。

3)所有这些有价值的数据都将免费提供,这意味着其影响潜力是无限的。

AIM 博客 阅读更多健康、科学和领导力相关文章,别忘了 订阅我们的简讯 !!

星球大战数据科学

原文:https://towardsdatascience.com/star-wars-data-science-d32acde3432d?source=collection_archive---------13-----------------------

网络分析、主题建模和一个词云

星球大战🌌是有史以来最史诗的奇幻太空冒险(强烈偏颇)。当你可以拯救整个星系的时候,为什么只拯救一个世界!每年,数百万影迷会在 5 月 4 日庆祝星球大战日。去年,我找了点乐子,创建了一个博客帖子,可以使用神经网络(从头开始构建)破译来自穆斯塔法的秘密信息。

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

图 1:本文中创建的词云和网络图。

为了开创一个传统,今年,我再次将《星球大战》与数据科学结合起来。一个臭名昭著的《星球大战》信息来源收集于wookiepedia,一个拥有数千页的粉丝网站。使用主题建模和网络分析等数据科学工具进行调查的惊人来源。

由于这是一篇相当长的文章,我把它分成了几个主题。这样你就可以很容易地浏览到你最感兴趣的话题。

主题概述:

  1. 抓取和构建数据集
  2. 伍基人媒体数据探索
  3. 我们需要一个词云!
  4. 主题建模
  5. Wookieepedia 网络分析

包含所有笔记本和数据集的 github 存储库可以在这里找到。

👉阿纳金天行者的互动网络图!

其他有用的链接是我的每天 10 分钟的 Python 课程和一个使用 Python 环境的教程

1.抓取和构建数据集

《星球大战》在线上有大量的信息。我最喜欢的来源之一是所谓的wookiepedia,这是一个由粉丝们建立的拥有大量星球大战知识的维基。

所有的数据都可以在 Github 和 Kaggle 中找到,所以没有必要自己去收集,为 Wookieepedia 创造大量的流量。

本节描述了收集所有使用的数据的过程。wiki 是页面的集合,每个主题都有自己的页面。为了收集这些信息,我们需要访问每个页面并下载其内容。有一个聪明的方法来抓取这样的网站,那就是使用网站地图。这是一个特殊的文件,网站管理员可以提供这将有助于网络爬虫索引网站。我们可以利用站点地图来获取所有可用页面的列表。

目前(2021 年 4 月)有 219,900 页可以被抓取。然而,这有点过了。因此,我决定只刮那些被认为是经典的页面。幸运的是,wookiepedia给了佳能文章自己的类别。当我们点击类别时,我们会得到所有被认为是经典的页面的分页索引。这需要一些额外的工作来收集所有的话题。

好了,我们现在有一个 29k 页的清单,被认为是佳能仍然需要刮。这些页面具有典型的格式,由标题、通常包含子部分的描述和包含属性的侧边栏组成。为了减少信息量,我将只抓取第一段,完整的侧边栏,以及所有指向其他佳能页面的链接。典型的 Wookieepedia 页面如图 2 所示:

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

2:从每个页面中抓取描述、侧边栏信息和所有链接(页面)。

接下来,我们抓取每个页面并将分区保存到磁盘:

收集所有信息花了一个多小时,所有信息都存储在 pickle 文件中,这些文件被分割成最多 5000 页的部分。这是原始数据集,我们可以随时使用它。

接下来,我们将把原始数据分成两部分:字符和原始文本句子。这些角色由边栏中的一个名为“物种”的属性来标识。我们将在一个强结构的熊猫数据框架中收集所有的角色,这意味着我们需要事先选择属性。我们总共有 5334 个字符被标记为佳能。关于所选属性的更多细节可以在 Github 库的 scrape 笔记本中找到。

原始文本句子是从描述中提取的。每个描述都被拆分成句子,并收集在一个列表中。这种分裂的细节也可以在 Github 上的 scrape notebook 中找到。

2.伍基人媒体数据探索

使用新数据集的第一步总是数据探索。这是熟悉数据集的一种方式,也是了解其中包含哪些信息的第一步。分析的细节可以在 Github 上的数据探索笔记本中找到。

种类

如果你问一个不喜欢《星球大战》的人,你经常会听到的回答是,这部电影充满了怪异的生物。尤其是著名的“T2”酒吧场景,充满了银河系中存在的不同物种。因此,先看看物种的数量以及它们在佳能数据集中出现的频率是很有趣的。

总共有 530 个物种被提及,太多了以至于不能很好的可视化,因此,我们只选择在数据集中至少有 40 个被提及的物种。所有其他被归类为其他。

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

图 3:人类是目前占优势的物种。

到目前为止,人类是占主导地位的物种,拥有超过一半的字符或 2770 次提及。下一个物种是提列克人,只占数据集的 2.5%。其他字符只有十分之几,因为数量正在迅速下降。我们将 519 个其他物种归为“其他”类,每个物种的平均特征不到 4 个。如果我们随机遇到一个星球大战人物,他/她有 50%的几率是人类。如果它不是人类,它可能是许多不同物种中的一个。

家园世界

由于物种非常多样,看看每个角色的家园也可能会很有趣。查看唯一计数,数据集中提到了 463 个世界。同样,由于高度的多样性,我们将这些限制在至少 8 个必须提到地球是家园的宪章中。

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

图 4:卡米诺是被提及最多的 planed。

有趣的是,卡米诺是被提及最多的以克隆技术闻名的世界。它在第二集《克隆人的进攻》中首次被提及,主角们在那里发现了一支隐藏的克隆人军队。但这个星球如此突出的主要原因是因为名为《克隆人战争》的星球大战动画系列。它有七季,总共 133 集,以卡米诺星球上创造的许多角色为中心。第二颗行星是纳布,由阿米达拉女王统治,在整个系列中非常有名。也许令人惊讶的是曼达洛的高提及率,但这可能是因为曼达洛,这是流媒体服务迪士尼+上的一个伟大的衍生系列。

性别

虽然有许多物种,但它们中的大多数似乎都被划分为我们在地球上所知道的相同性别。让我们快速浏览一下分布情况:

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

图 5:自 2016 年以来,《星球大战》有了非二进制或性别酷儿角色(插图:wookiepedia)。

因为《星球大战》开始于 70 年代末,我预计会有很多男性角色。事实上,三分之二的角色是男性,但不知何故我期望更多。也许迪斯尼开始增加女性的数量来最终平衡原力。

另一件很酷的事情是,在官方的星球大战传说中有一些非二进制字符。作者查克·温迪格证实,他书中的一个名为 Eleodie Maracavanya 的人形角色确实不是二进制的,因此是第一个正式的非二进制佳能角色。现在一共四个,包括 Keo Venzee。

对于一些物种来说,不太清楚它们是雄性还是雌性,大约 8%的角色没有性别。

最高最小的一束

正如魁刚·金曾经评论的那样:“总有更大的鱼”,因此,观察数据集中记录的鱼的大小是很有趣的。不幸的是,只有大约 12%的人物知道身高。让我们看看分布情况:

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

图 6:《星球大战》中的人物身高达到 1.83 米,接近荷兰的平均水平。(插图:伍基人百科)

大多数角色的身高都是人形种族的典型身高,有一个 1.83 米的大高峰,大约是荷兰男性的平均身高。看看这两个极端,我们发现巴布·弗里克(出现在第九集)是迄今为止最小的智慧生物,只有 22 厘米。同样令人高兴的是,格罗古还得再长 20 厘米才能和尤达一样大。

最大的生物是 Omi,一只生活在死星垃圾压缩机里的独眼野兽,显然有 10 米高。赫特人贾巴也很大,有 3.90 米,但我猜他们是从鼻子到尾巴的末端测量他的。

眼睛颜色

我们还记录了他们眼睛的颜色,数据集中有 97 种颜色。我猜有一些错别字,也有一些描述性的颜色,如“蓝绿色”。仍然有将近一半的眼睛颜色被记录。

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

图 7:第三种最常见的眼睛颜色是黑色。

棕色眼睛在《星球大战》宇宙中是最常见的,这与现实世界中世界上绝大多数人也有棕色眼睛非常相似。更令人不安的是,黑色显然是第三种最常见的眼睛颜色。

肤色、发色等其他属性也有。请随意在笔记本上查看它们。

3.我们需要一个词云!

在对一个 fandom 话题做数据分析的时候,我们要做一个 wordcloud。为此,我们将使用来自 Andreas Mueller 的描述数据集和 Wordcloud Python 包。更酷的是,文档中甚至有一个使用冲锋队的例子!

Wordcloud 包让它变得再简单不过了。所有的频率计算都是在引擎盖下完成的,并且生成了一幅美丽的图像:

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

图 8:佳能文章所有描述的文字云(使用所有数据)。

单词云是使用所有佳能文章的文本生成的,所以不仅仅是字符。与所有的词云一样,首先所有的停用词都被移除,经过频率分析后,我们看到最常见的词在《星球大战》中肯定有意义。

4.主题建模

到目前为止,我们已经介绍了一些数据探索的基础知识,并且创建了强制性的 wordcloud。因此,我们现在准备进入更高级的分析,这也是我想尝试的第一个主题建模。这里描述的方法是基于 BerTopic 的创作者马尔滕·格罗滕赫斯特的作品。

主题建模是一种无监督的学习技术,可以回答以下问题:我有一堆文本,这些文本谈论的最常见的主题是什么。

对于主题建模,我们将使用一个名为 Sentence-Transformers 的 Python 包,顾名思义,它基于 Transformers 架构,能够将完整的句子转换为向量。为了找到相似的主题,我们需要找到分组在一起的向量。让我们首先创建句子嵌入:

句子向量的长度为 768,这对于聚类分析来说是非常大的,因此,我们将应用降维。有许多选择,如 LDA 或 NMF,但这里我们将使用一种叫做 Umap 的方法,它的好处是保持局部结构完整。

降维后,我们可以尝试使用 Hdbscan 来识别集群。这将找到在缩减的参数空间中被分组在一起的聚类。

我们已经将 768 个特征减少到只有 6 个特征,但是如果我们想将它绘制到屏幕上,这种减少是不够的。为此,我们需要将它减少到至少 3 维,为了更好的可视性,我们甚至会减少到 2 维。为此,我们再次使用 Umap,将原始数据集从 768 一直减少到 2,并将之前定义的标签与坐标相结合。

现在我们可以画出结果:

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

图 9:所有主题的彩色概览。

结果是非常漂亮的,但如果这些集群有任何意义,我们需要将集群与它们的原始句子结合起来。此外,我们希望找到每个聚类最常见的关键字,因此,我们需要分别分析每个聚类。为了解决这个问题,Maarten Grootendorst 想出了一个基于类的 TF_IDF ,它工作起来非常简洁!

我们需要为每个集群应用 c_tf_idf,并将文档集合视为单个文档。结果是最常见术语的列表,希望它们在我们的 Wookieepedia 数据集上有意义。

当查看结果时,实际上有一些是有意义的,但不是很酷。有一个完整的集群有许多颜色,这仍然很酷,知道它是从一个无人监管的方式获得的。然而,有几个集群确实有基于故事的主题。例如,包含帕尔帕庭皇帝的集群包含许多政治术语,如参议院、最高议长和宪法。帕拉丁也与克隆人有联系,克隆人是他创造的消灭绝地的总计划。

然而,我最喜欢的集群结合了几乎所有的明星人物以及任务和雅文战役这两个术语。当然,雅文战役是《星球大战》中最重要的事件之一,经常被提及是有道理的。尽管如此,使用主题建模发现这一点还是很棒的。

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

图 10:我最喜欢的集群,其中包含了在集群中出现频率最高的术语。

5.Wookieepedia 网络分析

我们总共收集了 5334 个角色,分析每个角色之间的关系不是很好吗?作为使用图形网络的第一次尝试,我想将角色周围的网络可视化。为此,我们需要节点,也就是字符,以及它们之间的关系,在图中称为边。例如,阿纳金·天行者与卢克·天行者有一个“父亲”的关系。提取各种关系将意味着广泛的自然语言处理,以将语料库缩减为节点-边缘-节点的形式,这远非微不足道。

为了简单一点,我们将所有关系归结为一种我们称之为“连接到”的关系。为了找出一个角色是否与另一个角色有关联,我们将查看页面上是否有链接。我们预计在阿纳金·天行者的页面上会有一个到卢克·天行者页面的链接。所有这些链接在抓取过程中被收集成一个列表,我们称之为交叉链接。

Github 库中找到完整的笔记本。让我们从准备原始数据开始:

现在我们可以建立一个图形网络,我们将使用优秀的网络 x 包。网络是将数据组织成节点和边的几何结构。在我们的例子中,节点是字符,节点之间的关系是边。通常你也给一个边赋予一个权重。这可以看做是纽带有多强,也可以看做是距离。这些权重支持多种分析方法,例如最短路径。因为我们不能给我们的关系添加一个度量(至少从这个数据中我不知道),所有的权重将被设置为 1。

在构建网络时,我们将扫描每个字符的交联。这些可以指向其他字符,也可以指向任何其他页面。因此,我们需要检查交叉链接是否是字符,并忽略非字符:

创建完成后,我们得到了 4794 个节点。显然,大约 500 个角色与另一个角色没有任何关系。从有关系(边)的字符来看,平均总共有将近 20k 或 4 个关系。

让我们首先看一下度分布,它显示了到其他节点的连接数量。度为 1 的节点只有一个连接,而度为 10 的节点与其他节点有 10 个连接。代码在笔记本里。

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

图 Wookieepedia 数据集的度分布。

大多数节点只有几个连接,对于包含 5334 个字符的数据集来说,这也不足为奇。很多角色只有单一的外貌。像阿纳金·天行者这样的角色与 100 多个其他角色有联系,这可能也是《星球大战》中其他明星的情况。

为了缩小网络的规模并删除不太重要的字符,我们将过滤掉所有度为 2 或更小的节点。我们必须迭代地这样做,因为当我们删除节点时,也会删除边,这可能会将节点设置为较低的程度。

这使得字符数下降到略低于 3000。边的数量几乎没有减少,我们仍然有 17k。这当然是有意义的,因为我们只移除了低度节点。

图表的强大之处在于,您可以使用一套工具来调查节点的重要性。其中一个工具叫做中间中心性。它是一种寻找充当其他节点之间的桥梁的节点的方法,即作为一种信息中继站。在我们的例子中,我们使用介数中心性来找到哪些节点是与各种其他人的链接,并有希望找到一些关键人物。结果如图 12 所示。

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

图 12:根据中间中心性,图中最重要的节点。

这里没有惊喜。我不得不寻找埃兹拉·布里杰,但他在《克隆人战争》系列中非常突出。还有许多其他算法,如接近中心或网页排名,但这些导致了类似的结果。

为了更好地玩图形网络,我们将使用 PyVis 来可视化它。PyVis 是围绕 VisJS 构建的,它使得绘制这些图形和处理结果变得非常容易。然而,有一件事我们需要注意:我们有太多的节点和边。虽然 PyVis 似乎对大数量没有问题,但由于所有边缘的重叠,它并不那么有趣。因此,我们需要制定一个算法,从我们的网络中选择一个子群。

下一段代码需要三个参数:起始节点、最大水平渗透和最大交叉链接。顾名思义,该算法将从起始节点开始,选择最大数量的相邻节点。如果有比最大集合交叉链接更多的可用节点,它将选择具有最大度的节点。接下来,算法将跳转到选定的节点(这是一个级别增加),并重复该过程,直到达到最大渗透率。所选节点的数量将随着最大渗透率的增加而呈指数级增加,所以要小心这个参数。

结果是一个交互式网站,直接显示在 Jupyter 笔记本或任何其他网络浏览器中。

👉阿纳金·天行者的互动网络图!

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

图 13:交互图网络截图。

可以用鼠标拖动每个节点,并随之拖动其连接。当鼠标悬停在一个节点上时,Wookieepedia 页面的第一段就会显示出来,这样就很容易看出这个角色是谁。节点的颜色表示级别。边缘的颜色是其来源的颜色。也可以随意调查其他角色!

围捕

我在这个数据集上玩得很开心。仍然有很多可能性,因为我几乎没有触及表面。但是即使用一些简单的方法,我们还是发现了一些很酷的东西。

‘就是这条路’—丁·贾林

如果您有任何意见,请告诉我!在 LinkedIn 上随意联系。

开始更好地管理模型的生命周期

原文:https://towardsdatascience.com/start-managing-your-models-lifecycles-better-307729fe6fe5?source=collection_archive---------14-----------------------

与 MLflow 和 Delta Lake 一起对 Databricks 进行的 MLOps 审查

美丽的人们,你们好!在过去的几个月里,我和我的同事一起为一个出版物进行数据科学项目,在这个项目中,我们必须不断更新我们的训练数据集、功能和机器学习模型。但是,在写这篇文章的时候,没有关于模型生命周期的内部政策,这导致了我们的集体失败。不,我太激动了,但是时间和任务管理得不够理想,这自然让我感到有点沮丧。

这个行业的一大优点是总有一些工具可以帮助我们。所以我不得不介入,希望为未来的项目解决这些问题。今天,我向大家介绍我使用 MLflow 和 Delta lake 处理 MLOps 的经验。为什么是这些框架?这是因为它们是我日常使用的数据块的一部分。

我们走吧!

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

穆罕默德·阿里扎德在 Unsplash 上的照片

本次审查概述

我没有计划它,它只是押韵。在本条目中,我们将了解:

  1. 数据存储和版本控制用 增量表
  2. 使用 MLflow Tracker 在每次训练迭代后执行和注册实验并保存模型的结构化标准方式。
  3. 使用 MLflow 模型注册中心 注册模型并管理生命周期阶段。
  4. 使用 MLflow 模型服务 将模型部署到生产中。

请记住,本文不会涵盖这些工具必须提供的所有特性。我只是给出一个介绍,这样你可以在这里涉及的每个工具的文档中探索更多。我会在每个部分的末尾和上面列表中的每个项目中留下一个链接。

0.设置数据块环境

这一步是可选的。我们将创建一个 Databricks community edition 工作区,因为默认情况下,它包含了将要涉及的所有工具。

首先,前往这个链接。您需要填写必要的信息来创建 Databricks 帐户并使用 community edition 工作区。之后,您将登录到 Databricks,这将引导您进入以下屏幕:

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

数据砖之家。捕捉来自我自己的作者。

接下来,您将创建您计算实例。为此,前往左侧栏,选择计算T4。点击创建集群,然后选择规格,如下图所示。

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

集群规格。被我自己的作者捕获。

点击创建集群 a 增益,并等待集群启动。就这样,我们都为有趣的部分做好了准备。

顺便提一下,您也可以在自己的环境中安装它们,但是需要更多的工作。阅读关于安装的信息

1.使用增量表进行数据存储和版本控制。停止使用 CSV 文件。

我不能笼统地说,因为我还是一名大三学生,但据我所见,人们对使用 CSV 文件非常满意,包括我自己。它们便于携带,易于使用,并且易于创建。然而,作为在云中工作的数据科学家,由于受到空间和计算的影响,这不是您想要使用的文件格式。

由于 CSV 是面向行的,所以使用起来计算量很大,这意味着即使您不想使用所有的列,也需要加载整个文件。它们不像拼花地板那样是高度压缩的格式,因此存储起来很贵。它们很容易被腐蚀,还有许多其他原因。

也就是说,最好实现一个数据湖,在我们的例子中是 Delta。增量表建立在拼花文件格式之上。它们经过全面指定、高度压缩,并针对大量数据进行了优化。此外,我们有现成的表版本控制、事务日志和时间旅行,从而使工作空间更有条理。

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

增量表历史。被我自己的作者捕获

你可以在下面的文档中了解更多关于三角洲湖的信息。

2.使用 MLFlow Tracker 执行并记录实验。

MLFlow 是 ML 实验的一个很好的工具。它允许我们注册超参数、性能度量、特定 ML 模型的输入模式,以及 ROC 曲线等工件,只需最少的代码更改。这为我们设计和实现自己的 ML 实验日志策略节省了大量时间和精力。此外,模型被保存为 pickle 文件并可用于加载。

首先你要去侧边栏,选择 W 工作空间,右击,选择 C 创建,,然后选择 MLflow 实验

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

实验创作。被我自己的作者捕获。

每个实验都将有一个 id,您可以在执行培训和测试之前将它传递给笔记本中的 MLflow 上下文。如果您使用的是 scikit-learn 模型,代码将与此非常相似:

您创建的所有实验都显示在以下界面中:

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

ML 实验。再次被我的作者捕获。

在每个实验中,你会发现所有被执行的运行,并且每个运行会显示所有注册的度量、参数、工件和模型。如果您访问某个跑步记录,它会显示如下内容:

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

实验中的一次特殊运行。我做的捕捉。

嗯,不完全是这样,参数会显示在工件上方,但捕获不适合我的屏幕。

此外,MLflow tracker 还有许多其他好处,不仅仅是记录信息,您可以比较实验的多次运行,在相同条件下重现特定的运行,等等。阅读这篇文章了解更多信息。

3.使用 MLflow 模型注册表注册模型和管理阶段。

现在我们可以更好地管理我们的数据和实验,但是我们的模型的各个开发阶段呢?MLflow 模型注册是一个很好的工具。根据文档,它是一个集中式的模型存储库、一个 UI 和一组 API,使您能够管理 MLflow 模型的整个生命周期。它提供了按时间顺序排列的沿袭、版本控制和阶段转换:无、转移、生产或存档。

注册模型有两个选项。首先是使用用户界面。选择一个实验。然后,在所需的运行下,在工件部分,点击按钮注册模型。

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

注册模型。被我自己的作者捕获。

第二种选择是使用 API。首先,您需要声明运行 id 和保存模型的路径。然后,您键入以下内容:

在您注册您的模型后,它们将出现在 UI 中,在左侧边栏的模型部分。

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

模型阶段。我做的捕捉。

正如我前面所说的,您还可以从 UI 转换您的模型阶段:

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

模型细节和阶段转换。被我的作者捕获。

和 API:

使用 API 应该允许您自动执行更复杂的验证,比如确保您的模型在测试集上满足特定的性能标准。你可以用 model registry 做更多的事情,查看文档

4.使用 MLflow 模型服务将模型部署到生产中。

因此,有了模型注册,我们现在确切地知道我们的模型处于什么阶段,它们何时被训练,何时使用超参数,何时报告指标,而不仅仅是在一个目录中有一堆 pickle 文件。这太棒了!但是,当一个模型最终到达生产阶段时,我们希望有一个工具来进行推理服务。然后再次,MLflow 来救援。我们可以基于特定模型的版本和阶段,使用 MLflow 模型作为 REST APIs 来托管我们注册的模型。根据文档,Databricks 自动为模型创建一个唯一的集群,并在该集群上部署模型的所有非归档版本。

现在,要准备我们的模型进行服务,我们只需在 UI 上的 model registry 中,单击所需的模型,然后选择 Serving 选项卡,最后单击 Enable Serving。

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

模特服务。我做的捕捉。

现在我们可以使用 python 发出请求,进行推理:

您可以在文档中了解更多关于此功能的信息。

这就是本文的全部内容。回顾所有这些便利的特性对我来说非常有用,我希望对你也是如此。注意这只是一个介绍。要掌握所有这些工具,您需要查看本文每一节末尾提供的文档。感谢您的阅读,感谢您的关注和支持。

再见!

https://hihello.me/p/951c78ee-719f-4c8b-98b5-d47af565d6b0

从使用 DGL 的图形卷积神经网络开始

原文:https://towardsdatascience.com/start-with-graph-convolutional-neural-networks-using-dgl-cf9becc570e1?source=collection_archive---------15-----------------------

轻松的介绍

我查阅了一些现有的库来做图卷积神经网络(GCNN 的),虽然总的来说它们很好,但我总是回到 DGL,因为它有很好的文档和许多例子,以及其他东西[1]。在这里,我想分享我对 GCNN 氏症研究中一个经典例子的回顾,当然是使用 DGL 的 CORA 数据集。CORA 数据集是一个引用网络,其中节点是文章,边是它们之间的引用。下面的 gif 有助于直观地了解这些联系。

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

用 Pyvis 可视化 CORA 图。作者 GIF。

有 7 类 2708 个节点,每个节点与 1433 个特征相关联[2]。在这里,我们将使用该数据集来执行半监督分类任务,以预测已知少量节点的节点类(七个之一)。在这种情况下,已知的节点的数量是 140,如在 DGL 实现的那样,但是当全部信息可用时,可以使用不同的数量。在开始之前,我们必须安装 DGL 库,目前是 V0.7。然后我们继续以通常的方式导入一些模块,

接下来,我们必须以下面的形式加载 CORA 数据集,

在第 4 行中,我们将 g 设置为图形对象,然后我们检索一些张量。特征张量具有 2708 个节点的 1433 个特征,标签张量具有为每个节点分配从 0 到 6 的数字作为标签的条目。另外两个张量, train_masktest_mask 只是得到如果节点分别为训练或测试。在下表中,我们可以看到该图在 DGL 的值:

现在我们必须定义图的卷积,但在此之前,简单回顾一下公式是很重要的。我们回想一下,原则上需要图的邻接矩阵 A ,但它是根据这些方程进行变换的,其中 I 是单位矩阵[3]:

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

我们将根据以下等式在 python 类中定义图形卷积:

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

这里 x1x2 分别是第一和第二卷积。在 DGL,这可以通过调用 GraphConv 模块来轻松完成,在这种情况下,该模块执行 parentesis ( AXW +b )之间的操作,因为默认激活函数被设置为 None:

注意,在正向方法中,我们按照上面的等式定义了 x1x2 。下图显示了矩阵的大小是如何影响的。首先,在 Conv1 中, AX 是邻接矩阵( A )与特征矩阵( X )的矩阵乘法,给出 2708x1433 的矩阵。权重矩阵 W 因此具有 1433 行和 8*16=128 列(这个数字是任意的,但是工作良好)。我们以 2708x128 的矩阵 x1 结束。其次,我们按照相同的过程对 x1 进行第二次卷积,但这一次我们只以 7 个特征(与总类别数相同)结束,从而得到 2708x7 的矩阵 x2 :

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

两个回旋的示意图。图片作者。

最后,我们必须使火车的一部分。在这里,我们使用 Adam optimizer 和 log_softmax 进行了多达 200 个历元,这对于分类任务来说是很好的。为了检索损失、准确性和特征预测的值,我们在第 4 到第 6 行中引入了损失列表acc 列表所有日志

运行这段代码,经过 200 个周期后,我们得到大约 0.78 的精度,如下图所示:

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

200 个历元后的精确度。图片作者。

最后,如果希望查看预测的要素和标注,我们可以执行以下代码,其中最后一个时期(此处为 199)的结果存储在数据帧中,并对要素应用 argmax 运算,我们获得给出类的较高值的索引(0 到 6 之间的数字):

下面是数据帧前 5 行的输出,其中 7 列是学习的特征值,最后一列是该类的结果:

仅此而已。现在你可以尝试一些其他的例子或者其他的 GCN 变体,比如 SAGEConv,门控图卷积层或者图注意力层,这些都包含在大 DGL 库中。

试试这个 COLAB 笔记本中的代码:

https://github.com/napoles-uach/MediumPost/blob/main/CoraDGL.ipynb

我希望你喜欢这个讲座,如果是的话,请鼓掌 50 次!!

在推特上关注我→ @napoles3d

参考资料:

[1]https://www.dgl.ai/

[2]https://ojs . aaai . org//index . PHP/aimagazine/article/view/2157

https://arxiv.org/abs/1609.02907

开始一个新的机器学习模型

原文:https://towardsdatascience.com/starting-a-new-machine-learning-model-beeb81a361b8?source=collection_archive---------28-----------------------

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

布莱恩·马坦格罗在 Unsplash 上的照片

正如我的许多读者所知,我最近加入了一个新组织!project 44正在为将货物从一个地方运送到另一个地方的公司——也就是大多数公司——构建非常有价值的物流可见性和透明度工具!如果你生产、运输或销售任何有形的产品,你想知道它在哪里,它要去哪里,它应该什么时候到达,project44 在这里帮助所有这些事情,甚至更多。(我们正在招聘数据科学和许多其他职位!如果你想了解更多,请告诉我。)

感谢已经到位的优秀数据科学团队,我能够在到达时立即开始高价值的建模项目,这是每个数据科学家都喜欢的职位。经过深思熟虑,我意识到,我能够立即投入工作,并在潜水中感到舒适,是因为我从过去的经验中吸取了一些不成文的教训,这就是我要与你分享的。我没有权利深入了解这个模型的细节,但是我仍然可以给你一些好的建议。

特色是最重要的

你可能想在第一天抽取一个样本并运行一个模型——这是一个错误。您的数据以一种有益于模型的方式被清理、格式化和组织的可能性几乎为零。垃圾进,垃圾出!你的模型只和你的特征工程一样好,在大多数情况下,我会花至少3 倍于构建模型的时间进行特征工程。您的特征是构建模型最重要的部分,一个巧妙设计的特征比任何超参数调整都更能改善模型。

这可能意味着扩展你对特征的看法——一种我们在社会科学中称之为测量有效性的形式。简而言之,你想在你的模型中加入什么样的机制或概念?这就是接下来需要转换成数字特征的东西,它可能比你想象的更复杂。经常需要多个特性来完全覆盖您打算使用的概念,并且/或者可能仍然有一些方面您没有一个合理的方法来测量或量化。不要只是接受表或数据集中的列,而是要真正思考它们代表什么以及它们如何关联。

我们到底在做什么?

我想得太多了!让我们回到开始,在那里你被分配了一个建模任务,并且可以自由支配。我们将在项目的前几周花在特征工程上,采取我上面描述的扩展观点。我们如何在实践中实现它呢?根据我的经验,你必须从研究问题开始。除非您对结果、可用数据、数据的局限性等有所了解,否则您甚至不知道应该尝试构建什么功能(或重要的底层概念)。理解背景和情况不是可有可无的——把事情做好是必要的。

当你研究这个问题时,构建一个你认为可能有前途的领域的计划。如果您的团队使用看板或敏捷风格的方法,这非常适合构建标签或故事。如果你发现某个领域的背景或理论可能会对你的结果产生重大影响,把它放在一边进行深入研究,但不要现在就做。坚持下去,直到你有一系列强有力的深度潜水要做,记录下每一次潜水的大致想法,然后系统地完成它们。给自己设定时间限制,这样你就不会陷入一个把你带进兔子洞的困境——这些领域需要好好研究,但是你还有其他事情要做!

画,画,画

这可能只是“我”的事情,但当我学习一个新的主题领域为建模做准备时,我会做无数的可视化来帮助我理解这个东西。图表、绘图、地图、图解等——我发现这些对发展我的理解能力非常有用,这样我以后就能理解我的特征与结果以及彼此之间的关系。检查你对你正在建造的东西的直觉,并测试你的假设!可视化是做到这一点的好方法。对于我在新角色中构建的模型,到目前为止,我已经使用了笔和纸、散景、Altair 和 geopandas 来制作视觉效果,我仍然只处理前几个功能。

八二十分法则

正如我从许多明智的老板那里听到的,包括我现在的老板,在这个问题上追求完美和着手下一个需要优先做的事情之间有一个权衡。80/20 背后的想法是,你用 20%的努力将获得 80%的结果,然后你必须完成 80%的工作才能获得最后 20%的边际改善。(当我们意识到完美的模型性能不会发生时,这个比喻就有点站不住脚了,但你明白我的意思。)

如果你像我们一样幸运,有大量的问题要解决,有大量的数据要解决,唯一的障碍就是你的时间和员工能力。对我们来说,这意味着我们需要一个满足客户需求的好模型,但我们不需要一个“完美”的模型。MVP(最小可行产品)开发后的增量改进对于软件开发来说是很自然的,这也是数据科学经常使用的框架。

你的模型总是会有一些失误和一些盲点或边缘情况,这没关系!其实这是必然的。作为一名数据科学家,你需要理解并凭直觉判断什么时候你已经找到了一个可以完成工作的模型,并学会在那个时候放手。你以后会回来改进它,没有人期待完美。(如果是的话,那是他们的问题,也许是你所在组织对数据科学的态度的问题,但这不是你的模型的问题。)对于您的业务来说,回去继续那个 MVP 的工作几乎肯定没有让另一个 MVP 出去解决下一个主要问题来得紧迫。

一旦您所有的高优先级任务或问题都有了模型,那么您就可以自由地回去重新培训或对现有模型进行增量改进——这就是当您是一个维护稳定模型的成熟数据科学团队时的情况,这与我们在这里讨论的问题不同。

结论

当然,这只是开始建模过程的一组小提示-一旦开始,您会发现许多有趣的事情,例如数据中的特质、生成要素的新的创新方法,以及对先入为主的假设的完全意想不到的挑战。这就是工作的乐趣所在!拥抱机器学习项目的问题解决和探索性质,你将最终拥有你可以自豪的模型。

开始自然语言处理

原文:https://towardsdatascience.com/starting-natural-language-processing-8b37d189b406?source=collection_archive---------51-----------------------

探索自然语言处理的基础:清洗,NER,词性,模糊字符串匹配

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

由作者使用流程图(http://flowchart.js.org/)拍摄

每当人们谈论自然语言处理(NLP)时,花哨的机器学习模型和强大人工智能的前景的图像就会弹出。但是没有什么是从无到有的,在最基本的层面上,NLP 只是一个处理文本数据的工具的集合,以使它们更加干净和统一。我们开始吧!

文本清理

清理句子

首先,让我们从 a 句开始:

test001 = "01 Google Gains In Popularity, Soon Surpassing Apple"

这是一个标题行,所以所有的单词都是大写的,并且有标点符号,我们需要清理它们:

# remove punctuations
import string
translator = str.maketrans('', '', string.punctuation)
test002 = test001.translate(translator)
# Output:
# 01 Google Gains In Popularity Soon Surpassing Apple

我们可以将它们转换为全部大写或全部小写,让我们使用大写:

# convert to upper case
test003 = test002.upper()
# Output:
# 01 GOOGLE GAINS IN POPULARITY SOON SURPASSING APPLE

看起来不错!现在我们可以把它们分解成单独的单词:

# convert to list of words
from nltk.tokenize import word_tokenize
test004 = word_tokenize(test003)
# Output:
# ['01', 'GOOGLE', 'GAINS', 'IN', 'POPULARITY',
   'SOON', 'SURPASSING', 'APPLE']

令牌清理

清理单词

有了单词列表,我们可以用它们做很多事情,首先,让我们去掉数字:

def clean_digits(words):
    return [w for w in words if not w.isdigit()]
test005 = clean_digits(test004)
# Output:
# ['GOOGLE', 'GAINS', 'IN', 'POPULARITY',
   'SOON', 'SURPASSING', 'APPLE']

然后,我们可以对单词进行词干处理或将其词条化:

# stem words
from nltk.stem import PorterStemmer
PorterStemmer()
def stem(words):
    stemmer = PorterStemmer()
    res = []
    for w in words:
        rw = stemmer.stem(w)
        res.append(rw)
    return res
test006 = stem(test005)
# Output:
# ['googl', 'gain', 'IN', 'popular',
   'soon', 'surpass', 'appl']

词干化将单词简化为它们的根,所以“GAINS”变成了“gain”,但是正如你所看到的,它非常粗糙,“GOOGLE”,实际上是一个名字,变成了“googl”…然而,词干化非常快,所以如果你有太多的数据要处理,并且准确性不是太大的问题,就继续使用词干化。

查找词根的另一种选择是 lemmatize:

# lemmatize words
from nltk.stem import WordNetLemmatizer
def lemmatize(words):
    lemmatizer = WordNetLemmatizer()

    res = []
    for w in words:
        word = lemmatizer.lemmatize(w)
        res.append(word)

    return res
test006 = lemmatize(test005)# Output:
# ['GOOGLE', 'GAINS', 'IN', 'POPULARITY',
   'SOON', 'SURPASSING', 'APPLE']

等等,发生什么事了?似乎什么都没有改变。

这是因为 lemmatizer 搜索语料库(用于训练 lemmatizer 的文本正文)来确定词根,所以大小写很重要:

# lemmatize words, version 2
from nltk.stem import WordNetLemmatizer
def lemmatize(words):
    lemmatizer = WordNetLemmatizer()

    res = []
    for w in words:
        word = lemmatizer.lemmatize(w.lower())
        res.append(word)

    return res
test006 = lemmatize(test005)
# Output:
# ['google', 'gain', 'in', 'popularity',
   'soon', 'surpassing', 'apple']

看起来不错!但是我们必须重新大写一遍:

# convert words to upper case
test007 = [w.upper() for w in test006]
# Output:
# ['GOOGLE', 'GAIN', 'IN', 'POPULARITY',
   'SOON', 'SURPASSING', 'APPLE']

命名实体识别

NER:找出每个单词的意思

随着文本的清理,我们可以开始分析这句话的实际意思,即什么是“谷歌”,什么是“苹果”。

在此之前,我们或许可以去掉像“IN”这样的词,因为它们不会给句子增加太多意义(反正对机器来说不会),所以让我们去掉停用词:

# remove stop words
from nltk.corpus import stopwords
def clean_stop_words(words):
    stop_words = set(stopwords.words('english'))

    res = []
    for w in words:
        w_test = w[0] if isinstance(w, tuple) else w
        if w_test.lower() not in stop_words:
            res.append(w)

    return res
test008 = clean_stop_words(test007)
# Output:
# ['GOOGLE', 'GAIN', 'POPULARITY',
   'SOON', 'SURPASSING', 'APPLE']

现在我们准备给这些词贴上标签:

# NER tagging
from nltk.tag.stanford import StanfordNERTagger
jar = 'stanford-ner.jar'
model = 'english.all.3class.distsim.crf.ser.gz'
ner_tagger = StanfordNERTagger(model, jar, encoding='utf8')
test009 = ner_tagger.tag(test008)
# Output:
# [('GOOGLE', 'ORGANIZATION'),
#  ('GAIN', 'O'),
#  ('POPULARITY', 'O'),
#  ('SOON', 'O'),
#  ('SURPASSING', 'O'),
#  ('APPLE', 'O')]

让我们来看看。因此,NER 过程试图用一个类别来标记每个单词,在这种情况下,我们使用斯坦福的 3 类 NER 标记器[1],它可以识别位置,人和组织。还有其他 NER 标记者,如 spaCy,一个标记者更适合某些项目,而另一个可能更适合其他项目。

请注意,“苹果”没有被标记为“组织”,这凸显了这种方法的一些缺陷。

词性标注者

词性标注

如果我没有提到 POS tagger,那将是我的疏忽,因为在许多应用中它是非常重要的(只是在这个故事中对我来说不是)。

POS tagger 正是你所猜测的,它根据词类标记每个单词:名词、动词、代词等:

# POS tagging
from nltk.tag.stanford import StanfordPOSTagger
jar = 'stanford-postagger.jar'
model = 'english-caseless-left3words-distsim.tagger'
pos_tagger = StanfordPOSTagger(model, path_to_jar=jar)
test010 = pos_tagger.tag(test008)
# Output:
# [('GOOGLE', 'NNP'),
#  ('GAIN', 'NN'),
#  ('POPULARITY', 'NN'),
#  ('SOON', 'RB'),
#  ('SURPASSING', 'VBG'),
#  ('APPLE', 'NN')]

在这里,我们再次使用斯坦福的 POS 标记器[2],在这种情况下,标记器能够识别“谷歌”是一个专有名词(NNP),而“超越”是一个动词(VBG),但“增益”标记错误。

串匹配

将单词与单词配对

嗯,所有的文本处理和标记都很好,但是你能用它们做什么呢?

从模型训练、预测到数据分析,都有无限可能。天空是极限。

让我们把我们所做的应用到一个不起眼的例子中。

假设我想为一家公司收集新闻标题,比如说谷歌。我已经收集了我们一直在谈论的一个标题,我想要一种方法来映射这个标题到谷歌的股票。我如何开发一个自动化的过程来做这件事?

首先,我将使用我们开发的技术从标题中提取第一个组织,假设是主题:

# get subject organization
def first_org(words):
    for w in words:
        if w[1] == "ORGANIZATION":
            return w[0]
    return None
org = first_org(test009)
# Output:
# GOOGLE

一旦我们有了组织,我们将需要公司的股票代码和与之匹配的描述。为此,我从维基百科[3]中检索信息:

ticker = "GOOGL GOOGLE ALPHABET INC CLASS A"

由于股票代码描述通常与从文本中提取的公司名称不完全匹配,我们需要应用模糊匹配:

# try match organization
from fuzzywuzzy import fuzz
ticker = "GOOGL GOOGLE ALPHABET INC CLASS A"
fuzz.ratio(ticker, org)
# 31
fuzz.partial_ratio(ticker, org)
# 100

因此,这里的“ratio”返回 31%的匹配,因为它是匹配与总字数的比率:

l1 = len(ticker)
# 33
l2 = len(org)
# 6
res = 2*6/(l1+l2) # 6matches
# 0.31

而“部分比率”实际上是在较长的字符串中循环,对较短的字符串进行每个子字符串的比率匹配,并返回最高分。由于“GOOGLE”实际上是 ticker 描述的一部分,所以最高分是 100%。

结论

在所有的文本清理之后,我们才刚刚开始探索 NLP。有了可用的输入数据,我们可以应用单词矢量化、单词聚类和许多技术来建立复杂的预测模型。更多即将推出!

这个故事的灵感来自于:明周萨希尔普里阿尔什苏德亚当韦恩【4】发表的论文

参考:

[1]https://nlp.stanford.edu/software/CRF-NER.shtml

https://nlp.stanford.edu/software/tagger.shtml

[3]https://en.wikipedia.org/wiki/List_of_S%26P_500_companies

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2940564

从数据分析开始,推动您的业务发展

原文:https://towardsdatascience.com/starting-out-with-data-analytics-to-boost-your-business-ae0da038b3de?source=collection_archive---------38-----------------------

如何进入晦涩复杂的数据分析世界?提示:这比你想象的要简单。

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

卢卡斯·布拉塞克在 Unsplash 上的照片

数据分析可以成为你武器库中非常强大的工具。无论你是拥有一家小企业还是在一家大公司。使用数据分析可以帮助您提高盈利能力,更加精简,甚至改进您的产品。如果你有兴趣了解更多关于分析如何帮助你的工作流程,这是我写的另一篇关于这个主题的文章。但是现在,让我们假设你已经做了决定,为了开始,你应该采取哪些步骤呢?

我真的需要学习如何编码吗?

这个问题的答案显然是否定的。为了能够分析数据,你需要学习一些东西,但编码不是其中之一。当然,学习一些有用的语言,比如 R 和 Python,会对你有很大的帮助,但它们不是先决条件。

数据分析师为什么要编码?

如果编码不是必需的,那么为什么那么多数据分析师学习它?毕竟,如果你去上大学,不管是本科还是研究生,你都会接触到大量的编程课程。在这些课程中,你主要学习 R 和 Python。许多数据科学家更喜欢编码原因是它允许更大的灵活性和速度。

编程语言是有等级的,简单来说,一种语言的可读性越强,计算机运行它的难度就越大。这也适用于将 Python 与 Excel 之类的东西进行比较。您可以使用这两种工具完成相同的工作,但是 Excel 在处理大型数据时会比较慢。如果你习惯使用 Python,你可能会更喜欢它而不是 Excel,因为它速度快,而且你不会被 Excel 函数所限制。Python 有大量的软件包可供选择,可以做任何事情,从数据分析(Numpy,Pandas),到创建网站(Flask,Django),到创建 2D 游戏(Pygame)。编程语言也更具可扩展性。当您知道将来会有更多的数据到来时,可伸缩性和面向未来是非常重要的。这允许您一次性完成工作,然后在以后进行编辑以适应数据的涌入。

你如何学习如何编码

尽管我刚刚指出了编码的一些好处,但这并不是必需的。如果你的最终目标是成为一名成熟的数据分析师,那么是的,你需要学习这些语言。但是,如果您希望在较小的规模上执行一些分析,还有其他选择。

Excel 和 Tableau 就是两个很好的例子。使用这两个程序有一个学习曲线,但它们在处理中等规模的数据集方面很棒。Excel 非常适合运行计算、收集见解。如果你希望可视化你的数据并展示给其他人看,Tableau 将会很好地为你服务。各地的分析师仍在使用这两个程序,许多大学都在教授它们。

从哪里开始?

数据分析是用数字讲故事。你的主要目标是能够从你的企业产生的数字中获得有用的信息。

选择你的武器

你需要做的第一件事是挑选你的工具。你需要选择一个程序,(Excel,R,Python,Tableau…)开始学习基础。这里需要记住一件重要的事情。归根结底,这些都是做同样基本事情的工具。除非你需要分析一个非常具体的数据集,否则你真的不能选择其中任何一个。你应该记住的两个主要考虑因素是学习曲线和个人偏好。你愿意花多少时间来掌握这项技能?你觉得用哪个最舒服?永远不要开始的最好方法是认为你必须使用完美的工具,而实际上它们都有相同的基本功能。做一些快速的调查,然后做出决定。

弄清楚你的目标

当你心中有一个目标时,致力于一个项目更有可能帮助你长期坚持下去。所以在你开始这段旅程之前,试着想想你想从中学到什么。是对你的产品有更多的见解吗?关于供应商的更多信息?你的目标市场?这也将帮助你制定一个更稳健的计划,并产生更好的结果。

寻找灵感

为你的故事寻找灵感是非常重要的。当你开始时,你会问自己,这些数据中有什么信息可以解开?这是一个很难回答的问题,事实是,它因业务、行业、公司规模和许多其他因素而异。一个开始的方法是看看其他人在网上做了什么。做一些研究,找出类似公司的分析师在做什么,可以给你指明正确的方向。但是在一天结束的时候,你处于确定你需要分析什么的最佳位置。你的业务之外没有人能告诉你你到底需要什么,所以相信你的直觉。

收集数据

这也可能是旅程中令人生畏的一部分。我的建议,由内而外开始。查看您公司不同部门的所有记录,找到这些数字在哪里,并开始查看它们。如果这不起作用,那就自己想办法,看看你是否能找到与你想要实现的目标相关的市场数据,如果找不到,那就估算一下。你可以查看是否有其他城市、州、甚至国家的顾客信息,并开始思考如何应用到你的市场。再次强调,相信你的直觉,如果对近似值有什么感觉,那么就解释一下。例如,如果你所关注的市场的家庭收入中值比你高得多,那么在解读数据时要记住这一点。

实践

作为一名数据分析师,入门或提高的最佳方式是进行一些实践。这并不需要很长时间,几个小时的工作时间就足够了。获得一些实践的一个好方法是在像 Kaggle 这样的网站上查看更著名的数据集,下载它们,并开始处理它们。在这些数据集上进行一些实践的好处是,所有级别的数据科学家以前都曾在这些数据集上工作过。这给你提供了一个很好的参考,一旦你完成了,就可以回去比较你自己的工作。你会知道你做对了什么,你可能错过了什么。

结论

数据分析是无限的。你可以想走多远就走多远,但重要的是开始行动。一旦你开始并更适应这个领域,你可以进一步推进,但是,你必须迈出第一步。

2021 年人工智能状况报告摘要

原文:https://towardsdatascience.com/state-of-ai-report-2021-summary-6c16f4eb72a6?source=collection_archive---------11-----------------------

人工智能的世界里发生了很多事情。这篇文章在 17 分钟内包含了 183 张幻灯片。

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

在过去的几年里,由内森·本耐奇和伊恩·霍加斯撰写的《人工智能现状报告》报道了人工智能领域的最新和最伟大的成就。

虽然数量庞大,但《人工智能状况报告》每年都会收集人工智能领域发生的事情的快照。

我说快照是因为发生了很多事情。尽管官方报告中有 180 多张幻灯片,但仍有很多遗漏。

也就是说,这个总结是一个总结的总结。

因此,从《2021 年人工智能报告的状态来看,我错过了很多东西,以下几点因我最感兴趣而有所偏差。

如果你想阅读完整的报告和过去的报告,请访问 AI 网站。

该报告将覆盖范围分为五类:

  1. 研究——技术突破。
  2. 人才—AI 人才的供给、需求和集聚。
  3. 行业 —人工智能的商业应用领域及其商业影响。
  4. 政治 —人工智能的监管,其经济影响和人工智能的新兴地缘政治。
  5. 预测 —作者认为未来会发生什么,以及对过去预测的绩效评估。

我保持这些部分不变。

研究(幻灯片 10–74)

研究部分涵盖了最近的技术突破及其能力。

我在这一部分的重点是自我监督学习,transformer 架构的使用和语言模型的接管,更多的研究论文使他们的代码可用,以及一项研究显示推文学术工作导致多达 3 倍以上的引用。

监督较少的模型学习得更好(好得多)

自我监督学习是模型遍历未标记的数据集并自行识别潜在模式的过程。

例如,自我监督学习用于支持大型语言模型,这种模型可以理解不同的单词在语言中如何交互。

语言模型可能会阅读整个维基百科(以及更多),并了解到单词“dog”比单词“car”更可能出现在句子“The ___ jumped over the fence”中。

与这种技术类似的过程现在正被用于计算机视觉,只是用学习图像中像素之间的关系来代替学习单词。

  • 幻灯片 12: 脸书 AI 创造了 SEER (自我监督),这是一个在 10 亿张随机的未标记和未分类的公共 Instagram 图像上训练的十亿参数自我监督模型,在 ImageNet 上达到了 84.2%的 top-1 准确率。
  • 幻灯片 13: 自我监督的视觉变形金刚 (SSViT)学习监督模型没有的功能。发现这些特征也是强有力的预测器,使用 k-NN 分类器达到 78.3%的前 1 名准确度。从自我监督中学习到的特征包含关于语义分割(图像中不同项目的分离)的更好信息。这些发现被应用到一种叫做的方法中,这种方法被称为【无标签自交法】(DINO)

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

迪诺学习图像中主题的语义分离。来源:脸书 AI 博客

很明显,有了这些发现,从几乎没有标签的数据中学习变得更加现实。

变压器接管

我想知道是什么推动了 transformer 架构的发展,因为关注是你所需要的全部纸,HuggingFace 在几天内发布每一个新的变体或者架构的性能。产品、营销和渠道的完美风暴。

  • 幻灯片 11: 视觉变形金刚(ViT) 在 ImageNet 上以 90.45%的顶级准确率实现计算机视觉的最先进水平(SOTA)。然而,结合卷积(更好的电感偏置)和变压器(高性能上限)会产生略好的结果,其中卷积和自关注网络 (CoAtNets)在数据量减少 23 倍的情况下获得类似的结果,或者在数据量增加的情况下获得略好的结果(90.88%的前 1 名准确度)。
  • 幻灯片 13: 基于 Transformer 的 Conformer 结合了自我关注和卷积,实现了语音识别的最先进水平(LibriSpeech 基准测试中最低的单词错误率)。点变形器也实现了 3D 点云分类的最新技术。
  • 幻灯片 15: DeepMind 的感知者感知者 IO 架构展示了变压器架构的构建模块(注意力)的通用程度。感知者模型可以处理各种不同的数据类型,如语言、音频、视频、点云和游戏。一个亮点是,感知者 IO 在 GLUE 语言基准上匹配基于 Transformer 的 BERT 基线,而不需要标记化(直接从 UTF-8 字节学习)。

没那么快变压器、卷积神经网络(CNN)和多层感知器(MLPs)仍然很酷

事实证明,有了现代训练技术和数据准备程序,CNN 和 MLPs 可以表现得非常好。

  • 幻灯片 17: 谷歌研究人员发现当像变形金刚一样进行预训练时,CNN 在自然语言任务上的表现类似或更好,这提出了一个问题,是训练还是架构得到了结果?他们还发现,在 MLP 混合器中,一个仅由 MLP 组成的架构,当应用于以与视觉变形器相同的方式准备的数据(图像被切割成小块)时,可以与其他更成熟的视觉架构竞争。
  • 奖励: ResNet 反击是一篇表明现代训练技术(MixUp、CutMix、LAMB optimizer 等)可以将普通 ResNet 体系结构的结果在 ImageNet 上提高大约 4%的 top-1 准确率的论文。而补丁就是你所需要的一切?论文显示,使用与视觉转换器相同的数据准备技术(将图像转换为补丁),简单的 ConvMixer 架构(可以适合一条推文)优于 ViT 和 MLP 混频器。

事实证明,如果你以一种好的方式准备你的数据,一个史诗模型可以在一条推特的空间内建立起来。来源:安德烈·卡帕西推特。

同样,是培训、数据准备还是架构导致了结果?

深度思维深度思维深度思维

DeepMind 在生物学和强化学习方面取得了重大研究突破。

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

DeepMind 的 XLand 模拟器示例,用于帮助 RL 代理学习通用技能。来源: DeepMind 博客

无处不在的语言模型提出了即时工程的新挑战

查看语言模型的一种方式就像一个工具。这种乐器可以演奏几乎无限多种声音,但只有其中一些听起来不错。而获得更好声音的方式取决于你如何使用(提示)乐器。

如果你敲击一件乐器,你会得到剧烈的声音,但如果你以某种方式演奏,你会得到交响乐。

如果你给一个语言模型一个好的提示,你通常会得到好的结果(幻灯片 46),然而不好的提示可能会有同样差的结果(幻灯片 47)。

  • 幻灯片 41: Codex 是语言模型 GPT-3 的一种形式,专注于将自然语言转化为可工作的计算机代码。Codex 被用来驱动诸如 GitHub Copilot 这样的应用。
  • 研究人员发现,对于自然语言处理(NLP)中的大型语言模型,提示可能比微调更好。在预训练、提示和预测中,他们发现基于提示的学习允许语言模型(LM)在大量原始文本上进行预训练,并且通过定义新的提示函数,LM 能够使用很少或标记的数据执行少量甚至零次学习。例如,在社交媒体文本上训练,当识别“我今天错过了公共汽车”的情绪时,提示“我感觉如此 ____”可以导致 LM 填充该情绪的空白。

医学模型可以比医生学到更多,但额外的知识可能会有偏差

人们发现,在医学扫描上训练的视觉模型可以比临床医生更好地识别病人的种族。这是有益的还是有害的?

  • 幻灯片 55: 如果人工智能系统可以从医学扫描中识别出患者自我认同的种族,这是否可能最终放大或制造种族差异?种族的已知特征似乎来自图像的所有区域,这使得缓解变得复杂。这篇论文强调的主要问题是,该模型碰巧秘密地使用其自我报告的种族知识对某一种族的患者进行了错误分类,放射科医生将无法使用该模型可以访问的相同数据进行辨别。

机器学习研究的代码共享有所改善,但还可以更好

  • 幻灯片 56:有代码的论文网站显示,在 arXiv 上发表的人工智能研究论文中,26%有可用的代码库,高于去年的 15%。然而,检查过去 30 天的“最热门的论文”(截至 2021 年 9 月 8 日在 Twitter 上共享的顶级论文)只有 17%共享代码库。60%的可用代码仓库使用 PyTorch 。

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

分享的机器学习论文代码仓库中,他们用的是什么深度学习框架?来源:https://paperswithcode.com/trends

如果机器学习论文没有附加代码,并且结果不可复制,研究是否有效

  • 幻灯片 60: 没有更多的数据。更好的数据。选择模型训练的数据会对模型的性能和训练产生巨大影响。一种被称为“通过代理选择”(SVP)的方法允许 CIFAR-10(一种流行的图像数据集基准)的 50%可以被删除,而不影响准确性,并将训练时间加快 40%。SEALS ( 用于高效主动学习的相似性搜索和稀有概念搜索)允许网络规模的主动学习(例如,约 100 亿张图像)。它的工作原理是将已标记数据的已学习表示聚类在一起,然后在每一轮选择中只考虑这些已学习表示的未标记最近邻,而不是扫描所有未标记样本。
  • 幻灯片 62: 学术机构提交其研究代码多于行业。
  • 幻灯片 63: 在 Twitter 上分享您的作品→获得多达 3 倍的引用。一项由一项为期一年的随机试验组成的研究显示,随着时间的推移,在推特上发表或不发表论文的学术工作会导致更多的文章被引用。如果没有乔布斯,沃兹尼亚克的工作会成功吗?或者没有圣保罗,谁会听说过耶稣?
  • 幻灯片 74: 有一个新的深度学习框架正在酝酿中: JAX 。JAX 的设计类似 NumPy,只是它可以在 GPU 上运行。就个人而言,我发现它类似于 PyTorch,尽管可能更基于函数而不是基于类(OOP)。目前,它更侧重于研究,而不是生产(像 PyTorch 不是一段时间),但它似乎很可能会结束。

人才(幻灯片 75–91)

人才部分报告了人工智能人才(人工智能技能需求和可用性)在世界各地的传播。

人才大量集中在美国、中国和英国(这与全球许多地方类似)。

我的国家,澳大利亚,不在任何供应或需求的名单上。但人工智能和人工智能的美妙之处在于,许多最好的作品都可以在网上找到。因此,尽管我是在澳大利亚的布里斯班写下这些文字的,我还是非常享受其中的乐趣。

美国和英国以外的国家在人工智能能力和人才方面都在增长

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

机构及其历年 AI 出版物。资料来源: Oecd.ai

再见大学任期,你好股票期权

  • 幻灯片 81: 精英和精英一起工作。大型科技公司通常会与大型精英大学合作。这意味着一小部分公司和大学完成了大部分研究。没有计算能力加入进来?你出局了。
  • 幻灯片 83: 北美大学的教授们看到了美元和流向大型科技公司。深度学习革命的最后 10 年是成为数学或统计学教授的好时机,这些教授希望研究他们的领域,同时变得富有。CMU 大学、佐治亚理工学院、华盛顿大学和伯克利大学在 2004 年至 2019 年间失去了最多的教师。
  • 幻灯片 88: 大型科技公司喜欢资助人工智能研究, 88%的顶级人工智能教师都得到了大型科技公司的资助
  • **第 91 张幻灯片:**许多科技工作者正在让在家工作成为常态(就目前而言)。机会总是普遍存在,但现在更是如此。像 Twitter 这样的一些公司已经将远程工作永久化。从 2021 年开始,拥有技术技能似乎是获得远程工作的绝佳机会。

行业(幻灯片 92–152)

把研究和才能放在一起,你会得到什么?最好是有用的东西。这就是工业部门处理的事情。

人工智能研究都去哪了?

今年的报告在药物发现领域有很多特色,尽管新冠肺炎的 ML 社区做出了努力,许多申请还是失败了。

人工智能正在推动药物研发

  • 幻灯片 93: Exscientia,一家人工智能优先的药物公司,它首创了世界上第一批 3 种人工智能设计的药物进入第一阶段人体测试,在纳斯达克以>美元的 3B 估值 IPO。该公司还有 4 种候选药物正在提交。人工智能有助于合成少 10 倍的化合物来找到一个候选物,并导致 12 个月的目标命中对 54 个月的行业平均水平。
  • 幻灯片 94: Allcyte 的计算机视觉 AI 有助于为每个癌症患者确定最有效的药物,以提高存活率。它在细胞水平上测量活癌细胞对 140 种不同的第三方抗癌药物的反应,并帮助确定特定患者的最佳选择。

从电力需求预测到人工授精奶牛的最佳时间,人工智能正在广泛应用于各个行业

  • 幻灯片 98: 英特斯耶的计算机视觉模型有助于保护员工免受工伤。该系统经过培训,可检测超过 35 种员工健康和安全事故。与人类安全检查员相比,该系统全天候实时工作,导致其在 18 个月内检测到 180 万起不安全行为。

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

Intenseye 的计算机视觉捕捉工作场所不安全行为的示例。资料来源:Intenseye.com。

  • 幻灯片 100: 变压器闪闪发光,它们被用于工业的一个地方是改善电网需求。英国国家电网 ESO(电力系统运营商)与开放气候修复公司联合使用时间融合变压器,该变压器自 2021 年 5 月以来一直在提供预测。该系统将 1 小时交付周期的平均绝对误差(MAE)减少了一半以上,将 24 小时交付周期的平均绝对误差减少了 14%。更好地预测电力需求可以降低排放,提高电网稳定性。
  • 幻灯片 101: Connectera 开发了一个人工智能软件程序和硬件设备,名为 Ida ,它可以帮助跟踪奶牛,并能够预测理想的繁殖窗口、健康下降、听觉运动等情况。数据是通过戴在脖子上的传感器收集的。
  • 人工智能对你的直觉有什么看法?佐伊可以从 1100 人的肠道细菌宏基因组测序中把好细菌和坏细菌与不同的食物来源联系起来。该模型可以根据微生物群中的细菌,以 0.72 AUC 预测某人是否饮用大量咖啡。这些模型是在英国数据上训练的,但在英国和美国的测试集上进行了测试。

生产中的机器学习是可行的,但要让它发挥作用仍有困难

  • 幻灯片 106: 生产学习中的机器学习推动研究人员更多地从以模型为中心的人工智能转向以数据为中心的人工智能。这是因为 ML 社区越来越意识到更好的数据实践和更标准化的 MLOps(机器学习操作)的重要性。有一些资源可以帮忙:deep learning . AI 举办的以数据为中心的比赛以数据为中心的 GitHub repo 收集资源和datacentricai.org,一个致力于详细介绍以数据为中心的人工智能挑战的网站。
  • 幻灯片 110: 尽管付出了所有努力,也有许多参与者,但许多新冠肺炎的 ML 文献并没有达到临床实践所需的稳健性或可重复性的阈值。25%使用计算机视觉来检测新冠肺炎和肺炎的论文使用相同的控制数据集来比较成年患者,而没有提到它包括 1-5 岁的儿童。
  • 幻灯片 111: 随着数据质量工具的发展,ML 团队正在启动更多的项目,并意识到训练数据集不再是一个固定的对象,而是一个不断增长的知识语料库。自动化标签和可访问的最先进的架构可用性意味着数据数量和质量成为人工智能优先创业公司的竞争指标。

COVID 强调了我们有多爱电脑

但是电脑需要芯片,芯片需要被制造出来,而事实证明只有少数公司能做到。

  • 幻灯片 114: 欧洲终于意识到他们最大的公司 ASML 是全球半导体的基础。ASML 为芯片制造商提供硬件来制造他们生产的芯片。随着市场意识到芯片制造商的重要性,以及随后帮助芯片制造商制造芯片的公司的重要性,他们的市值在疫情期间翻了 3 倍。

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

ASML 的芯片制造机每台成本 1.5 亿美元,包含 10 万个零件,用四个集装箱装运。来源:连线杂志

  • 幻灯片 117: 随着全球芯片市场的持续增长,全球主要半导体制造商承诺投入约 4000 亿美元用于新功能。英特尔投入总计超过 1000 亿美元,TSMC 超过 1000 亿美元,三星超过 2000 亿美元。
  • 幻灯片 129: 谷歌一直在慢慢地将人工智能注入其更多的商业和消费者应用程序,如基于人工智能的语法检查器 Gmail smart reply、 Google Sheets 公式预测、使用 ar 的地图和针对更低的燃料使用和二氧化碳排放而优化的新路线,以及开源 MediaPipe ,这是一个用于将视觉技术集成到不同设备的跨平台工具包。

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

使用上下文感知的谷歌表单公式预测。来源:谷歌 AI 博客

  • Slide 133:clip drop是一款应用程序,它使用人工智能将图像的主题从背景中分离出来,然后允许你将分离的图像放到你的电脑上,以便在网站上使用。这有助于张贴背景干净的产品图片。他们的开源工具 cleanup.pictures 允许你通过在图片上乱涂乱画来移除不想要的东西。

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

运行中的 ClipDrop 应用程序。来源:https://clipdrop.co/

  • 幻灯片 141 至 152: 大量投资进入人工智能领域,大量人工智能公司也退出了(出售给更大的公司)。

我觉得奇怪的一点是,在自动驾驶部分或任何行业部分都没有提到特斯拉。考虑到特斯拉拥有世界上最大的公共自动驾驶车队,并且是人工智能领域的领导者。

我也希望看到更小的公司加入进来。

就像描述使用人工智能提供的转录功能通过文本编辑视频和播客,描述使用计算机视觉识别不同种类的植物,以及 comma.ai 创建开源的自动驾驶汽车软件和运输设备,以允许人们使用它。

尽管这些观点因我个人的兴趣而有所偏颇。虽然我喜欢大公司做酷的事情,但我更喜欢小公司做酷的事情。

政治(幻灯片 153–181)

政治部分着眼于人工智能的管理以及如何在经济和伦理意义上使用它。

这是一个艰难的话题,因为在人工智能领域发生的许多事情是:1 .快速移动和 2。未知,比如,人们试图规范的一些事情,创造它们的工程师甚至不确定他们是如何做到的。

  • 幻灯片 154: 谷歌解雇了员工 Timnit Gebru 博士,因为她试图发表一篇关于人工智能伦理的论文,但没有通过。这里有些双重标准。促进道德的人工智能,但解雇那些表明立场的人。
  • Slide 155: 工业革命规模的变革性人工智能或人工智能预计将在 2052 年左右到来。一个核心假设是,如果研究人员能够训练一个神经网络或 ML 模型,使用与人脑类似的计算水平,这将有可能导致变革性的人工智能。
  • Slide 156: 68%接受调查的机器学习研究人员认为人工智能安全应该比现在更优先考虑。但这是一个反问题吗?就像,你不会说相反的话,“人工智能安全不应该被优先考虑”。在商业玩家中,OpenAI、DeepMind、谷歌和微软被认为最有可能塑造人工智能在公共利益方面的发展。不过既然 DeepMind 是 Google,OpenAI 是微软,玩家应该更多(后面进入 Anthropic)。
  • 幻灯片 160: DeepMind 试图从谷歌独立出来,变得更加非营利,然而谷歌阻止了这一举动。DeepMind 想要创造 AGI,他们担心这不应该掌握在一个单一的实体手中(理应如此)。
  • 幻灯片 161: Anthropic 是一家新的人工智能安全公司,致力于构建可靠、可解释和可操纵的人工智能系统。这个新实体已经筹集了 1.24 亿美元,由 OpenAI 等公司的研究人员组成。正因为如此,它们将成为继 DeepMind 和 OpenAI 之后 AGI 研究的第三大支柱。他们在招人。

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

Anthropic 有望成为专注于 AGI 的公司的第三大支柱。

  • 幻灯片 163 + 164: EleutherAI 接受通过开源分散权力的挑战。他们创造了一个与较小的 GPT-3 一样大小的模型,性能相当或更好,并且向所有提供。我爱爱爱这个。阅读他们的博客,了解 2020 年 7 月一群不和谐的流氓黑客的故事。

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

EleutherAI 在 2020 年 7 月通过一个 Discord 服务器开始。从那以后,他们做了一大堆。阅读他们博客上的故事。

  • 幻灯片 168: 一些实体希望更多地监管人工智能。然而,人工智能的监管是在科学界尚未完全理解的许多事情上提出的,例如,人工智能算法的公平性、可解释性和鲁棒性,这些都是仍然开放的研究问题。在经济方面,预计到 2025 年,每年的合规成本将在€16 亿欧元和€33 亿欧元之间。
  • 幻灯片 170: 美国的大部分数据仍然不受监管。一些州有不同的法规。但是,不管一些大型科技公司怎么想,美国宪法并没有规定隐私权。但是,有多少人在乎这个呢?我不确定。放弃你的数据意味着什么?我是伴随着互联网长大的,我明确知道网上或电脑上的一切都是在线的,并且可能是可访问的。
  • **幻灯片 175–180:**军事人工智能正在加速发展。以色列声称在加沙袭击中使用了人工智能引导的无人机群。美国空军基于 DeepMind 在游戏上的工作制造了一个名为 Zero 的人工智能副驾驶。微软签署了一份价值 220 亿美元的合同,将 Hololens 用于军事用途,并订购了 12 万头戴式耳机,作为集成视觉增强系统的一部分。

预测(幻灯片 183)

预测部分包括报告作者对未来一年人工智能世界的想法和预测。

  1. 变形金刚取代递归网络用 RL 代理学习世界模型在大而丰富的环境中超越人类的表现。
  2. ASML 的市值达到 5000 亿美元。
  3. Anthropic 在 GPT、Dota、AlphaGo 的水平上发表文章。
  4. 人工智能半导体的整合浪潮,至少有一家芯片公司被大型科技公司收购。
  5. 小型变压器+ CNN 混合模型匹配 ImageNet top-1 精度上的当前 SOTA,参数少 10 倍。
  6. DeepMind 发布物理科学重大研究突破。
  7. 根据 PapersWithCode 的测量,JAX 框架每月创建的代码回购从 1%增长到 5%。
  8. 一家新成立的以 AGI 为重点的公司拥有强大的支持和专注于某个垂直行业(如开发工具、生命科学)的路线图。

我的预测

我来补充几个我自己的。

  1. HuggingFace 成为托管公共模型和数据集的事实标准,社区将能够将这些构建到自己的应用程序中。
  2. 芯片公司开始意识到单一供应链的脆弱性,一家大公司决定在当地投入超过 1000 亿美元。
  3. EleutherAI 复制了 GPT-3 比例模型,但更加高效和开源。
  4. 随着深度学习框架和模型架构的成熟,一个新的数据创建框架出现了,适用于所有数据:标记、监管、验证、提取。尽管你可能会说像 scale.com 这样的公司已经这样做了。正因为如此,第一次 Kaggle 式的纯数据竞赛开始了。
  5. 一项大型研究发表在改进模型的不同方面:是数据准备吗?是训练套路吗?是模型架构吗?

资源

以上所有观点要么直接来自于以下内容,要么受到以下内容的启发。

非常感谢内森·本耐奇和伊恩·霍加斯今年和每隔一年整理出这份报告。

这最初是作为机器学习月刊 2021 年 10 月刊发表的,这是我写的每月一次的时事通讯,涵盖了机器学习领域的最新和最伟大的(但不总是最新的)。 注册 将下一期内容发送到您的收件箱。

2021 年 5 月底语音合成的技术水平

原文:https://towardsdatascience.com/state-of-the-art-of-speech-synthesis-at-the-end-of-may-2021-6ace4fd512f2?source=collection_archive---------4-----------------------

思想和理论

在 2021 年 5 月底展示语音合成研究(也称为文本到语音)的最新发展水平,重点是深度学习技术。我提供了 71 个出版物的综合,并给你理解基本概念的钥匙。

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

瓦伦丁·米勒Unsplash 上的照片

介绍

声音是我们最自然的交流方式。因此,会话助手的发展自然会朝着这种通信方式发展。这些虚拟语音助手可以部署到呼叫中心,通过预先确定呼叫者的请求,考虑最简单的请求(例如预约)。对于视障者,提供屏幕上文本的描述或描述他们面前的场景。操作员可以在语音的帮助下对机器进行干预以对其进行修复,并且他可以不用手来与机器进行交互,即不必使用键盘或鼠标。几年来,GPS 导航一直通过语音为你导航。

在这篇论文中,我将讨论语音合成研究的现状。我将介绍用于从句子中自动生成信号的技术。在对该主题进行简短介绍后,我将介绍与自动合成相关的问题,然后我将介绍处理管道,我将快速解释什么是 mel-spectrogram,然后是深度生成模型、端到端系统、当今研究的参与者,我将继续讨论允许实现学习的可用数据集。我将解释质量是如何衡量的,以及哪些会议展示了这项工作。我会完成剩下的挑战。

TL;速度三角形定位法(dead reckoning)

在语音识别和“简单”(单调)语音生成方面,对话式语音助手已经达到了与人类几乎相同的水平。语音生成是一个复杂的过程,包括从一个简单的句子中生成几千个代表声音信号的值。神经网络通过提供更好的信号质量、更容易的训练数据准备以及生成时间已经减少到能够比人快几百倍地生成句子的程度,已经取代了传统的串联生成技术。

信号的生成通常在两个主要步骤中完成:第一步生成句子的频率表示(mel 频谱图),第二步从该表示生成波形。第一步,将文本转换成字符或音素。这些被矢量化,然后编码器-解码器型架构将这些输入元素转换成压缩的潜在表示(编码器),并通过解码器将该数据逆转换成频率表示。这一步最常用的技术是与注意机制相关的卷积网络,以改善输入和输出之间的一致性。这种对齐通常通过持续时间、电平和音调预测机制来加强。在第二阶段,由所谓的声码器处理,三维时间频率表示(时间、频率和功率)被转换成声音信号。最有效的架构是 GAN(生成对抗网络)架构,其中发生器将生成信号,该信号将被鉴别器挑战。

当这些架构由人评估时,质量水平几乎达到训练数据的质量。由于很难比输入数据做得更好,因此研究现在转向元素的贡献,通过添加韵律、节奏和个性元素,使生成的信号更接近现实,并能够更精细地参数化生成。

虚拟语音助手

三年前的今天(2018 年 5 月),谷歌首席执行官桑德尔·皮帅在谷歌 I/O 的主题演讲上展示了一段虚拟助理(谷歌双工)与一家发廊的员工交谈的电话录音。这位助理负责为第三方预约。当时最例外的元素是通话近乎完美,完美的模仿了一个真实的人进行预约,并在谈话过程中加上了“嗯嗯”的声音。对话的流程是如此完美,我仍然怀疑这是不是一个骗局。这个演示预示着一场即将到来的语音人际关系自动化领域的革命。

无论是梦想还是现实,这种将餐馆或理发店的预订委托给虚拟助理的功能,3 年后,只在美国可用。这项服务在其他国家也可以使用,但只是通过自动呼叫商家进行验证来提高谷歌搜索引擎和地图时间表的可靠性。这家创新的公司在这里向我们展示了它制造工具的能力,这些工具可以以优异的质量水平陪伴人类进行某些活动。至少有足够的质量让他们决定提供这种服务。

为了实现对话式语音助手,必须有一个处理链,其中第一个组件将用户的语音转换成文本(语音到文本)。第二个组件(机器人)分析呼叫者的文本并生成响应。第三个也是最后一个组件将机器人的回答转换成语音(文本到语音)。通过扬声器或电话线向用户播放结果。

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

语音助手的符号表示(作者的图表)

语音合成,也称为文本到语音或 TTS,在很长一段时间内是通过组合一系列或多或少由一组编程规则规定的转换和或多或少令人满意的输出结果来实现的。近年来,深度学习的贡献使得更多自主系统的出现,这些系统现在能够生成数千种不同的声音,其质量接近人类。今天的系统已经变得如此高效,以至于他们可以从几秒钟的声音样本中克隆出一个人的声音。

一对多问题

为了生成音频信号,合成系统将遵循一组或多或少复杂的步骤。语音合成必须解决的一个主要问题是一对多建模问题,这包括将一条信息(要发声的句子)转换成需要几千个值的数据(波形)的能力。此外,这种信号可以有许多不同的特征:音量、特定单词的重音、发音速度、句子结尾的管理、感情的添加、音调……因此,系统架构师的问题是通过将这一代分成可以全局或单独训练的步骤来解决这种复杂的处理。

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

信号产生的不同阶段(作者的图表)

加工管道

第一个语音生成系统直接使用空气来产生声音,然后计算机科学带来了可以通过参数使用生成规则的系统,以通过从或多或少的结果声音数据库(英语中有超过 1,700 个双音素,法语中有 1,200 个双音素,可以通过说话者、句子开始/结束、韵律等复制)连接双音素来快速生成句子

传统的语音合成系统通常分为两类:拼接系统和生成参数系统。双音素的组合属于拼接语音合成的范畴。级联合成有两种不同的方案:一种是基于线性预测系数(LPC),另一种是基于基音同步重叠相加(PSOLA)。结果通常是平的、单调的和机械的,即缺乏真正的韵律,尽管可以调整结果。对于韵律,我们指的是超音段特征,如语调、旋律、停顿、节奏、流、重音……随着基于隐马尔可夫模型(HMM)的生成声学模型的创建和上下文决策树的实现,该方法得到了改进。深度生成系统现在已经成为标准,淘汰了已经过时的旧系统。

遵循一对多原则,要构建的系统包括将文本转换成中间状态,然后将该中间状态转换成音频信号。大多数统计参数语音合成系统(SPSS)不直接生成信号,而是生成其频率表示。第二个组件称为声码器,它根据这种表示完成生成。近年来,随着卷积网络、递归网络、(2013)、注意机制(2014)、甘(2014)和其他网络的出现,生成网络的原理已经成为规范。

下图描述了用于生成语音的基于机器学习的流水线架构的不同组件。

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

语音合成系统标准操作图(作者图)

像任何基于学习的系统一样,生成主要由两个阶段组成:学习阶段和生成阶段(或推理阶段)。有时,插入一个“中间”阶段,用其他数据对声学模型进行微调。

管线的外观因阶段而异:

  • 在学习阶段,管道允许生成模型。句子是编码器/解码器的输入和与句子相关的语音文件。有时还会加上说话人的 ID。在许多系统中,产生 mel 频谱图,并且声码器将该表示转换成波形。声码器的输入是声学参数(通常是 mel 声谱图)和与参数相关的语音。从两个综合分析模块中提取的信息集被称为“语言特征”(声学特征)。
  • 在生成阶段,管道负责执行推理(或合成或生成)。输入是要转换的句子,有时是说话人 ID,用于选择与生成的语音相匹配的语音特征。输出是 mel 光谱图。声码器的作用是从要产生的音频的紧凑表示中产生最终波形。

具体来说,用于学习(培训)的渠道包括:

  • 一个文本分析模块,执行文本规范化操作,将数字转换为文本,将句子拆分为多个部分(词性),将字素(书面音节)转换为音素(G2P),添加韵律元素等。有些系统直接处理文本的字符,有些系统只使用音素。在培训和综合过程中,此模块通常“按原样”使用。
  • 声学分析模块接收与文本相关联的声学特征作为输入。该模块还可以在多说话者训练期间接收说话者 ID。本模块将分析理论特征和培训阶段产生的数据之间的差异。声学特征可以使用诸如快速傅立叶变换的“经典”信号处理算法从语音样本中生成。该模块还可以生成模型来预测信号的持续时间(音素和 mel 声谱图的样本数量之间的联系)及其与文本的对齐。最新的系统倾向于改进预测网络并增加音调预测。2020 年底,斯德哥尔摩 EECS 学校的 va Szé kely 在学习阶段增加了呼吸处理,这缩短了人与机器之间的距离。
  • 来自训练阶段的声学模型表示从句子嵌入向量、说话者向量和声学特征中提取的潜在状态。此外,还有对齐和其他功能的预测模型。
  • 语音分析模块用于从原始语音文件(地面实况)中提取各种参数。在某些系统中,尤其是端到端系统,前面和后面的静默被去除。提取因系统而异,可以包括提取音调、能量、重音、音素持续时间、基频(第一谐波频率或 F0)等。从输入语音信号中。这些输入语音文件可以是单个或多个扬声器。在多扬声器系统的情况下,扬声器矢量被添加到输入中。

用于合成(推理)的管道包括:

  • 基于文本分析模块的输出并通过声学模型,特征预测模块生成完成生成所必需的紧凑语音表示。这些输出可以是以下表示中的一个或多个:信号的梅尔频谱图(MelS)、巴克标度倒谱系数(Cep)、线性标度对数幅度频谱图(MagS)、基频(F0)、频谱包络、非周期性参数、音素的持续时间、音调高度…
  • 声码器的输入可以是一个或多个上述表示。这个模块有许多版本,它倾向于作为一个独立的单元使用,以牺牲端到端系统为代价。最受欢迎的声码器有 Griffin-Lim、WORLD、WaveNet、SampleRNN、GAN-TTS、MelGAN、WaveGlow 和 HiFi-GAN,它们提供的信号接近人类的信号(参见如何测量质量)。

早期基于神经网络的架构依赖于使用传统的参数 TTS 管道,例如:DeepVoice 1 和 DeepVoice 2。DeepVoice 3、Tacotron、Tacotron 2、Char2wav 和 ParaNet 使用基于注意力的 seq2seq 架构(Vaswani 等人,2017)。基于深度神经元网络(DNNs)的语音合成系统现在优于所谓的经典语音合成系统,例如(几乎)不再在研究中看到的串联单元选择合成和 hmm。

下图显示了按年份分类的研究论文出版的不同架构。它还显示了系统使用以前系统的功能时的链接。

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

按年份和关系划分的建筑之间的不同网络和链接(作者图)

梅尔谱图简介

声码器的输入通常由 mel 声谱图构成,Mel 声谱图是声音信号的特定表示。这个声谱图是通过对音频信号(时间/幅度)应用若干变换来实现的。

第一种变换包括使用短期快速傅立叶变换(STFFT)提取信号的频谱。STFFT 将通过捕捉组成音频信号的不同频率以及每个频率的幅度来分解音频信号。由于信号随时间的可变性,信号被分成部分重叠的窗口段(通常在 20 毫秒和 50 毫秒之间)。

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

由 aqu egg——自己的作品,公共领域,https://commons.wikimedia.org/w/index.php?curid=5544473

横轴对应时标,纵轴对应频率,像素颜色对应信号功率,单位为分贝(dB)。颜色越浅,频率越强。频率标度然后被转换成对数标度。

由于人耳感知频率差异的方式是不同的,无论频率是低还是高,Stevens、Volkmann 和 Newmann 在 1937 年提出了一种称为 mel 音阶的音阶,它给出了一个音高单位,使得距离听者相同距离的音高声音相同。因此,声谱图的频率通过该标度被转换成 mel 声谱图。

深度生成模型

语音生成系统面临的挑战是从少量信息中,甚至从无信息中产生大量数据。一个 30 个单词的句子,以 22KHz 在 10 秒内发音,需要产生 440.000 字节(16 位)的序列,也就是说,比率为 1 比 14.666。

自动生成建模领域是一个广阔的领域,几乎有无限的用途。直接的应用多种多样,如图像生成,以及由 GPT-2 和最近的 GPT-3 普及的文本生成。在我们的情况下,我们期望他们实现声音的产生。一开始的所谓“经典”网络(CNN 代表卷积神经网络)已经被更复杂的递归网络(RNN 代表递归神经网络)所取代,因为它们引入了先前上下文的概念,这在语音连续性的上下文中是重要的。今天,这一代主要是通过深度模型架构实现的,如 DCCN(扩张因果卷积网络)、师生、VAE(变分自动编码器)和 GAN(生成对抗网络)、精确似然模型(如 PixelRNN/CNN)、图像转换器、生成流等。

最常见的架构有:

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

自回归方程

  • 自回归模型是一种基于回归的时间序列模型,其中序列由其过去的值而不是其他变量来解释。在语音生成的情况下,大多数早期的基于神经网络的模型是自回归的,这意味着未来的语音样本取决于过去的样本,以便保持长期的依赖性。这些模型很容易定义和训练,但有传播和放大误差的缺点。并且生成时间与生成句子的长度成正比。首先,它们具有串行的缺点,因此无法受益于 GPU(图形处理器单元)和 TPU(张量处理单元)处理器的最新并行化能力。这使得创建需要在合理的时间内响应用户的实时系统变得困难。随着 WaveNet 和 ClariNet 的推出,非自回归系统允许在不依赖于前代产品的情况下生成语音样本,这允许仅受处理器存储器限制的强大并行化。这些系统的实现和训练更加复杂,精确度较低(内部依赖性被消除),但可以在数毫秒内生成所有样本。

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

扩张因果卷积网络(DCCN)

  • 由谷歌及其流行的 WaveNet 于 2016 年推出的扩张因果卷积网络(或 DCCN)是一种扩张因果卷积,通过跳过某个步长的输入值,将滤波器应用于大于其长度的区域。这种扩张使得网络只有几层就有非常大的感受野。随后,许多架构已经将这种模型集成到它们的生成链中。

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

流动

  • 流程架构由一系列可逆转换组成(Dinh 等人,2014 — Rezende 和 Mohammed,2015)。术语“流程”意味着简单的可逆转换可以相互组合,以创建更复杂的可逆转换。非线性独立分量估计(NICE)模型和实非保体积(RealNVP)模型构成了两种常见的可逆变换。2018 年,NVIDIA 通过将 Glow(用于生成流)技术集成到 WaveGlow 中来使用这项技术,以便从 mel 频谱图表示中生成语音文件。

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

师生模式

  • 师生模型涉及两个模型:一个预训练的自回归模型(老师),用于指导非自回归网络(学生)学习正确的注意力对齐。教师将记录学生的并行前馈模型的输出。这种机制也被称为知识蒸馏。该学生的学习标准与反向自回归流相关,其他基于流的模型已通过 WaveGlow 引入。这些并行合成模型的主要问题是它们对可逆变换的限制,这限制了模型的容量。

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

可变自动编码器

  • 变型自动编码器 (VAE)是自动编码器的一种改编。自动编码器由两个相互协作的神经网络组成。第一个网络负责将输入编码成连续的潜在简化表示,其可以被内插(压缩形式= z)。第二个网络负责通过减少输出损失来从编码中重建输入。为了限制过度学习的影响,学习在均值和协方差方面被正则化。在语音生成的情况下,编码器将文本转换成对应于声学特征的潜在状态,解码器将该状态转换成声音信号。编码器/解码器模型从图像生成中借鉴了很多,因为基本思想是生成图像,即频谱图。因此 PixelCNN、Glow 和 BigGAN 一直是 TTS 网络的灵感来源。

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

生成对抗网络

  • 生成对抗网络(GANs-good fellow 等人)于 2014 年出现,以协助图像生成。它们是基于反对生成器和鉴别器的原理。生成器被训练成从数据生成图像,鉴别器被训练成确定所生成的图像是真的还是假的。圣地亚哥的一个团队(Donahue et al .,2018)有使用这种技术产生音频信号的想法(WaveGAN 和 SpecGAN)。许多声码器使用这种技术作为产生原理。gan 是生成语音文件的最佳单元之一。

其他系统也存在,但不太常见,如扩散概率模型,包括通过马尔可夫转移链修改信号,如添加高斯噪声,IAF…

注意机制的贡献通过消除递归的需要极大地改善了 seq2seq 网络,但是仍然很难预测输入和输出之间的正确对齐。早期的网络使用基于内容的注意机制,但是导致了对齐错误。为了纠正这个问题,测试了其他几种注意机制:高斯混合模型(GMM)注意机制、混合位置敏感注意机制、动态卷积注意(DCA)和单调注意(MA)对齐方法。

下表显示了近年来建设的主要网络的不同架构。

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

不同网络体系结构的描述(作者列表)

端到端系统

2017 年 2 月,蒙特利尔大学提出了 Char2Wav,对应于 SampleRNN 的双向递归神经网络、注意力递归神经网络和神经声码器的组合。这种端到端网络允许直接从文本中学习波形样本,而无需经过中间步骤,如 mel 频谱图。它直接是网络的输出,用作输出网络的输入。

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

char 2 wav(【https://openreview.net/forum?id=B1VWyySKx】T2)的建筑

Char2Wav 由播放器和神经声码器组成。读者是一个专注的编码解码器。编码器接受文本或音素作为输入,而解码器从中间表示开始工作。如该大学所述:

“与传统的文本到语音模型不同,Char2Wav 学习直接从文本产生音频.”

同月,百度还开发了名为 DeepVoice 的全自主端到端系统。它是从一个小音频剪辑及其转录的数据集来训练的。最近,微软在 2020 年推出了一个名为 FastSpeech 2s 的网络,该网络避免了 mel 频谱图的生成,但质量低于其姐妹网络生成的频谱。

这种端到端网络架构在语音生成领域并不占优势。大多数体系结构将字形-音素模型、持续时间预测模型和用于生成 Mel-频谱图的声学特征模型以及声码器分开。

最新的出版物和去年由中国科学技术大学(USTC)在爱丁堡大学的帮助下组织的暴雪 2020 挑战赛证实了这种情况,因为上次挑战赛见证了经典系统的消失和基于 2 代阶段的 SPSS(统计参数语音合成)系统的统治。超过一半的参赛团队使用神经序列对序列系统(例如 Tacotron ),并使用 WaveRNN 或 WaveNet 声码器。另一半研究基于 DNNs 和同样的声码器的方法。

谁是研究参与者?

在研究的 71 篇论文中,公司或大学家族的出版物分布显示,网络公司占主导地位,紧随其后的是技术公司。大学只是第三。

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

出版商家族发行的出版物

论文的来源国首先是美国,然后是中国。排在第三位的是韩国。出版商的国家与公司总部所在地相对应。

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

按出版商国家分列的出版物发行情况

就出版物数量而言,亚洲仅领先于北美(32 对 30)。

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

按洲分布

谷歌及其子公司 DeepMind(英国)是近年来发表论文最多的公司(13 篇)。我们欠他们关于 WaveNet,Tacotron,WaveRNN,GAN-TTS 和 EATS 的论文。其次是百度(7 篇出版物),有关于 DeepVoice 和单簧管的论文,微软有关于 TransformerTTS 和 FastSpeech 的论文。

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

按公司/大学分配

哪里可以找到数据集?

不再需要对语音序列的每个元素进行强制注释。今天,有一个包含相关句子和声音的语料库就足够了,这是生成模型所必需的唯一元素。因此,有可能比以前有更多的样本,特别是通过(按字母顺序):

  • 暴雪语音数据库——多语言——可变大小——暴雪挑战赛为每个参赛者提供了几个语音样本,供他们在挑战过程中进行训练。这些数据库在每次比赛中都可以免费下载。
  • CMU-北极-美国 1.08 GB 该数据库由大约 1150 个从古腾堡计划文本中精心选择的短语组成,没有版权。
  • 共同的声音 6.1-多语言-可变大小 Mozilla 已经启动了一项计划,建立一个数据库,使语音识别对每个人开放和可用。为此,他们发起了一个社区项目,允许任何人背诵句子并检查其他人的背诵情况。法语版 6.1 数据库代表 18 GB 或 682 个有效小时。
  • 欧洲语言资源协会 —多语言—可变大小—许多商业用途的付费语料库。
  • LDC 语料库数据库 —多语言—可变大小—语言数据联盟(LDC)是一个由大学、图书馆、企业和政府研究实验室组成的开放联盟,成立于 1992 年,旨在解决语言技术研发面临的严重数据短缺问题。LDC 由宾夕法尼亚大学主办。
  • LibriSpeech —美国— 57.14 GB — LibriSpeech 是由 Vassil Panayotov 在 Daniel Povey 的帮助下准备的,以 16 kHz 的采样率朗读的约 1000 小时的英语语音语料库。数据来源于阅读 LibriVox 项目的有声读物,并经过仔细的分割和排列。
  • LibriTTS —美国— 78.42 GB — LibriTTS 是一个 585 小时英语阅读的多说话人英语语料库,采样率为 24 kHz,由 Heiga Zen 在 Google Speech 和 Google Brain 团队成员的帮助下编写。
  • LibriVox —多语言—可变大小— LibriVox 是一群来自世界各地的志愿者,他们阅读并录制公共领域的文本,以创建免费的有声读物供下载。
  • LJ Speech —美国— 2.6 GB —无疑是模型评估中最知名和最常用的数据集之一。这是一个公共领域的语音数据集,由 13,100 个单个说话者阅读 7 本非小说书籍的简短音频剪辑组成。为每个剪辑提供一份抄本。这些剪辑的长度从 1 秒到 10 秒不等,总时长约为 24 小时。这些文本出版于 1884 年至 1964 年之间,属于公共领域。该音频由 LibriVox 项目在 2016-2017 年录制,也在公共领域。
  • VCTK —美国— 10.94 GB — CSTR VCTK(语音克隆工具包)包括 109 个操各种口音的英语者所说的语音数据。每个演讲者阅读大约 400 个句子,这些句子选自《先驱报》、《彩虹通道》和一段启发性段落。这些句子对所有参与者都一样。

存在许多数据集,给它们命名会很复杂: OpenSLR ,META-SHARE,audio books……尽管有大量的语音数据,但总是很难找到允许在韵律和情感方面训练模型的数据集。

如何衡量质量?

为了确定生成信号的质量,没有琐碎的或计算机化的测试可用于评估分类器的性能。质量是根据许多因素评估的,包括自然度、鲁棒性(系统不会忘记单词或重复的能力)和准确性。

因为必须检查质量以确定模型的性能,所以这必须由人类来完成。讲被评估语言的被选择的人被要求评价声音信号的音频质量。平均意见得分(MOS)是从通过对声音再现的质量判断(非标准化的,因此是主观的)进行投票而获得的得分中计算出来的。分数从 1 分差到 5 分优不等。

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

MOS 评定量表

被选中的听众被邀请收听生成的音频文件,有时与源文件进行比较(地面实况)。听完后,他们给出一个分数,分数的平均值就是 MOS 分数。自 2011 年以来,研究人员可以受益于一种描述良好的工作方式,这种方式基于众包方法。最著名的是一个被称为 CrowdMOS 框架,主要使用众包网站 Amazon Mechanical Turk(f . Ribeiro et al .—Microsoft—2011)。

大多数实验室使用这一原则对其算法进行评估,从而对算法之间的性能进行总体评价。应当注意,评估结果高度依赖于说话者和录音的声学特性。另一方面,这些值不是直接可比的,因为它们通常是用不同的数据集训练的。尽管如此,它允许我们了解彼此相关的架构的质量。当研究人员对他们的模型和他们同事的模型进行对比测试时,情况就更是如此了。

该图提供了所研究的每个模型的 MOS 值。只有用英语实现的 MOS 分数被保留。

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

生成模型和声码器的美-英 MOS(作者图)

MUSHRA 方法(针对具有隐藏参考和锚的多个刺激)也是一种常用的听力测试。听众被要求比较自然语音和生成信号之间的混合信号,他们在 0 到 100 的范围内指定一个分数。

2019 年,Binkowski 等人引入了一种称为弗雷歇深度语音距离(FDSD)的定量自动测试,这是对应用于计算 2 个语音文件之间距离的弗雷歇距离的改编。该测试允许产生的信号和原始文件之间的距离得分。这个分数特别用于生成性对抗系统。

还计算其他指标,如 RMSE(均方根误差)、NLL(负对数似然)、CER(字符错误率)、WER(单词错误率)、UER(发音错误率)、MCD(梅尔倒谱失真)…

语音会议

一些会议涉及语音合成,我们注意到,科学出版物的日期往往针对这些会议之一。特别是,我们将提到(按字母顺序):

  • 国际声学、语音和信号处理会议(ICASSP)是由 IEEE 组织的年度会议。它发生在六月。主题包括声学、语音和信号处理。
  • ICLR-成立于 2013 年的国际学习代表会议(ICLR)于 5 月举行,主要讨论机器学习。
  • ICML——国际机器学习大会(ICML)创立于 1980 年,每年 7 月举行。研究论文的提交时间为 12 月底至 2 月初。
  • inter seech——inter seech 会议成立于 1988 年,于 8 月底/9 月初举行。国际语音通信协会(ISCA)的目标是促进与语音通信科学技术相关的所有领域的活动和交流。
  • NeurIPS——创建于 1987 年,人工智能和计算神经科学的科学会议称为 neur IPS(用于神经信息处理系统),每年 12 月举行。它涉及机器学习网络和人工智能使用的所有方面。

接下来的挑战

在会话系统中,尽可能自然地进行会话是很重要的,即不要有过多的停顿。因此,声音的产生必须几乎是即时的。人类能够非常迅速地对一个问题做出反应,而生成系统通常必须等到生成结束时才能将信号返回给用户(特别是因为它接收到一个完整的句子进行转换)。随着并行性的使用,最近出现的非自回归系统明显超过了旧模型,因为它们能够将输出信号的产生分成几个并行的活动,从而能够在几毫秒内产生语音信号,而不管句子的长度(这被称为实时因子或 RTF)。在电话呼叫中心,对话式虚拟助理(也称为 callbot)必须能够在几秒钟内对请求做出反应,否则会被认为效率低下或功能失调。

语音生成系统仍然经常受到单个字母、拼写、重复数字、长句、数字到语音等的限制。,这导致取决于输入的质量不一致。此外,模型中仍会产生一些不寻常的峰值,并导致产生的信号不一致。由于人耳对这种变化极其敏感,自动生成的低质量会被立即检测到并降低欣赏分数。即使已经取得了巨大的进步,消除这些错误仍然是一个挑战。

模型的大小和它们在存储器中占用的空间也是未来网络的一个问题,未来网络将不得不匹配具有许多参数(数千万个参数)但资源少得多的网络。在低资源设备(如手机或机顶盒)上,CPU 和内存是有限的。DeviceTTS (Huand 等人-阿里巴巴集团语音实验室-2020 年 10 月)能够生成“仅”150 万个参数和 0.099 GFLOPS 的语音,质量接近 Tacotron 及其 1350 万个参数。基于 FastSpeech 2 的 LightSpeech (Luo 等人-中国科技大学和微软-2021 年 2 月)设法在不损失 MOS 的情况下,将其与 FastSpeech 2 的 1.8M 参数相匹配。

大多数生成的声音通常是单调的,平的,除非有包括各种情感表达和多个说话者的数据集。为了向系统指示要应用于输出信号(韵律)的持续时间和节奏的变化,有一种被称为语音合成标记语言(或 SSML)的标记语言。通过围绕要变化的单词的标签系统,可以应用一定数量的特征,例如音高及其范围(较低或较高)、轮廓、速率、持续时间和音量。它还允许你定义停顿,说一个词,等等。最新的出版物倾向于用其他机制取代这种标记,如预期韵律发音(使用风格标记的表达性 TTS-Kim 等人,2021)。研究人员正在修改现有的网络,增加额外的网络来调制产生的信号,从而模拟情感、强调等。(重点-李等 2018,CHiVE-Wan 等 2019,加味 Tacotron- Elyasi 等 2021)。还使用了声音转换技术:信号在生成后被修改,以便根据目的地对其进行调制。

大多数系统被设计成产生与用于训练的声音相对应的单一声音。人们对在训练期间不被看到的情况下生成新语音有一些兴趣(特别是根据最近的出版物:Arik 等人 2018 年、贾等人 2018 年、Cooper 等人、Attentron Choi 等人 2020 年和 SC-GlowTTS Casanova 等人 2021 年)。零触发 TTS (ZS-TTS)方法包括依靠几秒钟的语音来使网络适应新的声音。这种方法类似于语音克隆。名为多说话人多风格语音克隆挑战赛的比赛是一项挑战,参赛队必须提供一个解决方案,以相同或其他语言克隆目标说话人的语音。在大规模听力测试中也对结果进行了评估。另一个类似的比赛更普遍地关注声音转换:T2 声音转换挑战赛。

世界上有 7100 多种不同的语言。如果我们把所有使用的方言加起来,这个数字就上升到 41,000(例如,中国境内有 540 多种语言,印度有 860 多种语言)。工业语音合成系统通常只提供这个极其多样化的生态系统的一小部分。例如,谷歌云语音到文本提供 41 种语言,如果您添加国家变化(例如,法国加拿大和法国法国),则提供 49 种语言。

当前的网络能够通过从被克隆的人的声音的几秒钟的学习转移来再现声音。它让一个失去声音的人有可能产生声音,现在可以通过录制他的声音几分钟来模仿别人。因此,有可能让一个人说出你想要什么,或者试图模仿一家公司的经理的声音。在综合的同时,下一个挑战将是提供能够检测这些欺诈的系统。由于人类无法在不改变两种发音的情况下将同一个句子发音两次,因此有可能通过简单地要求他重复他的句子来检测我们是在与一个机器人还是一个人打交道。然而,你需要有一个好的耳朵和一个好的听觉记忆来做出改变!

结论

语音合成是一个令人兴奋的领域,因为它触及了我们人类地位的核心,并且它今天达到了非常接近自然声音的质量水平。

大学和公司研究实验室已经超越了简单的语音再现阶段,并且已经接受了其他挑战,例如在不降低质量的情况下提高生成速度、纠正上一代错误、从单个说话者生成几种不同的语音、向信号添加韵律等。

迄今为止所产生的语音的质量水平足够高,可以应用于所有可能的领域,尤其是基于语音的对话助手的环境中。

你会用语音合成做什么商业用途?

参考

CrowdMOS:一种众包平均意见得分研究方法

暴雪挑战 et 暴雪挑战 2020

基于双向 LSTM 递归神经网络的语音合成(2014),范等【pdf】

SampleRNN:无条件端到端神经音频生成模型(2016),Soroush Mehri 等人【pdf】

wave net:Raw Audio 的生成模型(2016),Aä ron van den Oord 等人【pdf】

Char2Wav:端到端语音合成(2017),J Sotelo 等人【pdf】深度语音:实时神经文本到语音(2017),塞尔詹 o .阿里克等人【pdf】

深度语音:实时神经语音转文本(2017),Arik 等人【pdf】

深度语音 2:多说话人神经文本到语音(2017),塞尔詹·阿里克等人【pdf】

深度语音 3:2000-说话人神经文本转语音(2017),魏平等[pdf]

通过调节 Mel 光谱图预测的 WaveNet 进行自然 TTS 合成(2017),沈健等人【pdf】

并行 WaveNet:快速高保真语音合成(2017),Aaron van den Oord 等人【pdf】

多任务学习框架下基于生成对抗网络的统计参数语音合成(2017),S . Yang 等【pdf】

Tacotron:走向端到端的语音合成(2017),王雨轩等[pdf]

VoiceLoop:通过音韵循环进行语音拟合和合成(2017),Yaniv Taigman 等人【pdf】

单簧管:端到端文语转换中的并行波生成(2018),魏平等【pdf】

LPCNet:通过线性预测改善神经语音合成(2018),让-马克·吕林燕等人【pdf】

FastSpeech:快速、鲁棒和可控的文本到语音转换(2019),任意等人【pdf】

梅尔内特:频域音频生成模型(2019),肖恩·瓦斯奎兹等人【pdf】

多说话人端到端语音合成(2019),Jihyun Park 等[pdf]

梅尔根:条件波形合成的生成对抗网络(2019),昆丹·库马尔等人【pdf】

【Transformer TTS】用 Transformer 网络进行神经语音合成(2019),李乃汉等【pdf】

【ParaNet】并行神经文本转语音(2019),彭等【pdf】

WaveFlow:一个基于压缩流的 Raw 音频模型(2019),魏平等人【pdf】

Waveglow:基于流的语音合成生成网络(2019),R Prenger 等人【pdf】

alignts:无需明确对齐的高效前馈文本到语音系统(2020),甄曾等[pdf]

EfficientTTS:一个高效高质量的文语转换架构(2020),苗晨峰等[pdf]

[EATS] 端到端对抗性文本转语音(2020),杰夫·多纳休等[pdf]

FastSpeech 2:快速高质量的端到端文本转语音(2020),任意等人【pdf】

Flowtron:一个用于文本到语音合成的基于自回归流的生成网络(2020),Rafael Valle 等人【pdf】

Flow-TTS:基于 Flow 的非自回归文语转换网络(2020),苗晨峰等【pdf】

Glow-TTS:通过单调对齐搜索的文本到语音的生成流程(2020),Jaehyeon Kim 等人【pdf】

HiFi-GAN:高效高保真语音合成的生成对抗网络(2020),Jungil Kong 等人【pdf】鲁棒长格式语音合成的位置相关注意机制(2020),Eric Battenberg 等人【pdf】

【Merlin:一个开源的神经网络语音合成系统(2016)吴等

【DC-TTS】基于深度卷积网络的高效可训练文本到语音转换系统,具有引导注意力(2017) Tachibana 等人【pdf】

WaveGAN / SpecGAN 对抗性音频合成(2018) Donahue 等人【pdf】

WaveRNN 高效神经音频合成(2018) Kalchbrenner 等人【pdf】

实时说话人相关的神经声码器(2018)金等【pdf】

【SEA】样本高效自适应文语转换(2018)陈等【pdf】

FloWaveNet:Raw Audio 的生成流程(2018) Kim 等人【pdf】

GELP:用于从 Mel-spectrogram 合成语音的 GAN 激励线性预测(2019)朱韦拉等人【pdf】

榴莲:用于多模态合成的持续时间通知注意网络(2019)于等【pdf】

具有对抗网络的 GAN-TTS 高保真语音合成(2019) Binkowski 等人【pdf】

梅尔根:条件波形合成的生成对抗网络(2019)库马尔等人【pdf】

并行 WaveGAN:基于生成式对抗网络的多分辨率声谱图快速波形生成模型(2019) Yamamoto 等人【pdf】

SqueezeWave:用于设备上语音合成的超轻型声码器(2020)翟等[pdf]

【RobuTrans:一种基于鲁棒变换的文本语音转换模型(2020)李等【pdf】

【多频带 MelGAN:高质量文本到语音的快速波形生成(2020)】杨等【pdf】

FeatherWave:一种高效的高保真多带线性预测神经声码器(2020)田等【pdf】

TalkNet:全卷积非自回归语音合成模型(2020)贝利耶夫等【pdf】

WG-WaveNet:无需 GPU 的实时高保真语音合成(2020) Hsu 等人【pdf】

JDI-T:用于无显式对齐的文本到语音的联合训练持续时间通知转换器(2020) Lim 等人【pdf】

WaveNODE:语音合成的连续归一化流程(2020) Kim 等人【pdf】

FastPitch:带基音预测的并行文本到语音(2020) Lancucki 等人【pdf】

VocGAN:一种具有分层嵌套对抗网络的高保真实时声码器(2020)杨等【pdf】

SpeedySpeech:高效的神经语音合成(2020) Vainer 等人【pdf】

WaveGrad:波形生成的梯度估计(2020)陈等【pdf】

DiffWave:音频合成的通用扩散模型(2020)孔等【pdf】

【BVAE-TTS】非自回归文语转换的双向变分推断(2020) Lee 等【pdf】

非注意 Tacotron:鲁棒可控的神经 TTS 合成包括无监督持续时间建模(2020)沈等【pdf】

平行 Tacotron:非自回归可控 TTS (2020) Elias 等【pdf】

【高效 WaveGlow:一种改进的 WaveGlow 声码器,速度更快 (2020)宋等【pdf】

Reformer-TTS:使用 Reformer 网络的神经语音合成(2020) Ihm 等人【pdf】

DeviceTTS:一个小尺寸、快速、稳定的设备上文本到语音转换网络(2020)黄等[pdf]

Wave-Tacotron:无声谱图的端到端文本语音合成(2020) Weiss 等人【pdf】

s-Transformer:鲁棒神经语音合成的段-Transformer(2020)王等【pdf】

通用 MelGAN:用于多域高保真波形生成的鲁棒神经声码器(2020) Jang 等人【pdf】

VARA-TTS:基于具有残留注意的深度 VAE 的非自回归文本到语音合成(2021) Elias 等人【pdf】

PeriodNet:具有分离周期和非周期分量的结构的非自回归波形生成模型(2021) Hono 等人【pdf】

AdaSpeech:自定义语音的自适应文语转换(2021)陈等【pdf】

并行 Tacotron 2:具有可微分持续时间建模的非自回归神经 TTS 模型(2021) Elias 等人【pdf】

用于快速流式文本到语音频谱建模的多速率注意力架构(2021)何等【pdf】

Diff-TTS:文本到语音的去噪扩散模型(2021) Jeong 等人【pdf】

TalkNet 2:具有显式基音和持续时间预测的语音合成的非自回归深度可分离卷积模型(2021) Beliaev 等人【pdf】

AdaSpeech 2:非转录数据的自适应文语转换(2021)严等【pdf】

Grad-TTS:文本到语音的扩散概率模型(2021) Popov 等人【pdf】

塞凯丽,é。,Henter,G . e .,Beskow,j .,Gustafson,J. (2020)
自发语音合成中的呼吸和语音规划

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值