请注意谷歌的开源RPC框架grpc

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.

开源中国组织翻译的《gRPC 官方文档中文版》:https://doc.oschina.net/grpc

gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

服务接口定义示例:

messageHelloRequest{
stringgreeting=1;
}

messageHelloResponse{
stringreply=1;
}

serviceHelloService{
rpcSayHello(HelloRequest)returns(HelloResponse);
}

谷歌开源了 gRPC-Kotlin/JVM,让开发者可以在 Kotlin 项目中更方便地使用 gRPC,以更简单的方式构建可靠的网络连接服务。

gRPC 是谷歌开源的高性能、通用 RPC 框架,支持多种编程语言,包括 C++、Java、Objective-C、Python、Ruby、Go、C# 与 Node.js 等。gRPC 基于 Protocol Buffers,它面向移动和基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电且节省空间占用。

谷歌认为,将 gRPC 与世界上第二流行的 JVM 编程语言 Kotlin 结合,开发者可以构建从移动应用程序到云端微服务的一切。此项目构建在 gRPC 的 Java API 之上,提供了对 Kotlin 友好的 gRPC 类,支持 Kotlin 协程。

下面来看一个例子。首先需要一个 proto 定义,这是一个语言无关的服务接口定义:

message HelloRequest {
string name = 1;
}

message HelloReply {
string message = 1;
}

service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}

运行 gRPC Kotlin 生成器之后,能够以协程的形式实现服务:

private class HelloWorldService: GreeterCoroutineImplBase() {
override suspend fun sayHello(request: HelloRequest) = HelloReply
.newBuilder()
.setMessage("Hello ${request.name}")
.build()
}

并从客户端异步调用它:

val request = HelloRequest.newBuilder().setName(name).build()
val response = async { stub.sayHello(request) }
println("Received: ${response.await().message}")

协程非常适合用于异步编程,而 Kotlin 版本的 gRPC 则使它变得更容易。

开发者如果希望在自己的项目中使用 gRPC Kotlin,需要同时添加生成器和 grpc-java 配置。目前 gRPC Kotlin 仍处于测试阶段,初始版本为 0.1.1 版本。

无框架Android!推荐的十大基本模块

『 写在前头 』

Xposed框架可以说是玩转安卓手机的必备神器,各式各样的功能模块带给这个开源系统更多的玩法与可能性。如果说,获取Root权限的安卓手机仅仅是解开了“封印”,那么安装激活Xposed框架后才算是真正释放了Android的无限能量。

通过 Xposed 的模块,安卓手机能够实现超越常规的功能,你可以用模块来改变系统的界面,阻止全家桶应用的互链自启,再比如去除广告、虚拟GPS位置、调整分辨率……。总之,它的潜力不可估量。

『 十款必备Xposed模块推荐 』

Xposed 框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。具体如何安装使用就不再讲了,请自行百度查询。

Xposed 模块数量众多,今次我们来以功能区分为各位精心推荐十款必备模块。

▶省电必备丨阻止运行

安卓手机在续航上给人以不耐用的印象,多半是因为后台驻留太多的流氓应用,频繁唤醒、自启、推送消息所致。普通的省电查杀手段是奈何不了他们的,即便是绿色守护也不行。而这款名为「 阻止运行 」的模块有着更加直接干脆的查杀效果,必能还你一个干净清爽的后台。

▶去广告必备丨MinMinGuard

广告的存在可以理解,但毕竟惹人烦,无论是弹窗的、条幅的、还是视频里的插播广告,最好能有办法将它去无踪。你可以用 hosts 来解决,但这款模块毕竟是基于 Xposed 框架来实现的,理论上会有更显著的效果。

▶美化必备丨平式栏指示器

这是一款完全针对状态栏图标样式的美化模块,它的可定义项可以说非常丰富,针对「
时钟 」、「 WiFi 」、「 电池
」等状态栏元素,平式栏指示器支持修改的图标接近二十种。与此同时,它的图标可选样式也多到感人,单就一个WiFi信号样式就有近50种可选。并且颜色、位置、间距可实现微调,操纵方式简洁易懂。

▶抢红包必备丨微信红包【点我下载】、QQ红包

春节将至,又到了收发红包的季节。如有条件,请将这个模块默默地开启,不然你会错过几个亿的钱。使用的时候敬请低调一点,如果抢得太快太频繁,除了人际交往有点影响,你的账号没准还会被官方往小黑屋里关个几天。

▶看外文必备丨快译

这是一款能够不额外开窗口占用界面的翻译小模块,复制翻译,翻译接口为「 有道在线翻译 」。这款模块的流弊处在于体积极小,无界面,不占内存,无需安装其它翻译软件,仅16kb。在你看外文学编程的时候,遇到不明白的单词,只要复制即可实时翻译,兼顾了效率与省电效果。

▶防推送必备丨清爽通知栏

从购物网站应用到社交网络客户端,从各种无关广告再到各类无聊内容推送,我们的状态栏每天都忍受着这类信息的狂轰滥炸,实在让人烦不胜烦。为了达到勿扰的效果,我们要做通知栏的主人,该推送什么消息得由自己来做主,这款名为「
NotifyClean 」的模块能在这点上带来帮助。

▶搞机必备丨App Settings

Xposed框架上的一款神级模块,功能全面并且强大,每一个安卓搞机玩家绝对不可错过。它能帮你实现的功能非常多,通过修改应用的区域设置,可以独立地让其显示你想要的语言。此外,还能去除某些附属功能。进阶一点的,可以免除一些海外应用的地区限制,如果Google
Now、Pokemon Go等。此外,它还能管理应用的权限,设置它们的分辨率等,在此就不一一说明了。

▶ 穿越必备丨模拟位置(FakeLocation)

除了能让你在某些社交平台上装个小~逼~之外,通过模拟位置的功能还是能实现很多意想不到的效果。定位海外,让你实现位置穿越;借助数学方法,可以测算出QQ、微信附近的人的位置;必要的时候,通过假的定位告诉别人你已经在路上了。

▶ 二次元必备丨布卡黑魔法

布卡黑魔法是一款可以让布卡漫画在线看第三方漫画站资源的xposed模块工具。相信很多朋友都很怀念以前的布卡吧,现在这个模块可以让它接入多多猫(点我下载)的引擎从而焕发新生,集两个应用的优秀体验于一身。

▶ 装逼必备丨应用变量

应用变量这款模块原名「
型号伪装
」,正如其名,通过它你可以很方便地任意更改在用手机的型号,使得在社区圈里显示出你想要的尾巴,进而达到装逼的效果。模块应用内预设了多款机型的型号,但亦可随意定义。更流弊的是,它还能够伪装手机串号和
SIM 卡号,拿它干一些歹事也不是不可能。


▼相关阅读

  • 教你如何免Xposed框架实现后台“阻止运行”

  • Xposed 技巧:如何模拟苹果 3D Touch 功能

  • Xposed 框架技巧:教你如何 DIY 手机状态栏

  • 教你如何降低游戏的画面特效,提高流畅度

Vue、react和angular:我应该选择哪个框架?

本文对三个最流行的 JavaScript 框架进行了全面的比较:Vue、React 和 Angular,如果你是正在开发或者目前正在考虑使用这些流行框架之一来启动项目的开发人员,我们希望本文对你选择正确的解决方案能有所帮助。

本文最初发表在 Medium 博客,经原作者 inVerita 公司授权,InfoQ 中文站翻译并分享。

近几年 ,前端领域出现了两大玩家:Google 发布的 Angular、Facebook 开发的 JavaScript 库 React。在 2018 年,又有一个实力雄厚的玩家加入了这场竞争:Vue.js,它 很直白地表示出了自己 的豪心壮志——立志成为最受欢迎的 JavaScript 框架。

在深入了解这些流行框架的总体比较之前,让我们先看看它们的起源。

Vue、React 和 Angular 简史

Angular

Google 的一名员工 Misko Hevery 当时正在做一个副业项目,旨在简化构建 Web 应用程序的过程。他在 2010 年将解决方案作为开源项目发布,名为 AngularJS,并被一些 知名企业 积极使用。

几年后,由于 JavaScript 有了新的进展,团队被迫将 AngularJS 基于 TypeScript 重写 ,为了避免混淆,新框架名称去掉了“JS”。Angular 每年更新两次,上一次更新是 2020 年 2 月 6 日发布的 Angular 9。

React

在 JavaScript 框架中,React 一直处于领先地位,它最初是 Facebook 为满足其产品需求而开发的,并于 2013 年成功地向技术受众展示并开源。React 的精髓源于 Jordan Walke 创建的早期原型——Fax.js,该原型于 2011 年首次部署在 Facebook 的新闻源中。React 最新版本为 16.13.0,于 2020 年 2 月 26 日发布。

Vue.js

Google 前雇员 Evan You 在与 Angular 合作多年后,决定 自己 创建一个轻量级框架,其中将包含上述框架的最佳特性。 新框架 Vue.js 于 2014 年 2 月开源 ,从那时起,Vue.js 就获得了极高的人气。最新版本为 2.6 Macross ,于 2019 年 2 月 4 日发布。

框架流行度

Angular 和 React 是一对由来已久的对手。它们都是功能强大、最新、使用广泛的 JavaScript 框架,并且都面临着一个重大的变化:它们之间的竞争变成了 一场 流行度的较量。我们将通过四个主要指标来找出最流行的框架:NPM 趋势、Stack Overflow Survey、GitHub stars 和公开的职位招聘。

  1. 在 Node Package Manager 报告中,React 仍然是最流行的 JavaScript 框架。从 2018 年 12 月到 2020 年 7 月这段时间,它的年下载量大约是 Vue.js 的 5 倍,是 Angular 的 13 倍。

各框架的年下载量

  1. 根据 2019 年 Stack Overflow 开发人员调查结果,React 最受开发人员喜爱(74.5%)、其次是 Vue.js(73.6%),最后是 Angular.js(57.6%)。

开发人员 最喜欢的 Web 框架

  1. 第四次 JavaScript Risiing Stars 统计 了 GitHub 每年新增的星数,显示了惊人的统计数据:Vue.js 以 31.4k 星排名第一,React 以 22.4k 星排名第二,Angular.js 以 12k 星排名第四。
  2. 2020 年 7 月 8 日在 Indeed 招聘网站搜索的结果显示:在美国,React 有 43678 个招聘职位,Angular 有 10458 个招聘职位,而 Vue.js 仅有 1391 个招聘职位。

因此,我们可以 认为 ,React 在工作岗位方面是个赢家,在开发人员中的受欢迎程度经久不衰。尽管如此,我们也可以看到,由于 Vue.js 社区坚定的支持,Vue.js 与 React 的对立情绪越来越激烈。Angular 保持着稳定的中间地位,得到了来自开发商和雇主双方的积极反馈。

框架组件

框架的性能是由最有价值的部分——它的组件决定的。它们的工作流与接收输入数据的方式以及对数据的响应方式有关。

Angular

Angular 的组件命名为 directive(指令) , 它们是由 Angular 跟踪的 DOM 元素上的标记。 A ngular 将组件的 UI 部分作为 HTML 标签的属性 ,并将 UI 和 组件的 行为以 JavaScript 代码的形式分离开来。

React

