@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" >
< head >
<!-- 2021 - 07 - 22 Thu 1 6:36 -->
<!-- 2021 - 07 - 22 Thu 1 9:09 -->
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > RhymeStorm™ - WGU CSCI Capstone Project< / title >
@ -223,111 +223,111 @@
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
< li > < a href = "#org 5454e3 0"> 1. WGU Evaluator Notes< / a > < / li >
< li > < a href = "#org 332d6a9 "> 2. Evaluation Technical Documentation< / a >
< li > < a href = "#org 4cefaa 0"> 1. WGU Evaluator Notes< / a > < / li >
< li > < a href = "#org ffbe1aa "> 2. Evaluation Technical Documentation< / a >
< ul >
< li > < a href = "#org 9e35ea c"> 2.1. How To Initialize Development Environment< / a >
< li > < a href = "#org c01d9f6 "> 2.1. How To Initialize Development Environment< / a >
< ul >
< li > < a href = "#org 53ed308 "> 2.1.1. Required Software< / a > < / li >
< li > < a href = "#org 627686b "> 2.1.2. Steps< / a > < / li >
< li > < a href = "#org 9efabbc "> 2.1.1. Required Software< / a > < / li >
< li > < a href = "#org e60abcc "> 2.1.2. Steps< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org acd2fed "> 2.2. How To Run Software Locally< / a >
< li > < a href = "#org 6025354 "> 2.2. How To Run Software Locally< / a >
< ul >
< li > < a href = "#org 890f3e0 "> 2.2.1. Requirements< / a > < / li >
< li > < a href = "#org d128e2 c"> 2.2.2. Steps< / a > < / li >
< li > < a href = "#org a6816b1 "> 2.2.1. Requirements< / a > < / li >
< li > < a href = "#org 9c9ea6 c"> 2.2.2. Steps< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li > < a href = "#letter-of-transmittal" > 3. A. Letter Of Transmittal< / a >
< ul >
< li > < a href = "#org 2546578 "> 3.1. Problem Summary< / a > < / li >
< li > < a href = "#org c64cb1d "> 3.2. Benefits< / a > < / li >
< li > < a href = "#org 97c20c c"> 3.3. Product - RhymeStorm™< / a > < / li >
< li > < a href = "#org f01dccb "> 3.4. Data< / a > < / li >
< li > < a href = "#org b8810d2 "> 3.5. Objectives< / a > < / li >
< li > < a href = "#org b5f5726 "> 3.6. Development Methodology - Agile< / a > < / li >
< li > < a href = "#org 8da81df "> 3.7. Costs< / a > < / li >
< li > < a href = "#org 1d1a06b "> 3.8. Stakeholder Impact< / a > < / li >
< li > < a href = "#org a1e0de e"> 3.9. Ethical And Legal Considerations< / a > < / li >
< li > < a href = "#org a24c062 "> 3.10. Expertise< / a > < / li >
< li > < a href = "#org f81095f "> 3.1. Problem Summary< / a > < / li >
< li > < a href = "#org 64e00b0 "> 3.2. Benefits< / a > < / li >
< li > < a href = "#org b14b33 c"> 3.3. Product - RhymeStorm™< / a > < / li >
< li > < a href = "#org da19e86 "> 3.4. Data< / a > < / li >
< li > < a href = "#org 3178691 "> 3.5. Objectives< / a > < / li >
< li > < a href = "#org 92d15a8 "> 3.6. Development Methodology - Agile< / a > < / li >
< li > < a href = "#org c85e2ec "> 3.7. Costs< / a > < / li >
< li > < a href = "#org 5063cda "> 3.8. Stakeholder Impact< / a > < / li >
< li > < a href = "#org e21cff8 "> 3.9. Ethical And Legal Considerations< / a > < / li >
< li > < a href = "#org 9a96ebe "> 3.10. Expertise< / a > < / li >
< / ul >
< / li >
< li > < a href = "#executive-summary" > 4. B. Executive Summary - RhymeStorm™ Technical Notes And Requirements< / a >
< ul >
< li > < a href = "#org 6ab056 0"> 4.1. Decision Support Opportunity< / a > < / li >
< li > < a href = "#org 5ef6ba6 "> 4.2. Customer Needs And Product Description< / a > < / li >
< li > < a href = "#org ae684c2 "> 4.3. Existing Products< / a > < / li >
< li > < a href = "#org 94a5d09 "> 4.4. Available Data And Future Data Lifecycle< / a > < / li >
< li > < a href = "#org c05b02d "> 4.5. Methodology - Agile< / a > < / li >
< li > < a href = "#org4 99d289 "> 4.6. Deliverables< / a > < / li >
< li > < a href = "#org 92291d7 "> 4.7. Implementation Plan And Anticipations< / a > < / li >
< li > < a href = "#org 5bba161 "> 4.8. Requirements Validation And Verification< / a > < / li >
< li > < a href = "#org d654669 "> 4.9. Programming Environments And Costs< / a > < / li >
< li > < a href = "#org da86344 "> 4.10. Timeline And Milestones< / a > < / li >
< li > < a href = "#org cf6e44 0"> 4.1. Decision Support Opportunity< / a > < / li >
< li > < a href = "#org 2e4989f "> 4.2. Customer Needs And Product Description< / a > < / li >
< li > < a href = "#org 15e313a "> 4.3. Existing Products< / a > < / li >
< li > < a href = "#org 73f5d11 "> 4.4. Available Data And Future Data Lifecycle< / a > < / li >
< li > < a href = "#org ade9e98 "> 4.5. Methodology - Agile< / a > < / li >
< li > < a href = "#org4 d586db "> 4.6. Deliverables< / a > < / li >
< li > < a href = "#org 66d0062 "> 4.7. Implementation Plan And Anticipations< / a > < / li >
< li > < a href = "#org 0fb5e33 "> 4.8. Requirements Validation And Verification< / a > < / li >
< li > < a href = "#org 6c5045d "> 4.9. Programming Environments And Costs< / a > < / li >
< li > < a href = "#org e2ea722 "> 4.10. Timeline And Milestones< / a > < / li >
< / ul >
< / li >
< li > < a href = "#requirements-documentation" > 5. C. RhymeStormg™ Capstone Requirements Documentation< / a >
< ul >
< li > < a href = "#org 452ae99 "> 5.1. Descriptive And Predictive Methods< / a >
< li > < a href = "#org 3913955 "> 5.1. Descriptive And Predictive Methods< / a >
< ul >
< li > < a href = "#org 23 2ee74 "> 5.1.1. Descriptive Method< / a > < / li >
< li > < a href = "#orgb 60d387 "> 5.1.2. Prescriptive Method< / a > < / li >
< li > < a href = "#org 47558 22"> 5.1.1. Descriptive Method< / a > < / li >
< li > < a href = "#orgb 5dbfc9 "> 5.1.2. Prescriptive Method< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org d14f167 "> 5.2. Datasets< / a > < / li >
< li > < a href = "#org 668aec5 "> 5.3. Decision Support Functionality< / a >
< li > < a href = "#org 70c1d6d "> 5.2. Datasets< / a > < / li >
< li > < a href = "#org 8866e86 "> 5.3. Decision Support Functionality< / a >
< ul >
< li > < a href = "#org 29ab43e "> 5.3.1. Choosing Words For A Lyric Based On Markov Likelihood< / a > < / li >
< li > < a href = "#org 05c55f9 "> 5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality< / a > < / li >
< li > < a href = "#org 808b388 "> 5.3.1. Choosing Words For A Lyric Based On Markov Likelihood< / a > < / li >
< li > < a href = "#org 1cf73a2 "> 5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 20049ec "> 5.4. Featurizing, Parsing, Cleaning, And Wrangling Data< / a > < / li >
< li > < a href = "#org 2b9f4c2 "> 5.5. Data Exploration And Preparation< / a > < / li >
< li > < a href = "#org 93e6329 "> 5.6. Data Visualization Functionalities For Data Exploration And Inspection< / a > < / li >
< li > < a href = "#org ed17a7d "> 5.7. Implementation Of Interactive Queries< / a >
< li > < a href = "#org 0826033 "> 5.4. Featurizing, Parsing, Cleaning, And Wrangling Data< / a > < / li >
< li > < a href = "#org b68a8db "> 5.5. Data Exploration And Preparation< / a > < / li >
< li > < a href = "#org c3d773c "> 5.6. Data Visualization Functionalities For Data Exploration And Inspection< / a > < / li >
< li > < a href = "#org 4dee712 "> 5.7. Implementation Of Interactive Queries< / a >
< ul >
< li > < a href = "#org 56ef5e 0"> 5.7.1. Generate Rhyming Lyrics< / a > < / li >
< li > < a href = "#org ff14c85 "> 5.7.2. Complete Lyric Containing Suffix< / a > < / li >
< li > < a href = "#org 0034b1f "> 5.7.1. Generate Rhyming Lyrics< / a > < / li >
< li > < a href = "#org b384533 "> 5.7.2. Complete Lyric Containing Suffix< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 64c77ab "> 5.8. Implementation Of Machine Learning Methods< / a > < / li >
< li > < a href = "#org 8dd0d28 "> 5.9. Functionalities To Evaluate The Accuracy Of The Data Product< / a > < / li >
< li > < a href = "#org e7cbec6 "> 5.10. Security Features< / a > < / li >
< li > < a href = "#org af85ff8"> 5.11. < span class = "todo TODO" > TODO< / span > Tools To Monitor And Maintain The Product< / a > < / li >
< li > < a href = "#org fa0ff1 5"> 5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types< / a > < / li >
< li > < a href = "#org 04d6baa "> 5.8. Implementation Of Machine Learning Methods< / a > < / li >
< li > < a href = "#org 915745c "> 5.9. Functionalities To Evaluate The Accuracy Of The Data Product< / a > < / li >
< li > < a href = "#org 620c631 "> 5.10. Security Features< / a > < / li >
< li > < a href = "#org 4bf19f5"> 5.11. Tools To Monitor And Maintain The Product< / a > < / li >
< li > < a href = "#org 56f79e3 "> 5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types< / a > < / li >
< / ul >
< / li >
< li > < a href = "#remaining-documentation" > 6. D. Documentation< / a >
< ul >
< li > < a href = "#org b500abb "> 6.1. Business Vision< / a >
< li > < a href = "#org a8a2b80 "> 6.1. Business Vision< / a >
< ul >
< li > < a href = "#org e3dab0 1"> 6.1.1. Requirements< / a > < / li >
< li > < a href = "#org 10db78 1"> 6.1.1. Requirements< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org bf1af68 "> 6.2. Data Sets< / a > < / li >
< li > < a href = "#org d13dfaf "> 6.3. Data Analysis< / a > < / li >
< li > < a href = "#org3 681223 "> 6.4. Assessment< / a > < / li >
< li > < a href = "#org c532c50 "> 6.5. Visualizations< / a > < / li >
< li > < a href = "#org bac9951 "> 6.6. Accuracy< / a >
< li > < a href = "#org c562680 "> 6.2. Data Sets< / a > < / li >
< li > < a href = "#org 90ce434 "> 6.3. Data Analysis< / a > < / li >
< li > < a href = "#org3 8e35cd "> 6.4. Assessment< / a > < / li >
< li > < a href = "#org 8282426 "> 6.5. Visualizations< / a > < / li >
< li > < a href = "#org fc55be7 "> 6.6. Accuracy< / a >
< ul >
< li > < a href = "#org 652cf82 "> 6.6.1. Percentage Of Generated Lines That Are Valid English Sentences< / a > < / li >
< li > < a href = "#org 34c05ab "> 6.6.1. Percentage Of Generated Lines That Are Valid English Sentences< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 6ee5077 "> 6.7. Testing< / a > < / li >
< li > < a href = "#org 3a978f5 "> 6.8. Source Code< / a >
< li > < a href = "#org 85e75eb "> 6.7. Testing< / a > < / li >
< li > < a href = "#org bd2aaf7 "> 6.8. Source Code< / a >
< ul >
< li > < a href = "#orge 2c7328 "> 6.8.1. Tightly Packed Trie< / a > < / li >
< li > < a href = "#org cd18f6c "> 6.8.2. Phonetics< / a > < / li >
< li > < a href = "#org ebe6ea7 "> 6.8.3. Rhyming< / a > < / li >
< li > < a href = "#org 48f7c8 9"> 6.8.4. Web Server And User Interface< / a > < / li >
< li > < a href = "#orge f379f2 "> 6.8.1. Tightly Packed Trie< / a > < / li >
< li > < a href = "#org 5aff5d6 "> 6.8.2. Phonetics< / a > < / li >
< li > < a href = "#org 0fca7e3 "> 6.8.3. Rhyming< / a > < / li >
< li > < a href = "#org d2422e 9"> 6.8.4. Web Server And User Interface< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 5b7bf1 b"> 6.9. Quick Start< / a >
< li > < a href = "#org 08f848 b"> 6.9. Quick Start< / a >
< ul >
< li > < a href = "#org 9fee706 "> 6.9.1. How To Initialize Development Environment< / a > < / li >
< li > < a href = "#org fc1399f "> 6.9.2. How To Run Software Locally< / a > < / li >
< li > < a href = "#org 3923d45 "> 6.9.1. How To Initialize Development Environment< / a > < / li >
< li > < a href = "#org e987ec3 "> 6.9.2. How To Run Software Locally< / a > < / li >
< / ul >
< / li >
< / ul >
@ -336,8 +336,8 @@
< / div >
< / div >
< div id = "outline-container-org 5454e3 0" class = "outline-2" >
< h2 id = "org 5454e3 0"> < span class = "section-number-2" > 1< / span > WGU Evaluator Notes< / h2 >
< div id = "outline-container-org 4cefaa 0" class = "outline-2" >
< h2 id = "org 4cefaa 0"> < span class = "section-number-2" > 1< / span > WGU Evaluator Notes< / h2 >
< div class = "outline-text-2" id = "text-1" >
< p >
Hello! I hope you enjoy your time with this evaluation!
@ -361,20 +361,20 @@ After I describe the steps to initialize a development environment, you’ll
< / div >
< / div >
< div id = "outline-container-org 332d6a9 " class = "outline-2" >
< h2 id = "org 332d6a9 "> < span class = "section-number-2" > 2< / span > Evaluation Technical Documentation< / h2 >
< div id = "outline-container-org ffbe1aa " class = "outline-2" >
< h2 id = "org ffbe1aa "> < span class = "section-number-2" > 2< / span > Evaluation Technical Documentation< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
It’ s probably not necessary for you to replicate my development environment in order to evaluate this project. You can access the deployed application at < a href = "https://darklimericks.com/wgu" > https://darklimericks.com/wgu< / a > and the libraries and supporting code that I wrote for this project at < a href = "https://github.com/eihli/clj-tightly-packed-trie" > https://github.com/eihli/clj-tightly-packed-trie< / a > , < a href = "https://github.com/eihli/syllabify" > https://github.com/eihli/syllabify< / a > , and < a href = "https://github.com/eihli/prhyme" > https://github.com/eihli/prhyme< / a > . The web server and web application is not hosted publicly but you will find it uploaded with my submission as a < code > .tar< / code > archive.
< / p >
< / div >
< div id = "outline-container-org 9e35ea c" class = "outline-3" >
< h3 id = "org 9e35ea c"> < span class = "section-number-3" > 2.1< / span > How To Initialize Development Environment< / h3 >
< div id = "outline-container-org c01d9f6 " class = "outline-3" >
< h3 id = "org c01d9f6 "> < span class = "section-number-3" > 2.1< / span > How To Initialize Development Environment< / h3 >
< div class = "outline-text-3" id = "text-2-1" >
< / div >
< div id = "outline-container-org 53ed308 " class = "outline-4" >
< h4 id = "org 53ed308 "> < span class = "section-number-4" > 2.1.1< / span > Required Software< / h4 >
< div id = "outline-container-org 9efabbc " class = "outline-4" >
< h4 id = "org 9efabbc "> < span class = "section-number-4" > 2.1.1< / span > Required Software< / h4 >
< div class = "outline-text-4" id = "text-2-1-1" >
< ul class = "org-ul" >
< li > < a href = "https://www.docker.com/" > Docker< / a > < / li >
@ -384,8 +384,8 @@ It’s probably not necessary for you to replicate my development environmen
< / div >
< / div >
< div id = "outline-container-org 627686b " class = "outline-4" >
< h4 id = "org 627686b "> < span class = "section-number-4" > 2.1.2< / span > Steps< / h4 >
< div id = "outline-container-org e60abcc " class = "outline-4" >
< h4 id = "org e60abcc "> < span class = "section-number-4" > 2.1.2< / span > Steps< / h4 >
< div class = "outline-text-4" id = "text-2-1-2" >
< ol class = "org-ol" >
< li > Run < code > ./db/run.sh & & ./kv/run.sh< / code > to start the docker containers for the database and key-value store.
@ -399,12 +399,12 @@ It’s probably not necessary for you to replicate my development environmen
< / div >
< / div >
< div id = "outline-container-org acd2fed " class = "outline-3" >
< h3 id = "org acd2fed "> < span class = "section-number-3" > 2.2< / span > How To Run Software Locally< / h3 >
< div id = "outline-container-org 6025354 " class = "outline-3" >
< h3 id = "org 6025354 "> < span class = "section-number-3" > 2.2< / span > How To Run Software Locally< / h3 >
< div class = "outline-text-3" id = "text-2-2" >
< / div >
< div id = "outline-container-org 890f3e0 " class = "outline-4" >
< h4 id = "org 890f3e0 "> < span class = "section-number-4" > 2.2.1< / span > Requirements< / h4 >
< div id = "outline-container-org a6816b1 " class = "outline-4" >
< h4 id = "org a6816b1 "> < span class = "section-number-4" > 2.2.1< / span > Requirements< / h4 >
< div class = "outline-text-4" id = "text-2-2-1" >
< ul class = "org-ul" >
< li > < a href = "https://www.java.com/download/ie_manual.jsp" > Java< / a > < / li >
@ -413,8 +413,8 @@ It’s probably not necessary for you to replicate my development environmen
< / div >
< / div >
< div id = "outline-container-org d128e2 c" class = "outline-4" >
< h4 id = "org d128e2 c"> < span class = "section-number-4" > 2.2.2< / span > Steps< / h4 >
< div id = "outline-container-org 9c9ea6 c" class = "outline-4" >
< h4 id = "org 9c9ea6 c"> < span class = "section-number-4" > 2.2.2< / span > Steps< / h4 >
< div class = "outline-text-4" id = "text-2-2-2" >
< ol class = "org-ol" >
< li > Run < code > ./db/run.sh & & ./kv/run.sh< / code > to start the docker containers for the database and key-value store.
@ -435,8 +435,8 @@ It’s probably not necessary for you to replicate my development environmen
< div class = "outline-text-2" id = "text-letter-of-transmittal" >
< / div >
< div id = "outline-container-org 2546578 " class = "outline-3" >
< h3 id = "org 2546578 "> < span class = "section-number-3" > 3.1< / span > Problem Summary< / h3 >
< div id = "outline-container-org f81095f " class = "outline-3" >
< h3 id = "org f81095f "> < span class = "section-number-3" > 3.1< / span > Problem Summary< / h3 >
< div class = "outline-text-3" id = "text-3-1" >
< p >
Songwriters, artists, and record labels can save time and discover better lyrics with the help of a machine learning tool that supports their creative endeavours.
@ -448,8 +448,8 @@ Songwriters have several old-fashioned tools at their disposal including diction
< / div >
< / div >
< div id = "outline-container-org c64cb1d " class = "outline-3" >
< h3 id = "org c64cb1d "> < span class = "section-number-3" > 3.2< / span > Benefits< / h3 >
< div id = "outline-container-org 64e00b0 " class = "outline-3" >
< h3 id = "org 64e00b0 "> < span class = "section-number-3" > 3.2< / span > Benefits< / h3 >
< div class = "outline-text-3" id = "text-3-2" >
< p >
How many sensible phrases can you think of that rhyme with “ war on poverty” ? What if I say that there’ s a restriction to only come up with phrases that are exactly 14 syllables? That’ s a common restriction when a songwriter is trying to match the meter of a previous line. What if I add another restriction that there must be primary stress at certain spots in that 14 syllable phrase?
@ -465,8 +465,8 @@ And this is a process that is perfect for machine learning. Machine learning can
< / div >
< / div >
< div id = "outline-container-org 97c20c c" class = "outline-3" >
< h3 id = "org 97c20c c"> < span class = "section-number-3" > 3.3< / span > Product - RhymeStorm™< / h3 >
< div id = "outline-container-org b14b33 c" class = "outline-3" >
< h3 id = "org b14b33 c"> < span class = "section-number-3" > 3.3< / span > Product - RhymeStorm™< / h3 >
< div class = "outline-text-3" id = "text-3-3" >
< p >
RhymeStorm™ is a tool to help songwriters brainstorm. It provides lyrics automatically generated based on training data from existing songs while adhering to restrictions based on rhyme scheme, meter, genre, and more.
@ -494,8 +494,8 @@ This auto-complete functionality will be similar to the auto-complete that is co
< / div >
< / div >
< div id = "outline-container-org f01dccb " class = "outline-3" >
< h3 id = "org f01dccb "> < span class = "section-number-3" > 3.4< / span > Data< / h3 >
< div id = "outline-container-org da19e86 " class = "outline-3" >
< h3 id = "org da19e86 "> < span class = "section-number-3" > 3.4< / span > Data< / h3 >
< div class = "outline-text-3" id = "text-3-4" >
< p >
The initial model will be trained on the lyrics from < a href = "http://darklyrics.com" > http://darklyrics.com< / a > . This is a publicly available data set with minimal meta-data. Record labels will have more valuable datasets that will include meta-data along with lyrics, such as the date the song was popular, the number of radio plays of the song, the profit of the song/artist, etc…
@ -507,8 +507,8 @@ The software can be augmented with additional algorithms to account for the type
< / div >
< / div >
< div id = "outline-container-org b8810d2 " class = "outline-3" >
< h3 id = "org b8810d2 "> < span class = "section-number-3" > 3.5< / span > Objectives< / h3 >
< div id = "outline-container-org 3178691 " class = "outline-3" >
< h3 id = "org 3178691 "> < span class = "section-number-3" > 3.5< / span > Objectives< / h3 >
< div class = "outline-text-3" id = "text-3-5" >
< p >
This software will accomplish its primary objective if it makes its way into the daily toolkit of a handful of singers/songwriters.
@ -528,8 +528,8 @@ Another example is the package that turns phrases into phones (symbols of pronun
< / div >
< / div >
< div id = "outline-container-org b5f5726 " class = "outline-3" >
< h3 id = "org b5f5726 "> < span class = "section-number-3" > 3.6< / span > Development Methodology - Agile< / h3 >
< div id = "outline-container-org 92d15a8 " class = "outline-3" >
< h3 id = "org 92d15a8 "> < span class = "section-number-3" > 3.6< / span > Development Methodology - Agile< / h3 >
< div class = "outline-text-3" id = "text-3-6" >
< p >
This project will be developed with an iterative Agile methodology. Since a large part of data science and machine learning is exploration, this project will benefit from ongoing exploration in tandem with development.
@ -545,8 +545,8 @@ The prices quoted below are for an initial minimum-viable-product that will serv
< / div >
< / div >
< div id = "outline-container-org 8da81df " class = "outline-3" >
< h3 id = "org 8da81df "> < span class = "section-number-3" > 3.7< / span > Costs< / h3 >
< div id = "outline-container-org c85e2ec " class = "outline-3" >
< h3 id = "org c85e2ec "> < span class = "section-number-3" > 3.7< / span > Costs< / h3 >
< div class = "outline-text-3" id = "text-3-7" >
< p >
Funding requirements are minimal. The initial dataset is public and freely available. On a typical consumer laptop, Hidden Markov Models can be trained on fairly large datasets in short time and the training doesn’ t require the use of expensive hardware like the GPUs used to train Deep Neural Networks.
@ -630,17 +630,17 @@ These are my estimates for the time and cost of different aspects of initial dev
< / div >
< / div >
< div id = "outline-container-org 1d1a06b " class = "outline-3" >
< h3 id = "org 1d1a06b "> < span class = "section-number-3" > 3.8< / span > Stakeholder Impact< / h3 >
< div id = "outline-container-org 5063cda " class = "outline-3" >
< h3 id = "org 5063cda "> < span class = "section-number-3" > 3.8< / span > Stakeholder Impact< / h3 >
< div class = "outline-text-3" id = "text-3-8" >
< p >
The only stakeholders in the project will be the record labels or songwriters. I describe the only impact to them in the < a href = "#org c64cb1d "> 3.2< / a > section above.
The only stakeholders in the project will be the record labels or songwriters. I describe the only impact to them in the < a href = "#org 64e00b0 "> 3.2< / a > section above.
< / p >
< / div >
< / div >
< div id = "outline-container-org a1e0de e" class = "outline-3" >
< h3 id = "org a1e0de e"> < span class = "section-number-3" > 3.9< / span > Ethical And Legal Considerations< / h3 >
< div id = "outline-container-org e21cff8 " class = "outline-3" >
< h3 id = "org e21cff8 "> < span class = "section-number-3" > 3.9< / span > Ethical And Legal Considerations< / h3 >
< div class = "outline-text-3" id = "text-3-9" >
< p >
Web scraping, the method used to obtain the initial dataset from < a href = "http://darklyrics.com" > http://darklyrics.com< / a > , is protected given the ruling in < a href = "https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn" > https://en.wikipedia.org/wiki/HiQ_Labs_v._LinkedIn< / a > .
@ -652,8 +652,8 @@ The use of publicly available data in generative works is less clear. But Micros
< / div >
< / div >
< div id = "outline-container-org a24c062 " class = "outline-3" >
< h3 id = "org a24c062 "> < span class = "section-number-3" > 3.10< / span > Expertise< / h3 >
< div id = "outline-container-org 9a96ebe " class = "outline-3" >
< h3 id = "org 9a96ebe "> < span class = "section-number-3" > 3.10< / span > Expertise< / h3 >
< div class = "outline-text-3" id = "text-3-10" >
< p >
I have 10 years experience as a programmer and have worked extensively on both frontend technologies like HTML/JavaScript, backend technologies like Django, and building libraries/packages/frameworks.
@ -674,8 +674,8 @@ Write an executive summary directed to IT professionals that addresses each of t
< / p >
< / div >
< div id = "outline-container-org 6ab056 0" class = "outline-3" >
< h3 id = "org 6ab056 0"> < span class = "section-number-3" > 4.1< / span > Decision Support Opportunity< / h3 >
< div id = "outline-container-org cf6e44 0" class = "outline-3" >
< h3 id = "org cf6e44 0"> < span class = "section-number-3" > 4.1< / span > Decision Support Opportunity< / h3 >
< div class = "outline-text-3" id = "text-4-1" >
< p >
Songwriters expend a lot of time and effort finding the perfect rhyming word or phrase. RhymeStorm™ is going to amplify user’ s creative abilities by searching its machine learning model for sensible and proven-successful words and phrases that meet the rhyme scheme and meter requirements requested by the user.
@ -687,8 +687,8 @@ When a songwriter needs to find likely phrases that rhyme with “war on pov
< / div >
< / div >
< div id = "outline-container-org 5ef6ba6 " class = "outline-3" >
< h3 id = "org 5ef6ba6 "> < span class = "section-number-3" > 4.2< / span > Customer Needs And Product Description< / h3 >
< div id = "outline-container-org 2e4989f " class = "outline-3" >
< h3 id = "org 2e4989f "> < span class = "section-number-3" > 4.2< / span > Customer Needs And Product Description< / h3 >
< div class = "outline-text-3" id = "text-4-2" >
< p >
Songwriters spend money on dictionaries, compilations of slang, thesauruses, and phrase dictionaries. They spend their time daydreaming, brainstorming, contemplating, and mixing and matching the knowledge they acquire through these traditional means.
@ -708,8 +708,8 @@ Computers can process and sort this information and sort the results by quality
< / div >
< / div >
< div id = "outline-container-org ae684c2 " class = "outline-3" >
< h3 id = "org ae684c2 "> < span class = "section-number-3" > 4.3< / span > Existing Products< / h3 >
< div id = "outline-container-org 15e313a " class = "outline-3" >
< h3 id = "org 15e313a "> < span class = "section-number-3" > 4.3< / span > Existing Products< / h3 >
< div class = "outline-text-3" id = "text-4-3" >
< p >
We’ re all familiar with dictionaries, thesauruses, and their shortcomings.
@ -725,8 +725,8 @@ RhymeZone is limited in its capability. It doesn’t do well finding rhymes
< / div >
< / div >
< div id = "outline-container-org 94a5d09 " class = "outline-3" >
< h3 id = "org 94a5d09 "> < span class = "section-number-3" > 4.4< / span > Available Data And Future Data Lifecycle< / h3 >
< div id = "outline-container-org 73f5d11 " class = "outline-3" >
< h3 id = "org 73f5d11 "> < span class = "section-number-3" > 4.4< / span > Available Data And Future Data Lifecycle< / h3 >
< div class = "outline-text-3" id = "text-4-4" >
< p >
The initial dataset will be gathered by downloading lyrics from < a href = "http://darklyrics.com" > http://darklyrics.com< / a > and future models can be generated by downloading lyrics from other websites. Alternatively, data can be provided by record labels and combined with meta-data that the record label may have, such as how many radio plays each song gets and how much profit they make from each song.
@ -750,8 +750,8 @@ Each new model can be uploaded to the web server and users can select which mode
< / div >
< / div >
< div id = "outline-container-org c05b02d " class = "outline-3" >
< h3 id = "org c05b02d "> < span class = "section-number-3" > 4.5< / span > Methodology - Agile< / h3 >
< div id = "outline-container-org ade9e98 " class = "outline-3" >
< h3 id = "org ade9e98 "> < span class = "section-number-3" > 4.5< / span > Methodology - Agile< / h3 >
< div class = "outline-text-3" id = "text-4-5" >
< p >
RhymeStorm™ development will proceed with an iterative Agile methodology. It will be composed of several independent modules that can be worked on independently, in parallel, and iteratively.
@ -775,8 +775,8 @@ Much of data science is exploratory and taking an iterative Agile approach can t
< / div >
< / div >
< div id = "outline-container-org4 99d289 " class = "outline-3" >
< h3 id = "org4 99d289 "> < span class = "section-number-3" > 4.6< / span > Deliverables< / h3 >
< div id = "outline-container-org4 d586db " class = "outline-3" >
< h3 id = "org4 d586db "> < span class = "section-number-3" > 4.6< / span > Deliverables< / h3 >
< div class = "outline-text-3" id = "text-4-6" >
< ul class = "org-ul" >
< li > Supporting libraries source code< / li >
@ -810,8 +810,8 @@ The trained data model and web interface has been deployed at the following addr
< / div >
< / div >
< div id = "outline-container-org 92291d7 " class = "outline-3" >
< h3 id = "org 92291d7 "> < span class = "section-number-3" > 4.7< / span > Implementation Plan And Anticipations< / h3 >
< div id = "outline-container-org 66d0062 " class = "outline-3" >
< h3 id = "org 66d0062 "> < span class = "section-number-3" > 4.7< / span > Implementation Plan And Anticipations< / h3 >
< div class = "outline-text-3" id = "text-4-7" >
< p >
I’ ll start by writing and releasing the supporting libraries and packages: Tries, Syllabification/Phonetics, Rhyming.
@ -831,8 +831,8 @@ In anticipation of user growth, I’ll be deploying the final product on Dig
< / div >
< / div >
< div id = "outline-container-org 5bba161 " class = "outline-3" >
< h3 id = "org 5bba161 "> < span class = "section-number-3" > 4.8< / span > Requirements Validation And Verification< / h3 >
< div id = "outline-container-org 0fb5e33 " class = "outline-3" >
< h3 id = "org 0fb5e33 "> < span class = "section-number-3" > 4.8< / span > Requirements Validation And Verification< / h3 >
< div class = "outline-text-3" id = "text-4-8" >
< p >
the methods for validating and verifying that the developed data product meets the requirements and subsequently the needs of the customers
@ -852,8 +852,8 @@ The final website will integrate multiple technologies and the integrations won&
< / div >
< / div >
< div id = "outline-container-org d654669 " class = "outline-3" >
< h3 id = "org d654669 "> < span class = "section-number-3" > 4.9< / span > Programming Environments And Costs< / h3 >
< div id = "outline-container-org 6c5045d " class = "outline-3" >
< h3 id = "org 6c5045d "> < span class = "section-number-3" > 4.9< / span > Programming Environments And Costs< / h3 >
< div class = "outline-text-3" id = "text-4-9" >
< p >
the programming environments and any related costs, as well as the human resources that are necessary to execute each phase in the development of the data product
@ -877,8 +877,8 @@ All code was written and all models were trained on a Lenovo T15G with an Intel
< / div >
< / div >
< div id = "outline-container-org da86344 " class = "outline-3" >
< h3 id = "org da86344 "> < span class = "section-number-3" > 4.10< / span > Timeline And Milestones< / h3 >
< div id = "outline-container-org e2ea722 " class = "outline-3" >
< h3 id = "org e2ea722 "> < span class = "section-number-3" > 4.10< / span > Timeline And Milestones< / h3 >
< div class = "outline-text-3" id = "text-4-10" >
< table border = "2" cellspacing = "0" cellpadding = "6" rules = "groups" frame = "hsides" >
@ -956,16 +956,16 @@ RhymeStorm™ is an application to help singers and songwriters brainstorm new l
< / p >
< / div >
< div id = "outline-container-org 452ae99 " class = "outline-3" >
< h3 id = "org 452ae99 "> < span class = "section-number-3" > 5.1< / span > Descriptive And Predictive Methods< / h3 >
< div id = "outline-container-org 3913955 " class = "outline-3" >
< h3 id = "org 3913955 "> < span class = "section-number-3" > 5.1< / span > Descriptive And Predictive Methods< / h3 >
< div class = "outline-text-3" id = "text-5-1" >
< / div >
< div id = "outline-container-org 23 2ee74 " class = "outline-4" >
< h4 id = "org 23 2ee74 "> < span class = "section-number-4" > 5.1.1< / span > Descriptive Method< / h4 >
< div id = "outline-container-org 47558 22" class = "outline-4" >
< h4 id = "org 47558 22"> < span class = "section-number-4" > 5.1.1< / span > Descriptive Method< / h4 >
< div class = "outline-text-4" id = "text-5-1-1" >
< / div >
< ol class = "org-ol" >
< li > < a id = "org a8f8f4 c"> < / a > Most Common Grammatical Structures In A Set Of Lyrics< br / >
< li > < a id = "org cb020b6 "> < / a > Most Common Grammatical Structures In A Set Of Lyrics< br / >
< div class = "outline-text-5" id = "text-5-1-1-1" >
< p >
By filtering songs by metrics such as popularity, number of awards, etc… we can use this software package to determine the most common grammatical phrase structure for different filtered categories.
@ -1042,12 +1042,12 @@ In the example below, you’ll see that a simple noun-phrase is the most pop
< / ol >
< / div >
< div id = "outline-container-orgb 60d387 " class = "outline-4" >
< h4 id = "orgb 60d387 "> < span class = "section-number-4" > 5.1.2< / span > Prescriptive Method< / h4 >
< div id = "outline-container-orgb 5dbfc9 " class = "outline-4" >
< h4 id = "orgb 5dbfc9 "> < span class = "section-number-4" > 5.1.2< / span > Prescriptive Method< / h4 >
< div class = "outline-text-4" id = "text-5-1-2" >
< / div >
< ol class = "org-ol" >
< li > < a id = "org f0f31f1 "> < / a > Most Likely Word To Follow A Given Phrase< br / >
< li > < a id = "org 86f0d88 "> < / a > Most Likely Word To Follow A Given Phrase< br / >
< div class = "outline-text-5" id = "text-5-1-2-1" >
< p >
To help songwriters think of new lyrics, we provide an API to receive a list of words that commonly follow/precede a given phrase.
@ -1143,8 +1143,8 @@ In the example below, we provide a seed suffix of “bother me” and as
< / div >
< / div >
< div id = "outline-container-org d14f167 " class = "outline-3" >
< h3 id = "org d14f167 "> < span class = "section-number-3" > 5.2< / span > Datasets< / h3 >
< div id = "outline-container-org 70c1d6d " class = "outline-3" >
< h3 id = "org 70c1d6d "> < span class = "section-number-3" > 5.2< / span > Datasets< / h3 >
< div class = "outline-text-3" id = "text-5-2" >
< p >
The dataset currently in use was generated from the publicly available lyrics at < a href = "http://darklyrics.com" > http://darklyrics.com< / a > .
@ -1156,12 +1156,12 @@ Further datasets will need to be provided by the end-user.
< / div >
< / div >
< div id = "outline-container-org 668aec5 " class = "outline-3" >
< h3 id = "org 668aec5 "> < span class = "section-number-3" > 5.3< / span > Decision Support Functionality< / h3 >
< div id = "outline-container-org 8866e86 " class = "outline-3" >
< h3 id = "org 8866e86 "> < span class = "section-number-3" > 5.3< / span > Decision Support Functionality< / h3 >
< div class = "outline-text-3" id = "text-5-3" >
< / div >
< div id = "outline-container-org 29ab43e " class = "outline-4" >
< h4 id = "org 29ab43e "> < span class = "section-number-4" > 5.3.1< / span > Choosing Words For A Lyric Based On Markov Likelihood< / h4 >
< div id = "outline-container-org 808b388 " class = "outline-4" >
< h4 id = "org 808b388 "> < span class = "section-number-4" > 5.3.1< / span > Choosing Words For A Lyric Based On Markov Likelihood< / h4 >
< div class = "outline-text-4" id = "text-5-3-1" >
< p >
Entire phrases can be generated using the previously mentioned functionality of generating lists of likely prefix/suffix words.
@ -1177,8 +1177,8 @@ The user can supply criteria such as restrictions on the number of syllables, nu
< / div >
< / div >
< div id = "outline-container-org 05c55f9 " class = "outline-4" >
< h4 id = "org 05c55f9 "> < span class = "section-number-4" > 5.3.2< / span > Choosing Words To Complete A Lyric Based On Rhyme Quality< / h4 >
< div id = "outline-container-org 1cf73a2 " class = "outline-4" >
< h4 id = "org 1cf73a2 "> < span class = "section-number-4" > 5.3.2< / span > Choosing Words To Complete A Lyric Based On Rhyme Quality< / h4 >
< div class = "outline-text-4" id = "text-5-3-2" >
< p >
Another part of the decision support functionality is filtering and ordering predicted words based on their rhyme quality.
@ -1404,8 +1404,8 @@ In the example below, you’ll see that the first 20 or so rhymes are perfec
< / div >
< / div >
< div id = "outline-container-org 20049ec " class = "outline-3" >
< h3 id = "org 20049ec "> < span class = "section-number-3" > 5.4< / span > Featurizing, Parsing, Cleaning, And Wrangling Data< / h3 >
< div id = "outline-container-org 0826033 " class = "outline-3" >
< h3 id = "org 0826033 "> < span class = "section-number-3" > 5.4< / span > Featurizing, Parsing, Cleaning, And Wrangling Data< / h3 >
< div class = "outline-text-3" id = "text-5-4" >
< p >
The data processing code is in < a href = "https://github.com/eihli/prhyme" > https://github.com/eihli/prhyme< / a >
@ -1441,8 +1441,8 @@ words can be compared: “Foo” is the same as “foo”.
< / div >
< / div >
< div id = "outline-container-org 2b9f4c2 " class = "outline-3" >
< h3 id = "org 2b9f4c2 "> < span class = "section-number-3" > 5.5< / span > Data Exploration And Preparation< / h3 >
< div id = "outline-container-org b68a8db " class = "outline-3" >
< h3 id = "org b68a8db "> < span class = "section-number-3" > 5.5< / span > Data Exploration And Preparation< / h3 >
< div class = "outline-text-3" id = "text-5-5" >
< p >
The primary data structure and algorithms supporting exploration of the data are a Markov Trie
@ -1490,8 +1490,8 @@ All Trie code is hosted in the git repo located at <a href="https://github.com/e
< / div >
< / div >
< div id = "outline-container-org 93e6329 " class = "outline-3" >
< h3 id = "org 93e6329 "> < span class = "section-number-3" > 5.6< / span > Data Visualization Functionalities For Data Exploration And Inspection< / h3 >
< div id = "outline-container-org c3d773c " class = "outline-3" >
< h3 id = "org c3d773c "> < span class = "section-number-3" > 5.6< / span > Data Visualization Functionalities For Data Exploration And Inspection< / h3 >
< div class = "outline-text-3" id = "text-5-6" >
< p >
The functionality to explore and visualize data is baked into the Trie data structure.
@ -1501,7 +1501,7 @@ The functionality to explore and visualize data is baked into the Trie data stru
By simply viewing the Trie in a Clojure REPL, you can inspect the Trie’ s structure.
< / p >
< pre class = "example" id = "org c2ea09d ">
< pre class = "example" id = "org 0ee5ab8 ">
(let [initialized-trie (-> > (trie/make-trie "dog" "dog" "dot" "dot" "do" "do"))]
initialized-trie)
;; => {(\d \o \g) "dog", (\d \o \t) "dot", (\d \o) "do", (\d) nil}
@ -1543,12 +1543,12 @@ The Hidden Markov Model data structure doesn’t lend itself to any useful g
< / div >
< / div >
< div id = "outline-container-org ed17a7d " class = "outline-3" >
< h3 id = "org ed17a7d "> < span class = "section-number-3" > 5.7< / span > Implementation Of Interactive Queries< / h3 >
< div id = "outline-container-org 4dee712 " class = "outline-3" >
< h3 id = "org 4dee712 "> < span class = "section-number-3" > 5.7< / span > Implementation Of Interactive Queries< / h3 >
< div class = "outline-text-3" id = "text-5-7" >
< / div >
< div id = "outline-container-org 56ef5e 0" class = "outline-4" >
< h4 id = "org 56ef5e 0"> < span class = "section-number-4" > 5.7.1< / span > Generate Rhyming Lyrics< / h4 >
< div id = "outline-container-org 0034b1f " class = "outline-4" >
< h4 id = "org 0034b1f "> < span class = "section-number-4" > 5.7.1< / span > Generate Rhyming Lyrics< / h4 >
< div class = "outline-text-4" id = "text-5-7-1" >
< p >
This interactive query will return a list of rhyming phrases to any word or phrase you enter.
@ -1691,8 +1691,8 @@ The interactive query for the above can be found at <a href="https://darklimeric
< / div >
< / div >
< div id = "outline-container-org ff14c85 " class = "outline-4" >
< h4 id = "org ff14c85 "> < span class = "section-number-4" > 5.7.2< / span > Complete Lyric Containing Suffix< / h4 >
< div id = "outline-container-org b384533 " class = "outline-4" >
< h4 id = "org b384533 "> < span class = "section-number-4" > 5.7.2< / span > Complete Lyric Containing Suffix< / h4 >
< div class = "outline-text-4" id = "text-5-7-2" >
< p >
This interactive query will return a list of lyrics completing the given suffix with randomly generated prefixes.
@ -1794,8 +1794,8 @@ The interactive query for the above can be found at <a href="https://darklimeric
< / div >
< / div >
< div id = "outline-container-org 64c77ab " class = "outline-3" >
< h3 id = "org 64c77ab "> < span class = "section-number-3" > 5.8< / span > Implementation Of Machine Learning Methods< / h3 >
< div id = "outline-container-org 04d6baa " class = "outline-3" >
< h3 id = "org 04d6baa "> < span class = "section-number-3" > 5.8< / span > Implementation Of Machine Learning Methods< / h3 >
< div class = "outline-text-3" id = "text-5-8" >
< p >
The machine learning method chosen for this software is a Hidden Markov Model.
@ -1865,7 +1865,7 @@ The algorithm for generating predictions from the HMM is as follows.
< / pre >
< / div >
< pre class = "example" id = "org 3c046c2 ">
< pre class = "example" id = "org 734b418 ">
[(("< s> " "call" "me")
("< s> " "call")
("< s> " "right" "< /s> ")
@ -1954,8 +1954,8 @@ It also performs compaction and serialization. Song lyrics are typically provide
< / div >
< / div >
< div id = "outline-container-org 8dd0d28 " class = "outline-3" >
< h3 id = "org 8dd0d28 "> < span class = "section-number-3" > 5.9< / span > Functionalities To Evaluate The Accuracy Of The Data Product< / h3 >
< div id = "outline-container-org 915745c " class = "outline-3" >
< h3 id = "org 915745c "> < span class = "section-number-3" > 5.9< / span > Functionalities To Evaluate The Accuracy Of The Data Product< / h3 >
< div class = "outline-text-3" id = "text-5-9" >
< p >
Since creative brainstorming is the goal, “ accuracy” is subjective.
@ -2022,8 +2022,8 @@ This standardized measure of accuracy can be used to compare different language
< / div >
< / div >
< div id = "outline-container-org e7cbec6 " class = "outline-3" >
< h3 id = "org e7cbec6 "> < span class = "section-number-3" > 5.10< / span > Security Features< / h3 >
< div id = "outline-container-org 620c631 " class = "outline-3" >
< h3 id = "org 620c631 "> < span class = "section-number-3" > 5.10< / span > Security Features< / h3 >
< div class = "outline-text-3" id = "text-5-10" >
< p >
Artists/Songwriters place a lot of value in the secrecy of their content. Therefore, all communication with the web-based interface occurs over a secure connection using HTTPS.
@ -2039,17 +2039,35 @@ With this precaution in place, attackers will not be able to snoop the content t
< / div >
< / div >
< div id = "outline-container-org af85ff8 " class = "outline-3" >
< h3 id = "org af85ff8 "> < span class = "section-number-3" > 5.11< / span > < span class = "todo TODO" > TODO< / span > Tools To Monitor And Maintain The Product< / h3 >
< div id = "outline-container-org 4bf19f5 " class = "outline-3" >
< h3 id = "org 4bf19f5 "> < span class = "section-number-3" > 5.11< / span > Tools To Monitor And Maintain The Product< / h3 >
< div class = "outline-text-3" id = "text-5-11" >
< ul class = "org-ul" >
< li > Script to auto-update SSL cert< / li >
< / ul >
< p >
By having the application server behind an HAProxy load balancer, we can take advantage of the built-in HAProxy stats page for monitoring amount of traffic and health of the application servers.
< / p >
< div id = "org43f6486" class = "figure" >
< p > < img src = "resources/public/images/stats.png" alt = "stats.png" / >
< / p >
< / div >
< p >
< a href = "http://darklimericks.com:8404/stats" > http://darklimericks.com:8404/stats< / a >
< / p >
< p >
That page is behind basic authentication with username: admin and password: admin.
< / p >
< p >
The server also includes the < code > certbot< / code > script for updating and maintaining the SSL certificates issued by Let’ s Encrypt.
< / p >
< / div >
< / div >
< div id = "outline-container-orgfa0ff15" class = "outline-3" >
< h3 id = "orgfa0ff15" > < span class = "section-number-3" > 5.12< / span > A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types< / h3 >
< div id = "outline-container-org 56f79e3 " class = "outline-3" >
< h3 id = "org 56f79e3 "> < span class = "section-number-3" > 5.12< / span > A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types< / h3 >
< div class = "outline-text-3" id = "text-5-12" >
< p >
You can access an example of the user interface at < a href = "https://darklimericks.com/wgu" > https://darklimericks.com/wgu< / a > .
@ -2068,8 +2086,8 @@ The first visualization is a scatter plot of rhyming words with the “quali
< / p >
< div id = "org 2cfefe9 " class = "figure" >
< p > < img src = "resources/ images/wgu-vis.png" alt = "wgu-vis.png" / >
< div id = "org 75c650b " class = "figure" >
< p > < img src = "resources/ public/ images/wgu-vis.png" alt = "wgu-vis.png" / >
< / p >
< / div >
@ -2078,8 +2096,8 @@ The second visualization is a word cloud where the size of each word is based on
< / p >
< div id = "org f6237fd " class = "figure" >
< p > < img src = "resources/ images/wgu-vis-cloud.png" alt = "wgu-vis-cloud.png" / >
< div id = "org 56fd478 " class = "figure" >
< p > < img src = "resources/ public/ images/wgu-vis-cloud.png" alt = "wgu-vis-cloud.png" / >
< / p >
< / div >
@ -2088,8 +2106,8 @@ The third visualization is a table that lists all of the rhymes, their pronuncia
< / p >
< div id = "org bc9394a " class = "figure" >
< p > < img src = "resources/ images/wgu-vis-table.png" alt = "wgu-vis-table.png" / >
< div id = "org 51eda98 " class = "figure" >
< p > < img src = "resources/ public/ images/wgu-vis-table.png" alt = "wgu-vis-table.png" / >
< / p >
< / div >
< / div >
@ -2104,16 +2122,16 @@ Create each of the following forms of documentation for the product you have dev
< / p >
< / div >
< div id = "outline-container-org b500abb " class = "outline-3" >
< h3 id = "org b500abb "> < span class = "section-number-3" > 6.1< / span > Business Vision< / h3 >
< div id = "outline-container-org a8a2b80 " class = "outline-3" >
< h3 id = "org a8a2b80 "> < span class = "section-number-3" > 6.1< / span > Business Vision< / h3 >
< div class = "outline-text-3" id = "text-6-1" >
< p >
Provide rhyming lyric suggestions optionally constrained by syllable count.
< / p >
< / div >
< div id = "outline-container-org e3dab0 1" class = "outline-4" >
< h4 id = "org e3dab0 1"> < span class = "section-number-4" > 6.1.1< / span > Requirements< / h4 >
< div id = "outline-container-org 10db78 1" class = "outline-4" >
< h4 id = "org 10db78 1"> < span class = "section-number-4" > 6.1.1< / span > Requirements< / h4 >
< div class = "outline-text-4" id = "text-6-1-1" >
< ul class = "org-ul" >
< li class = "on" > < code > [X]< / code > Given a word or phrase, suggest rhymes (ranked by quality) (Trie)< / li >
@ -2129,8 +2147,8 @@ Provide rhyming lyric suggestions optionally constrained by syllable count.
< / div >
< / div >
< div id = "outline-container-org bf1af68 " class = "outline-3" >
< h3 id = "org bf1af68 "> < span class = "section-number-3" > 6.2< / span > Data Sets< / h3 >
< div id = "outline-container-org c562680 " class = "outline-3" >
< h3 id = "org c562680 "> < span class = "section-number-3" > 6.2< / span > Data Sets< / h3 >
< div class = "outline-text-3" id = "text-6-2" >
< p >
I obtained the dataset from < a href = "http://darklyrics.com" > http://darklyrics.com< / a > .
@ -2154,8 +2172,8 @@ See <code>resources/darklyrics-markov.tpt</code>
< / div >
< / div >
< div id = "outline-container-org d13dfaf " class = "outline-3" >
< h3 id = "org d13dfaf "> < span class = "section-number-3" > 6.3< / span > Data Analysis< / h3 >
< div id = "outline-container-org 90ce434 " class = "outline-3" >
< h3 id = "org 90ce434 "> < span class = "section-number-3" > 6.3< / span > Data Analysis< / h3 >
< div class = "outline-text-3" id = "text-6-3" >
< p >
I wrote code to perform certain types of data analysis, but I didn’ t find it useful to meet the business requirements of this project.
@ -2167,36 +2185,36 @@ For example, there is natural language processing code at <a href="https://githu
< / div >
< / div >
< div id = "outline-container-org3 681223 " class = "outline-3" >
< h3 id = "org3 681223 "> < span class = "section-number-3" > 6.4< / span > Assessment< / h3 >
< div id = "outline-container-org3 8e35cd " class = "outline-3" >
< h3 id = "org3 8e35cd "> < span class = "section-number-3" > 6.4< / span > Assessment< / h3 >
< / div >
< div id = "outline-container-org c532c50 " class = "outline-3" >
< h3 id = "org c532c50 "> < span class = "section-number-3" > 6.5< / span > Visualizations< / h3 >
< div id = "outline-container-org 8282426 " class = "outline-3" >
< h3 id = "org 8282426 "> < span class = "section-number-3" > 6.5< / span > Visualizations< / h3 >
< div class = "outline-text-3" id = "text-6-5" >
< div id = "org 4d36024 " class = "figure" >
< p > < img src = "resources/ images/rhyme-scatterplot.png" alt = "rhyme-scatterplot.png" / >
< div id = "org 7ded47a " class = "figure" >
< p > < img src = "resources/ public/ images/rhyme-scatterplot.png" alt = "rhyme-scatterplot.png" / >
< / p >
< / div >
< div id = "org d693532 " class = "figure" >
< p > < img src = "resources/ images/wordcloud.png" alt = "wordcloud.png" / >
< div id = "org 4350e3f " class = "figure" >
< p > < img src = "resources/ public/ images/wordcloud.png" alt = "wordcloud.png" / >
< / p >
< / div >
< div id = "org b6d6f19 " class = "figure" >
< p > < img src = "resources/ images/rhyme-table.png" alt = "rhyme-table.png" / >
< div id = "org 3385017 " class = "figure" >
< p > < img src = "resources/ public/ images/rhyme-table.png" alt = "rhyme-table.png" / >
< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-org bac9951 " class = "outline-3" >
< h3 id = "org bac9951 "> < span class = "section-number-3" > 6.6< / span > Accuracy< / h3 >
< div id = "outline-container-org fc55be7 " class = "outline-3" >
< h3 id = "org fc55be7 "> < span class = "section-number-3" > 6.6< / span > Accuracy< / h3 >
< div class = "outline-text-3" id = "text-6-6" >
< p >
It’ s difficult to objectively test the models accuracy since the goal of “ brainstorm new lyric” is such a subjective goal. A valid test of that goal will require many human subjects to subjectively evaluate their performance while using the tool compared to their performance without the tool.
@ -2207,8 +2225,8 @@ If we allow ourselves the assumption that the close a generated phrase is to a v
< / p >
< / div >
< div id = "outline-container-org 652cf82 " class = "outline-4" >
< h4 id = "org 652cf82 "> < span class = "section-number-4" > 6.6.1< / span > Percentage Of Generated Lines That Are Valid English Sentences< / h4 >
< div id = "outline-container-org 34c05ab " class = "outline-4" >
< h4 id = "org 34c05ab "> < span class = "section-number-4" > 6.6.1< / span > Percentage Of Generated Lines That Are Valid English Sentences< / h4 >
< div class = "outline-text-4" id = "text-6-6-1" >
< p >
We can use < a href = "https://opennlp.apache.org/" > Apache OpenNLP< / a > to parse sentences into a grammar structure conforming to the parts of speech specified by the < a href = "https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html" > University of Pennsylvania’ s Treebank Project< / a > .
@ -2280,8 +2298,8 @@ Where <code>nlp/valid-sentence?</code> is defined as follows.
< / div >
< / div >
< div id = "outline-container-org 6ee5077 " class = "outline-3" >
< h3 id = "org 6ee5077 "> < span class = "section-number-3" > 6.7< / span > Testing< / h3 >
< div id = "outline-container-org 85e75eb " class = "outline-3" >
< h3 id = "org 85e75eb "> < span class = "section-number-3" > 6.7< / span > Testing< / h3 >
< div class = "outline-text-3" id = "text-6-7" >
< p >
My language of choice for this project encourages a programming technique or paradigm known as REPL-driven development. REPL stands for Read-Eval-Print-Loop. This is a way to write and test code in real-time without a compilation step. Individual code chunks can be evaluated inside an editor, resulting in rapid feedback.
@ -2325,12 +2343,12 @@ Here is an example of the test suite for the code related to syllabification: <a
< / div >
< / div >
< div id = "outline-container-org 3a978f5 " class = "outline-3" >
< h3 id = "org 3a978f5 "> < span class = "section-number-3" > 6.8< / span > Source Code< / h3 >
< div id = "outline-container-org bd2aaf7 " class = "outline-3" >
< h3 id = "org bd2aaf7 "> < span class = "section-number-3" > 6.8< / span > Source Code< / h3 >
< div class = "outline-text-3" id = "text-6-8" >
< / div >
< div id = "outline-container-orge 2c7328 " class = "outline-4" >
< h4 id = "orge 2c7328 "> < span class = "section-number-4" > 6.8.1< / span > Tightly Packed Trie< / h4 >
< div id = "outline-container-orge f379f2 " class = "outline-4" >
< h4 id = "orge f379f2 "> < span class = "section-number-4" > 6.8.1< / span > Tightly Packed Trie< / h4 >
< div class = "outline-text-4" id = "text-6-8-1" >
< p >
This is the data structure that backs the Hidden Markov Model.
@ -2342,8 +2360,8 @@ This is the data structure that backs the Hidden Markov Model.
< / div >
< / div >
< div id = "outline-container-org cd18f6c " class = "outline-4" >
< h4 id = "org cd18f6c "> < span class = "section-number-4" > 6.8.2< / span > Phonetics< / h4 >
< div id = "outline-container-org 5aff5d6 " class = "outline-4" >
< h4 id = "org 5aff5d6 "> < span class = "section-number-4" > 6.8.2< / span > Phonetics< / h4 >
< div class = "outline-text-4" id = "text-6-8-2" >
< p >
This is the helper library that syllabifies and manipulates words, phones, and syllables.
@ -2355,8 +2373,8 @@ This is the helper library that syllabifies and manipulates words, phones, and s
< / div >
< / div >
< div id = "outline-container-org ebe6ea7 " class = "outline-4" >
< h4 id = "org ebe6ea7 "> < span class = "section-number-4" > 6.8.3< / span > Rhyming< / h4 >
< div id = "outline-container-org 0fca7e3 " class = "outline-4" >
< h4 id = "org 0fca7e3 "> < span class = "section-number-4" > 6.8.3< / span > Rhyming< / h4 >
< div class = "outline-text-4" id = "text-6-8-3" >
< p >
This library contains code for analyzing rhymes, sentence structure, and manipulating corpuses.
@ -2368,8 +2386,8 @@ This library contains code for analyzing rhymes, sentence structure, and manipul
< / div >
< / div >
< div id = "outline-container-org 48f7c8 9" class = "outline-4" >
< h4 id = "org 48f7c8 9"> < span class = "section-number-4" > 6.8.4< / span > Web Server And User Interface< / h4 >
< div id = "outline-container-org d2422e 9" class = "outline-4" >
< h4 id = "org d2422e 9"> < span class = "section-number-4" > 6.8.4< / span > Web Server And User Interface< / h4 >
< div class = "outline-text-4" id = "text-6-8-4" >
< p >
This application is not publicly available. I’ ll upload it with submission of the project.
@ -2378,16 +2396,16 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / div >
< div id = "outline-container-org 5b7bf1 b" class = "outline-3" >
< h3 id = "org 5b7bf1 b"> < span class = "section-number-3" > 6.9< / span > Quick Start< / h3 >
< div id = "outline-container-org 08f848 b" class = "outline-3" >
< h3 id = "org 08f848 b"> < span class = "section-number-3" > 6.9< / span > Quick Start< / h3 >
< div class = "outline-text-3" id = "text-6-9" >
< / div >
< div id = "outline-container-org 9fee706 " class = "outline-4" >
< h4 id = "org 9fee706 "> < span class = "section-number-4" > 6.9.1< / span > How To Initialize Development Environment< / h4 >
< div id = "outline-container-org 3923d45 " class = "outline-4" >
< h4 id = "org 3923d45 "> < span class = "section-number-4" > 6.9.1< / span > How To Initialize Development Environment< / h4 >
< div class = "outline-text-4" id = "text-6-9-1" >
< / div >
< ol class = "org-ol" >
< li > < a id = "org b6b452d "> < / a > Required Software< br / >
< li > < a id = "org e9ebf77 "> < / a > Required Software< br / >
< div class = "outline-text-5" id = "text-6-9-1-1" >
< ul class = "org-ul" >
< li > < a href = "https://www.docker.com/" > Docker< / a > < / li >
@ -2397,7 +2415,7 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / li >
< li > < a id = "org b10f4d4 "> < / a > Steps< br / >
< li > < a id = "org 83756cd "> < / a > Steps< br / >
< div class = "outline-text-5" id = "text-6-9-1-2" >
< ol class = "org-ol" >
< li > Run < code > ./db/run.sh & & ./kv/run.sh< / code > to start the docker containers for the database and key-value store.
@ -2412,12 +2430,12 @@ This application is not publicly available. I’ll upload it with submission
< / ol >
< / div >
< div id = "outline-container-org fc1399f " class = "outline-4" >
< h4 id = "org fc1399f "> < span class = "section-number-4" > 6.9.2< / span > How To Run Software Locally< / h4 >
< div id = "outline-container-org e987ec3 " class = "outline-4" >
< h4 id = "org e987ec3 "> < span class = "section-number-4" > 6.9.2< / span > How To Run Software Locally< / h4 >
< div class = "outline-text-4" id = "text-6-9-2" >
< / div >
< ol class = "org-ol" >
< li > < a id = "org d3d8d55 "> < / a > Requirements< br / >
< li > < a id = "org 1d9adeb "> < / a > Requirements< br / >
< div class = "outline-text-5" id = "text-6-9-2-1" >
< ul class = "org-ul" >
< li > < a href = "https://www.java.com/download/ie_manual.jsp" > Java< / a > < / li >
@ -2426,7 +2444,7 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / li >
< li > < a id = "org 9904b5 2"> < / a > Steps< br / >
< li > < a id = "org 40574b 2"> < / a > Steps< br / >
< div class = "outline-text-5" id = "text-6-9-2-2" >
< ol class = "org-ol" >
< li > Run < code > ./db/run.sh & & ./kv/run.sh< / code > to start the docker containers for the database and key-value store.
@ -2446,7 +2464,7 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Eric Ihli< / p >
< p class = "date" > Created: 2021-07-22 Thu 16:36 < / p >
< p class = "date" > Created: 2021-07-22 Thu 19:09 < / p >
< / div >
< / body >
< / html >