谷歌的开源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

10个最流行的JavaScript框架及其主要特性和功能

多年来,业界已经发布了大量 JavaScript 框架,怎样进行选择可能是一个挑战。如果你感到困惑,不知道应该选哪个或者究竟哪个适合你,那么我已经帮你解决了问题。在本文中,我将列出用来构建 Web 应用程序的前10个 JavaScript 框架。

1. AngularJS

Angular 是最强大、最高效、最开源的 JavaScript 框架之一。在这个列表中不可能不提及 Angular。该框架由Google 运营,用于开发单页应用(SPA)。这个开发框架之所以出名,主要是因为它为开发人员提供了将JavaScript 与 HTML 和 CSS 结合起来的最佳条件。有超过五十万个网站如 google.com、youtube.com 等正在使用 Angular。

Angular 的主要特性:

MVC 架构:AngularJS 最重要的特性之一是 MVC 架构。 MVC 架构分为三个元素,即模型、视图和控制器。

Model:它是 MVC 架构的最低层级,用来存储数据。

View:负责向用户展示你的所有数据。

控制器:它基本上是用来控制模型与视图之间整个交互的代码。

双向绑定:这是一个令人惊叹的功能,它将 AngularJS 与其他 JavaScript 框架区分开来。 Angular Data-Binding 在模型和视图之间建立链接。在双向数据绑定过程中,视图会显示在模型中所做的更改,反过来模型反映了在视图中所做的更改。

单页应用:使用 AngularJS 框架,你可以构建完全响应式的单页应用,可以轻松完美地适应不同的屏幕尺寸。与其他网络应用相比,它还能改善用户体验。由于基于 AngularJS 的单页应用是在客户端渲染的,因此它们通过减少 Web 服务器上压力来减少网络流量。

HTML UI:AngularJS 的另一个重要特性是它使用 HTML 语言来构建用户界面。 HTML 语言是一种常见的声明性语言,标签很短,易于理解。这导致了更简单、更有条理的UI。 JavaScript 接口通常更难以开发和组织。如果你正在寻找一种快速,简单且易于使用的解决方案,那么应该就是它了。

2. React JS

React 是 Facebook 维护的另一个 JavaScript 库,用于构建交互式和复杂的 UI。它是最热门的框架之一,有超过 3 万个网站使用 React 实现 UI。举几个网站:Microsoft.com、yahoo.com 等。

ReactJS 的主要特性:

Virtual DOM:在React中,对于每个 DOM 对象,都有一个对应的“虚拟 DOM 对象”。虚拟 DOM 对象创建原始 DOM 的虚拟副本。这是一种单向数据绑定,由于修改时不需要实时向屏幕渲染,因此操作虚拟 DOM 比更新原始 DOM 快很多。

JSX:React 使用了 JSX,这是一个使用 HTML 引用的简单 JavaScript,而不是用于模板的 JavaScript。你也可以使用 HTML 语法来渲染子组件,或使用老式的 JavaScript 编写,这意味着无论采用哪种方式,你都可以灵活地进行编码。

单向数据流:React.js 的设计方式使其只支持在一个流程中向下游传递的数据。如果数据必须向另一个方向流动,则需要其他功能支持。

组件:在React中,所有内容都被视为组件,因此你可以轻松导入 React 支持的组件,而不是编码或构建整个功能,你可以方便的导入并使用它。

3. Vue

Vue是一个用于构建 UI 的开源 JavaScript 框架。由于它的设计具有适应性,Vue 简化了与其他 JavaScript 库的项目集成。目前超过 36,000 个网站正在使用 Vue。像 stackoverflow、playstation 等公司依赖 Vue 开发他们的网站界面。

VueJS的主要特性:

模板:Vue.js 提供基于 HTML 的模板,将 DOM 与 Vue.js 实例数据绑定。 Vue.js 将模板编译为虚拟 DOM 渲染函数。 Web 开发人员可以使用渲染函数的模板,并可以使用渲染函数替换模板。

体积小:JavaScript 框架的成功取决于它的大小。个头越小用的人越多。 Vue.js 最大的优势之一是体积小。该框架的大小为 18-21 KB。

适应性:Vue 允许用户用虚拟节点把模版写在 HTML 文件、JavaScript 文件和纯 JavaScript 文件中。这种灵活性还容易让使用 React.js,Angular.js 和任何其他新 JavaScript 框架的开发人员理解。它基于 JavaScript 框架,可以集成到基于 JavaScript 构建的其他程序中。

详细的文档:开发人员总是喜欢使用带有详细文档的框架,因为他们总是很容易编写自己的第一个应用程序。Vue.js 的文档非常全面,任何对 JavaScript 和 HTML 有所了解的用户都可以用它开发自己的应用或网页。

4. Jquery

Jquery 是最古老的 JS 框架之一。这个框架已经存在了 13 年之久,而且它仍然很强大。那么什么是 jQuery?

jQuery 是一个快速而简洁的 JavaScript 库,由 John Resig 在2006年创建,它有一个很好宗旨:写得少,做得多。它是一个跨浏览器的 JavaScript 库,旨在简化 HTML 的客户端脚本。目前有超过 1900 万个网站正在使用jQuery!WordPress、Facebook、Google、IBM 和其他许多公司都依赖 jQuery 提供独一无二的网络浏览体验。

jQuery的主要特性:

DOM操作:它使对 DOM 的操作变得非常容易,使开发人员可以通过易于学习的API(基于顶层 JavaScript)充分利用他们的创造力来创建令人惊叹的东西。

大型社区:其贡献者的社区比任何其他 JavaScript 库更加庞大和多样化。它有广泛而全面的文档支持,不要忘记,它会不断得到维护,并且会越来越强大。

AJAX支持:简而言之,AJAX(异步 JavaScript 和 XML)是关于在后台加载数据并将其显示在网页上,而无需重新加载整个页面的技术。 jQuery 为 AJAX 功能提供了好几种方法。通过 jQuery AJAX,你可以用 HTTP Get 和 HTTP Post 从远程服务器请求文本、HTML、XML或JSON。

跨浏览器支持:jQuery 具有跨浏览器支持特性,适用于 IE 6.0 +,FF 2.0 +,Safari 3.0 +,Chrome 和 Opera 9.0+等。

5. BackboneJS

BackboneJS 是一个轻量级 JavaScript 库,用来开发和构建在 Web 浏览器中运行的客户端应用。与其他框架不同,Backbone 让开发人员负责选择最适合当前项目的工具。目前,超过50万个网站正在使用 Backbone,其中包括tumblr.com、espn.com、soundcloud.com等等。

Backbone 的主要特性:

分离的业务和UI逻辑:Backbone 可以帮助你把自己的业务逻辑与用户界面分开,这是非常重要的一点。当两者纠缠在一起时,修改将会变得很难。当逻辑不依赖于 UI 时,你的界面会变得更加易用。

事件驱动的通信:当项目不断增长时,jQuery 声明和回调将变得更加复杂,代码变得更加混乱。 Backbone.js 通过在视图和模型之间提供事件驱动的通信来克服这个问题。

更少的代码:约定是引入通用编码风格的好方法,而无需提供大量的编码标准。你遵守的 backbone 约定越多,编写代码的次数就越少,反过来代码也会变得更加标准化,并具有可读性。

与后端同步:由于其对 RESTful API 的出色支持,BackboneJS 中的模型可以轻松地与后端绑定。如果 API 设计正确,则 backbone 可以直接通过访问这些操作来进行读取、写入和删除操作。

6. NodeJS

Node.js 是一个基于 Google Chrome 的 JavaScript 引擎构建的开源服务器端平台。使用 NodeJS 的网站数量已超过 84,000 个。它是下载量最大的用于执行 JavaScript 代码的跨平台运行时环境之一。

Node.js 的主要特性:

非阻塞:Node.js 库的所有API都是异步的,即非阻塞的。这意味着基于 Node.js 的服务器永远不会等待 API 返回数据。服务器在调用它之后移动到下一个 API,并且事件的通知机制帮助服务器从先前的 API 调用获得响应。

单线程:Node.js 使用带有事件循环的单线程模型。事件机制可帮助服务器以非阻塞方式响应,从而使服务器具有高度可伸缩性,而传统服务器则创建有限的线程来处理请求。与 Apache HTTP Server 等传统服务器相比,Node.js 使用的单线程程序可以为更多的请求提供服务。

快速:NodeJS 建立在Google Chrome 的 V8 引擎之上。 Google 的 V8 引擎确保 Node.js 库以极快的速度执行其代码。

数据流:NodeJS 程序从不缓冲任何数据,它们只是以数据块的形式输出数据。这样 NodeJS 可以提供更快的服务。

7. Ember

Ember是一个开源的 JavaScript Web 框架,它允许开发人员通过将最佳实践合并到框架中来构建可伸缩的单页面 Web 应用。 Ember 被评为最佳的 JavaScript 客户端框架,其主要竞争对手是 React 和 AngularJS。目前超过 6000 个网站正在使用 ember。仅举几例:nasa.gov、tutorialspoint.com 等。

Ember 的一些主要特性:

Web开发的未来:在 Babel JavaScript 转换器的帮助下,Ember 允许开发人员使用未来的 JavaScript 标准并将其进行转换为目前浏览器支持的代码。不知道 Babel 是什么? Babel 是一个 JavaScript 转换器,允许开发人员现在使用下一代 JavaScript 代码。另外 Babel 受益于众多插件,并且与 Ember、Rails、Sails 和 Meteor 等框架兼容。

Ember cli:Ember 和 Ember-CLI 完全是两个不同的东西,但如果没有另一个则两者都不完整。 Ember-CLI 是一个命令行实用程序,它与 Ember 框架的软件栈一起提供。 Ember-CLI 是一种强大的生产力工具,支持CoffeeScript、Handlebars、LESS 和 Sass 等。

Ember 模板:Ember 的模板内置于 Ember 的 UI 中,这些模板使用 Handlebars 模板语言编写。 Handlebars 以其使用双花括号命名,它可以使开发人员写更少的代码。模板在 Ember 中提供了许多功能,例如组件、插口和表达式等。

CoC:它的唯一目的是速度和“把事情搞定”的理念,这对于那些总是努力超越竞争对手的初创公司来说是一个巨大的推动力。Ember 有关于其结构的最佳实践,这意味着开发人员可以更专注于实现业务,而不是通过繁琐的代码重新发明轮子。有更多的成果,而不是蓝图。

8. Meteor

Meteor 是一个用 NodeJS 编写的免费开源 JavaScript 框架。它允许进行快速原型设计并生成跨平台代码。它在市场上越来越受欢迎,超过 13,000 个网站使用了 Meteor。像mtv.com、meteofrance.com等网站利用 Meteor 来构建他们的用户界面。

Meteor 的主要特性:

全栈:Meteor 为开发和部署 Web 应用提供了全栈解决方案。 Meteor 捆绑了几个内置功能,如反应式模板、自动 CSS 等。

智能包:为你的应用开发登录系统可能会很麻烦。但 Meteor 不会。 Meteor 软件包可以轻松添加用户帐户,还有 React 之类的 JavaScript 库等。最好方便的是,添加这些类型的智能包很容易,只需在终端中敲几下键盘就可以了。

实时网络应用:Meteor 是构建实时程序的完美解决方案。从数据库到模板所有的层都会自动更新。这意味着无需刷新页面即可查看更新。对文档的任何修改都会立即保存。这使得 Meteor 成为实时协作的完美解决方案。

单一语言开发:Meteor 允许在前端和后端使用相同的代码,可用于移动和 Web 应用。它可以杜绝安装和配置不同的库、模块管理器、API、驱动程序等。这大大的节省了开发人员的时间,因为他们不需要在服务器语言和 JavaScript 之间执行上下文切换。

9. Polymer

Polymer 是一个由 Google 维护的开源 JavaScript 库,用于使用 Web 组件构建 Web 应用。目前,有超过3000个网站正在使用聚合物,比如virustotal.com、rogers.com、zeplin.io等。

与其他 JavaScript 框架不同,Polymer 让开发人员构建组件时去利用 Web 中存在的功能。它是第一个利用 Web 组件来对应用进行交互式构建的库。

Polymer 的关键特性:

Web 组件:Polymer 构建在 Web 组件的思想之上。 Web 组件是一组 w3c 标准,由几种不同的 Web 技术组成,其中包括自定义元素。这些组件是浏览器的一部分,所以你不需要任何第三方工具和库,比如 jQuery。

单向和双向数据绑定:它提供单向和双向数据绑定。Polymer 旨在支持在单向和双向流动的数据。

本机浏览器:Polymer 使用本机浏览器技术,而不是依赖于自定义 JavaScript 库。Polymer 的 DOM 层最接近本机 JavaScript 层。

自定义元素:它允许使用 HTML、CSS 和 JavaScript 轻松创建自定义元素,以便向元素添加交互。 Polymer.js 提供了创建自定义 HTML 元素的最简单方法,因为它的库是基于 Web 标准 API 构建的。

10. Aurelia

Aurelia 是一个开源的现代 JavaScript 模块工具箱,其有助于 Web 和移动应用程序的发展。它也被称为“下一代框架”。该框架自推出以来一直受到广泛认可。 Fileee、Freska、Ordami 和 BTEK Software 等公司以及800多个网站都使用了 Aurelia。

不要忘记,Aurelia 是唯一允许开发人员使用原生 TypeScript 或 JavaScript 构建组件的框架。

下面我列出了 Aurelia 的一些主要功能:

多语言支持:Aurelia 的 API 经过精心设计,可以用于当今和未来最实用的 Web 编程语言。 Aurelia 支持 ES5、ES2015、ES2016 和 Typescript,它非常有用,并能够为你提供高度的灵活性。

模块框架:Aurelia 不是采用单一框架的方式,而是由较小的、专注的模块组成。把它们放在一起可以组成功能齐全的框架,也可以通过自定义构建可选择的方案。

整洁的文档:Aurelia 提供了一个非常详细并有用的文档集,可以帮助所有的开发人员。它以良好的文档维护而闻名。

可扩展的 HTML:Aurelia 的可扩展 HTML 编译器允许你创建自定义 HTML 元素,可以向现有元素中添加自定义属性并控制模板生成,所有这些都完全支持动态加载、数据绑定和高性能批量渲染。

小编是一个有着5年工作经验的架构师,关于web前端,自己有做材料的整合,一个完整学习web前端的路线,学习材料和工具。需要的伙伴可以私信我,发送“前端”等3秒后就可以获取领取地址,免费送给大家。对于学习web前端有任何问题(学习方法,学习效率,如何就业)都可以问我。希望你也能凭自己的努力,成为下一个优秀的程序员!

以上介绍10个最受欢迎的 JavaScript 框架,以及它们的主要特征和功能

JavaScript是未来:14个JavaScript框架

当今的市场需要快速开发,但是,重复造轮子是没有必要的。不论你是一个 JavaScript 新手还是一个资深的 JavaScript 开发者,使用框架和库都能极大提高你的工作效率。 — Dr. Michael J. Garbade

本文导航

  • -热门的开源 JavaScript 框架和库 …… 12%

  • -1. Angular.js …… 18%

  • -2. Backbone.js …… 25%

  • -3. D3.js …… 30%

  • -4. React.js …… 35%

  • -5. jQuery …… 42%

  • -6. Ember.js …… 48%

  • -7. Polymer.js …… 53%

  • -8. Three.js …… 58%

  • -9. PhantomJS …… 61%

  • -10. BabylonJS …… 65%

  • -11. Boba.js …… 69%

  • -12. Underscore.js …… 73%

  • -13. Meteor.js …… 79%

  • -14. Knockout.js …… 84%

  • -值得注意的是: Node.js …… 86%

  • -总结 …… 92%