与 Angular 相反,React 结合了 UI 和组件的行为。简单地说,同一部分 代码 负责 UI 元素的创建并控制其行为。

Vue.js

在 Vue.js 中,UI 和行为是组件的一部分。该框架也是高度可定制的,允许在脚本中结合 UI 和组件行为。

性能和框架大小

Angular

Angular 使用真实 DOM,因此它最适合用于内容不时更新的单页应用程序。这会使更新过程变得非常缓慢,并且在丢失流的情况下,将需要花费很长时间才能找出问题所在。值得庆幸的是,双向数据绑定过程将模型中所做的所有更改都以一种安全高效的方式复制到视图中。由于可用的特性范围很广,与 Vue 和 React 相比,应用程序要“重”得多(约 500KB),这会稍微降低性能。

React

与 Angular 相反,React 使用了虚拟 DOM,增强了需要定期 更新 内容的所有应用程序 (不论大小) 的性能。单向数据可以更好地控制项目。缺点可能是开发人员需要不断升级他们的技能,以适应 React 不断发展的特性。由于 React 没有提供 大量 的库,所以,它的大小比 Angular 要小得多( 只有 约 100KB)。

Vue.js

Vue 也使用虚拟 DOM,因此在项目中的更改不会正式对 DOM 产生影响。Vue 在这三者中,大小最小(大约 80KB),这大大提高了它的性能。

总之,考虑到性能,Vue 和 React 在开发易于维护和无 Bug 的 Web 应用程序更加方便。

对于正在考虑学习 新框架 的人来说,掌握一个新框架的过程 是否足够简单 非常重要。那么,在它们三个中,哪一个最适合学习呢?

学习曲线

Vue.js 可能是最容易学的 , 这主要有两个原因:

  1. 它不需要特殊的设置。首先,你只需将 Vue 库导入到 HTML 文件中,并添加一些 JS(对于较大的 Vue 项目)即可。
  2. 无需学习大型特殊语法。Vue 的用法基于 JavaScript 和 HTML,通过 v-for 之类的指令进行了增强,这些指令都很容易解释。

Angular 和 React 都需要更为复杂的项目设置。不过,安装设置的可用性简化了这项任务: create-react-app 、 Angular CLI 和 Vue CLI (用于更复杂的项目)。

要掌握 Angular 和 React,还需要学习相应的 TypeScript 或 JSX 语法。

其中 ,Angular 的学习曲线被认为比 React 要陡峭得多。Angular 是一个不断发展的复杂框架,为解决单个问题提供了多种选择。

React 也需要 开发者持续学习 ,因为它经常更新,但若有 初学者教程和基本的 JavaScript 知识,学习起来就会容易 得多 。主要困难在于 Redux 库。

应用案例

Angular

Angular 由 Google 开发,并在其 AdWords 应用程序中 大量 使用,以最大限度地提高性能。其他使用 Angular 的著名网站,我们可以列举如下:Guardian、Lego、Nike、PayPal 和 Weather.com。

React

React 最初是为 Facebook 设计的,现在仍被该公司积极用于创建各种产品 ,包括 Twitter、Instagram、Whatapp 和 WordPress 都 采用了这个框架。

Vue.js

与 Angular 和 React 不同,Vue 并没有强大的客户在其每个产品中实现它。不过,值得庆幸的是它的灵活性。它已经在这些流行品牌中得到了普及:9Gag、Nintendo、GitLab 和 Grammarly 等。

小结: Vue、React、Angular 的对照表

Vue、React 和 Angular 的对照表

我们希望本文对 Vue、React 和 Angular 的比较 能 对你有所帮助。

参考阅读:

https://medium.com/swlh/vue-vs-react-vs-angular-what-framework-would-you-choose-5d77a3680b0d

关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书!

角度与反应vs VUE:2021中应该选择哪一个框架

这篇文章是一份综合指南,可能是适合您的解决方案:Angular vs React vs Vue

就在几年前,开发人员还在争论他们是否应该在他们的项目中使用 Angular 和 React。但是在过去的几年中,我们看到了对 Vue.js 的第三个玩家的兴趣增长。

如果您是一名刚开始从事某个项目的开发人员并且无法决定使用哪个 JavaScript 框架,那么本指南应该可以帮助您做出决定。

在这里,我们将涵盖 Angular、Vue 和 React 的各个方面,以了解它们如何满足您的需求。这篇文章不仅仅是 Angular vs React vs Vue 的指南,而是旨在提供一个结构来帮助判断前端 JavaScript 框架的总体情况。如果明年有新框架问世,您将确切知道要查看哪些参数!

让我们开始吧:

目录:

  • 第 1 部分:简史这一切是如何开始的 | 许可证 | 人气 | 人才市场
  • 第 2 部分:社区与发展
  • 第 3 部分:迁移
  • 第 4 部分:使用框架大小和加载时间 | 组件 | 学习曲线
  • 谁是赢家?

第 1 部分:Vue 与 React 与 Angular 的简史

在我们进入技术细节之前,让我们先谈谈这些框架背后的历史——只是为了更好地理解它们的哲学和它们随着时间的推移而演变。

一切是如何开始的

由谷歌开发的Angular于 2010 年首次发布,使其成为最古老的。它是一个基于 TypeScript 的 JavaScript 框架。 2016 年 Angular 2 的发布发生了重大转变(并且从原来的名称 AngularJS 中删除了“JS”)。 Angular 2+ 被称为Angular。尽管 AngularJS(版本 1)仍在更新,但我们将重点讨论 Angular。最新的稳定版本是 Angular 11,它于 2020 年 11 月发布。

Vue也称为 Vue.js,是该组中最年轻的成员。它由前 Google 员工 Evan You 在 2014 年开发。在过去三年中,Vue 的受欢迎程度发生了重大变化,尽管它没有得到大公司的支持。当前的稳定版本是 3.0,于 2020 年 9 月发布(此后有一些小的增量版本)。Vue 的贡献者由 Patreon 支持。应该注意的是,Vue 3 目前在它自己的 GitHub 存储库中,并且已经转移到 TypeScript。

React由 Facebook 开发,最初于 2013 年发布。Facebook 在其产品(Facebook、Instagram 和 WhatsApp)中广泛使用 React。当前的稳定版本是 17.X,于 2020 年 10 月发布(此后有较小的增量更新)

以下是 Angular、React 和 Vue 的简短总结,包括它们的状态和历史

Angular

React

Vue

初始发行

2010年

2013年

2014年

官方网站

angular.io

reactjs.org

vuejs.org

当前版本

11

17.x

3.0.x

使用者

谷歌,维克斯

脸书、优步

阿里巴巴、GitLab

许可证

在使用开源框架之前,请确保通过其许可。有趣的是,所有三个框架都使用MIT 许可证,它对重用提供了有限的限制,即使在专有软件中也是如此。在使用任何框架或软件之前,请确保您了解许可证的含义。

人气

由于“angular”和“react”是常用词,因此很难从谷歌趋势中掌握它们的流行程度。尽管如此,他们受欢迎程度的一个很好的指标是他们的 GitHub 代码库获得的星数。2016 年年中,Vue 的星数突然发生了变化,最近,Vue 与 React 一起成为最受欢迎的框架之一。

Angular、React 和 Vue 的 GitHub 项目上的星数

让我们检查一下 Angular、React 和 Vue 的就业市场情况,这也是衡量受欢迎程度的一个很好的衡量标准:

Angular vs React vs Vue 的就业市场

表明就业市场趋势的最佳数据来源是各种就业委员会。

工作数量

Angular

React

Vue

领英

72,747

70,963

11,590

Indeed

15,141

14,595

1,810

SimpleHired

11,357

10,508

1,526

Dice

4,719

3,529

331

AngelList

2,350

4,383

419

Hired

13

9

0

Remote

1,069

1,136

166

从 2018 年底的趋势来看,需要 Angular 或 React 技能的工作数量大致相同,而 Vue 的数量仍然只是这个数字的一​小部分(大约 20%)。

如果您想获得更多最新的分析,您可以试试Google Trends 搜索,它分解了过去 12 个月React 工作Angular 工作Vue 工作的搜索趋势。数据嵌入如下:

如果您想查看您所在地区的求职趋势,Google 趋势还会按地理位置对其进行细分。

如果您严格从当前就业市场的角度来看,最好的选择是学习 Angular 或 React。但是,鉴于 Vue 在过去三年中越来越受欢迎,使用 Vue 的项目或采用 Vue 的新项目可能需要一些时间才能达到要求更多开发人员的成熟度。


第 2 部分:社区与发展

现在您已经熟悉了每个框架的历史和近期趋势,我们将通过社区来评估这些框架的发展。我们已经看到,对于所有框架,过去一年都定期发布增量版本,这表明开发正在全面展开。

让我们看看 Angular、React 和 Vue 的 GitHub 代码库统计数据(并注意 Vue 数字还包括单独的 Vue 3.0 存储库):

Angular

React

Vue

  • Obserer

3.2k

6.7k

6.3k

  • Star

70.9k

164k

200.8k

  • Fork

18.6k

32.9k

31.7k

  • Contributor

1,352

1,533

382

在比较 Vue 与 React 时,Vue 拥有大量的观察者、Star和Fork。这显示了 Vue 在用户中的受欢迎程度及其与 React 相比的价值。但是,Vue 的贡献者数量低于 Angular 和 React。

一种可能的解释是Vue 完全由开源社区驱动,而 Angular 和 React 有很大一部分 Google 和 Facebook 员工为存储库做出贡献

从统计数据来看,这三个项目都表现出显着的开发活动,而且未来肯定会继续——只是这些统计数据不能成为决定不使用其中任何一个的基础。

您需要考虑的另一个指标是 GitHub 的“Used By”标志,它需要由存储库作者启用。这显示了 GitHub 上有多少其他存储库依赖于该存储库。Angular 的 GitHub 存储库显示有 170 万用户,React 目前显示近 570 万用户,而 Vue 显示其两个存储库的总和超过 167,000。三个框架之间存在很大差异,但这主要是因为 Vue 是较新的框架,并且不能说明整体需求的全貌。


第 3 部分:迁移

当您使用您选择的框架时,您不必担心框架更新会出现并弄乱您的代码。尽管在大多数情况下,从一个版本到另一个版本,您不会遇到很多问题,但重要的是要随时掌握脉搏,因为某些更新可能更重要,并且需要进行调整以保持兼容性。

Angular计划每六个月进行一次重大更新。在任何主要 API 被弃用之前还有六个月的时间,这让您有两个发布周期(一年)的时间来进行必要的更改(如果有的话)。

当谈到 Angular 与 React 时,Facebook 表示稳定性对他们来说至关重要,因为 Twitter 和 Airbnb 等大公司都在使用 React。通过版本升级通常是 React 中最简单的,使用react-codemod 之类的脚本可以帮助您进行迁移。

在 Vue 3 文档的迁移部分,Vue 提到Vue 2 和 Vue 3 之间有很多相同之处,而如果您从 1.x 迁移到 2,则90% 的 API 是相同的。有一个Vue 2 到 Vue 1 迁移辅助工具可在控制台上运行以评估您的应用程序的状态。


第 4 部分:使用 Vue、Angular 和 React

这里有一些重要的特征需要查看,主要是整体大小和加载时间、可用组件和学习曲线。

大小和加载时间

