Inspiration

Traditionally, an user has a need and he turns to airlines/tours/google search for customizing his vacation. Now, we take advantages of a customer's desire, desire to explore new places, that creates needs to motivates him to place an order.

What it does

Reverse the traditional booking system by recommending a new place that an user hasn't been to.

Step1: Once the user give us a keyword, for example "Waterfall", we will randomly give them 10 photos to choose, which are waterfalls photos from different locations that users may or may not know.

Step2: We will recommend customized travel packages or flight tickets to users based on what they chose.

How we built it

We thought about what would the best user experience is. We thought about app, chatbot, and google-style search. App is heavy to build, and difficult to acquire users to download. Chatbot seems to be the future of no UI by conversational strategy, but it’s verbose, spamming and not intelligent enough to serve with great customer experience. The best UX would always be one simple action, so we choose google-style search, always single text box, and intelligently use NLP and ML to understand what users really need.

We choose among NLP and ML libraries, from traditional TF-IDF, LSA, PLSA, LDA, to deep learning technologies, word2vec, seq2seq, lda2vec, tensor2tensor…etc, we finally chose Stanford CoreNLP OpenIE (https://nlp.stanford.edu/software/openie.html), with the advantages of extraction of relation tuples, and without the need of further modeling on named entities.

After we understand what users want, e.g. a place “Taiwan”, a scene “Waterfall”, an experience “Peaceful”, a natural phenomenon “Aurora”, an animal “Cheetah”…etc. We search for Flickr photos with geospatial data and get the most relevant 10 for users to select from. When users select one of the photos, we would check from the geospatial data to find which cities they are by our own database, and find which airport covered by FinnAir is the nearest (by building our own R-tree indexing), and then check the flight itineraries from FinnAir API.

The whole system design tends to be minimal, with minimal dependencies and handles one simple use-case, but with the possibilities to extend wildly.

We chose Python Flask framework to build our backend server, with wrapper to connect to Stanford CoreNLP server, and with the easiness to extend with NTLK and Tensorflow in the future, and provide our own API endpoints. Our frontend chooses AngularJS to build SPA and connect to our backend.

Challenges we ran into

Building data sets that are useful for our search is tedious. Photos with geospatial data and compelling to users are not widely available. We chose among Google Image Search, Instagram, free stock photos, and Flickr, and eventually we have to use Flickr for convenient sake, and high-quality paid stock photos are not considered at the moment.

NLP needs special attentions to specific cases, e.g. “Santa Claus in summer” would need either photo data sets have enough travel cases included, or we need an extra database to set rules on unique travel experiences. Both needs time to build high-quality data sets.

Understanding different dimensions (e.g. money, date, season…etc) would be helpful to extracting users’ needs, but libraries spreading around in different programming languages make it troublesome (not difficult) to integrate. Tensorflow in C++, Facebook Duckling in Haskell, Stanford CoreNLP in Java…etc, they all have wrappers to call from different programming languages, but integrating different NLP models would be a hazard, and starting several servers for NLP is not resource efficient (as it can be done standalone). So we choose to minimize dependencies and try our best to illustrate the desired flow by our coding.

Accomplishments that we're proud of

  1. Launch an interactive design for an user to explore a new travel.
  2. Build an API that get back the geolocation data from each photos (to know the nearest airport that Finnair does operates).
  3. Create needs for having a trip instead of waiting for needs from customers.

What we learned

  1. Iterative development instead of having ambitious goals but did nothing in the end.
  2. A matched teammate is much more important than an idea.

What's next for Finnair Trip

Build more applications on top of it. For example, combining the chatbot that Finnair has been used so far.

Built With

Share this project:

Updates