☕ NLP with Images?
We talk about how to train your Language Model with Images in addition to Text, an awesome German Challenger Bank and a medium difficulty programming problem.
Good Morning Planet Earth!
Hope you’re all having a fantastic day!
Let’s get to the Interview Question, Daily News and Previous Solution!
Interview Question
You are given an array of integers where every integer occurs three times except for one integer, which only occurs once. Find and return the non-duplicated integer.
Input - [6, 1, 3, 3, 3, 6, 6]
Output - 1
Input - [13, 19, 13, 13]
Output - 19
Do this in O(N)
time and O(1)
space.
We’ll send a detailed solution tomorrow, so make sure you move our emails to primary, so you don’t miss them!
Gmail users—move us to your primary inbox
On your phone? Hit the 3 dots at top right corner, click "Move to" then "Primary"
On desktop? Back out of this email then drag and drop this email into the "Primary" tab near the top left of your screen
Apple mail users—tap on our email address at the top of this email (next to "From:" on mobile) and click “Add to VIPs”
Industry News
Researchers at UNC devise clever way to train Language Models with Images
Language Models have gotten very impressive this year with OpenAI’s GPT-3. GPT-3 can handle complex tasks like writing poetry, funny jokes, HTML/CSS, question-answering, summarization and much more. However, GPT-3 has only been trained on text. If you think about how humans learn, it’s with text and images. The visual aspect is critical. So, what if the language model was also trained on images?
The main hindrance is that there simply isn’t enough data to do this type of training. GPT-3 was trained with nearly 500 billion tokens (words) and getting a labeled image dataset of that size is not possible.
Hao Tan and Mohit Bansal from UNC have designed a technique to get around that, called Vokenization. This involves using Vokens (Visual Token), an image that is related to a group of Tokens. An example of a Voken might be a picture of a child holding a toy and the related tokens might be “child”, “toy”. They take a relatively small image captioning dataset and then use it to train a Vokenizer. They then use the Vokenizer to generate Vokens for a large language dataset. With these Vokens, they train a visually-supervised language model.
Their new language model has shown consistent progress in tasks that are used to measure how well a language model performs (tasks like SQuAD - Stanford Question Answering Dataset, which tests how well a system can answer questions given a passage).
Here’s an awesome video that goes into depth on the paper.
German Challenger Bank Vivid Money raises $17.6 million dollars in their Series A round
Challenger banks have been all the rage in the fintech space with the rise of neobanks. Neobanks are banks with no physical locations, only an online presence. This allows neobanks to save on costs and pass the savings down to customers.
Vivid Money is another one of these neobanks and they’re offering some pretty nifty features to customers. For example, the bank will analyze your transactions, identify all your recurring subscriptions and allow you to block them (no need to go through the annoying cancellation process). Using the mobile app, you can unlock/lock your debit card, send money to other people, invest in stocks and ETFs and do much more. It’s an amazing bundling of the functionality of many different apps (Robinhood, Venmo, Mint, etc.) all into your banking app.
Like many other challenger banks, Vivid Money doesn’t handle the “banking infrastructure” themselves. Instead, they depend on Solarisbank, which is a “Banking-as-a-service” platform. Solarisbank has a German banking license (navigated the regulatory hell) and then provides APIs for challenger banks to use their banking services.
Previous Solution
As a reminder, here’s the previous question
You are given a linked list.
Sort the nodes in the list in ascending order and return the sorted linked list.
Do this in O(n log n)
time.
Here’s a link to the question in LeetCode
Solution
We can solve this question with Mergesort.
We first split our Linked List into two halves.
Then, we recursively call our Mergesort function on both halves.
Then we merge both halves together in ascending order to create our sorted linked list.
If you’re unfamiliar with mergesort, definitely check this out.
Here’s a Python3 REPL with the code!
Thanks for reading and be sure to reply back with any feedback! I love critical feedback!
Best,
Arpan