库的大小不会成为一个重要的因素,因为缓存和缩小现在是非常标准的。尽管框架的大小之间可能存在显着差异(例如 Angular 是最大的),但与平均网页大小(根据最新数据约为 2MB)相比,它们仍然很小。此外,如果您使用流行的 CDN加载这些库,则用户很可能已将库加载到其本地系统中。

组件

组件是所有三个框架的组成部分,无论我们是在谈论Vue、React还是 Angular。组件通常会获得一个输入,并根据它改变行为。此行为更改通常表现为页面某些部分的 UI 更改。组件的使用使得代码的重用变得容易。组件可能是电子商务网站上的购物车或社交网络上的登录框。

Angular:

在 Angular 中,组件被称为指令。指令只是 DOM 元素上的标记,Angular 也可以跟踪和附加特定的行为。因此,Angular 将组件的 UI 部分分离为 HTML 标签的属性,并将它们的行为以 JavaScript 代码的形式分离。在查看 Angular 与 React 时,这就是它与众不同的地方。

React:

有趣的是,React 结合了组件的 UI 和行为。例如,这里是 在 React 中创建 hello world 组件的代码。在 React 中,代码的同一部分负责创建 UI 元素并决定其行为。

Vue:

在查看 Vue 与 React 时,在 Vue 中,UI 和行为也是组件的一部分,这让事情变得更加直观。此外,Vue 是高度可定制的,它允许您从脚本中组合 UI 和组件的行为。此外,您还可以 在 Vue 中使用预处理器而不是 CSS,这是一个很棒的功能。Vue 在与其他库(例如 Bootstrap )集成方面非常出色 。

学习曲线

那么学习这些框架有多难?

Angular:Angular有一个陡峭的学习曲线,因为它是一个完整的解决方案,掌握 Angular 需要你学习相关的概念,如 TypeScript 和 MVC。尽管学习 Angular 需要时间,但在了解前端的工作原理方面,投资会带来回报。

Reaact:React 提供了一份入门指南,应该可以帮助人们在大约一个小时内设置 React。该文档详尽而完整,并提供了 Stack Overflow 上已经存在的常见问题的解决方案。React 不是一个完整的框架,高级功能需要使用第三方库。这使得核心框架的学习曲线不那么陡峭,而是取决于您采用附加功能的路径。但是,学习使用 React 并不一定意味着您正在使用最佳实践。

Vue:Vue提供了更高的可定制性,因此比 Angular 或 React 更容易学习。此外,Vue 与 Angular 和 React 在它们的功能(例如组件的使用)方面存在重叠。因此,从两者中的任何一个过渡到 Vue 都是一个简单的选择。然而,Vue 的简单性和灵活性是一把双刃剑——它允许糟糕的代码,使其难以调试和测试。

尽管 Angular、React 和 Vue 的学习曲线很长,但它们在掌握后的用途是无限的。例如,您可以将 Angular 和 React与 WordPress 和 WooCommerce集成以创建渐进式 Web 应用程序。


Angular vs React vs Vue:谁是赢家?

在这篇文章的结尾,让我们回顾一下每个框架的特性来尝试回答这个问题:Angular vs React vs Vue:你应该选择哪一个?

Angular是最成熟的框架,在贡献者方面有很好的支持,并且是一个完整的包。然而,学习曲线很陡峭,Angular 的开发概念可能会让新开发人员望而却步。对于拥有大型团队和已经使用 TypeScript 的开发人员的公司来说,Angular 是一个不错的选择。

React已经足够成熟,并且拥有大量来自社区的贡献。它获得了广泛的认可。React 的就业市场非常好,这个框架的未来看起来很光明。对于刚开始使用前端 JavaScript 框架的人、初创公司和喜欢灵活性的开发人员来说,React 看起来是一个不错的选择。与其他框架无缝集成的能力为那些希望代码具有一定灵活性的人提供了很大的优势。

Vue是最新的舞台,没有大公司的支持。然而,作为 Angular 和 React 的强大竞争对手,它在过去几年中做得非常好,尤其是随着 Vue 3.0 的发布。这可能与阿里巴巴和百度等许多中国巨头选择 Vue 作为他们主要的前端 JavaScript 框架有关。如果你喜欢简单,但也喜欢灵活性,Vue 应该是你的选择。

Angular 与 React 与 Vue 之争的答案是没有绝对正确的选择,这是您可能预期的结论。

这些库中的每一个都有自己的优点和缺点。根据您正在处理的项目和您的个人要求,其中一个将比其他更合适。在决定之前做自己的研究总是很关键的,特别是如果你要从事商业冒险而不是个人项目。

你认为哪个框架是赢家——Angular vs React vs Vue?请在评论中告诉我们。