编译自: https://opensource.com/article/16/11/15-javascript-frameworks-libraries

作者: Dr. Michael J. Garbade

译者: chenxinlong

JavaScript 即未来趋势所在。

Javascript 得到了众多的技术领导者的拥护和支持,其中一位就是 WordPress 的作者 Matt Mullenweg , 他表示 WordPress 开发者[1] 应该学习 JavaScript , 这也清晰地向 WordPress 社区传达了 JavaScript 在未来的重要性。 同时,这一观点也被普遍接受。向着更先进的技术靠拢与过渡也同时保证了 WordPress 在未来的挑战中不会落于人后。

JavaScript 同时也是众多站在开源立场的技术中的佼佼者。与现在所流行的观点相反,JavaScript 不是一个工程,而是一个由其核心团队共同制定和维护的开放标准。ECMAScript[2] , 这是另一个和 JavaScript 相关的名字, 它虽然不是开源的,但它也有一个开放的标准。

当你在浏览 GitHub 的时候你就可以发现 JavaScript 在当今有多么流行了。而且就仓库的数量[3] 而言,JavaScript 绝对位于所有的编程语言当中最顶尖的那一层次。 同时,在 Livecoding.tv 上你也能看出 JavaScript 有多么突出,这里的用户发布的关于 JavaScript 的视频的数量比其他的话题多得多。在写这篇文章的时候(2016 年底),Livecoding.tv 上已经有 45,919 个 用户原创的 JavaScript 视频教程[4] 。

热门的开源 JavaScript 框架和库

回归到主题, 庞大的社区是 JavaScript 的一个得天独厚的优势,同时这也推动了 JavaScript 的蓬勃发展。这里有数以百千计的成熟的 JavaScript 框架和库供开发者使用,同时这些最优秀的框架和库都是开源的。对当前的 JavaScript 开发者来说,能够使用这些优秀的框架和库来进行快速开发已经是必须技能了。当今的市场需要快速开发,但是,重复造轮子是没有必要的。不论你是一个 JavaScript 新手还是一个资深的 JavaScript 开发者,使用框架和库都能极大提高你的工作效率。

好了,让我们开始吧!

1. Angular.js

Angular.js[5] 是目前最热门的 JavaScript 框架之一。它用于开发者构建复杂的 web 应用。Angular.js 背后的思想是它的单页应用 model。同时它 也支持 MVC 架构。在 Angular.js 中 ,开发者可以在前端中使用 JavaScript 代码,并从字面上扩展 HTML 词汇。

Angular.js 自 2009 年出现以来已经有了很大的改进。Angular 1 当前的稳定版本是 1.5.8/1.2.30 。你也可以试一试 Angular 2 ,相对于 Angular 1 来说它有了重大的改进,但这个新版本仍未在全球范围内被普遍使用。

在 Angular.js 中,数据绑定是完成工作的一个重要概念。在用户与接口的交互中,当交互完成,view 就会自动更新,随即新值与 model 交互以确保一切都是同步的。底层的逻辑在 model 中执行完成后,DOM 也会随即更新。

2. Backbone.js

复杂 web 应用并不适用于所有场景。一些较简单的 web 应用框架例如 Backbone.js[6] 就非常适合学习 web app 开发。Backbone.js 是一个简单的框架,可以快速方便地构建简单的 web 应用。和 Angular.js 一样,Backbone.js 也支持 MVC 。Backbone.js 还有一些其它关键特性如路由,RESTful API 支持,适当的状态管理等等。你甚至还可以用 Backbone.js 来构建单页应用。

当前的稳定版本是 1.3.3,可以在 GitHub[7] 中找到。

3. D3.js

D3.js[8] 是一个优秀的 JavaScript 库,它允许开发者创建具有数据处理功能的富 web 页面。D3.js 使用 SVG、HTML 和 CSS 来实现这一切功能。使用 D3.js ,你可以更轻松地将数据绑定到 DOM 及启用数据驱动事件。使用 D3.js ,你还可以创建高质量的数据驱动的 web 页面来提供一个更易于理解的视觉效果来呈现数据。查看示例 : LCF 符号哈密顿图[9] ,由 D3.js 强力驱动。

4. React.js

React.js[10] 是一个使用起来很有趣的 JavaScript 框架。和其它的 JavaScript 框架不同,React.js 志在构建一个高可扩展的前端用户界面。React.js 出现于 2013 年,它采用了 BSD 开源协议。它因其能够开发复杂且漂亮的用户界面所带来的优势而迅速发展壮大。

React.js 背后的核心思想是虚拟 DOM 。虚拟 DOM 在客户端和服务端之间扮演着一个中间人的角色并带来了显著的性能提升。虚拟 DOM 的改变和服务器端 DOM 一样,只需要更新所需的元素,相对于传统的 UI 渲染来说极大提升了渲染速度。

你还可以使用 Recat 来实现 meterial 风格的设计,使你能够开发具有无与伦比的性能的 web 应用。

5. jQuery

jQuery[11] 是一个非常流行的 JavaScript 库,它拥有众多特性例如事件处理、动画等。当你在做一个 web 项目的时候,你不会想要把时间浪费在为一些简单的功能写代码上。jQuery 为减少你的工作量提供了一些易于使用的 API 。这些 API 在所有的常见的浏览器中都能够使用。使用 jQuery, 你可以无缝地控制 DOM 以及 Ajax 这样在近几年来拥有大量需求的任务。使用 jQuery,开发者不必担心一些低级的交互,同时可以使他们的 web 应用的开发更加容易与迅速。

jQuery 同时便于分离 HTML 和 JavaScript 代码,使开发者能够编写简洁而跨浏览器兼容的代码。并且使用 jQuery 创建的 web 应用在将来也易于改善和扩展。

6. Ember.js

Ember.js[12] 是一个 Angular.js 和 React.js 的功能混合体。当你在浏览社区的时候你能明显地感受到 Ember.js 的热门程度。Ember.js 的新特性也不断地在添加。它在数据同步方面与 Angular.js 很像。 双向的数据交换可以确保应用的快速性和可扩展性。同时,它还能够帮助开发者创建一些前端元素。

和 React.js 的相似之处在于,Ember.js 提供了同样的服务器端虚拟 DOM 以确保高性能和高可扩展。同时, Ember.js 提倡简化代码,提供了丰富的 API。Ember.js 还有非常优秀的社区。

7. Polymer.js

如果你曾想过创建你自己的 HTML5 元素,那么你可以使用 Polymer.js[13] 来做这些事。 Polymer 主要集中于通过给 web 开发者提供创建自己的标签的功能来提供扩展功能。例如,你可以创建一个和 HTML5 中的 <video> 类似的具有自己的功能的 <my_video> 元素。

Polymer 在 2013 年被 Google 引入并以 三句版 BSD[14] 协议发布。

8. Three.js

Three.js[15] 又是另一个 JavaScript 库,主要用于 3D 效果开发。如果你在做游戏开发的动画效果,那么你可以利用 Three.js 的优势。Three.js 在底层中使用 WebGL 使 Three.js 可以轻松地被用于在屏幕上渲染 3D 物体。举一个比较知名的使用 Three.js 的例子就是 HexGLA,这是一个未来派赛车游戏。

9. PhantomJS

使用 JavaScript 工作就意味着和不同的浏览器打交道,同时,当提及浏览器的时候,就不得不讨论资源管理。在 PhantomJS[16] 中,由于有 Headless WebKit 的支持,所以你可以随时监测你的 web 应用。Headless WebKit 是 Chrome 和 Safari 使用的渲染引擎中的一部分。

