Showing posts with label Google. Show all posts
Showing posts with label Google. Show all posts

Wednesday, July 12, 2017

How does YouTube's recommendation algorithm work?

Answer

In a recent paper published by Google, YouTube engineers analyzed in greater detail the inner workings of YouTube’s recommendation algorithm. The paper was presented at the 10th ACM Conference on Recommender Systems last week in Boston.

YouTube recommendations are driven by Google Brain, which was recently open-sourced as TensorFlow. By using TensorFlow one can experiment with different deep neural network architectures using distributed training. The system consists of two neural networks. The first one, candidate generation, takes as input user’s watch history and using collaborative filtering selects videos in the range of hundreds. An important distinction between development and final deployment to production is that during development Google uses offline metrics for the performance of algorithms but the final decision comes from living A/B testing between the best performing algorithms.

Candidate generation uses the implicit feedback of video watched by users to train the model. Explicit feedback such as a thumbs up or a thumbs down to a video are in general rare compared to implicit and this is an even bigger issue with long-tail videos that are not popular.

To accelerate training of the model for newly uploaded videos, the age of each training example is fed in as a feature. Another key aspect for discovering and surfacing new content is to use all YouTube videos watched, even on partner sites, for the training of the algorithm. 

This way collaborative filtering can pick up viral videos right away. Finally, by adding more features and depth like searches and age of video other than the actual watches, YouTube was able to improve offline holdout precision results.
The second neural network is used for Ranking the few hundreds of videos in order. 

This is much simpler as a problem to candidate generation as the number of videos is smaller and more information is available for each video and its relationship with the user. This system uses logistic regression to score each video and then A/B testing is continuously used for further improvement. The metric used here is expected watch time, as expected click can promote clickbait. 

To train it on watch time rather than click through rate, the system uses a weighted variation of logistic regression with watch time as the weight for positive interactions and a unit weight for negative ones. This works out partly because the fraction of positive impressions is small compared to the total.

YouTube’s recommendation system is one of the most sophisticated and heavily used recommendation systems in the industry. The paper just scratches the surface but nonetheless gives several useful insights regarding engineering deep learning systems.

Source:https://www.infoq.com/news/2016/09/How-YouTube-Recommendation-Works

What are Google’s long-term aspirations for the Go programming language?

Answer


Google's contributions to DevOps culture -- the Go programming language and site reliability engineering title -- strike out in the right direction, though there's still a ways to go.

Modern IT organizations show growing interest in new programming languages, driven to meet business pressures for speed and agility without breaking anything. Google's Go language is gaining significant traction, especially in operations.

Today's most popular languages are based on object-oriented programming models, which are closely tied to system components such as the operating system. Established languages are often not as modular -- able to be broken up into small pieces and processed quickly -- as developers would like.

Go -- an infrastructure runtime language created in 2009 by Google engineers Robert Griesemer, Rob Pike and Ken Thompson -- was designed to address those limitations. In some ways, the Google Go language's design mimics the virtualization movement, wherein virtualized systems feature an abstraction layer that separates applications from hardware-level interfaces.

Go is modular: Its executables function autonomously with no external dependencies unless deliberately specified. Modern applications are large and complex, and processing runs across many systems. The Google Go programming language's modularity provides strong concurrency features, which speeds up execution of networked, distributed services, like web servers and containers.

Google attempted to combine the speed of a dynamic language, such as Python, with the performance and safety of a compiled language, such as C, in the Go programming language. It is flexible and lightweight with user-friendly syntax, has fast compile times and is scalable.

Consequently, Go has been garnering acceptance. The language has done well in systems infrastructure programming and development of new, large, complex applications relying on containers. It first appeared on market research firm RedMonk's annual survey listing the 20 most popular programming languages in 2015, and rose to number 15 in the rankings in 2016, holding steady in the Q1 2017 results.

A long way to Go

Historically, tension arose between development and operations teams because they have conflicting goals: Developers want to release new features to the masses as quickly as possible, and operations teams desire to prevent updates from disrupting the existing system infrastructure. Ops often tries to put the brakes on new releases, while development looks for ways to sneak around traditional operations checks.

The Google Go language has quickly emerged as a tool that may help operations and development staff clear these traditional barriers. Developers get dynamic, modular coding, while the application support group can trust compile performance and scalability in production. However, Go is missing important ecosystem elements that hold it back from a mass following.

Go has shortcomings. The language does not mesh well with traditional desktop graphical user interfaces (GUIs). A few frameworks are available, but more work is needed on cross-platform GUI libraries.

Another issue is a byproduct of the language's independence from underlying elements, such as an operating system. Go is not as good of a fit for managing low-level system components, such as embedded systems design, kernels or device drivers.

Additionally, the Go developer ecosystem is immature. Few commercial programming, development, and management systems are available. Third-party help, such as systems integrators and channel partners, is difficult to find.

The pieces needed to build up that support field are largely missing. "Right now, very few organizations offer to Go training and certification," Driver said.

Eduonix Learning Solutions Pvt. Ltd., a training company based in Navi Mumbai, India, offers a course covering issues such as Go's development environment, syntax and language structure, toolchain and dependencies. Udemy, which offers over 45,000 courses online, runs one class that focuses on Go fundamentals and how to apply the language to real-world scenarios. Pluralsight LLC's class, The Go Programming Language, looks at topics including concurrency, branches, and loops.

So, what is Go's future? Driver noted that the programming market in the future will probably be more fragmented than in the past, where a few languages dominated development. Go may not dominate like Java or C did during their heydays, but its use could become as widespread as Python.

Next Steps

Google is also behind an emerging DevOps concept dubbed site reliability engineering (SRE). SRE bridges ops and dev with a mathematical formula for green-lighting or red-lighting software launches. A team of dedicated engineers with ops skills continuously oversees software reliability during development. Proponents say SRE prevents a bored, frustrated ops team and keeps production stability from thwarting development creativity.
Source link:
http://searchitoperations.techtarget.com/tip/Googles-Go-language-seeks-DevOps-middle-ground