Using Vertex AI to Match Nonprofits with Customers: A Hackathon Experiment
Inspired by a recent Square + Google Hackton around Google’s AI services, I gave the model training service using Vertex AI a try using Charity Navigator’s open dataset of non-profit organizations [1], and here are the results.
Even though data from Charity Navigator has a great selection of attributes, selecting the attributes to train the AI model on was a challenge. Sending the whole dataset and picking columns to train on, as I have learned, doesn’t quite work well as the Vertex AI training process will try to auto-select columns and in most cases fails to complete training due to the training set not having enough labels (i.e. missing column values for some rows) and in one instance not having enough resources to complete a step in the training.
Pre-processing the data helped resolve training issues by filtering out data that didn’t have enough labels and focusing the model training to only columns that are applicable to the goal at hand. In this case, the goal of the model training was to train a model to use descriptions that are used for non-profits in official filings and given a random text, predict what non-profit organization a potential customer might be interested in supporting.
After pre-processing the data, Vertex AI was able to generate a model and with a few clicks deploy it to an endpoint so that scoring is accessible with CURL commands.
To fully make use of the scoring endpoint, I deployed a three-tier application from the Gcloud stack [2] which uses containerized Go Apps, with MySQL, and Redis cache running on CloudRun. The front-end CloudRun container runs outside of the virtual private network on NGINX so that it is accessible from the public internet.
With a few updates to front-end and back-end codes, I was able to add sample product inventory and wire up the menu selections so that given a product item description, I could send a request to the ML endpoint to get a relevant charity category.
The cloud build process from Google Cloud also makes the process easy by providing a way to link a GitHub repository so that changes are deployed to Gcloud containers when the code is pushed to the main branch.
Here is a link to the Github Repo: Project Elara