这整个过程是自动化的,你所需要做的只是使用这个 API 来构建你的 web 应用。

10. BabylonJS

BabylonJS[17] 与 Three.js 不相伯仲, 提供了创建平滑而强大的 3D web 应用的 JavaScript API。它是开源的,且基于 JavaScript 和 WebGL 。创建一个简单的 3D 物体,比如一个球体是非常简单的,你只需要写短短几行代码。通过这个库提供的 文档[18],你可以很好地掌握它的内容。 同时 BabylonJS 的主页上也提供了一些优秀的 demo 来当作参考。在其官网上你可以找到这些 Demo。

11. Boba.js

Web 应用总是有一个共通的需求,那就是分析。如果你还在苦于将数据的分析与统计插入到 JavaScript 的 web 应用中,那么你可以试一下 Boba.js[19]。Boba.js 可以帮助你将分析的数据插入到你的 web 应用中并且支持旧的 ga.js 。你甚至可以把数据指标和 Boba.js 集成在一起,只需要依赖 jQuery 即可。

12. Underscore.js

Underscore.js[20] 解决了 “当我面对一个空白 HTML 页面并希望即刻开始工作,我需要什么” 这个问题。当你刚开始一个项目,你可能会感到失落或者重复一系列你在之前项目中常做的步骤。 为了简化开启一个项目的过程和给你起个头,Underscore.js 这个 JavaScript 库给你提供了一系列的方法。例如,你可以使用你在之前项目中常用的 Backbone.js 中的 suspender 或者 jQuery 的一些方法。

一些实用的帮助例如 “filter” 和 “invoke the map” 可以给你起个好头,以助于你尽可能快的投入到工作中。 Underscore.js 同时还自带了一个套件来简化你的测试工作。

13. Meteor.js

Meteor.js[21] 是一个快速构建 JavaScript 应用的框架。它是开源的且它能够用于构建桌面应用、移动应用和 web 应用。Meteor.js 是一个全栈的框架同时允许多平台的端到端开发。 你可以使用 Meteor.js 来实现前端和后端功能,同时它也能密切监视应用的性能。Meteor.js 的社区非常庞大,所以它会有不断的新特性更新或者是 bug 修复。Meteor.js 也是模块化的,同时它能配合一些其它的优秀的 API 使用。

14. Knockout.js

Knockout.js[22] 在这些库中可能是最被低估的一个。它是一个基于 MIT 开源协议的开源 JavaScript 框架。作者是 Steve Sanderson[23]。它基于 MVVM 模式。

值得注意的是: Node.js

Node.js[24] 是一个强有力的 JavaScript 运行时环境。它可以被用于使用真实世界数据来构建快速且可扩展的应用。它既不是一个框架也不是一个库,而是一个基于 Google Chrome 的 V8 引擎的运行时环境。你可以用 Node.js 来创建多元化的 JavaScript 应用,包括单页应用、即时 web 应用等等。从技术层面上来讲,由于它的事件驱动式架构,所以 Node.js 支持异步 I/O 。这种做法使得它成为开发高可扩展应用的一个极好的解决方案的选择。查看 Node.js[25]在 livecoding.tv 上的视频。

总结

JavaScript 是 web 开发中的通用语言。它之所以快速发展不仅仅是因为它所提供的内容,更多的是因为它的庞大的开源社区的支持。以上提到的框架和库对任何一个 JavaScript 开发者来说都是必须知道的。它们都提供了一些途径来探索 JavaScript 和前端开发。上面提及的大部分框架和库频繁地在 Livecoding.tv 上出现,其大部分来自对 JavaScript 及其相关技术感兴趣的软件工程师。


via: https://opensource.com/article/16/11/15-javascript-frameworks-libraries

作者:Dr. Michael J. Garbade[26] 译者:chenxinlong 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

  • [1]: WordPress 开发者 – https://wesbos.com/learn-javascript/

  • [2]: ECMAScript – https://stackoverflow.com/questions/5520245/is-javascript-an-open-source-project

  • [3]: 仓库的数量 – https://github.com/blog/2047-language-trends-on-github

  • [4]: 45,919 个 用户原创的 JavaScript 视频教程 – https://www.livecoding.tv/learn/javascript/

  • [5]: Angular.js – https://opensource.com/article/16/11/www.angularjs.org

  • [6]: Backbone.js – https://opensource.com/article/16/11/www.backbone.js

  • [7]: GitHub – https://github.com/jashkenas/backbone/

  • [8]: D3.js – https://opensource.com/article/16/11/www.d3js.org

  • [9]: LCF 符号哈密顿图 – https://christophermanning.org/projects/building-cubic-hamiltonian-graphs-from-lcf-notation

  • [10]: React.js – https://facebook.github.io/react/

  • [11]: jQuery – https://jquery.com/

  • [12]: Ember.js – https://emberjs.com/

  • [13]: Polymer.js – https://www.polymer-project.org/1.0/

  • [14]: 三句版 BSD – https://en.wikipedia.org/wiki/BSD_licenses#3-clause

  • [15]: Three.js – https://threejs.org/

  • [16]: PhantomJS – https://phantomjs.org/

  • [17]: BabylonJS – https://www.babylonjs.com/

  • [18]: 文档 – https://doc.babylonjs.com/

  • [19]: Boba.js – https://boba.space150.com/

  • [20]: Underscore.js – https://underscorejs.org/

  • [21]: Meteor.js – https://www.meteor.com/

  • [22]: Knockout.js – https://knockoutjs.com/

  • [23]: Steve Sanderson – https://blog.stevensanderson.com/

  • [24]: Node.js – https://nodejs.org/en/

  • [25]: Node.js – https://www.livecoding.tv/learn/node-js/

  • [26]: Dr. Michael J. Garbade – https://opensource.com/users/drmjg

本文将教您如何在Google云平台(GCP)上使用Alpaca构建框架

全文共3071字,预计学习时长9分钟

图源:Unsplash

人工智能的新突破每天都成为头条新闻。在金融领域,因其具有深厚历史、清楚明了和结构化数据,机器学习广泛运用。最终,金融领域成为了“学习机器”的一个早期标志,在这个领域取得的巨大成功还在继续。

现在,免佣金交易应用程序编程接口(API)和云计算的兴起让普通人只需要运气不错,再加上会一点python,就能运行自己的算法交易策略。

下面,小芯将展示如何在谷歌云平台(GCP)上使用Alpaca来进行构建框架。一如既往,文中所有编码可在Github主页里找到。

首先需要一些数据。数据来源当然有的免费,有的需要付费。本文中所用到的TD Ameritrade API(德美利证券)是免费的。下一步需要可以通过API递交免佣金交易的交易平台

这一步会用到Alpaca。Alpaca允许纸交易(虚拟币),这样就可以在免于破产的前提下测试所构建的交易策略。接下来只需要自动运行机器并存储/检索数据。此处将使用GCP,因为我对这一平台较为熟悉,但其他的云平台如AWS、Azure等都是不错的。

图源:Unsplash

对了,当然还需要算法交易策略。本文所讲的是如何建构运行交易策略的框架,所以策略本身并不重要,不是本文的重点。为了演示,文中会使用动量策略(momentumstrategy)查找过去125天内动量最大的股票,并每天进行交易。

在进行完全回测前,请不要盲目使用上述策略。切记,千万不要从我这里吸取投资建议,不然你很可能会后悔的。

数据

首先需要的是许许多多的股票。这里会用到所有列在纽约证券交易所(NYSE)的股票。所有的股票代码将从eoddata.com获取,然后再向TD Ameritrade API请求这些股票代码的数据。

一拿到数据,就可以将它们储存进BigQuery(BQ)表以备之后使用。所有的数据会在云函数(Cloud Function)中,可安排在每个工作日市场关闭后运行,以获得最新的收盘价。

