The Activism Platform organizes and promotes activism by connecting users to nonprofit organizations:
- Promote accessibility with searching for organizations feature
- Promote impact and reach with recommending organizations feature
- Promote relevancy with crowdsourcing from users feature
This web app is our capstone project for our Google STEP Internship. This internship offers first and second-year undergraduate students the opportunity to work on a software project alongside other STEP interns and full-time Googlers, and provides the chance to bridge the gap between academic understanding and practical professional experience.
Here are some of the main features of our web app
Our searching functionality helps make organizations more accessible to users. You can search by keyword or by category.
Simply type a keyword or key phrase of your interest in the search box and hit enter or click the search icon. It will then take you to the results page. You can search from any page of our website by clicking on the search icon located in the top navigation bar.
Interested in a category of organizations? We got you! Powered by the Google Cloud Natural Language Content Classification, we have grouped organizations by their names and mission statements for your convenience. Click on the arrow on the side navigation bar to explore the categories, and click on a category's text to see organizations in that category.
We value your opinion! If you like an organization, give it a thumbs up. If you dislike one, you can also give it a thumbs down to help other users. We rank the search results for either keyword or category by the net number of thumbs ups. Net thumbs ups = number of likes - number of dislikes, so go ahead and give your favorite nonprofit a thumbs up!
Believe it or not, we have collected information on thousands of organizations for you! We only show 10 results per page. You can navigate through the other results with our intuitive pagination UI!
We use Machine Learning (ML) to recommend organizations that a user may like to promote impact and reach of nonprofits.
We assigned each organization four other nonprofits that are "Like this." We achieved so with text similarity analysis based on the names and mission statements of all the organizations in our database. Here is our process for text similarity:
- Remove stopwords (a, the, is etc.), numbers, and punctuations from sentences, and convert all text to lowercase
- Lemmatize the sentences by grouping inflected forms of words together (i.e. "likes" is the same as "like")
- Embeds sentences into weighted vectors with the TensorFlow Universal Sentence Encoder
- Train a k-Nearest Neighbor (k-NN) classifier on the weighted word vectors
- Feed our model an input (name + mission statement of an organization) and let our ML model find most similar organizations to the input
We can also make very personalized recommendations to users based on their ratings of organizations and other users' ratings. The idea is that people of similar interests are probably going to like the same organizations. Our collaborative filter not only captures the similarity among users, but also utilizes the text similarity results from the previous section. Here is our workflow:
- Fetch the user ratings: thumbs up is stored as 1.0 and thumbs down is stored as -1.0
- Generate matrix with (number of organizations) rows and (number of users) columns from user ratings
- Fill unrated organizations in the matrix with ratings of similar (text similarity) organizations from the same user
- Run Singular Value Decomposition (SVD) on the filled matrix, and for dimensionality reduction, only keep k most significant singular values
- Recompose a matrix from SVD output as our prediction
- Find three new organizations with the highest predited ratings to recommend to each user
Our web app promotes relevancy with a crowdsourcing feature along with admin tools to moderate user uploaded content.
Know an organization that is not yet in our database? Please contribute! You can enter the organization's name, website link, and mission statement on our upload page.
To ensure the high quality of the content in our database, we built an admin console to review all uploaded submissions. The admin console displays existing organizations of the same name along with the submitted information for verification. An admin can either approve (send new organization to our database) or not approve (discard this uploaded entry).
The nonprofit organizations data is acquired through scraping publicly available information from the Internet. We obtained a list of names of nonprofits from Google for Nonprofits (G4NP). We then searched the names of organizations on Google and fetched the first result. The link and description are processed based on the Google search results.
Frontend:
- Figma: UI design sketches
- Material Design - Design system for the frontend
- UIKit - CSS and Javascript framework
Backend:
- Apache Maven: Build and deploy web app
- Google Cloud Platform (GCP)
- App Engine (Java 8): Hosts web servlet
- Cloud Natural Language: Classify nonprofit category from text
- Cloud SQL for MySQL: Database storing organization and user info
- Gson: Java library for sending and reading information in JSON format
- MySQL: Relational database to store data and make queries
- Protobuf: language independent communication
Machine Learning and Scraping:
- Beautiful Soup: Scraping
- Nltk: natural language (stopwords, word stems)
- Numpy: Python array operations
- Pandas: Dataframe in Python
- Scikit-learn: k-Means, k-NN machine learning implementations
- Selenium: Web driver for scraping
- TensorFlow: Universal sentence encoder
- Iris Beckham - GitHub - LinkedIn - Frontend
- Tony Pan - GitHub - LinkedIn - Data Acquisition and Machine Learning
- Elijah Rodriguez - GitHub - LinkedIn - Backend
A big thank you to the following people, groups, and organizations that have helped us with this project:
- Gold Intelligence, Attribution, Google Ads for hosting us and improving Machine Learning performance.
- Google for Nonprofits (G4NP) for providing data, legal advice, and suggestions on how to use and present data to users.