Matrix factorization for recommendation systems

When someone has too many things to judge what is best for him/her, recommendations are really helpful. From simple list of popular bookmarks to some more personalized recommendations, many types of algorithms are used for the purpose of recommendation.Two of the most popular algorithms in recommenders are “SVD” and “ALS”, both factor the user to item matrix A into the user-to-feature matrix U and the item-to-feature matrix M.

The SVD stands for “Singular Value Decomposition” which is a popular factorisation method of a matrix, A=UΣMkT . The two outside factors are orthonormal for example. The k, the dimension of matrix Σ would be interpreted as the number of extracted features of items and users in data. The SVD would take much time to compute and hard to parallelize on the machine. It is also not good at dealing with missing values. When a dataset for recommendation is sparse input,  missing values are considered 0 scores even if the user may give the item high score.

In contrast,  Alternating Least Squares is much faster but less precise. It refers to any means of factoring A≈ Uk MkT where Uk and Mk are low ranks. One of the merit to utilise this algorithm is here you can customize exactly what is considered in the loss function. For example, you can ignore missing values. The demerit may be you don’t get much meaningful information from the form of a matrix of U and M. but is not critical much in some practical case. The factorization here just involves alternating solving for Uk and Mk by fixing the other. When fixed, it is a problem that has a direct analytical solution, one which is entirely parallelizable on the machine.

Both SDV and ALS have several extension version of the algorithm, but the basic idea is that discussed above. When you deploy recommendation systems, it would be necessary to care about the property of algorithms and determine after observation of the dataset you have.

Amazing Technology

A magic thing I am working on at ICAN Future Star is called Ionic. This is a beautiful, open source front-end SDK for developing hybrid mobile apps with web technologies. More specific, Ionic is a powerful HTML5 application development framework, known as the Advanced HTML5 Hybrid Mobile App. It offers a library of mobile-optimized HTML, CSS and Javascript components, gestures, and tools for building highly interactive apps. Built with Sass (a CSS extension language) and optimized for AngularJS. In other words, Ionic is a mobile solution based on AngularJS, which can help you use those web technologies such as HTML, CSS and Javascript experience to build near native mobile applications.

“Performance” is the first priority in the art of Ionic’s design. Their developers said: “Speed is important. So important that you only notice when it isn’t there”. I totally agree with this argument. Thus, they make a lot of efforts to achieve the best performance. For example, Ionic uses minimal DOM manipulation; hardware accelerated transitions and zero jQuery. “Appearance” is another important aspect it focusing on. First of all, it is a Native-focused framework. With Ionic, you can build an app that is almost the same with a native app. At the same time, it also provides tons of clean, simple, functional and popular mobile components, typography, interactive paradigms, and a gorgeous (yet extensible) base theme. In addition, Ionic is the most popular framework as their slogan: “Learn Once, Use Anywhere”. Another reason is that Ionic enable a team to work with the concept of MVC since it integrated with AngularJS which builds the core architecture for Ionic. Thus, they are “a match made in heaven”.

Thanks to this job, I could access to this latest web technologies. At the past month, after I finished the basic study of Ionic and AngularJS, I could work on the localization of our app. Fortunately, it is progressing well. The first version for Chinese is almost done. I hope I can release it as soon as possible.

Teamwork is the key – do not underestimate it!

Because you constantly hear about teamwork being good, it may actually cause an opposite effect and make you lose interest in building a friendly, though the professional relationship with co-workers. And it is a perfectly understandable reaction. We tend to engage more in things and concepts which are new and exciting, so how to approach ‘teamwork’ if you find it tiring?

It is easier to see the benefits when looking from own perspective. In any job, it is important to feel that one’s work counts, that you are not just a ‘human resource’, but your decisions actually matter. To learn how important you are in the company you have to know what other team members currently work on and how your tasks correspond to theirs. It is an instantaneous confidence boost, to learn that somebody’s work relies on yours, because without you it would just not work out.

At ICAN, each team member has a presentation on their progress every week. I like to keep them short,  to give an overview of my work and to trigger a discussion afterwards. The informal style of communication within a team is very valuable. Sometimes it is just complaining about ‘unsolvable’ bugs and struggle in general, but it gives a sense of belonging and encourages helping one another. Thanks to this, everybody manage to solve their problems faster and learn from each other in the same time, which is awesome.

Teamwork should not be forced. It ought to be caused by the curiosity of other’s work, will help and a common goal. If you remain unconvinced, think of it this way, getting the job done quicker is exciting, helping others is exciting and last but not least, proving one’s value as an employee and as a person everyday is exciting. Keep up the good work!