将API凭证存在云存储的文本文件中以防被写死,因为这里只是用API调用来检索凭证。之后检查在当天日期市场是否开放,然后获取NYSE的股票代码,并传给TD Ameritrade API获取当天的数据。

然后用API将数据存储进BQ表以备之后机器人使用。

上面只用了收盘价,但是API还返回了许多其他的数据,所以将所有数据存储起来也不错。我创建了一个叫“equity_data”的数据集,表的名字为“daily_quote_data”。如果表先前并不存在,也就是说这是第一次创建,那么今天便会创建新表,之后每天都会有新的数据附加进去。

在GCP中可以用下面这个脚本创建云函数。如果要将这个云函数安排在指定时间运行,只需在触发器(Trigger)选项选择“云发布/提交(CloudPub/Sub)”并创建一个主题。

然后转到Cloud Scheduler中设置主题来在需要的时候运行。这里设置为在每个工作日东部时间下午5点运行。频率设置为unix-cron格式。有效载荷就是要发送的信息,写什么都可以,但必须填写。

还可以将云函数的超时设置为最大540s来……避免超时。它可以在高级选项中找到。

这样就可以下载往后的数据了。但是建构交易机器人还需要回溯数据。这里使用的端点是“quotes”端点,不提供历史数据。要获得历史价格数据,必须使用“pricehistory”端点。在我的GitHub文件夹中有一个名为“get_historical_data.py”的文件。读者可以在本地运行该文件,然后将数据框下载到csv中再上载到BQ表。

交易机器人

从基础来看,交易机器人必须能:

1. 了解有多少可供交易的资金

2. 获得要在交易策略中使用的数据

3. 根据交易策略决定所选股票

4. 买/卖股票来更新证券投资组合

整个云函数比较长,所以这里只是简单总结一下,完整的代码在GitHub上。就像之前所说,策略在这里并不重要。这里使用的是一个简单的动量策略,选择了过去125天里动量最大的10只股票。

首先,为了之后的动量策略,从BQ API将历史数据下载为数据框。

接下来从Alpaca API获得当前头寸和投资组合价值。这里用的是Alpaca的APIWrapper凭证还是存储在云存储的文本文件中。

注意,这里用的基本URL用于纸币交易,可以在纸币交易账户中设置任意金额,这里设置的是1万美元。显然,如果这是第一次运行,Alpaca里是没有什么头寸的。所以在运行云函数前,要先在本地运行脚本,基于所选的动量股票来得到最初的投资组合。然后将它们发送到AlpacaAPI中进行购买。这里假设上述步骤都已经完成了。

有了历史数据和交易金额后,就可以根据策略选择股票了。第一步是找出拥有最高动量的股票。

上面的动量计算来自Andreas F. Clenow所著的《交易发展(Trading Evolved)》,推荐大家阅读。这本书浅显易懂,其中有适用于各种策略的编码案例。

动量计算中计算了过去125天内每只股票收盘价的对数(最小天数为40天)的线性回归。下一步,取回归线斜率的指数(以天为单位表示其上升或下降的百分比),然后将其年化(取252的幂,即一年中的交易日数),并将其乘以100。这样数据会更好理解。最后乘以r的平方值,赋予解释方差的模型权重。

确定了动量得分最高的前10只股票之后,还需要决定购买多少股票。投资组合配置本身就是一个完整的话题,它并不重要,所以在此不进行展开。这里使用了pyportfolioopt库进行配置。

现在有了一个df,里面有想买的股票和数量。然后需要根据当前的投资组合来决定是否卖出股票。有以下几种可能:

1. 今天动量股票的选择和配置和昨天完全相同,没有买卖的必要

2. 当前投资组合中有不想持有的股票

3. 今天想买的股票和当前拥有的一样,但是数量有了变化(增/减)

4. 今天有了新的想买的股票,但是它不在昨天的投资组合中

上面的情况都需要进行检查并进行所有必要买卖。首先,检查当前投资组合中是否有不需要的股票。

这样就得到了一个数据框,其中包含想要卖掉的股票和数量。接着检查现有的股票数量是否有减少。这里可能没有任何变化,所以必须要进行检查。这样就可以得到需要卖掉的股票的最终数据框。

有了需要卖掉的股票清单(如果有的话),就可以将它发送到AlpacaAPI来运行指令。

最后,看看拥有的新股票有没有数量上的增加,或者今天有没有想买的新股票。

如果有的话,就向API发送指令。

完成之后记录投资组合也是个好做法。Alpaca只允许有一个纸交易账户,所以如果想要(应该要)运行多个算法,就要创建日志自己追踪它们。可以创建策略列来从策略中进行识别。然后可以将它添加到另一个BQ表中。

下面的SQL查询可以提供每日总计,还有和前一天的投资组合相比的变化百分比。

这样就构建好交易机器了。大家之后可以将它放在云函数中每天运行。它便是运行交易策略的优秀框架。

祝你成功!

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

看文本了解语义:谷歌推一步到位自然语言理解框架+代码

夏乙 编译自 Google Research Blog

量子位 出品 | 公众号 QbitAI

大多数自然语言理解(NLU)系统分析语言的过程是一条由分析步骤组成的流水线:先标注词性,再进行句法依存分析,然后为输入文本计算出语义表示。

谷歌打破了这条流水线上的所有步骤,把它们捏到了一起,推出了一步到位的自然语言理解系统:SLING

SLING能够直接分析自然语言文本,根据它的语义表示生成语义框架图示。与原有的大多数系统相比,它避免了自然语言理解流水线的一个严重缺陷:前面步骤中的错误会影响后续步骤的分析。

实际上,流水线式的自然语言理解系统有利于对语言理解的不同阶段进行模块化,但是,早期步骤中的错误会在后边的步骤里发生连锁反应,对最终的表示产生影响。

比如说,一个典型的流程可能会在早期步骤中进行句法依存分析,后来又需要共指消解。这种情况下,如果依存分析出现错误,共指消解的结果也会受到影响。

而SLING这种直接从文本到语框架图示的方法中,输出的框架图示能直接捕捉到用户感兴趣的语义标注,同时避开了流水线式系统所带来的陷阱,还能防止出现不必要的计算。SLING使用一个专用的循环神经网络(RNN),通过框架图示上的增量编辑运算,来为输入文本计算输出表示。

而框架图示则足够灵活,能够捕捉到很多易引发兴趣的语义任务。

SLING分析器的训练只用到了输入词语,不需要依存分析等任何中间注释。

在推理阶段,SLING能够快速进行分析,它提供了一个高效、可扩展的图示存储实现,以及一个生成高效代码来执行RNN的JIT编译器。虽然SLING现在还在试验阶段,但它在普通台式机CPU上的分析速度已经超过了2500 token/秒。

框架语义分析

框架语义学将文本(例如一个句子)的意思表示为一组形式语句,每个形式语句成为一个“框架”,可以看作意义或者知识的一个单元,也包含和概念的交互,或者与之相关的其他框架。

SLING将所有语义框架组织成一些列插槽,每个插槽都有自己的名字(角色)和值,这个值可以是文字的,也可以是和另一个插槽之间的连接。

比如说这句话:

Many people now claim to have predicted Black Monday.

SLING会从中认出提及的实体(例如人物、地点、事件)、测量值(例如时间、距离)以及其他概念(例如动词),然后将它们放置在与输入中动词相关的正确语义角色上。

比如说句中的“predict”,就表示为PREDICT-01框架。PREDICT-01和施行predict这个动作的主体有交互(插槽),通过ARG0插槽表示,ARG0与表示“people”的PERSON框架相连接;PREDICT-01还和被预测的客体有交互,表示为ARG1插槽,和表示“Black Monday”的EVENT框架连接。

如下图所示:

框架语义分析的任务就是直接生成一幅图示,包含像上图这样通过插槽互相连接的框架。

上面只是一个简单的例子,框架图示很强大,适用于各种复杂的语义标注任务。对于初学者来说,框架是一种将语言内部和外部信息结合起来的方式。然后,这就可以用来处理复杂的语言理解问题,比如指代、隐喻、借代等。这些任务的语义框架图示只在用到的框架类型、角色、连接限制上有所不同。

SLING

SLING通过为易引发兴趣的语义框架进行优化,训练了一个RNN。网络隐藏层中已经学习到的表示取代了流水线系统中手工调整的特征组合和中间表示。

在内部,SLING使用编码器-解码器架构,其中使用诸如原始单词,其后缀,标点符号等简单词汇特征将每个输入词编码成向量。而解码器用这种表示和自己历史中的循环特征,来计算更新框架图示以获得输入句子的预期框架语义表示所需的转换序列。

在训练模型时,SLING使用了TensorFlow和DRAGNN。

下面的动画展示了如何用一次转换将框架和角色增量添加到框架图中。

正如前面用简单例句所说明的那样,SLING使用ARG1这一角色来连接VERB和EVENT框架,EVOKE转换从文本中接下来的几个token中唤起指定类型的框架。同样,CONNECT转换将两个现有框架和一个特定角色连接起来。当输入耗尽,最后一个转换(STOP)执行完成,框架图示被视为已完成,并返回给用户,用户可以查看图示,得到句子背后的语义。

这个转换系统中有一个关键方面,就是会出现一个固定大小的框架注意力缓冲区,代表最近被唤醒或修改过的框架,如上图的橙色框所示。这个缓冲区捕捉了我们倾向于想起最近唤醒、提及、增强过的知识。如果框架不再使用,随着新框架的进入,它最终会被刷新出缓冲区。这个简单的机制在捕捉大部分框架间连接上都非常有效。

相关资源

SLING是用C++写成的,开源代码地址:

https://github.com/google/sling

相关论文SLING: A framework for frame semantic parsing

地址:https://arxiv.org/abs/1710.07032

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ’ᴗ’ ի 追踪AI技术和产品新动态

Google tensorflowlite正式发布,机器学习框架向移动端迈进了一大步!

(《麻省理工科技评论》中英文版APP现已上线,年度订阅用户每周直播科技英语讲堂,还有科技英语学习社区哦~)

昨天,谷歌正式宣布推出针对移动设备和嵌入式设备的轻量级解决方案 TensorFlow Lite。而在此之前,今年 5 月份的谷歌 I/O 大会上他们已经对此进行了预告。承袭 TensorFlow 在服务器、IoT 设备等平台的良好表现,TensorFlow Lite 的推出将使得移动端的机器学习模型部署得以大范围推广。

模型下载:download.tensorflow.org/models/tflite/smartreply_1.0_2017_11_01.zip

项目代码:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/models/smartreply

TensorFlow Lite 突出特征

轻量级:满足机器学习模型推断的小型二进制规模和快速初始化/启动的要求;

跨平台:可以满足在多个平台运行,首先是安卓和 iOS;

快速:专为移动设备进行优化,包括模型加载时间显著加快,支持硬件加速等等。

