My final project is underway, and it feels like I get to return to my software engineering roots with these powerful, new deep learning techniques in my tool belt. This is a welcome opportunity to flex what I’ve learned this summer.1
It is also quite freeing to be able to focus once again on a single objective for a few weeks, in contrast to my one-new-thing-a-week pace from earlier in the program.
I have been working from Chicago this August – this is my first trip to the Windy City, and the change of scenery has brought inspiration and refreshment.
I visited the Chicago History Museum and found the Amplified: Chicago Blues exhibit particularly inspiring towards my final project aim of paying homage to good, expressive music commentary.
It was also a sobering reminder that not all commentary is worth amplifying or computationally imitating.
“eclectic guitar, amplified harp solos, and driving rhythm section” - this is the ideal type of writing I’d love to consistently see my model generate. and yet, I must also be wary of amplifying the troll-like writing on the right, i.e., “screaming, idiotic words, and savage music” - which, in this case, is also blatantly racist.
A good friend of mine here in Chicago reminded me of the social responsibilities that I must strive to always keep in mind, even when developing in a seemingly harmless domain (because what could be so bad about automatic music commentary, right?).
If I make contributions towards realistic text generation, what am I enabling? Automated fake Yelp reviews, fake news, troll bots? How can this tech be re-purposed, and how should this affect the work that I do? These are questions that I continue to grapple with.
weirdly motivating for me right now https://t.co/6tUGNSPqva
— Nadja Rhodes (@ohnadj) August 8, 2018
re:actually building out this final project exciting, yet slightly intimidating in the given time frame.
For several weeks now, I have expressed doubt in the genre information I collected in weeks 2-3 of the program. Genres were collected (along with song audio features) as a way of conditioning my generated music commentary on something concrete about the song being commented on.
This week, I finally revisited and addressed the situation by collecting new genre information from the Spotify API instead. The genres themselves are extremely fascinating, and I had no idea they would be so amazingly specific!2
“vapor twitch” – “indie poptimism” – “stomp and holler” – these new genres go far beyond the bland labels of pop/rap/rock/r&b/country that I had previously gathered. These genres feel like they are really trying to tell me something, as expressively and concisely as possible.
At first, this discovery was actually a little discouraging: I could only imagine how long the genre data tail would be once applied to my commentary collection. I worried that this would result in conditioning that really isolated certain writing, greatly restricting the creativity of my model. Imagine a request for commentary on a “chamber pop/chillwave/neo-psychedelic/nu gaze” () song came in to my model, but it’s never seen such a genre combination before – what will it do? (I’m still not sure actually, so stay tuned for when I get to conditioning!)
Nevertheless, I was able to run some numbers to find that the tail doesn’t appear absolutely unmanageable. I also applied some simple genre clustering to further reduce the tail.
When all was said and done this week, I had 130 unique genre labels over almost 20,000 writing samples. There are 1,135 unique genre combinations, since each sample can contain multiple genres.
I am using this notebook to track data revision history from now on: quilt.ipynb
. Check it out for a more detailed sketch of the genre data cleaning I performed this week. I also switched from Git LFS to Quilt this week for better data packaging and versioning.
When I started clustering genres, many neat insights emerged. This section turned into a spiritual successor to my earlier bias investigation.
The Every Noise project enabled some deeper diving into how to better interpret these somewhat opaque labels. It provides “an algorithmically-generated, readability-adjusted scatter-plot of the musical genre-space”, where:
“in general down is more organic, up is more mechanical and electric; left is denser and more atmospheric, right is spikier and bouncier.”
There are scatter plots to show both similar and dissimilar genres to a specific genre, as well as which artist tend to belong to a genre.
It can tell you what it believes is the “most representative” song for a genre label. It links to genre-based playlists on Spotify.
Let’s take a look at the top genres in my commentary collection:
Top 25: 1. vapor soul (4344), 2. indie poptimism (3886), 3. pop (3799), 4. indietronica (3462), 5. electropop (3406), 6. indie r&b (3242), 7. tropical house (2359), 8. modern rock (2171), 9. indie psych-rock (1942), 10. indie pop (1845), 11. shimmer pop (1827), 12. edm (1826), 13. chillwave (1705), 14. rap (1452), 15. indie electro-pop (1451), 16. alternative dance (1418), 17. metropopolis (1303), 18. hip hop (1230), 19. pop rap (1174), 20. nu disco (1086), 21. dance pop (1054), 22. chamber pop (996), 23. aussietronica (973), 24. art pop (973), 25. house (917).
I picked out a few genres to inspect further that felt both representative of the most popular sounds in the data set, as well as distinct from one another. I wanted to get a feel for what these genres sound like, as well as their relationships to other genres.
Genre (Rank) | Most Representative Track | Similar Genre Map | Similar Top Genres |
---|---|---|---|
vapor soul (#1) |
“No One - Kayge Calypso & DUNN Remix” by Mothica |
http://everynoise.com/engenremap-vaporsoul.html | indie poptimism (#2), indietronica (#4), electropop (#5), indie r&b (#6), tropical house (#7), modern rock (#8), indie psych-rock (#9), indie pop (#10), shimmer pop (#11), chillwave (#13), indie electro-pop (#15), metropopolis (#17), aussietronica (#23), vapor twitch (#26), vapor pop (#30), gauze pop (#33) |
edm (#12) |
“IDWK” by DVBBS |
http://everynoise.com/engenremap-edm.html | pop (#3), tropical house (#7), house (#25), electro house (#31), electronic trap (#38), big room (#42), deep tropical house (#46), brostep (#48), australian dance (#54), tropical pop edm (#56), bass trap (#58), progressive house (#59), progressive electro house (#71), deep groove house (#74), complextro (#81), catstep (#91), chillstep (#99), trance (#124) |
rap (#14) |
“Bigger Than You (feat. Drake & Quavo)” by 2 Chainz |
http://everynoise.com/engenremap-rap.html | pop (#3), indie r&b (#6), pop rap (#19), dance pop (#21), r&b (#53), trap music (#40), gangster rap (#65), dirty south rap (#98), hip hop (#18), southern hip hop (#39), underground hip hop (#43), conscious hip hop (#64), alternative hip hop (#67), urban contemporary (#76), hip pop (#121), hardcore hip hop (#130) |
nu disco (#20) |
“So Good to Me” by Chris Malinchak |
http://everynoise.com/engenremap-nudisco.html | indietronica (#4), tropical house (#7), chillwave (#13), alternative dance (#16), new rave (#27), filter house (#44), deep house (#51), disco house (#86), balearic (#123) |
electronic (#47) |
“Born Slippy (Nuxx)” by Underworld |
http://everynoise.com/engenremap-electronic.html | indietronica (#4), electropop (#5), chillwave (#13), alternative dance (#16), art pop (#24), new rave (#27), indie rock (#29), filter house (#44), dance-punk (#45), chamber psych (#49), downtempo (#52), microhouse (#69), bass music (#75), trip hop (#77), ninja (#79), wonky (#90), danish electro-pop (#92), alternative rock (#97), swedish synthpop (#100), intelligent dance music (#103), nu jazz (#105), minimal techno (#110), fluxwork (#111), big beat (#116), future funk (#122) |
freak folk (#55) |
“Bum Bum Bum” by Cass McCombs |
http://everynoise.com/engenremap-freakfolk.html | indietronica (#4), modern rock (#8), indie pop (#10), chillwave (#13), alternative dance (#16), chamber pop (#22), art pop (#24), new rave (#27), indie rock (#29), folk-pop (#36), neo-psychedelic (#41), dance-punk (#45), stomp and holler (#50), nu gaze (#57), brooklyn indie (#61), dream pop (#62), preverb (#66), garage rock (#84), noise pop (#87), lo-fi (#89), alternative rock (#97), fluxwork (#111) |
neo soul (#60) |
“On & On” by Erykah Badu |
http://everynoise.com/engenremap-neosoul.html | pop (#3), indie r&b (#6), hip hop (#18), dance pop (#21), southern hip hop (#39), urban contemporary (#76), funk (#94), soul (#101), hip pop (#121) |
Observations from the rabbit hole:
This Every Noise-based clustering (e.g., adding under-represented “new jack swing” to the similar but better-represented “rap” genre) to reduce the genre tail is not what I’m using for the project, although this would be a very cool extension.
I’m looking forward to seeing the effects of conditioning my model on this genre information!
Perhaps this is the true meaning of “Flexing To The Study” ↩
I definitely went down an internet rabbit hole on how Spotify genres came to be so specific, the truly fascinating Every Noise project (#goals), and the ‘data alchemist’ behind it all, Glenn McDonald. I am shocked I had never heard of any of this before! ↩