(本文由闻数起舞翻译自Shaumik Daityari的文章《Angular vs React vs Vue: Which Framework to Choose in 2021》,转载请注明出处,原文链接:https://www.codeinwp.com/blog/angular-vs-vue-vs-react/)

laravel是最佳PHP框架的14个原因

作者 | Manik

译者 | 苏本如,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

在开发应用程序时选择使用哪个框架,这将取决于很多因素。和其它任何应用程序框架一样,Laravel框架也有其优缺点。撇开那些令人憎恶的缺点不谈,这篇文章我们将把重点放在使用Laravel框架的优点上。在我开始讨论Laravel的神奇之处之前,我想先花点时间讨论一下为什么我们要使用框架来开发应用程序。而不使用已有的框架,自己开发构建一个应用程序所需一切的潜在风险是什么?

不使用框架来构建应用程序有什么问题?

为了理解在不使用框架的情况下开发一个应用程序的潜在风险,让我们假设,我们必须构建一个使用MVC(模型-视图-控制器)架构模式的应用程序。当你开始设置架构时,我们需要根据应用程序的结构,从很多种架构模式中做出合适的选择。当我想到如果我自己需要开发一套完整的应用程序体系架构时,我马上想到了几个问题。

首先,我应该从应用程序的哪个组件开始着手处理呢?是先安装所有的第三方依赖项和库吗?从应用程序的可扩展性来考虑,我应该使用什么样的模型类(model class)库来和数据库进行交互?是使用PDO类呢,还是有更好的选择?我将如何管理依赖注入?考虑到后期会有更多的开发人员在同一个应用程序上工作,我应该如何对这个体系结构做一个完整的记录?

这些问题看起来很难回答,但是我想告诉你这些仅仅是个开始。很明显,如果你不是一个熟悉MVC体系架构的编程者,那么这些问题本身对你来说都是新问题。如果你以前没有使用过任何框架,你可能从来没有问过这些问题。如果是这样的话,那么这个理由本身就足以让你采用Laravel框架进行应用程序开发。Laravel框架将为你处理所有这些低级的细节,并为你提供一个简洁和实用的架构模式。同时,Laravel框架将为你处理模型、视图和控制器之间的无缝交互。并且还将为你提供许多内置在框架中的不同功能,以便你可以专注于编写应用程序的业务逻辑。最终,你因为不必花费时间寻找这些低级问题的解决方法,而节省大量的时间和精力。

框架提供了一致性和灵活性

让我们试着想象一下这样一种情形:你正在开发一个庞大的应用程序,但是没有使用任何现成的框架或者使用自己构建的框架。当用户数量增加或需要添加更多功能时,你将需要更多的开发人员来开发和维护这个应用程序。在新开发人员入职期间,你除了向他们介绍你的开发团队需要遵循的软件开发的所有流程步骤和方法之外,你还必须向他们讲解你所构建的整个应用程序结构。

由于这个原因,新的开发人员必须通过一个高的学习曲线来理解你开发的新体系结构。但是如果你使用Laravel框架,这类问题将不复存在,因为这个框架会带给你应用程序开发的一致性。Laravel框架有详细的文档,新开发人员不必经历使用新框架的学习过程。因为你可以很容易地聘请到一个熟悉Laravel框架的开发人员,并能让他很快开始工作。

当一个团队使用标准化框架(比如Laravel)来构建应用程序时,向团队中添加其他开发人员就会变得很容易。这是因为:当你雇佣了一个熟悉Laravel框架的开发人员,他能够理解这些代码,因为所有代码都遵循相同的模式。

使用Laravel框架的好处

如果上面这些听起来已经很有趣,并且足以鼓励你在你开发下一个应用程序时使用框架,那么接下来让我分享一下Laravel框架相对于其它PHP框架所具有的一些优势。这些优势无疑使Laravel框架成为最佳PHP框架的主要竞争者之一。

1.开箱即用的用户身份验证

Laravel框架提供了开箱即用的用户身份验证功能。任何现代的web应用程序都需要用户身份验证,使用Laravel框架,你几乎不需要做任何事情就可以将它设置好。当你设置用户身份验证时,Laravel框架会创建所有重要的组件,如用户模型、注册和登录控制器,以及相应的视图。而且在将来,根据应用程序所需的业务逻辑,将这些组件扩展到新添加的功能上也是非常容易的。

除此之外,Laravel框架还提供了Socialite package(扩展包),它使你的应用程序能够使用各种社交网络(如Facebook, Google Plus和Twitter)对用户进行身份验证。要使它工作正常,你只需进行最低限度的配置。

2. 约定优于配置(也称作按约定编程)

Laravel框架同样采用“约定优于配置”的方法。这基本上意味着,如果遵循了不同组件的命名约定,就几乎不必关注配置工作。如果你遵循了命名约定,Laravel框架自身就会帮你处理许多低级的细节,而且一切都会神奇地开始工作。如果你一直使用传统的PHP编程,这在一开始可能会让您感到难以忍受。但一旦你尝到了甜头,你就再也不想回头了。

3.轻松使用的电子邮件功能

很难想象一个现代的应用程序会没有电子邮件功能。使用Laravel框架,实现电子邮件发送功能非常容易。除了SMTP和Php邮件功能外,Laravel框架还支持各种各样的电子邮件通知服务,如Mailgun,Mandrill,SparkPost,Amazon SES,SendMail等等。这些服务可以使你能够快速开始通过本地或基于云的服务发送邮件。你还可以使用Nexmo通过Slack和SMS发送通知。所有这些服务在Laravel框架中都是开箱即用的。

Laravel框架还在电子邮件模板中支持Markdown(译者注:Markdown是一个文本到HTML(text-to-HTML)的转换工具),它能够使你在很少的时间内完成电子邮件的创建工作。

4.Artisan命令

对我个人而言,Artisan命令行是Laravel框架提供的最简练和最有用的功能。Artisan是Laravel框架的命令行接口,它帮助开发人员使用命令行本身自动化许多任务。Artisan命令可以在应用程序本身中使用,开发人员也可以创建额外的Artisan命令。

你能够想到的所有常见任务,都能找到一个Artisan命令与之对应。例如,创建一个模型、创建一个控制器、创建一个数据库种子、迁移数据库等等。这个列表是无穷无尽的。我之所以说它“简练”,是因为你所要做的就是传递命令,剩下的工作全交给Laravel框架来处理。

5.“测试驱动开发”的测试自动化

Laravel框架自带对PHPUnit的支持,使得采用“测试驱动开发”模式的PHP应用程序的测试变得非常容易。为应用程序编写单元测试变得很简单,而且确保事情按照你希望的方式进行。

6.简洁的依赖注入

一旦你开始使用Laravel框架工作,你很快就会意识到Laravel框架是从Ruby on Rails和更多的函数式语言中获得的灵感,而不是从Java。这一点从Laravel框架处理依赖注入的方式就可以轻易地看出这一点。尽管实现依赖注入可以采取复杂的模式,但Laravel框架采取的做法与之相反,它提供了创建全局助手函数的简单方法。借助于全局函数和Façade静态代理,我们就可以在任何需要的地方轻松地实现依赖注入。

7.业务逻辑和显示代码的分离

Laravel遵循模型-视图-控制器(MVC)架构模式,将业务逻辑与视图分离。这种方法有很多优点。而要真正了解它优点,你需要了解什么是MVC模式,以及你的应用程序是否需要这样的体系架构。

8. Eloquent ORM(对象关系映射)实现

Eloquent是Laravel提供的ORM(对象关系映射)实现。更多信息可以参考维基百科中的链接(https://en.wikipedia.org/wiki/Object-relational_mapping)。Eloquent使得从数据库中获取数据变得非常容易。创建表之间的关系并从这些表中获取数据也变得很简单。Eloquent还允许你在表中创建各种连接,并提供许多帮助函数,使与数据库的交互变得非常简单。你几乎不必编写SQL查询语句或函数。因为有了Eloquent ORM,Laravel框架就可以为下面这些数据库提供开箱即用的支持:

  • MySQL

  • PostgreSQL

  • SQLite

  • SQL Server

你真是说对了,这基本上意味着只要你使用Eloquent,你就不必担心与上述任何数据库的兼容性。从一个数据库切换到另一个数据库也非常容易。现在试着想象一下这给你的应用程序带来的可扩展性,不妨让我用一个例子来解释这一点。假设你有一个应用程序,这个应用程序在开始时有一个很小的用户群。由于用户数量较小且应用程序处于初始阶段,因此你决定使用MySQL作为数据库。一段时间过后,你的应用程序的用户数量增长到了相当高的级别,现在你可能需要切换到SQL Server数据库。因为使用了Eloquent,这个切换现在变得非常简单,就像更改Laravel框架中的特定配置详细信息一样容易。

9.队列(Queue)和调度器(Scheduler)

在开发应用程序时,通常会有一些耗时的任务。这些任务需要推迟到稍后的时间执行,这样它们就不会给用户的流程造成阻塞。这类任务的一个完美例子可能是生成一个统计用户请求创建CSV文件的PDF报告。Laravel框架的队列服务提供了一个统一的API,用于将这些任务推迟到应用程序的稍后时间处理。

谈到Laravel框架的命令调度器,它是那些繁琐的定时任务(Cronjob)的完美替代品。在很多时候,开发人员必须为特定的任务设置定时作业。这种任务的一个完美例子是向所有订阅用户发送他们订阅的每周简讯(Newsletter)。为了设置这个定时作业,开发人员必须使用SSH命令登录到服务器并在操作系统级别设置这个定时作业。这在一段时间内会成为一个麻烦,因为这些定时作业不能成为GIT和其它版本控制系统管理的一部分。但是Laravel框架的命令调度器使用内置函数提供了一个干净的API来调度各种各样的任务。这样,你就不必使用SSH命令登录到服务器的终端,并且所有这些被调度的作业都成为代码的一部分而纳入版本控制系统管理的范围。

10.简洁的路由

Laravel框架处理路由的方式简单直观。有一个单一的web.php文件来处理所有的web路由。如果某些路由需要公共中间件,它们可以很容易地在Laravel中分组。

路由的一个完美的应用场景是:应用程序中的某些页面,在用户可以查看它们之前,这些页面需要用户身份验证。Laravel框架可以将所有这些页面分组,并且经过Auth中间件检查,以确保只有登录到系统的用户才能查看这些页面。Laravel框架还提供了一个简洁的路由模型绑定(route model binding),其中模型(model)可以绑定到路由。有了这个帮助,视图可以直接从路由本身返回,甚至不需要访问控制器。

11. Composer管理依赖关系

Laravel框架使用Composer管理依赖关系和自动加载。Composer可以帮助你安装Laravel扩展包,这使得依赖管理变得轻而易举。在任何时候,你都可以检查package.json文件来查看你的应用程序正在使用的所有依赖项。Composer还让你能够使用单个Composer命令更新依赖项。

12.Blade模板引擎

Blade是Laravel框架的模板引擎。Blade可以让你在分离视图和业务逻辑上领先一步。它能让你的视图代码保持非常干净。一旦你对MVC架构模式和Laravel对它的实现有了清楚的了解,你就会更加清楚地认识到Blade模板引擎的重要性。Blade还提供了模板继承,因此你可以将最近使用的模板划分为多个部分,并让其它视图文件继承这些部分。有了Blade的帮助,你就可以创建一些逻辑较小的视图部分,然后可以包含这些小的部分以形成完整的视图。

13.文档

这是一个有点灰色的区域。当我最初开始使用Laravel框架的时候,我在查找文档时确实遇到了问题。当时所有的一切都没有文档,但是在某个时刻我突然发现有些事情开始神奇地工作,那就是大家始遵循命名规范的那个时刻。现在,有一些API文档列出了Laravel框架中声明的每个类和方法。一旦你掌握了如何使用它,并且知道如何使用Laravel文档来为你的利益服务,我保证你不会再有任何抱怨。

14.活跃社区

Laravel确实有一个活跃的社区。当你遇到任何问题时,你都可以搜索,而且肯定会查到许多针对你的问题的StackOverflow帖子。除了在StackOverflow上有一个活跃的社区外,还有一个叫做Laracast的讨论论坛。你可以免费注册成为Laracast论坛和社区的一部分,那个社区现在非常活跃。

我认为这些优势足以让你对Laravel框架感到兴奋。尽管把它定义为完美肯定是夸大其词了,但我可以肯定的是,Laravel框架绝对是最好的PHP框架之一。

原文: https://hackernoon.com/14-reasons-why-Laravel-is-a-contender-for-the-best-php-framework-6h5f31rp

本文为 CSDN 翻译,转载请注明来源出处。

【END】

随着智能物联迅速的兴起,场景联动越来越普遍,作为敲门砖的连接服务该如何实现?

360 资深工程师深度揭秘 360 IoT 云平台连接服务的技术框架实现细节、物联网协议应用和多协议,多网络的落地实践以及连接服务未来的演进方向。

谷歌的开源NLP通用框架已经在20多篇最新论文中使用

【新智元导读】谷歌近日开源了一个强大的NLP深度学习框架Lingvo,侧重于语言相关任务的序列模型,如机器翻译、语音识别和语音合成。过去两年来,谷歌已经发表了几十篇使用Lingvo获得SOTA结果的论文。

近日,谷歌开源了一个内部 NLP 的秘密武器 ——Lingvo。

这是一个强大的 NLP 框架,已经在谷歌数十篇论文的许多任务中实现 SOTA 性能!

Lingvo 在世界语中意为 “语言”。这个命名暗指了 Lingvo 框架的根源 —— 它是使用 TensorFlow 开发的一个通用深度学习框架,侧重于语言相关任务的序列模型,如机器翻译、语音识别和语音合成。

Lingvo 框架在谷歌内部已经获得青睐,使用它的研究人员数量激增。过去两年来,谷歌已经发表了几十篇使用 Lingvo 获得 SOTA 结果的论文,未来还会有更多。

包括 2016 年机器翻译领域里程碑式的《谷歌神经机器翻译系统》论文 (Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation),也是使用 Lingvo。该研究开启了机器翻译的新篇章,宣告机器翻译正式从 IBM 的统计机器翻译模型 (PBMT,基于短语的机器翻译),过渡到了神经网络机器翻译模型。该系统使得机器翻译误差降低了 55%-85% 以上,极大地接近了普通人的翻译水平。

除了机器翻译之外,Lingvo 框架也被用于语音识别、语言理解、语音合成、语音 – 文本转写等任务。

谷歌列举了 26 篇使用 Lingvo 框架的 NLP 论文,发表于 ACL、EMNLP、ICASSP 等领域顶会,取得多个 SOTA 结果。全部论文见文末列表。

Lingvo 支持的架构包括传统的 RNN 序列模型、Transformer 模型以及包含 VAE 组件的模型,等等。

谷歌表示:“为了表明我们对研究界的支持并鼓励可重复的研究工作,我们公开了该框架的源代码,并开始发布我们论文中使用的模型。”

此外,谷歌还发布了一篇概述 Lingvo 设计的论文,并介绍了框架的各个部分,同时提供了展示框架功能的高级特性的示例。

相关论文:

https://arxiv.org/pdf/1902.08295.pdf

强悍的贡献者列表 ——91 位作者!

摘要

Lingvo 是一个 Tensorflow 框架,为协作式深度学习研究提供了一个完整的解决方案,特别侧重于 sequence-to-sequence 模型。Lingvo 模型由灵活且易于扩展的模块化构建块组成,实验配置集中且高度可定制。该框架直接支持分布式训练和量化推理,包含大量实用工具、辅助函数和最新研究思想的现有实现。论文概述了 Lingvo 的基础设计,并介绍了框架的各个部分,同时提供了展示框架功能的高级特性的示例。

1. 为协作研究设计、灵活、快速

Lingvo 框架概览:概述了如何实例化、训练和导出模型以进行评估和服务。

Lingvo 是在考虑协作研究的基础下构建的,它通过在不同任务之间共享公共层的实现来促进代码重用。此外,所有层都实现相同的公共接口,并以相同的方式布局。这不仅可以生成更清晰、更易于理解的代码,还可以非常简单地将其他人为其他任务所做的改进应用到自己的任务中。强制实现这种一致性的代价是需要更多的规则和样板,但是 Lingvo 试图将其最小化,以确保研究期间的快速迭代时间。

协作的另一个方面是共享可重现的结果。Lingvo 为检入模型超参数配置提供了一个集中的位置。这不仅可以记录重要的实验,还可以通过训练相同的模型,为其他人提供一种简单的方法来重现你的结果。

Lingvo 中的任务配置示例。每个实验的超参数都在它自己的类中配置,与构建网络的代码分开,并检入版本控制。

虽然 Lingvo 最初的重点是 NLP,但它本质上非常灵活,并且研究人员已经使用该框架成功地实现了图像分割和点云分类等任务的模型。它还支持 Distillation、GANs 和多任务模型。

同时,该框架不牺牲速度,并且具有优化的输入 pipeline 和快速分布式训练。

最后,Lingvo 的目的是实现简单生产,甚至有一条明确定义的为移动推理移植模型的路径。

2. 使用Lingvo的已发表论文列表

Translation:

The Best of Both Worlds: Combining Recent Advances in Neural Machine Translation. Mia X. Chen, Orhan Firat, Ankur Bapna, Melvin Johnson, Wolfgang Macherey, George Foster, Llion Jones, Mike Schuster, Noam Shazeer, Niki Parmar, Ashish Vaswani, Jakob Uszkoreit, Lukasz Kaiser, Zhifeng Chen, Yonghui Wu, and Macduff Hughes. ACL 2018.

Revisiting Character-Based Neural Machine Translation with Capacity and Compression. Colin Cherry, George Foster, Ankur Bapna, Orhan Firat, and Wolfgang Macherey. EMNLP 2018.

Training Deeper Neural Machine Translation Models with Transparent Attention. Ankur Bapna, Mia X. Chen, Orhan Firat, Yuan Cao and Yonghui Wu. EMNLP 2018.

Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation. Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V. Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun, Yuan Cao, Qin Gao, Klaus Macherey, Jeff Klingner, Apurva Shah, Melvin Johnson, Xiaobing Liu, Łukasz Kaiser, Stephan Gouws, Yoshikiyo Kato, Taku Kudo, Hideto Kazawa, Keith Stevens, George Kurian, Nishant Patil, Wei Wang, Cliff Young, Jason Smith, Jason Riesa, Alex Rudnick, Oriol Vinyals, Greg Corrado, Macduff Hughes, and Jeffrey Dean. Technical Report, 2016.

Speech Recognition:

A comparison of techniques for language model integration in encoder-decoder speech recognition.Shubham Toshniwal, Anjuli Kannan, Chung-Cheng Chiu, Yonghui Wu, Tara N. Sainath, Karen Livescu. IEEE SLT 2018.

Deep Context: End-to-End Contextual Speech Recognition.Golan Pundak, Tara N. Sainath, Rohit Prabhavalkar, Anjuli Kannan, Ding Zhao. IEEE SLT 2018.

Speech recognition for medical conversations.Chung-Cheng Chiu, Anshuman Tripathi, Katherine Chou, Chris Co, Navdeep Jaitly, Diana Jaunzeikare, Anjuli Kannan, Patrick Nguyen, Hasim Sak, Ananth Sankar, Justin Tansuwan, Nathan Wan, Yonghui Wu, and Xuedong Zhang. Interspeech 2018.

Compression of End-to-End Models. Ruoming Pang, Tara Sainath, Rohit Prabhavalkar, Suyog Gupta, Yonghui Wu, Shuyuan Zhang, and Chung-Cheng Chiu. Interspeech 2018.

Contextual Speech Recognition in End-to-End Neural Network Systems using Beam Search.Ian Williams, Anjuli Kannan, Petar Aleksic, David Rybach, and Tara N. Sainath. Interspeech 2018.

State-of-the-art Speech Recognition With Sequence-to-Sequence Models. Chung-Cheng Chiu, Tara N. Sainath, Yonghui Wu, Rohit Prabhavalkar, Patrick Nguyen, Zhifeng Chen, Anjuli Kannan, Ron J. Weiss, Kanishka Rao, Ekaterina Gonina, Navdeep Jaitly, Bo Li, Jan Chorowski, and Michiel Bacchiani. ICASSP 2018.

End-to-End Multilingual Speech Recognition using Encoder-Decoder Models. Shubham Toshniwal, Tara N. Sainath, Ron J. Weiss, Bo Li, Pedro Moreno, Eugene Weinstein, and Kanishka Rao. ICASSP 2018.

Multi-Dialect Speech Recognition With a Single Sequence-to-Sequence Model.Bo Li, Tara N. Sainath, Khe Chai Sim, Michiel Bacchiani, Eugene Weinstein, Patrick Nguyen, Zhifeng Chen, Yonghui Wu, and Kanishka Rao. ICASSP 2018.

Improving the Performance of Online Neural Transducer Models.Tara N. Sainath, Chung-Cheng Chiu, Rohit Prabhavalkar, Anjuli Kannan, Yonghui Wu, Patrick Nguyen, and Zhifeng Chen. ICASSP 2018.

Minimum Word Error Rate Training for Attention-based Sequence-to-Sequence Models.Rohit Prabhavalkar, Tara N. Sainath, Yonghui Wu, Patrick Nguyen, Zhifeng Chen, Chung-Cheng Chiu, and Anjuli Kannan. ICASSP 2018.

No Need for a Lexicon? Evaluating the Value of the Pronunciation Lexica in End-to-End Models.Tara N. Sainath, Rohit Prabhavalkar, Shankar Kumar, Seungji Lee, Anjuli Kannan, David Rybach, Vlad Schogol, Patrick Nguyen, Bo Li, Yonghui Wu, Zhifeng Chen, and Chung-Cheng Chiu. ICASSP 2018.

Learning hard alignments with variational inference. Dieterich Lawson, Chung-Cheng Chiu, George Tucker, Colin Raffel, Kevin Swersky, and Navdeep Jaitly. ICASSP 2018.

Monotonic Chunkwise Attention.Chung-Cheng Chiu, and Colin Raffel. ICLR 2018.

An Analysis of Incorporating an External Language Model into a Sequence-to-Sequence Model.Anjuli Kannan, Yonghui Wu, Patrick Nguyen, Tara N. Sainath, Zhifeng Chen, and Rohit Prabhavalkar. ICASSP 2018.

Language understanding

Semi-Supervised Learning for Information Extraction from Dialogue.Anjuli Kannan, Kai Chen, Diana Jaunzeikare, and Alvin Rajkomar. Interspeech 2018.

CaLcs: Continuously Approximating Longest Common Subsequence for Sequence Level Optimization.Semih Yavuz, Chung-Cheng Chiu, Patrick Nguyen, and Yonghui Wu. EMNLP 2018.

Speech synthesis

Hierarchical Generative Modeling for Controllable Speech Synthesis.Wei-Ning Hsu, Yu Zhang, Ron J. Weiss, Heiga Zen, Yonghui Wu, Yuxuan Wang, Yuan Cao, Ye Jia, Zhifeng Chen, Jonathan Shen, Patrick Nguyen, Ruoming Pang. Submitted to ICLR 2019.

Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis.Ye Jia, Yu Zhang, Ron J. Weiss, Quan Wang, Jonathan Shen, Fei Ren, Zhifeng Chen, Patrick Nguyen, Ruoming Pang, Ignacio Lopez Moreno, Yonghui Wu. NIPS 2018.

Natural TTS Synthesis By Conditioning WaveNet On Mel Spectrogram Predictions.Jonathan Shen, Ruoming Pang, Ron J. Weiss, Mike Schuster, Navdeep Jaitly, Zongheng Yang, Zhifeng Chen, Yu Zhang, Yuxuan Wang, RJ Skerry-Ryan, Rif A. Saurous, Yannis Agiomyrgiannakis, Yonghui Wu. ICASSP 2018.

On Using Backpropagation for Speech Texture Generation and Voice Conversion.Jan Chorowski, Ron J. Weiss, Rif A. Saurous, Samy Bengio. ICASSP 2018.

Speech-to-text translation

Leveraging weakly supervised data to improve end-to-end speech-to-text translation.Ye Jia, Melvin Johnson, Wolfgang Macherey, Ron J. Weiss, Yuan Cao, Chung-Cheng Chiu, Naveen Ari, Stella Laurenzo, Yonghui Wu. Submitted to ICASSP 2019.

Sequence-to-Sequence Models Can Directly Translate Foreign Speech. Ron J. Weiss, Jan Chorowski, Navdeep Jaitly, Yonghui Wu, and Zhifeng Chen. Interspeech 2017.

https://github.com/tensorflow/lingvo/blob/master/PUBLICATIONS.md

开源地址:

https://github.com/tensorflow/lingvo

Google heart框架如何帮助设计成果评估?

笔者前段时间了解到谷歌早在几年前便针对用户体验建立了名为 HEART 的追踪验证框架,好奇其内容是否对建立验证方案的方法论有助益,遂抽时间搜索了原外语文章,并进行了翻译和拆解。

01 摘要

越来越多的产品和服务被部署在 Web 上,这为大数据下评估用户体验带来了新的挑战和机遇。 Web 应用程序非常需要以用户为中心的度量指标,它可以用来度量关键目标的进展,并驱动产品决策。

在本文中,我们描述了以用户为中心的 HEART 框架指标,以及将产品目标映射到度量指标的过程。

我们还提供了 HEART 指标如何在兼顾数据驱动和以用户为中心的情况下帮助产品团队做出决策的实例。

框架和过程已经覆盖了足够多的我们公司产品,所以我们相信其他组织的团队也能使用或适应它们。 在大规模行为数据之下,我们也鼓励更多对度量指标的研究。

02 介绍

Web 技术的进步使更多的应用程序和服务基于 Web 打造,并愈加具备交互性质。

现在,用户可以“在云端”执行各种常见任务,包括那些以前仅限于本地客户端应用程序的任务(例如文字处理、编辑照片)。

对于用户体验专业人士来说,这种转变的一个关键意义是能够使用 Web服务器日志数据来大规模跟踪产品的使用情况。

通过附加的仪器,也可以通过不同的界面接口运行对照实验( A/B 测试)。 但是,从以用户为中心的角度来看,它们(不同界面)应该根据什么标准进行比较评估呢? 我们应该如何扩展我们熟悉的用户体验度量指标,这里面存在哪些新的机会?

在 CHI 社区,已经存在一种既可以在小范围内(在实验室中)也可以在大范围内(通过调查)测量态度数据(例如满意度)的既定实践。

然而,就行为数据而言,已有的测量方法大多是小规模的,并且实验中有部分信息是通过秒表和检查表收集,如有效性(任务完成率、错误率)和效率(任务执行时间)[参考13]。

CHI 研究中缺失的一个关键部分是基于大规模行为数据的用户体验指标。

Web 分析社区一直致力于将关注点从简单的页面点击数转移到关键的性能指标。 然而,该社区的主要动机仍然以业务为中心,而不是以用户为中心。

Web 分析包(此处大意应是指性能分析类包体)提供现成的度量解决方案可能过于通用化,而无法考量用户体验如何,或者过于特定在电子商务背景下应用,而难以对 Web 上的其他大量应用程序和交互起到帮助。

我们已经创建了一个框架和过程来定义大数据下的以用户为中心的度量指标,包括态度上的和行为上的。

我们从在一家大公司工作的经验中总结了这些,该公司的产品涵盖了广泛的类别(面向消费者和面向业务),而且产品几乎都是基于 Web 的,每个都有数百万用户。 我们发现这个框架和过程已经适用于我们公司足够多的产品,并且非常有效,所以我们相信其他组织的团队将能够成功地使用和适应它们。 我们也非常鼓励更多基于大规模行为数据背景下对度量指标的研究。

03 相关工作

近年来出现了许多工具来帮助跟踪和分析web站点和应用程序的指标——

  • 商业和免费的分析软件包[参考 5,11 ]提供现成的解决方案。
  • 现代的分布式系统 [参考 4,8 ] 和专门的编程语言 [例如参考 12 ] 使得大规模日志数据的自定义分析变得更加容易,Web 应用挖掘技术可根据网页访问者的行为 [参考 3 ] 对其进行细分。
  • 多个供应商支持用户调研的快速部署和分析,有些还提供用于大规模远程可用性测试或基准测试的软件 [例如参考 14 ]。
  • 在合理设计 A/B 测试实验和此类实验分析上,存在着大量的工作。在 AB 测试中,两个相似的用户群体被给予不同的用户界面,他们的反应可以被严谨的测量和比较 [例如参考 10 ]。

尽管取得了这些进展,但有效地使用这些工具仍然具有挑战性——

标准的 Web 分析指标可能过于通用,不适用于特定的产品目标或研究问题。可用数据的绝对数量可能是巨大的,因此有必要确定究竟要查找什么,以及什么行为该被作为结果来看待。

一些专家建议,最好的做法是关注少量的关键业务或用户目标,并使用指标来帮助跟踪实现这些目标的进展[参考2,9,10]。

我们也认同这一理念,但却发现这个理念很难应用。 因为产品团队并非可以一直在他们的目标上达成一致或清晰地阐述他们的目标,这使得定义相关的度量指标变得困难。

可以确定的是,这些度量不应该是独立的。 它们应该结合其他来源的研究结果(如可用性研究和现场研究[参考6,9])去分析,从而得到更好的决策[参考15]。

此外,它们主要用于已发布产品的评估,而不能替代早期或形成性用户研究。 我们试图创建一个结合大规模的态度和行为数据的框架来补充现有在我们公司使用的的用户体验研究方法(补充而非替代)。

04 PULSE 指标

最常用的大数据下的度量指标专注于产品的业务或技术方面,许多组织广泛使用它们(或类似的变体)来跟踪产品的总体运行状况。

我们将这些指标称为 PULSE 指标:页面浏览量(Page Views),正常运行时间(Uptime),延迟(Latency),七天活跃用户(Seven-day active users)(即上周至少使用一次该产品的独立用户数)和收入(Earnings)。

这些指标都非常重要,并且与用户体验有关。

例如,奔溃很多(正常运行时间短)或速度很慢(高延迟)的产品不太可能吸引用户。 一个电子商务网站,其购买流程太多,可能会减少收入。 具有出色用户体验的产品更有可能看到页面浏览量和独立用户增加。

但是,这些是非常底层的或间接的用户体验指标,因此在用于评估用户界面更改的影响时,它们是存在问题的。它们的解释也可能不准确。

例如,特定功能的页面浏览量增加既有可能是因为该功能是真正受欢迎的功能,也可能是因为界面设计得令人困惑不知如何使用,用户胡乱点击时产生的数据。短期内带来更多收入的修改可能会导致较差的用户体验,从长远来看会流失用户。

给定时间段内的独立用户数量(例如7天活跃用户)通常用作衡量用户体验的指标。 它可以衡量用户群的总体数量,但无法深入了解用户对产品的忠诚度,例如不知他们每个人在 7 天内的访问频率如何。 它也不能区分新用户和老用户。 从理论上讲,在最坏的情况下,如果用户群的周流失率达到 100% ,它的 7 天活跃用户数仍会增加。

05 HEART 指标

基于 PULSE 在度量用户体验质量和提供可操作的数据方面的缺陷,我们创建了一个名为 HEART 互补的度量框架: Happiness(幸福感)、Engagement(参与度)、Adoption(接受度)、Retention(留存率)和 Task success(任务完成率)。

这些是指标分类,团队可以从中定义特定的指标,用于跟踪目标实现的进度。

幸福感和任务成功的类别是从现有的用户体验度量中概括出来的:幸福包含满意度,任务成功包含有效性和效率。参与度、接受度和留存率是新的类别,大规模的行为数据让追踪这些新类别指标成为可能。

该框架源于我们与团队合作为他们的产品创建和跟踪以用户为中心的指标的经验。我们开始在我们所使用或建议的度量指标类型中看到通用性规律,并意识到将这些归纳到一个框架中会使这些原则更容易被其他团队记住和使用。

并不是所有场景都适合使用所有类别去度量,但是引用框架有助于明确地决定是否包含或排除特定的类别。

例如,对于面向企业端的产品来说,用户如果将产品作为其工作的一部分,参与度可能意义不大。在这种情况下,团队可能会选择更关注愉悦感或任务完成率。但是,在功能级别而不是整个产品级别上考虑用户参与率可能仍然是有意义的。

06 幸福感

用“幸福感”来描述的度量指标,本质上是一种态度指标。这些都与用户体验的主观方面有关,比如满意度、视觉吸引力、推荐意愿和易用性。使用一个通用的、设计良好的调查,可以随着时间的推移跟踪相同的度量指标,以查看所做更改的带来的变化。

例如,我们的网站有一个个性化的主页——iGoogle。团队通过每周产品内调查来跟踪许多指标,以了解更改和新特性的影响。在进行了一次重大的重新设计之后,他们发现他们的用户满意度指标在最初出现了下降。

(以7分李克特量表去调研。这里7分李克特量表层级对应完全同意,非常同意,同意,不一定,不同意,非常不同意,完全不同意,分别对应7、5、4、3、2、1分)

然而,随着时间的推移,这个指标恢复了,这表明用户厌恶改变可能是导致下降的原因,而一旦用户习惯了新的设计,他们就会喜欢它。有了这些信息,团队能够做出更有信心的决定来保持新的设计。

07 参与度

参与度是指用户对产品的投入程度。在度量环境中,这个术语通常是行为代指,例如在一段时间内交互的频率、强度或深度。

例如,每个用户每周访问的次数,或者每个用户每天上传的照片的数量。一般来说,每个用户的数据平均值作为一个参与度指标去评估会比取总数去评估更有用,因为总数的增加可能是更多用户参与的结果,而不是更多行为使用量导致的结果。

例如,与7天活跃用户数的PULSE指标(仅计算上一周内至少有多少用户访问过该产品的数量)相比,Gmail团队希望更多地了解其用户的参与程度。

考虑到日常工作中,用户会应定期检查其电子邮件帐户,因此我们选择的指标是在过去一周内访问该产品不少于五天的活跃用户的比率。 我们还发现,该比率的人群更可能长期留存下来,因此可以用作参与度的具体度量指标。

08 接受度和留存率

接受度和留存率指标可用于更深入地了解给定时间段内(例如,为期7天的活跃用户)独立用户的数量,从而解决将新用户与现有用户区分开的问题。接受度指标跟踪给定时间段内有多少新用户开始使用产品(例如,最近7天创建的帐户数),留存率指标跟踪给定时间段内存在的用户在一些时间段后仍存在(例如,给定一周中7天活跃用户在 3 个月后仍处于7天活跃用户的比率)。

怎么才算是“使用”产品会随着产品的性质和目标不同而有所不同。在某些情况下,仅访问其网站可能就算是“使用”。在其他情况下,您可能会仅在访问者成功完成关键任务(例如创建帐户)时才算是使用了产品。像参与度一样,留存率也可以在不同的时间段内测量。对于某些产品,您可能希望查看周留存率,而对于其他产品,月留存率或 90 天可能更合适。

接受度和留存率对于新产品和功能或正在重设计的产品特别有用。对于较成熟的产品,除季节性变化或外部事件外,它们趋于稳定。例如,在 2008 年 9 月股市崩溃期间,Google 财经浏览量和7天活跃用户数均激增。

但是,这些指标并未表明激增是由对危机感兴趣的新用户驱动还是现有用户对投资进行了恐慌检查。 不知道谁在进行更多访问,就很难知道是否或如何更改站点。 我们研究了接受度和留存率指标,以区分这些用户类型,并研究了新用户选择继续使用该网站的比率。 该团队能够使用此信息更好地了解由事件驱动的流量高峰带来的机会。

09 任务成功率

最后,“任务成功”类别涵盖了用户体验的几种传统行为指标,例如效率(例如完成任务的时间),有效性(例如完成任务的百分比)和错误率。大规模测量这些数据的一种方法是通过远程可用性或基准研究来为用户分配特定任务。基于网站的特性,使用 Web 服务器日志文件数据,可能很难知道用户试图完成哪个任务。如果存在用于特定任务的最佳路径(例如,多步骤注册过程),则可以衡量用户对其的跟踪程度[参考7]。

例如,Google Maps曾经有两种不同类型的搜索框:一个是用于本地搜索的双盒,用户可以在其中分别输入“ what”和“ where”方面(例如[pizza] [nyc]),另一个是搜索框处理各种搜索(包括本地搜索,例如[pizza nyc]或[nyc pizza])。

团队认为单盒方法最简单,最有效,因此,在 A/B 测试中,他们尝试了仅提供单盒的版本。他们比较了两种版本的错误率,发现处于单框状态的用户能够成功地调整其搜索策略。这向团队证明,他们可以为所有用户移除双框。

10 目标–信号–指标

无论以用户为中心的度量指标如何,除非它与目标明确相关,否则在实践中不太可能有用,并且可用于跟踪实现该目标的进度。 我们开发了一个简单的过程,该过程使团队逐步阐明产品或功能的目标,然后识别表明成功的信号,最后构建要在仪表板上跟踪的特定指标。

目标

第一步是确定产品或功能的目标,尤其是在用户体验方面。 用户需要完成哪些任务? 重新设计试图实现什么? 使用 HEART 框架来提示目标(例如,吸引新用户还是鼓励现有用户更深入参与更重要?)。 以下是我们给的一些较为有益的建议:

  • 不同的团队成员可能会对项目目标有分歧。 这个过程提供了一个很好的机会来收集所有不同的想法并努力达成共识(并为选定的指标提供支持)。
  • 特定项目或功能成功的目标可能与整个产品的目标不同。
  • 在此阶段,不用为能否可以找到相关的信号或指标而担忧分心。

信号

接下来,考虑目标的成功或失败如何在用户行为或态度中体现出来。 哪些动作将表明目标已实现? 什么样的感觉或感知与成功或失败相关?

在此阶段,您应该考虑这些信号的数据表现是什么, 例如,对于基于日志的行为信号,当前是否记录了相关操作,或者是否可能记录? 你要如何收集态度反馈,可以定期部署调查吗? 日志和调查是我们最常使用的两个信号源,但还有其他可能性(例如,使用评审团来进行评级)。 以下是我们的一些建议:

  • 选择对目标敏感且特定服务于目标的信号——这个信号仅在用户体验更好或更差时会随着变化,而不因其他无关的原因而改变。
  • 有时候,失败比成功更容易识别(例如,放弃任务,“撤消”事件[参考1],沮丧)。

指标

最后,考虑如何将这些信号转换为特定指标,以适合随时间推移在数据板上进行跟踪。 以下是一些建议:

  • 原始数据将随着用户群的增长而增加,需要进行规范化; 单用户的比率,百分比或平均值通常会更有用。
  • 在确保基于Web日志的度量指标的准确性方面存在许多挑战,例如从自动来源(例如,爬网程序,垃圾邮件发送者)中过滤流量,以及确保记录所有重要的用户操作(在默认情况下可能不会发生,特别是在AJAX或基于flash的应用程序中。)
  • 若能将您的产品与其他产品进行比较(竞品分析),则可能需要追踪那些产品建立的标准所使用的额外指标。

11 结语

我们已经花费了数年的时间来研究大数据背景下以用户为中心的产品指标的问题。 这导致我们开发了 HEART 框架和目标-信号-指标流程,我们将其应用于 Google 各个领域的 20 多种不同的产品和项目。

我们在本文中描述了几个示例,这些示例说明了所得指标如何帮助产品团队做出以数据为驱动力和以用户为中心的决策。

我们还发现框架和流程对团队讨论的聚焦更加有帮助。 它们已经推广到我们公司自己的产品中,足以使我们相信其他组织中的团队将能够成功地使用或适应它们。

我们已经对框架和流程进行了一年多的微调,但每个框架的核心都保持稳定,并且框架的类别足够全面,可便可以适应新的指标概念。

由于大规模行为指标相对较新,因此我们希望看到更多有关此主题的 CHI 研究,例如,确定每个类别中的哪些指标能够最准确地反映用户体验质量。

12 快速总结

(1)本文旨在通过建立 HEART 框架,并成立目标—信号—指标的映射方式来解决设计决策迭代科学性的问题。这个框架的成立基础是大数据+自定义指标+周期性追踪。

(2)HEART 的框架主要分别是 Happyness(幸福感)、Adoption(接受度)、Engagement(参与度)、Retention(留存率)和 Task Sussess(任务成功率)。其中简易区别如下:

  • Happyness 和 Task sussess 是贯穿所有产品时期的数据指标;
  • Engagement 是成长期、成熟期更应该追踪的可以用于区分核心用户的指标;
  • Adoption 和 Retention 主要是探索期和成长期还有转型期/重设计时期主要追踪的指标(这两个指标在成熟期会倾向于维稳)。

(3)HEART 的数据指标的关键点是大数据周期性的迭代追踪,部分指标在目前市场情况下稍显理想化。

(4)框架应用关键点在于目标——信号——指标的映射,也就是以终为始的思维。其中信号主要围绕什么样的用户态度或行为会表明目标成败的角度去构思,并且该态度或行为变化应仅受目标成败的影响。

致谢

感谢 Aaron Sedley,Geoff Davis 和 Melanie Kellar 为 HEART 做出的贡献,以及 Patrick Patrick 的支持。

参考资料

(此部分翻译有些链接失灵,请直接谷歌关键词)

  1. Akers,D.等人 (2009)撤消和擦除事件作为可用性问题的指示器。 CHI 2009年,ACM出版社,第659-668页。
  2. Burby,J.和Atchison,S.(2007). ActionableWebAnalytics. 印第安纳波利斯:威利出版公司
  3. Chi,E. 等人 (2002). LumberJack:Web用户流量组成的智能发现和分析。 WebKDD 2002 Proc,ACM Press,第1-15页。
  4. Dean,J.和Ghemawat,S.(2008). MapReduce:大型集群上的简化数据处理。 ACM的通讯,51(1),第107-113页。
  5. GoogleAnalytics:https://www.google.com/analytics
  6. Grimes,C.etal(2007). 仅查询日志还不够, WWW 07查询日志分析研讨会的程序:https://querylogs2007.webir.org
  7. Gwizdka,J. &Spence,I. (2007年)Web导航中损失和成功的隐式度量。 与计算机进行交互19(3),第357-369页。
  8. Hadoop:https://hadoop.apache.org/core
  9. Kaushik,A.(2007). WebAnalytics:AnHouraDay. 印第安纳波利斯:威利出版公司
  10. Kohavi,R.等 (2007). 网络上的受控实验实用指南。 KDD 07,ACM Press,第959-967页。
  11. Omniture:https://www.omniture.com
  12. Pike,R.等 (2005). 解释数据:使用Sawzall进行并行分析。 科学程序设计(13),第277-298页。
  13. Tullis,T.&Albert,W.(2008年). 衡量用户体验。 伯灵顿:摩根考夫曼。
  14. UserZoom:https://www.userzoom.com
  15. Weischedel,B.和Huizingh,E.(2006年). 使用Web指标进行网站优化:一个案例研究。 ICEC 06,ACM Press,第463-470页。

注:

(1)翻译目的是共享学习,有疑惑或翻译错误请联系 Dreamy 的邮箱 1163940428@qq.com 。键盘侠勿扰,和谐生活。

(2)局部翻译结合原文与中式术语修改表述,让其更易于理解。

(3)若侵权请联系译者删除文章。若想转发也请附上译者信息(便于甄误)。

原文作者:克里·罗登,希拉里·哈金森,辛孚(原Kerry Rodden, Hilary Hutchinson, and Xin Fu)

原文标题:《大数据下评估用户体验: Web 应用程序中以用户为中心的指标》

原文地址: https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/36299.pdf、

编译作者:水水;博客(搁置 1.5 年重新捡起,没啥几篇破文章):https://my.cgsdream.org/

本文由 @水水 翻译发布于人人都是产品经理,未经作者许可,禁止转载。

题图来自Unsplash,基于CC0协议。

除了attgan,Google还推出了一个新的框架,用于生成文本到图像的Trec

【新智元导读】谷歌研究人员推出新框架 TRECS,生成的图像更逼真,更符合文字的描述。

近年来,基于生成对抗性网络(GAN)的深层神经网络已经大幅提高了端到端可训练的照片式文本到图像的生成结果。许多方法也使用中间场景图(intermediate scene graph)表示来改进图像合成的效果。

通过基于对话交互的方法允许用户提供指令来逐步改进和调整生成的场景:通过指定背景中对象的相对位置,为用户提供了更大的控制权。然而,这种方法所使用的语言是有限制的,所产生的图像仅限于3D合成可视化或者卡通。

本月初,OpenAI官宣了一个基于Transformer的语言模型DALL-E,使用了GPT-3的120亿参数版本,引起了不小的轰动。

根据文字提示,DALL-E生成的图像可以像在现实世界中拍摄的一样。

DALL-E同时接收文本和图像作为单一数据流,包含多达1280个token,并使用最大似然估计来进行训练,以一个接一个地生成所有的token。这个训练过程不仅允许DALL-E可以从头开始生成图像,而且还可以重新生成现有图像的任何矩形区域,与文本提示内容基本一致。

谷歌当然不甘落后。

最近,谷歌研究院的成员们发表了一篇新论文:以细粒度用户注意力为基础的文本到图像生成.

作者在论文中提出了一个新的框架:Tag-Retrieve-Compose Synthesize system (TReCS)。该方法通过改进语言对图像元素的唤醒方式和痕迹对图像元素位置的告知方式,显著提高了图像生成过程。该系统使用了超过250亿个样本来进行训练,并有可能处理103种语言。

这篇论文的主要贡献在于:

1.第一次展示了在非常困难的文本到图像合成任务中的能力(与之前关于更短的文本任务相比)。

2.提出了TRECS,这是一种序列生成模型,它使用最先进的语言和视觉技术生成与语言和空间鼠标轨迹一致的高质量图像。

3.进行了自动和人工评估,以证明TRECS生成的图像质量比现有技术有所提高。通过广泛的研究,确定了TRECS管道的关键组成部分,这对于基于用户注意力的文本到图像生成任务至关重要。

具体效果如下:

或是这样:

TRECS的亮点在于可以同时利用文本和鼠标痕迹。相比对于其他策略,尤其是那些需要场景图的策略,说话时用鼠标指着是一种更自然的方式,供用户在图像合成过程中指示其意图。

大致流程如下:

1.新的框架利用可控的鼠标轨迹作为细粒度的视觉基础来生成给定用户叙述的高质量图像,标记器用于预测短语中每个单词的对象标记。

2. 文本到图像的双重编码器用语义相关的mask掩码来检索图像。对于每个跟踪序列,选择一个mask来最大化空间重叠,克服了真实文本到对象的信息和更好的描述。

3. 选定的mask按照跟踪顺序组合,并为背景和前景对象分别绘制画布。前景掩码被置于背景掩码之上,以创建一个完整的场景分割。

4. 最后,将整个分割过程输入到掩码到图像的转换模型中,合成出真实感图像。

在评价方面,无论是自动判断还是人工评估,该系统都优于目前 SOTA 的文本图像生成技术。从日常语言中翻译出来的杂乱的叙事文本中生成真实可控的照片,显示了这种方法的可行性。同时TReCS 系统也解释了冗长而复杂的文本描述来进行文本-图像生成的复杂性。实验结果表明,该方法可以有效地生成真实感强的文本图像。

目前该方法还存在一定的限制,即:缺乏合适的评价指标来定量测量生成的图像的质量。现有的度量方法不能合理地反映基本真实图像和机器生成的真实图像之间的语义相似性。

不过,在未来的几年里,这个想法或许可以用来支持各种应用程序,并提供一个友好的人机界面。例如,可以帮助艺术家创建原型,从机器生成的照片中获得洞察力,并生成逼真的图像。此外,它可以用来设计 human-in-the-loop 的评价系统,以优化网络。

论文原文链接:

https://arxiv.org/pdf/2011.03775.pdf

谷歌的开源NLP通用框架已被20多篇最新论文引用

【新智元导读】谷歌近日开源了一个强大的NLP深度学习框架Lingvo,侧重于语言相关任务的序列模型,如机器翻译、语音识别和语音合成。过去两年来,谷歌已经发表了几十篇使用Lingvo获得SOTA结果的论文。

近日,谷歌开源了一个内部 NLP 的秘密武器 ——Lingvo

这是一个强大的 NLP 框架,已经在谷歌数十篇论文的许多任务中实现 SOTA 性能!

Lingvo 在世界语中意为 “语言”。这个命名暗指了 Lingvo 框架的根源 —— 它是使用 TensorFlow 开发的一个通用深度学习框架,侧重于语言相关任务的序列模型,如机器翻译、语音识别和语音合成。

Lingvo 框架在谷歌内部已经获得青睐,使用它的研究人员数量激增。过去两年来,谷歌已经发表了几十篇使用 Lingvo 获得 SOTA 结果的论文,未来还会有更多。

包括 2016 年机器翻译领域里程碑式的《谷歌神经机器翻译系统》论文 (Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation),也是使用 Lingvo。该研究开启了机器翻译的新篇章,宣告机器翻译正式从 IBM 的统计机器翻译模型 (PBMT,基于短语的机器翻译),过渡到了神经网络机器翻译模型。该系统使得机器翻译误差降低了 55%-85% 以上,极大地接近了普通人的翻译水平。

除了机器翻译之外,Lingvo 框架也被用于语音识别、语言理解、语音合成、语音 – 文本转写等任务。

谷歌列举了 26 篇使用 Lingvo 框架的 NLP 论文,发表于 ACL、EMNLP、ICASSP 等领域顶会,取得多个 SOTA 结果。全部论文见文末列表。

Lingvo 支持的架构包括传统的 RNN 序列模型、Transformer 模型以及包含 VAE 组件的模型,等等。

谷歌表示:“为了表明我们对研究界的支持并鼓励可重复的研究工作,我们公开了该框架的源代码,并开始发布我们论文中使用的模型。”

此外,谷歌还发布了一篇概述 Lingvo 设计的论文,并介绍了框架的各个部分,同时提供了展示框架功能的高级特性的示例。

相关论文:

https://arxiv.org/pdf/1902.08295.pdf

强悍的贡献者列表 ——91 位作者!

摘要

Lingvo 是一个 Tensorflow 框架,为协作式深度学习研究提供了一个完整的解决方案,特别侧重于 sequence-to-sequence 模型。Lingvo 模型由灵活且易于扩展的模块化构建块组成,实验配置集中且高度可定制。该框架直接支持分布式训练和量化推理,包含大量实用工具、辅助函数和最新研究思想的现有实现。论文概述了 Lingvo 的基础设计,并介绍了框架的各个部分,同时提供了展示框架功能的高级特性的示例。

为协作研究设计、灵活、快速

Lingvo 框架概览:概述了如何实例化、训练和导出模型以进行评估和服务。

Lingvo 是在考虑协作研究的基础下构建的,它通过在不同任务之间共享公共层的实现来促进代码重用。此外,所有层都实现相同的公共接口,并以相同的方式布局。这不仅可以生成更清晰、更易于理解的代码,还可以非常简单地将其他人为其他任务所做的改进应用到自己的任务中。强制实现这种一致性的代价是需要更多的规则和样板,但是 Lingvo 试图将其最小化,以确保研究期间的快速迭代时间。

协作的另一个方面是共享可重现的结果。Lingvo 为检入模型超参数配置提供了一个集中的位置。这不仅可以记录重要的实验,还可以通过训练相同的模型,为其他人提供一种简单的方法来重现你的结果。

Lingvo 中的任务配置示例。每个实验的超参数都在它自己的类中配置,与构建网络的代码分开,并检入版本控制。

虽然 Lingvo 最初的重点是 NLP,但它本质上非常灵活,并且研究人员已经使用该框架成功地实现了图像分割和点云分类等任务的模型。它还支持 Distillation、GANs 和多任务模型

同时,该框架不牺牲速度,并且具有优化的输入 pipeline 和快速分布式训练。

最后,Lingvo 的目的是实现简单生产,甚至有一条明确定义的为移动推理移植模型的路径。

使用Lingvo的已发表论文列表

Translation:

The Best of Both Worlds: Combining Recent Advances in Neural Machine Translation. Mia X. Chen, Orhan Firat, Ankur Bapna, Melvin Johnson, Wolfgang Macherey, George Foster, Llion Jones, Mike Schuster, Noam Shazeer, Niki Parmar, Ashish Vaswani, Jakob Uszkoreit, Lukasz Kaiser, Zhifeng Chen, Yonghui Wu, and Macduff Hughes. ACL 2018.

Revisiting Character-Based Neural Machine Translation with Capacity and Compression. Colin Cherry, George Foster, Ankur Bapna, Orhan Firat, and Wolfgang Macherey. EMNLP 2018.

Training Deeper Neural Machine Translation Models with Transparent Attention. Ankur Bapna, Mia X. Chen, Orhan Firat, Yuan Cao and Yonghui Wu. EMNLP 2018.

Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation. Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V. Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun, Yuan Cao, Qin Gao, Klaus Macherey, Jeff Klingner, Apurva Shah, Melvin Johnson, Xiaobing Liu, Łukasz Kaiser, Stephan Gouws, Yoshikiyo Kato, Taku Kudo, Hideto Kazawa, Keith Stevens, George Kurian, Nishant Patil, Wei Wang, Cliff Young, Jason Smith, Jason Riesa, Alex Rudnick, Oriol Vinyals, Greg Corrado, Macduff Hughes, and Jeffrey Dean. Technical Report, 2016.

Speech Recognition:

A comparison of techniques for language model integration in encoder-decoder speech recognition.Shubham Toshniwal, Anjuli Kannan, Chung-Cheng Chiu, Yonghui Wu, Tara N. Sainath, Karen Livescu. IEEE SLT 2018.

Deep Context: End-to-End Contextual Speech Recognition.Golan Pundak, Tara N. Sainath, Rohit Prabhavalkar, Anjuli Kannan, Ding Zhao. IEEE SLT 2018.

Speech recognition for medical conversations.Chung-Cheng Chiu, Anshuman Tripathi, Katherine Chou, Chris Co, Navdeep Jaitly, Diana Jaunzeikare, Anjuli Kannan, Patrick Nguyen, Hasim Sak, Ananth Sankar, Justin Tansuwan, Nathan Wan, Yonghui Wu, and Xuedong Zhang. Interspeech 2018.

Compression of End-to-End Models. Ruoming Pang, Tara Sainath, Rohit Prabhavalkar, Suyog Gupta, Yonghui Wu, Shuyuan Zhang, and Chung-Cheng Chiu. Interspeech 2018.

Contextual Speech Recognition in End-to-End Neural Network Systems using Beam Search.Ian Williams, Anjuli Kannan, Petar Aleksic, David Rybach, and Tara N. Sainath. Interspeech 2018.

State-of-the-art Speech Recognition With Sequence-to-Sequence Models. Chung-Cheng Chiu, Tara N. Sainath, Yonghui Wu, Rohit Prabhavalkar, Patrick Nguyen, Zhifeng Chen, Anjuli Kannan, Ron J. Weiss, Kanishka Rao, Ekaterina Gonina, Navdeep Jaitly, Bo Li, Jan Chorowski, and Michiel Bacchiani. ICASSP 2018.

End-to-End Multilingual Speech Recognition using Encoder-Decoder Models. Shubham Toshniwal, Tara N. Sainath, Ron J. Weiss, Bo Li, Pedro Moreno, Eugene Weinstein, and Kanishka Rao. ICASSP 2018.

Multi-Dialect Speech Recognition With a Single Sequence-to-Sequence Model.Bo Li, Tara N. Sainath, Khe Chai Sim, Michiel Bacchiani, Eugene Weinstein, Patrick Nguyen, Zhifeng Chen, Yonghui Wu, and Kanishka Rao. ICASSP 2018.

Improving the Performance of Online Neural Transducer Models.Tara N. Sainath, Chung-Cheng Chiu, Rohit Prabhavalkar, Anjuli Kannan, Yonghui Wu, Patrick Nguyen, and Zhifeng Chen. ICASSP 2018.

Minimum Word Error Rate Training for Attention-based Sequence-to-Sequence Models.Rohit Prabhavalkar, Tara N. Sainath, Yonghui Wu, Patrick Nguyen, Zhifeng Chen, Chung-Cheng Chiu, and Anjuli Kannan. ICASSP 2018.

No Need for a Lexicon? Evaluating the Value of the Pronunciation Lexica in End-to-End Models.Tara N. Sainath, Rohit Prabhavalkar, Shankar Kumar, Seungji Lee, Anjuli Kannan, David Rybach, Vlad Schogol, Patrick Nguyen, Bo Li, Yonghui Wu, Zhifeng Chen, and Chung-Cheng Chiu. ICASSP 2018.

Learning hard alignments with variational inference. Dieterich Lawson, Chung-Cheng Chiu, George Tucker, Colin Raffel, Kevin Swersky, and Navdeep Jaitly. ICASSP 2018.

Monotonic Chunkwise Attention.Chung-Cheng Chiu, and Colin Raffel. ICLR 2018.

An Analysis of Incorporating an External Language Model into a Sequence-to-Sequence Model.Anjuli Kannan, Yonghui Wu, Patrick Nguyen, Tara N. Sainath, Zhifeng Chen, and Rohit Prabhavalkar. ICASSP 2018.

Language understanding

Semi-Supervised Learning for Information Extraction from Dialogue.Anjuli Kannan, Kai Chen, Diana Jaunzeikare, and Alvin Rajkomar. Interspeech 2018.

CaLcs: Continuously Approximating Longest Common Subsequence for Sequence Level Optimization.Semih Yavuz, Chung-Cheng Chiu, Patrick Nguyen, and Yonghui Wu. EMNLP 2018.

Speech synthesis

Hierarchical Generative Modeling for Controllable Speech Synthesis.Wei-Ning Hsu, Yu Zhang, Ron J. Weiss, Heiga Zen, Yonghui Wu, Yuxuan Wang, Yuan Cao, Ye Jia, Zhifeng Chen, Jonathan Shen, Patrick Nguyen, Ruoming Pang. Submitted to ICLR 2019.

Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis.Ye Jia, Yu Zhang, Ron J. Weiss, Quan Wang, Jonathan Shen, Fei Ren, Zhifeng Chen, Patrick Nguyen, Ruoming Pang, Ignacio Lopez Moreno, Yonghui Wu. NIPS 2018.

Natural TTS Synthesis By Conditioning WaveNet On Mel Spectrogram Predictions.Jonathan Shen, Ruoming Pang, Ron J. Weiss, Mike Schuster, Navdeep Jaitly, Zongheng Yang, Zhifeng Chen, Yu Zhang, Yuxuan Wang, RJ Skerry-Ryan, Rif A. Saurous, Yannis Agiomyrgiannakis, Yonghui Wu. ICASSP 2018.

On Using Backpropagation for Speech Texture Generation and Voice Conversion.Jan Chorowski, Ron J. Weiss, Rif A. Saurous, Samy Bengio. ICASSP 2018.

Speech-to-text translation

Leveraging weakly supervised data to improve end-to-end speech-to-text translation.Ye Jia, Melvin Johnson, Wolfgang Macherey, Ron J. Weiss, Yuan Cao, Chung-Cheng Chiu, Naveen Ari, Stella Laurenzo, Yonghui Wu. Submitted to ICASSP 2019.

Sequence-to-Sequence Models Can Directly Translate Foreign Speech. Ron J. Weiss, Jan Chorowski, Navdeep Jaitly, Yonghui Wu, and Zhifeng Chen. Interspeech 2017.

https://github.com/tensorflow/lingvo/blob/master/PUBLICATIONS.md

开源地址:

https://github.com/tensorflow/lingvo

谷歌深度学习框架tensorflow1 0发布,更快更稳定

2月15日,在山景城举办的首届tensorflow开发者峰会上,谷歌官方正式发布了TensorFlow 1.0版,包括多项新特性。

作为一个开源软件库,TensorFlow可应用于各种感知和语言理解的机器学习任务。从机器翻译、皮肤癌早期症状检测到糖尿病致盲预防,在过去一年的运行期间内,TensorFlow 帮助众多的研究人员、工程师、艺术家以及学生在各自领域内取得相应的进展。到目前为止,已经有超过6000个在线开源存储库项目使用到 TensorFlow了。

而此次最新发布的TensorFlow 1.0毫无疑问又带来了众多创新:

更快,TensorFlow 1.0 运行速度又得到进一步加快,XLA 为未来性能提升奠定了基础,而且 tensorflow.org 新提供“tips & tricks”可以指导用户对模型进行微调以实现最大速度。谷歌官方也将会很快发布几种流行的模型的更新,以展示如何充分利用TensorFlow 1.0:包括基于 8 GPU 对 Inception v3 实现7.3倍加速,以及基于 64 GPU 对分布式 Inception v3 训练实现58倍加速!

更稳,TensorFlow 1.0 提供稳定的 Python API,不必破坏现有的代码就能获取新功能。

更灵活,TensorFlow 1.0 还加入了一些高级API,包括 tf.layers,tf.metrics 和 tf.losses 模块。此外,它还包含一个全新的 tf.keras 模块,能够与高级神经网络库Keras 完全兼容。

其他亮点:

Python APIs已经大幅向Numpy转型。

支持 Java 和 Go 的实验性 API。

在集成了 skflow 和 TF Slim 后从 tf.contrib.learn 带来的高级 API 模块:tf.layers、tf.metrics 和 tf.losses

发布了面向CPU和GPU的TensorFlow图形的特定领域编译器XLA的实验版本。 XLA正在迅速发展——预计在未来的发布中将看到更多的进展。

引入 TensorFlow Debugger (tfdbg),这是一个用于调试实时 TensorFlow 程序的接口和 API。

新的关于目标检测和定位、基于相机的图像风格化的 Android 演示。

安装改进:添加了Python 3 docker镜像,TensorFlow的pip包现在兼容PyPI。这意味着TensorFlow现在可以简单调用pip install tensorflow来安装。

对于很多创业公司来说,可以使用到一个处于国际领先水平的深度学习系统,创业过程中的技术难度无疑会得到大幅降低,而这也算是谷歌TensorFlow的一大贡献。