如今,越来越多移动设备内置了专门的自定义硬件以更加有效地处理机器学习工作负载。TensorFlow Lite 支持安卓神经网络 API(https://developer.android.com/ndk/guides/neuralnetworks/index.html),以充分利用新的可用加速器。

当加速器硬件不可用时,TensorFlow Lite 会退至优化的 CPU 执行状态,从而确保模型仍然可以在大量设备上快速运行。

图丨 TensorFlow Lite 的设计架构

组成部分

TensorFlow 模型(TensorFlow Model):保存在磁盘上、经过训练的 TensorFlow 模型;

TensorFlow Lite 转换器(TensorFlow Lite Converter):将模型转换为 TensorFlow Lite 文件格式的一个程序;

TensorFlow Lite 模型文件(TensorFlow Lite Model File):基于 FlatBuffers 的模型文件格式,经过适应最大速度和最小规模的优化。

TensorFlow Lite 模型文件被应用在移动应用程序中

Java API:安卓设备上适用于 C++ API 的便利封装;

C++ API:加载 TensorFlow Lite 模型文件并启动编译器(Interpreter)。安卓和 iOS 上都有相同的库;

编译器:使用一组运算符来执行模型。编译器支持选择性操作员加载。没有运算符的情况下,只有 70KB,加载了所有运算符,有 300KB。这比 TensorFlow Mobile 所要求的 1.5M 的明显低得多;

在选定的安卓设备上,编译器将使用安卓神经网络 API 实现硬件加速,或者在无可用 API 的情况下默认执行 CPU。

TensorFlow Lite 已支持多个面向移动端训练和优化的模型

MobileNet:一类能够识别 1000 个不同的对象的视觉模型,专门为移动和嵌入式设备而设计;

Inception v3:一种功能类似 MobileNet 的图像识别模型,虽然体积更大,但能提供更高的准确率;

Smart Reply:一种设备上的对话模型,能对接收到的会话聊天信息提供触发性应答。第一方和第三方通信应用可以在 Android Wear 上使用该功能。

Inception v3 和 MobileNets 已经在 ImageNet 数据集上训练。你可以通过迁移学习,在自己的图像数据集上重新训练。

超级项目经理应该掌握的99种武器中的33种:谷歌的心脏框架

Google的HEART框架是一个用来衡量提升用户体验的框架,每个字母代表一种用户体验测量标准:

Happiness (愉悦感):愉悦感是设计用户体验中的主观感受问题,像满意度、视觉感受、向别人推荐的意愿、易用性感知。可以通过好好设计问卷长时间监控相同的指标来看设计修改后带来的变化。推荐意愿即用户向其他人推荐的程度。产品被推荐意愿越高说明这个产品的用户体验/整体服务体验越好,也说明产品设计的越成功。这里可以通过NPS(Net Promoter Score)来做具现化的评估,通过置入产品的办法来收集用户声音,从而了解产品是否满足用户意愿。

Engagement (参与度):参与度是用户在一个产品中的参与深度,在这个维度上,通常用来作为一段时期内访问的频度、强度或互动深度的综合。比如单用户每周的访问次数,或者用户每天上传的照片数,这比总量要好——因为总量的增长可能是由更多的用户的产生,而不是更多的使用产生的。

Adoption (接受度):接受度是指用户在特定(短)时间内开始”真正”开始使用某个新功能/模块。顾名思义,要让用户快速认识/接受某个新功能/模块,就需要新手向导等相关的向导体系。提高用户接受度需要注意的设计要点:新功能通知与推送及新手向导。

Retention (留存率):留存度即对于一个功能或者产品,一段长时间内从开始参与到现在连续活跃的用户,留存率是互联网产品的主要获利因素,留存率越高说明领袖用户越多,越能带动越来越多用户参与进来。用户留存分为长线留存与短线留存,留存的核心就是“上线有事儿做”,互联网产品中最常见提升短线留存度的方式即签到得积分。

Task Success(任务完成率):任务完成度主要指核心任务的完成率,在该纬度下包括三个基础用户行为指标:完成效果、完成效率、操作错误率。

Google HEART模型的提出,可以让大家反思自己的产品设计思维,同时运用相关设计工具去提高HEART五项指标来完善用户体验,打造更好的产品。对于项目经理来讲,这个框架可以帮助我们评估项目中用户体验设计的绩效,特别是针对首页改版类的项目,具有非常重要的结果导向型价值,能够帮助我们客观评价项目的成败。

Google tensorflow机器学习框架及其应用

章敏敏,徐和平,王晓洁,周梦昀,洪淑月

(浙江师范大学 数理与信息工程学院,浙江 金华 321004)

:TensorFlow是谷歌的第二代开源的人工智能学习系统,是用来实现神经网络的内置框架学习软件库。目前,TensorFlow机器学习已经成为了一个研究热点。由基本的机器学习算法入手,简析机器学习算法与TensorFlow框架,并通过在Linux系统下搭建环境,仿真手写字符识别的TensorFlow模型,实现手写字符的识别,从而实现TensorFlow机器学习框架的学习与应用。

:TensorFlow;机器学习;应用

:TP181文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.10.017

引用格式:章敏敏,徐和平,王晓洁,等.谷歌TensorFlow机器学习框架及应用[J].微型机与应用,2017,36(10):58-60.

0引言

机器学习是一门多领域交叉的学科,能够实现计算机模拟或者实现人类的学习行为,重构自己的知识结构从而改善自身的性能。2016年初,AlphaGo以大比分战胜李世石,AI的概念从此进入人们的视野,而机器学习就是AI的核心,是使计算机具有智能的根本途径。TensorFlow是谷歌的第二代人工智能学习系统,是用来制作AlphaGo的一个开源的深度学习系统。

1机器学习

可以举一个简单的例子来说明机器学习的概念,使用k近邻算法改进交友网站的配对效果[1]。比如说你现在想要在交友网站上认识一个朋友,而交友网站上拥有每个注册用户的两个信息(玩视频游戏所耗时间的百分比和每年获取的飞行常客里程数),你想知道你会对哪些人比较感兴趣,这时候就可以使用机器学习算法建立一个简单的模型。可以将一些自己认为有魅力的人、魅力一般的人、不喜欢的人的这两个信息(玩视频游戏所耗时间的百分比和每年获取的飞行常客里程数)输入机器学习算法建立一个模型,如图1所示。当你想知道一个用户是不是你感兴趣交友的人时,输入信息,计算机通过这个模型进行计算,可以给你一个预测答案,这就是一种经典的监督学习算法。

机器学习算法有很多种类,上述例子说明的监督学习算法只是其中的一类。如果换种方式去实现这个结果,你有一堆如上的数据,但是并不对这些数据进行分类,让算法按照数据的分散方式来观察这些数据,发现数据形成了一些聚类,如图2所示,而通过这种方法,能够把这些数据自动地分类,这就是一种无监督学习算法。

机器学习的算法有很多,再比如用学习型算法来判断你需要多少训练信息,用什么样的更好的近似函数能够反映数据之间的关系,使得用最少的训练信息获得更准确的判断。

机器学习就是当机器想要完成一个任务,通过它不断地积累经验,来逐渐更好、差错减少地完成一个任务。

2TensorFlow的框架

2.1TensorFlow输入张量

TensorFlow的命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算。用MNIST机器学习[23]这个例子来解释一个用于预测图片里面的数字的模型。

首先要先获得一个MNIST数据集,如图3所示,这个数据集能够在TensorFlow官网上进行下载。每一个MNIST数据单元由一张包含手写数字的图片和一个对应的标签两部分组成。把这些图片设为“xs”,把这些标签设为“ys”。MNIST数据集拥有60 000行的训练数据集(mnist.train)和10 000行的测试数据集(mnist.test)。

每一张图片包含28×28个像素点。可以用一个数字数组来表示这张图片:把这个数组展开成一个向量,长度是784。在MNIST训练数据集中,mnist.train.images(训练数集中的图片)是一个 [60 000, 784] 的张量,如图4所示,第一个维度数字用来对应每张图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示为某张图片里的某个像素的介于0和1之间的强度值。

相对应的标签是从0到9的数字,用来描述给定图片里表示的数字。每个数字对应着相应位置1,如标签0表示为[1,0,0,0,0,0,0,0,0,0],因此mnist.train.labels是一个 [60 000, 10] 的数字矩阵,如图5所示。

如上述的这两个数组都是二维数组,都是TensorFlow中的张量数据[4],而这些数据就以流的形式进入数据运算的各个节点。而以机器算法为核心所构造的模型就是数据流动的场所。TensorFlow就是一个是文件库,研究人员和计算机科学家能够借助这个文件库打造分析图像和语音等数据的系统,计算机在此类系统的帮助下,将能够自行作出决定,从而变得更加智能。

2.2TensorFlow代码框架

TensorFlow是一个非常灵活的框架,它能够运行在个人计算机或者服务器的单个或多个CPU和GPU上,甚至是移动设备上。

可以从上面举例的MNIST机器学习来分析TensorFlow的框架。首先,要构建一个计算的过程。MNIST所用到的算法核心就是softmax回归算法,这个算法就是通过对已知训练数据同个标签的像素加权平均,来构建出每个标签在不同像素点上的权值,若是这个像素点具有有利的证据说明这张图片不属于这类,那么相应的权值为负数,相反若是这个像素拥有有利的证据支持这张图片属于这个类,那么权值是正数。

因为输入往往会带有一些无关的干扰量,于是加入一个额外的偏置量(bias)。因此对于给定的输入图片x它代表的是数字i的证据,可以表示为:

evidencei=∑jWi,jxj+bi(1)

其中Wi,j表示权值的矩阵,xj为给定图片的像素点,bi代表数字i类的偏置量。

在这里不给出详细的推导过程,但是可以得到一个计算出一个图片对应每个标签的概率大小的计算方式,可以通过如下的代码来得到一个概率分布:

y=softmax(Wx+b)(2)

建立好一个算法模型之后,算法内输入的所有可操作的交互单元就像式(2)中的图片输入x,为了适应所有的图片输入,将其设置为变量占位符placeholder。而像权重W和偏置值b这两个通过学习不断修改值的单元设置为变量Variable。

train_step=tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

TensorFlow在这一步就是在后台给描述计算的那张图里面增添一系列新的计算操作单元用来实现反向传播算法和梯度下降算法。它返回一个单一的操作,当运行这个操作时,可以用梯度下降算法来训练模型,微调变量,不断减少成本,从而建立好一个基本模型。

建立好模型之后,创建一个会话(Session),循环1 000次,每次批处理100个数据,开始数据训练,代码如下:

sess= tf.InteractiveSession

for i in range(1000):

batch_xs,batch_ys=mnist.train.next_batch(100)

sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

TensorFlow通过数据输入(Feeds)将张量数据输入至模型中,而张量Tensor就像数据流一样流过每个计算节点,微调变量,使得模型更加准确。

通过这个例子,可以管中窥豹了解TensorFlow的框架结构,TensorFlow对于输入的计算过程在后台描述成计算图,计算图建立好之后,创建会话Session来提交计算图,用Feed输入训练的张量数据,TensorFlow通过在后台增加计算操作单元用于训练模型,微调数据,从而完成一个机器的学习任务[5]。

3TensorFlow的应用

TensorFlow的支持列表里没有Windows,而人们使用的计算机大都是安装的Windows系统,虽然可以用Docker来实现在Windows上运行,但小问题很多,它支持得最好的还是基于UNIX内核的系统[6],例如Linux,因此选择Ubuntu 15.10。

安装成功之后,可以测试一下上述MNIST_sotfmax的模型。在程序中加入可以判断其预测概率的代码:

correct_prediction=tf.equal(tf.argmax(y,1), tf.argmax(y_, 1))

当tf.argmax(y, 1)预测值与tf.argmax(y_, 1)正确值相等的时候判断其为正确的预测:

accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

accuracy用来计算预测与完全错误判断之间的距离,也就是正确率,最后将它打印在显示屏上。

在导入代码之前,要先给予终端最高权限,不然在导入代码的时候会显示权限限制。成功导入代码后,命令行打印出测试结果的正确率,如图6所示为0.919 1。当然

这只是最简单的一个模型,有许多算法模型的正确率可以达到0.997左右。

4结论

TensorFlow是一个很好的利用机器学习算法的框架,而它的优势在于深度学习系统的构建,虽然在本文中没有涉及,但是从实验仿真中可以看到TensorFlow的模型构建简便,训练速度快。

参考文献

[1] HARRINGTON P.机器学习实战[M].李锐,李鹏,曲亚东,等,译.北京:人民邮电出版社,2013.

[2] TensorFlow官方文档中文版[EB/OL].(2015-11-18)[2016-11-25]https://wiki.jikexueyuan.com/project/tensorflowzh/.

[3] TensorFlow官方网站[EB/OL].[2016-11-25]https://www.tensorflow.org/.

[4] TensorFlow架构[EB/OL].(2016-06-12)[2016-11-25]https://blog.csdn.net/stdcoutzyx/article/details/51645396.

[5] Google TensorFlow机器学习框架介绍和使用[EB/OL].(2015-12-15)[2016-11-25]https://blog.csdn.net/sinat_31628525/article/details/50320817.

[6] 张俊,李鑫.TensorFlow平台下的手写字符识别[J].电脑知识及技术,2016,12(16):199-201.

谷歌推出了tfq,一个可以训练量子模型的机器学习框架

雷锋网讯,当地时间3月9日,Google与滑铁卢大学、大众汽车等联合发布TensorFlow Quantum(TFQ),一个可快速建立量子机器学习模型原型的开源库。

TFQ提供了必要的工具,将量子计算和机器学习技术结合起来,以控制并建模自然或人工的量子计算系统。该框架可构建量子数据集、混合量子模型和经典机器学习模型原型、支持量子电路模拟器,以及训练判别和生成量子模型。

随着近些年量子计算技术的发展,量子机器学习模型的研发可能会在医学、材料、传感和通信领域取得突破,甚至产生深远影响。不过迄今为止,业界缺乏发现量子机器学习模型的研究工具。该模型可以处理量子数据并在可用的量子计算机上执行。

实际上,早在2017年10月,谷歌宣布了开源量子计算软件OpenFermion的源代码,可让使用者利用其改编算法和方程,使之能在量子计算机上运行。2019年10月,Google 首席执行官Sundar Pichai宣布公司已实现量子霸权,通过新设计的解决方案首次实现了量子优势。

而此次TensorFlow Quantum的发布是继微软Azure Quantum的推出,以及霍尼韦尔等公司(雷锋网报道)取得阶段性成功之后的又一进步。

据博客所述,通过标准的Keras库,并提供与现有TensorFlow API兼容的量子电路模拟器和量子计算原语(primitives),可创建量子模型。

在3月6日提交给线数据库平台arXiv的论文中介绍了基于Python语言搭建的框架。

https://arxiv.org/abs/2003.02989

“我们希望该框架能够为量子计算和机器学习研究界提供必备工具,以探索自然和人工量子系统的模型,并最终发现可能产生量子优势的新量子算法,”论文中指出。“未来,我们希望扩展可支持的自定义仿真硬件范围,包括GPU和TPU的集成。”

其中,论文详细介绍了TensorFlow Quantum软件堆栈,该软件堆栈由开源量子电路库Cirq和机器学习平台TensorFlow两部分组成。

该论文有超过20名作者,有来自Google X实验室、滑铁卢大学量子计算研究所、NASA 量子AI实验室、大众汽车,以及Google Research等部门。

据了解,TensorFlow Quantum的发布与TensorFlow Dev Summit的召开在同一周,后者是机器学习从业人员的年度会议。不过,由于新冠肺炎的持续影响,谷歌取消了此次活动的线下举办方式。(雷锋网)

相关链接:https://ai.googleblog.com/2020/03/announcing-tensorflow-quantum-open.html

安卓杂货学校今天是新的:首先,天气开始显现迹象,在没有谷歌服务框架的情况下玩外国应用程序,高质量的创意广告聚集地,等等

今日杂货派继续营业咯,这次是觉主当班。我们几个派老板会从各大应用商店进点杂货,所谓杂货,上到优质的应用,中到实用的教程,下到热腾腾的行业资讯,只为丰富大家的玩机体验,当然还保质保量。以下是今日杂货派上架的新玩意,欢迎挑选。

快报:一加天气 App 初见端倪

一加手机可谓是这两年手机新兵里最低调稳健的一员了,声势不大,但却低调的卖出了百万台设备,不得不令人折服。但一个遗憾是,过继 OPPO 家的 Color OS 在优秀的硬件面前就相形见绌了。前段时间,一加科技 CEO 刘作虎宣布研发的「氢OS」现已开始浮出水面。

一加手机官方微博今早宣布,一加天气 App 体验版,即将在周一上线。产品是否真的会像官方宣传的那样:独特的 UI 风格、轻盈灵动的动效、简明抽象的色彩、丰富有趣的体感交互,我们拭目以待。届时少数派也会就其天气 App 发布测评文章,敬请期待。

Xposed 模块分享:不装 Google 服务框架照样玩转国外应用

在大天朝,Google Play Services 一直是个伤痛。不装吧,有些应用没得玩,装吧,感人耗电伤不起,这时候一项折衷的方案就来了,它能让你不装全套服务也能玩转一些应用和游戏。

这款图标有点丑陋的应用叫做 This App Will Run Without Google Play Services。字如其名,就是不安装 Google Play Services 也能运行部分需要依赖 Google 服务的应用,需 Xposed 框架支持。

值得注意的是,它并不能替代 Google 服务,只在一些非 Google 直系应用弹窗提醒需要服务(但实际并不需要)的应用才会生效,需要的机油们可以自取所需。

骑行控:Android 平台「唯二」好用的骑行应用

说到骑行数据记录、跟踪应用,很多 Android 用户会想起「行者」这款应用,今天派老板要给大家推荐一款同样优秀的骑行应用:「骑行控」,这款可能是 iOS 平台最出色的骑行应用现已正式登陆 Android。

与前辈「行者」相比,骑行控最大的优势在于这一副容颜了。Material Design 的加持,确实要比行者好看一些。在功能上,它可以记录行程、热量、极速、均速等数据,在休息的时候还可以暂停记录,此外,它还支持云同步和离线地图,感兴趣的骑行爱好者不妨试试。

最美创意:你可能从未如此大规模的看过优质广告

如果你是个创意爱好者,那么恭喜你,这款应用就是为你而生的。最美创意是一款专注于将「优质广告」聚合的一款应用,采用了流行的 Material Design,舒服不刺眼的应用配色都会让用户想多看一个创意广告的。

在主界面,分为「所有、专辑、分类」三个标签页。如果你只是想看看创意广告,不妨在「所有」标签页下一个接一个的看。如果你想找寻一些经典的广告,可以在分类中索引,当然也可以点开右上角的关键字「搜索」。作为一款创意合辑应用,我可能不一定会天天打开它,但每次打开,我都会花很长时间去感受优质的广告创意。

需要说明的是,虽然名为「最美创意」,但它和应用推荐站「最美应用」并没有关系,只是拥有共同的「最美」前缀罢了。

网站推荐:关于 Material Design,你知道的 & 你不知道的

不知道大家有没有发现,Android 杂货派最近有些天空缺了,那是因为我们几个派老板在商量业务升级的事情。经过讨论,我们决定,不定期的为大家推荐一些私藏的好玩网站,而不再局限于应用推荐了,希望大家挑选的开心。

今天先给大家推荐一个关于 Material Design 的网站:。在这里,你可以查看设计师的概念稿、采用规范的应用实例、通用工具等。此外,还有关于材料设计的博客内容和设计师相关工作招聘,相信对 Material Design 感兴趣的用户会喜欢这个网站的。

以上就是今日的 Android 杂货派上新内容。如果你还有更多好玩实用的货物要推荐给我们,欢迎在评论中或在 社区与派老板分享,也可以在微博关注少数派官微与我们交流。