@ -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 19: 4 1 -->
<!-- 2021 - 07 - 22 Thu 19: 5 1 -->
< 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 b43afec "> 1. WGU Evaluator Notes< / a > < / li >
< li > < a href = "#org 3580aca "> 2. Evaluation Technical Documentation< / a >
< li > < a href = "#org 38da5db "> 1. WGU Evaluator Notes< / a > < / li >
< li > < a href = "#org 2d73681 "> 2. Evaluation Technical Documentation< / a >
< ul >
< li > < a href = "#org 13d30ad "> 2.1. How To Initialize Development Environment< / a >
< li > < a href = "#org 7dfc278 "> 2.1. How To Initialize Development Environment< / a >
< ul >
< li > < a href = "#org befea4c "> 2.1.1. Required Software< / a > < / li >
< li > < a href = "#org f209b 70"> 2.1.2. Steps< / a > < / li >
< li > < a href = "#org dee2266 "> 2.1.1. Required Software< / a > < / li >
< li > < a href = "#org 759236 0"> 2.1.2. Steps< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org e3d8f91 "> 2.2. How To Run Software Locally< / a >
< li > < a href = "#org b843ac4 "> 2.2. How To Run Software Locally< / a >
< ul >
< li > < a href = "#org 790754a "> 2.2.1. Requirements< / a > < / li >
< li > < a href = "#org7 135b2 b"> 2.2.2. Steps< / a > < / li >
< li > < a href = "#org 1e3c95b "> 2.2.1. Requirements< / a > < / li >
< li > < a href = "#org7 8799e b"> 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 ab30fa 4"> 3.1. Problem Summary< / a > < / li >
< li > < a href = "#org 1f14f66 "> 3.2. Benefits< / a > < / li >
< li > < a href = "#org 2ea780d "> 3.3. Product - RhymeStorm™< / a > < / li >
< li > < a href = "#org f eaa7d e"> 3.4. Data< / a > < / li >
< li > < a href = "#org dd7934 9"> 3.5. Objectives< / a > < / li >
< li > < a href = "#org 2a70536 "> 3.6. Development Methodology - Agile< / a > < / li >
< li > < a href = "#org dbf942c "> 3.7. Costs< / a > < / li >
< li > < a href = "#org 494232a "> 3.8. Stakeholder Impact< / a > < / li >
< li > < a href = "#org 27fe9ce "> 3.9. Ethical And Legal Considerations< / a > < / li >
< li > < a href = "#org 0928410 "> 3.10. Expertise< / a > < / li >
< li > < a href = "#org 464e0d5 "> 3.1. Problem Summary< / a > < / li >
< li > < a href = "#org f37cff4 "> 3.2. Benefits< / a > < / li >
< li > < a href = "#org 0c492 2e"> 3.3. Product - RhymeStorm™< / a > < / li >
< li > < a href = "#org eaeea2c "> 3.4. Data< / a > < / li >
< li > < a href = "#org 127278 9"> 3.5. Objectives< / a > < / li >
< li > < a href = "#org 3c3a5f3 "> 3.6. Development Methodology - Agile< / a > < / li >
< li > < a href = "#org a9eb348 "> 3.7. Costs< / a > < / li >
< li > < a href = "#org 95f6404 "> 3.8. Stakeholder Impact< / a > < / li >
< li > < a href = "#org 09fcfb8 "> 3.9. Ethical And Legal Considerations< / a > < / li >
< li > < a href = "#org a7acb54 "> 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 6a2c47b "> 4.1. Decision Support Opportunity< / a > < / li >
< li > < a href = "#org 2138a2a "> 4.2. Customer Needs And Product Description< / a > < / li >
< li > < a href = "#org e1e4044 "> 4.3. Existing Products< / a > < / li >
< li > < a href = "#org1 04da5a "> 4.4. Available Data And Future Data Lifecycle< / a > < / li >
< li > < a href = "#org ab51e1 b"> 4.5. Methodology - Agile< / a > < / li >
< li > < a href = "#org 4201530 "> 4.6. Deliverables< / a > < / li >
< li > < a href = "#org 4ebbe70 "> 4.7. Implementation Plan And Anticipations< / a > < / li >
< li > < a href = "#org da1cfdf "> 4.8. Requirements Validation And Verification< / a > < / li >
< li > < a href = "#org 58ee89d "> 4.9. Programming Environments And Costs< / a > < / li >
< li > < a href = "#org 526b9 b0"> 4.10. Timeline And Milestones< / a > < / li >
< li > < a href = "#org 3e39ab1 "> 4.1. Decision Support Opportunity< / a > < / li >
< li > < a href = "#org 70f3f81 "> 4.2. Customer Needs And Product Description< / a > < / li >
< li > < a href = "#org 87f9ed6 "> 4.3. Existing Products< / a > < / li >
< li > < a href = "#org1 e4bde0 "> 4.4. Available Data And Future Data Lifecycle< / a > < / li >
< li > < a href = "#org 4ef3a8 b"> 4.5. Methodology - Agile< / a > < / li >
< li > < a href = "#org 632441b "> 4.6. Deliverables< / a > < / li >
< li > < a href = "#org 376f00d "> 4.7. Implementation Plan And Anticipations< / a > < / li >
< li > < a href = "#org 09ddace "> 4.8. Requirements Validation And Verification< / a > < / li >
< li > < a href = "#org 0641d83 "> 4.9. Programming Environments And Costs< / a > < / li >
< li > < a href = "#org b35 0393 "> 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 5515a0b "> 5.1. Descriptive And Predictive Methods< / a >
< li > < a href = "#org d4bc252 "> 5.1. Descriptive And Predictive Methods< / a >
< ul >
< li > < a href = "#org f969297 "> 5.1.1. Descriptive Method< / a > < / li >
< li > < a href = "#org 26510fa "> 5.1.2. Prescriptive Method< / a > < / li >
< li > < a href = "#org db26818 "> 5.1.1. Descriptive Method< / a > < / li >
< li > < a href = "#org e3fba21 "> 5.1.2. Prescriptive Method< / a > < / li >
< / ul >
< / li >
< li > < a href = "#orgcc6 3d1e "> 5.2. Datasets< / a > < / li >
< li > < a href = "#org 270a41e "> 5.3. Decision Support Functionality< / a >
< li > < a href = "#orgcc6 c85c "> 5.2. Datasets< / a > < / li >
< li > < a href = "#org b7d8f5c "> 5.3. Decision Support Functionality< / a >
< ul >
< li > < a href = "#org 00d4922 "> 5.3.1. Choosing Words For A Lyric Based On Markov Likelihood< / a > < / li >
< li > < a href = "#org 527619f "> 5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality< / a > < / li >
< li > < a href = "#org f95bd91 "> 5.3.1. Choosing Words For A Lyric Based On Markov Likelihood< / a > < / li >
< li > < a href = "#org fa7f864 "> 5.3.2. Choosing Words To Complete A Lyric Based On Rhyme Quality< / a > < / li >
< / ul >
< / li >
< li > < a href = "#orge 6c520 9"> 5.4. Featurizing, Parsing, Cleaning, And Wrangling Data< / a > < / li >
< li > < a href = "#org 823f75e "> 5.5. Data Exploration And Preparation< / a > < / li >
< li > < a href = "#org 11fbbda "> 5.6. Data Visualization Functionalities For Data Exploration And Inspection< / a > < / li >
< li > < a href = "#org bd1ad98 "> 5.7. Implementation Of Interactive Queries< / a >
< li > < a href = "#orge 4c457 9"> 5.4. Featurizing, Parsing, Cleaning, And Wrangling Data< / a > < / li >
< li > < a href = "#org 1a147a4 "> 5.5. Data Exploration And Preparation< / a > < / li >
< li > < a href = "#org 4b21646 "> 5.6. Data Visualization Functionalities For Data Exploration And Inspection< / a > < / li >
< li > < a href = "#org 7c77849 "> 5.7. Implementation Of Interactive Queries< / a >
< ul >
< li > < a href = "#org 0d2027e "> 5.7.1. Generate Rhyming Lyrics< / a > < / li >
< li > < a href = "#org dcfb720 "> 5.7.2. Complete Lyric Containing Suffix< / a > < / li >
< li > < a href = "#org 2517ab8 "> 5.7.1. Generate Rhyming Lyrics< / a > < / li >
< li > < a href = "#org 8e8ae1 d"> 5.7.2. Complete Lyric Containing Suffix< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 232c639 "> 5.8. Implementation Of Machine Learning Methods< / a > < / li >
< li > < a href = "#org 35ff552 "> 5.9. Functionalities To Evaluate The Accuracy Of The Data Product< / a > < / li >
< li > < a href = "#org d766cee "> 5.10. Security Features< / a > < / li >
< li > < a href = "#org9 c9ed71 "> 5.11. Tools To Monitor And Maintain The Product< / a > < / li >
< li > < a href = "#org 4b4ba97 "> 5.12. A User-Friendly, Functional Dashboard That Includes At Least Three Visualization Types< / a > < / li >
< li > < a href = "#org 5e053f1 "> 5.8. Implementation Of Machine Learning Methods< / a > < / li >
< li > < a href = "#org 0e9f46e "> 5.9. Functionalities To Evaluate The Accuracy Of The Data Product< / a > < / li >
< li > < a href = "#org a76fd7f "> 5.10. Security Features< / a > < / li >
< li > < a href = "#org9 f1976e "> 5.11. Tools To Monitor And Maintain The Product< / a > < / li >
< li > < a href = "#org 3ef6d25 "> 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 fe1d555 "> 6.1. Business Vision< / a >
< li > < a href = "#org 26e0552 "> 6.1. Business Vision< / a >
< ul >
< li > < a href = "#org 88 26289 "> 6.1.1. Requirements< / a > < / li >
< li > < a href = "#org 2deb 60 2"> 6.1.1. Requirements< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 15ac11a "> 6.2. Data Sets< / a > < / li >
< li > < a href = "#org c7d269b "> 6.3. Data Analysis< / a > < / li >
< li > < a href = "#org 8a06ff0 "> 6.4. Assessment Of Hypothesis< / a > < / li >
< li > < a href = "#org 1553139 "> 6.5. Visualizations< / a > < / li >
< li > < a href = "#org a76f1f7 "> 6.6. Accuracy< / a >
< li > < a href = "#org 50e6024 "> 6.2. Data Sets< / a > < / li >
< li > < a href = "#org 88bf50f "> 6.3. Data Analysis< / a > < / li >
< li > < a href = "#org bfb5bd1 "> 6.4. Assessment Of Hypothesis< / a > < / li >
< li > < a href = "#org ba06040 "> 6.5. Visualizations< / a > < / li >
< li > < a href = "#org 6cbdd1b "> 6.6. Accuracy< / a >
< ul >
< li > < a href = "#org 0db3129 "> 6.6.1. Percentage Of Generated Lines That Are Valid English Sentences< / a > < / li >
< li > < a href = "#org c57d287 "> 6.6.1. Percentage Of Generated Lines That Are Valid English Sentences< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 3a43 991 "> 6.7. Testing< / a > < / li >
< li > < a href = "#org 2963bab "> 6.8. Source Code< / a >
< li > < a href = "#org 955fa5 9"> 6.7. Testing< / a > < / li >
< li > < a href = "#org 0ab73b1 "> 6.8. Source Code< / a >
< ul >
< li > < a href = "#org a6fa452 "> 6.8.1. Tightly Packed Trie< / a > < / li >
< li > < a href = "#org 3f08734 "> 6.8.2. Phonetics< / a > < / li >
< li > < a href = "#org 4fdda7e "> 6.8.3. Rhyming< / a > < / li >
< li > < a href = "#org 2dfd227 "> 6.8.4. Web Server And User Interface< / a > < / li >
< li > < a href = "#org 00b5cd4 "> 6.8.1. Tightly Packed Trie< / a > < / li >
< li > < a href = "#org 868fdae "> 6.8.2. Phonetics< / a > < / li >
< li > < a href = "#org 72aa443 "> 6.8.3. Rhyming< / a > < / li >
< li > < a href = "#org c96a09c "> 6.8.4. Web Server And User Interface< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org 7b2a727 "> 6.9. Quick Start< / a >
< li > < a href = "#org af98fb3 "> 6.9. Quick Start< / a >
< ul >
< li > < a href = "#org 88c2a2d "> 6.9.1. How To Initialize Development Environment< / a > < / li >
< li > < a href = "#org 88cd7f9 "> 6.9.2. How To Run Software Locally< / a > < / li >
< li > < a href = "#org 760df04 "> 6.9.1. How To Initialize Development Environment< / a > < / li >
< li > < a href = "#org 46b547f "> 6.9.2. How To Run Software Locally< / a > < / li >
< / ul >
< / li >
< / ul >
@ -336,8 +336,8 @@
< / div >
< / div >
< div id = "outline-container-org b43afec " class = "outline-2" >
< h2 id = "org b43afec "> < span class = "section-number-2" > 1< / span > WGU Evaluator Notes< / h2 >
< div id = "outline-container-org 38da5db " class = "outline-2" >
< h2 id = "org 38da5db "> < 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 3580aca " class = "outline-2" >
< h2 id = "org 3580aca "> < span class = "section-number-2" > 2< / span > Evaluation Technical Documentation< / h2 >
< div id = "outline-container-org 2d73681 " class = "outline-2" >
< h2 id = "org 2d73681 "> < 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 13d30ad " class = "outline-3" >
< h3 id = "org 13d30ad "> < span class = "section-number-3" > 2.1< / span > How To Initialize Development Environment< / h3 >
< div id = "outline-container-org 7dfc278 " class = "outline-3" >
< h3 id = "org 7dfc278 "> < 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 befea4c " class = "outline-4" >
< h4 id = "org befea4c "> < span class = "section-number-4" > 2.1.1< / span > Required Software< / h4 >
< div id = "outline-container-org dee2266 " class = "outline-4" >
< h4 id = "org dee2266 "> < 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 f209b 70" class = "outline-4" >
< h4 id = "org f209b 70"> < span class = "section-number-4" > 2.1.2< / span > Steps< / h4 >
< div id = "outline-container-org 759236 0" class = "outline-4" >
< h4 id = "org 759236 0"> < 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 e3d8f91 " class = "outline-3" >
< h3 id = "org e3d8f91 "> < span class = "section-number-3" > 2.2< / span > How To Run Software Locally< / h3 >
< div id = "outline-container-org b843ac4 " class = "outline-3" >
< h3 id = "org b843ac4 "> < 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 790754a " class = "outline-4" >
< h4 id = "org 790754a "> < span class = "section-number-4" > 2.2.1< / span > Requirements< / h4 >
< div id = "outline-container-org 1e3c95b " class = "outline-4" >
< h4 id = "org 1e3c95b "> < 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-org7 135b2 b" class = "outline-4" >
< h4 id = "org7 135b2 b"> < span class = "section-number-4" > 2.2.2< / span > Steps< / h4 >
< div id = "outline-container-org7 8799e b" class = "outline-4" >
< h4 id = "org7 8799e b"> < 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 ab30fa 4" class = "outline-3" >
< h3 id = "org ab30fa 4"> < span class = "section-number-3" > 3.1< / span > Problem Summary< / h3 >
< div id = "outline-container-org 464e0d5 " class = "outline-3" >
< h3 id = "org 464e0d5 "> < 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 1f14f66 " class = "outline-3" >
< h3 id = "org 1f14f66 "> < span class = "section-number-3" > 3.2< / span > Benefits< / h3 >
< div id = "outline-container-org f37cff4 " class = "outline-3" >
< h3 id = "org f37cff4 "> < 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 2ea780d " class = "outline-3" >
< h3 id = "org 2ea780d "> < span class = "section-number-3" > 3.3< / span > Product - RhymeStorm™< / h3 >
< div id = "outline-container-org 0c492 2e" class = "outline-3" >
< h3 id = "org 0c492 2e"> < 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 f eaa7d e" class = "outline-3" >
< h3 id = "org f eaa7d e"> < span class = "section-number-3" > 3.4< / span > Data< / h3 >
< div id = "outline-container-org eaeea2c " class = "outline-3" >
< h3 id = "org eaeea2c "> < 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 dd7934 9" class = "outline-3" >
< h3 id = "org dd7934 9"> < span class = "section-number-3" > 3.5< / span > Objectives< / h3 >
< div id = "outline-container-org 127278 9" class = "outline-3" >
< h3 id = "org 127278 9"> < 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 2a70536 " class = "outline-3" >
< h3 id = "org 2a70536 "> < span class = "section-number-3" > 3.6< / span > Development Methodology - Agile< / h3 >
< div id = "outline-container-org 3c3a5f3 " class = "outline-3" >
< h3 id = "org 3c3a5f3 "> < 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 dbf942c " class = "outline-3" >
< h3 id = "org dbf942c "> < span class = "section-number-3" > 3.7< / span > Costs< / h3 >
< div id = "outline-container-org a9eb348 " class = "outline-3" >
< h3 id = "org a9eb348 "> < 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 494232a " class = "outline-3" >
< h3 id = "org 494232a "> < span class = "section-number-3" > 3.8< / span > Stakeholder Impact< / h3 >
< div id = "outline-container-org 95f6404 " class = "outline-3" >
< h3 id = "org 95f6404 "> < 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 1f14f66 "> 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 f37cff4 "> 3.2< / a > section above.
< / p >
< / div >
< / div >
< div id = "outline-container-org 27fe9ce " class = "outline-3" >
< h3 id = "org 27fe9ce "> < span class = "section-number-3" > 3.9< / span > Ethical And Legal Considerations< / h3 >
< div id = "outline-container-org 09fcfb8 " class = "outline-3" >
< h3 id = "org 09fcfb8 "> < 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 0928410 " class = "outline-3" >
< h3 id = "org 0928410 "> < span class = "section-number-3" > 3.10< / span > Expertise< / h3 >
< div id = "outline-container-org a7acb54 " class = "outline-3" >
< h3 id = "org a7acb54 "> < 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 6a2c47b " class = "outline-3" >
< h3 id = "org 6a2c47b "> < span class = "section-number-3" > 4.1< / span > Decision Support Opportunity< / h3 >
< div id = "outline-container-org 3e39ab1 " class = "outline-3" >
< h3 id = "org 3e39ab1 "> < 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 2138a2a " class = "outline-3" >
< h3 id = "org 2138a2a "> < span class = "section-number-3" > 4.2< / span > Customer Needs And Product Description< / h3 >
< div id = "outline-container-org 70f3f81 " class = "outline-3" >
< h3 id = "org 70f3f81 "> < 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 e1e4044 " class = "outline-3" >
< h3 id = "org e1e4044 "> < span class = "section-number-3" > 4.3< / span > Existing Products< / h3 >
< div id = "outline-container-org 87f9ed6 " class = "outline-3" >
< h3 id = "org 87f9ed6 "> < 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-org1 04da5a " class = "outline-3" >
< h3 id = "org1 04da5a "> < span class = "section-number-3" > 4.4< / span > Available Data And Future Data Lifecycle< / h3 >
< div id = "outline-container-org1 e4bde0 " class = "outline-3" >
< h3 id = "org1 e4bde0 "> < 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 ab51e1 b" class = "outline-3" >
< h3 id = "org ab51e1 b"> < span class = "section-number-3" > 4.5< / span > Methodology - Agile< / h3 >
< div id = "outline-container-org 4ef3a8 b" class = "outline-3" >
< h3 id = "org 4ef3a8 b"> < 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-org 4201530 " class = "outline-3" >
< h3 id = "org 4201530 "> < span class = "section-number-3" > 4.6< / span > Deliverables< / h3 >
< div id = "outline-container-org 632441b " class = "outline-3" >
< h3 id = "org 632441b "> < 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 4ebbe70 " class = "outline-3" >
< h3 id = "org 4ebbe70 "> < span class = "section-number-3" > 4.7< / span > Implementation Plan And Anticipations< / h3 >
< div id = "outline-container-org 376f00d " class = "outline-3" >
< h3 id = "org 376f00d "> < 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 da1cfdf " class = "outline-3" >
< h3 id = "org da1cfdf "> < span class = "section-number-3" > 4.8< / span > Requirements Validation And Verification< / h3 >
< div id = "outline-container-org 09ddace " class = "outline-3" >
< h3 id = "org 09ddace "> < 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 58ee89d " class = "outline-3" >
< h3 id = "org 58ee89d "> < span class = "section-number-3" > 4.9< / span > Programming Environments And Costs< / h3 >
< div id = "outline-container-org 0641d83 " class = "outline-3" >
< h3 id = "org 0641d83 "> < 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 526b9 b0" class = "outline-3" >
< h3 id = "org 526b9 b0"> < span class = "section-number-3" > 4.10< / span > Timeline And Milestones< / h3 >
< div id = "outline-container-org b35 0393 " class = "outline-3" >
< h3 id = "org b35 0393 "> < 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 5515a0b " class = "outline-3" >
< h3 id = "org 5515a0b "> < span class = "section-number-3" > 5.1< / span > Descriptive And Predictive Methods< / h3 >
< div id = "outline-container-org d4bc252 " class = "outline-3" >
< h3 id = "org d4bc252 "> < 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 f969297 " class = "outline-4" >
< h4 id = "org f969297 "> < span class = "section-number-4" > 5.1.1< / span > Descriptive Method< / h4 >
< div id = "outline-container-org db26818 " class = "outline-4" >
< h4 id = "org db26818 "> < 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 891aca a"> < / a > Most Common Grammatical Structures In A Set Of Lyrics< br / >
< li > < a id = "org db5100 a"> < / 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-org 26510fa " class = "outline-4" >
< h4 id = "org 26510fa "> < span class = "section-number-4" > 5.1.2< / span > Prescriptive Method< / h4 >
< div id = "outline-container-org e3fba21 " class = "outline-4" >
< h4 id = "org e3fba21 "> < 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 4157af0 "> < / a > Most Likely Word To Follow A Given Phrase< br / >
< li > < a id = "org d291e1e "> < / 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-orgcc6 3d1e " class = "outline-3" >
< h3 id = "orgcc6 3d1e "> < span class = "section-number-3" > 5.2< / span > Datasets< / h3 >
< div id = "outline-container-orgcc6 c85c " class = "outline-3" >
< h3 id = "orgcc6 c85c "> < 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 270a41e " class = "outline-3" >
< h3 id = "org 270a41e "> < span class = "section-number-3" > 5.3< / span > Decision Support Functionality< / h3 >
< div id = "outline-container-org b7d8f5c " class = "outline-3" >
< h3 id = "org b7d8f5c "> < 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 00d4922 " class = "outline-4" >
< h4 id = "org 00d4922 "> < span class = "section-number-4" > 5.3.1< / span > Choosing Words For A Lyric Based On Markov Likelihood< / h4 >
< div id = "outline-container-org f95bd91 " class = "outline-4" >
< h4 id = "org f95bd91 "> < 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 527619f " class = "outline-4" >
< h4 id = "org 527619f "> < 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 fa7f864 " class = "outline-4" >
< h4 id = "org fa7f864 "> < 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-orge 6c520 9" class = "outline-3" >
< h3 id = "orge 6c520 9"> < span class = "section-number-3" > 5.4< / span > Featurizing, Parsing, Cleaning, And Wrangling Data< / h3 >
< div id = "outline-container-orge 4c457 9" class = "outline-3" >
< h3 id = "orge 4c457 9"> < 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 823f75e " class = "outline-3" >
< h3 id = "org 823f75e "> < span class = "section-number-3" > 5.5< / span > Data Exploration And Preparation< / h3 >
< div id = "outline-container-org 1a147a4 " class = "outline-3" >
< h3 id = "org 1a147a4 "> < 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 11fbbda " class = "outline-3" >
< h3 id = "org 11fbbda "> < span class = "section-number-3" > 5.6< / span > Data Visualization Functionalities For Data Exploration And Inspection< / h3 >
< div id = "outline-container-org 4b21646 " class = "outline-3" >
< h3 id = "org 4b21646 "> < 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 8268c a9">
< pre class = "example" id = "org ade 918e ">
(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 bd1ad98 " class = "outline-3" >
< h3 id = "org bd1ad98 "> < span class = "section-number-3" > 5.7< / span > Implementation Of Interactive Queries< / h3 >
< div id = "outline-container-org 7c77849 " class = "outline-3" >
< h3 id = "org 7c77849 "> < 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 0d2027e " class = "outline-4" >
< h4 id = "org 0d2027e "> < span class = "section-number-4" > 5.7.1< / span > Generate Rhyming Lyrics< / h4 >
< div id = "outline-container-org 2517ab8 " class = "outline-4" >
< h4 id = "org 2517ab8 "> < 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 dcfb720 " class = "outline-4" >
< h4 id = "org dcfb720 "> < span class = "section-number-4" > 5.7.2< / span > Complete Lyric Containing Suffix< / h4 >
< div id = "outline-container-org 8e8ae1 d" class = "outline-4" >
< h4 id = "org 8e8ae1 d"> < 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 232c639 " class = "outline-3" >
< h3 id = "org 232c639 "> < span class = "section-number-3" > 5.8< / span > Implementation Of Machine Learning Methods< / h3 >
< div id = "outline-container-org 5e053f1 " class = "outline-3" >
< h3 id = "org 5e053f1 "> < 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 6d27032 ">
< pre class = "example" id = "org dfa4bfb ">
[(("< 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 35ff552 " class = "outline-3" >
< h3 id = "org 35ff552 "> < span class = "section-number-3" > 5.9< / span > Functionalities To Evaluate The Accuracy Of The Data Product< / h3 >
< div id = "outline-container-org 0e9f46e " class = "outline-3" >
< h3 id = "org 0e9f46e "> < 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 d766cee " class = "outline-3" >
< h3 id = "org d766cee "> < span class = "section-number-3" > 5.10< / span > Security Features< / h3 >
< div id = "outline-container-org a76fd7f " class = "outline-3" >
< h3 id = "org a76fd7f "> < 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,16 +2039,16 @@ With this precaution in place, attackers will not be able to snoop the content t
< / div >
< / div >
< div id = "outline-container-org9 c9ed71 " class = "outline-3" >
< h3 id = "org9 c9ed71 "> < span class = "section-number-3" > 5.11< / span > Tools To Monitor And Maintain The Product< / h3 >
< div id = "outline-container-org9 f1976e " class = "outline-3" >
< h3 id = "org9 f1976e "> < 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" >
< 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 = "org2 de20c 5" class = "figure" >
< p > < img src = " assets/ images/stats.png" alt = "stats.png" / >
< div id = "org2 f0e24 5" class = "figure" >
< p > < img src = " images/stats.png" alt = "stats.png" / >
< / p >
< / div >
@ -2066,8 +2066,8 @@ The server also includes the <code>certbot</code> script for updating and mainta
< / div >
< / div >
< div id = "outline-container-org 4b4ba97 " class = "outline-3" >
< h3 id = "org 4b4ba97 "> < 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 3ef6d25 " class = "outline-3" >
< h3 id = "org 3ef6d25 "> < 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 > .
@ -2086,8 +2086,8 @@ The first visualization is a scatter plot of rhyming words with the “quali
< / p >
< div id = "org 348dcf8 " class = "figure" >
< p > < img src = " assets/ images/wgu-vis.png" alt = "wgu-vis.png" / >
< div id = "org 1fb5741 " class = "figure" >
< p > < img src = " images/wgu-vis.png" alt = "wgu-vis.png" / >
< / p >
< / div >
@ -2096,8 +2096,8 @@ The second visualization is a word cloud where the size of each word is based on
< / p >
< div id = "org 9da33 fa" class = "figure" >
< p > < img src = " assets/ images/wgu-vis-cloud.png" alt = "wgu-vis-cloud.png" / >
< div id = "org f0c79 a8 " class = "figure" >
< p > < img src = " images/wgu-vis-cloud.png" alt = "wgu-vis-cloud.png" / >
< / p >
< / div >
@ -2106,8 +2106,8 @@ The third visualization is a table that lists all of the rhymes, their pronuncia
< / p >
< div id = "org 089e7f2 " class = "figure" >
< p > < img src = " assets/ images/wgu-vis-table.png" alt = "wgu-vis-table.png" / >
< div id = "org 20904b6 " class = "figure" >
< p > < img src = " images/wgu-vis-table.png" alt = "wgu-vis-table.png" / >
< / p >
< / div >
< / div >
@ -2122,16 +2122,16 @@ Create each of the following forms of documentation for the product you have dev
< / p >
< / div >
< div id = "outline-container-org fe1d555 " class = "outline-3" >
< h3 id = "org fe1d555 "> < span class = "section-number-3" > 6.1< / span > Business Vision< / h3 >
< div id = "outline-container-org 26e0552 " class = "outline-3" >
< h3 id = "org 26e0552 "> < 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 88 26289 " class = "outline-4" >
< h4 id = "org 88 26289 "> < span class = "section-number-4" > 6.1.1< / span > Requirements< / h4 >
< div id = "outline-container-org 2deb 60 2" class = "outline-4" >
< h4 id = "org 2deb 60 2"> < 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 >
@ -2147,8 +2147,8 @@ Provide rhyming lyric suggestions optionally constrained by syllable count.
< / div >
< / div >
< div id = "outline-container-org 15ac11a " class = "outline-3" >
< h3 id = "org 15ac11a "> < span class = "section-number-3" > 6.2< / span > Data Sets< / h3 >
< div id = "outline-container-org 50e6024 " class = "outline-3" >
< h3 id = "org 50e6024 "> < 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 > .
@ -2172,8 +2172,8 @@ See <code>resources/darklyrics-markov.tpt</code>
< / div >
< / div >
< div id = "outline-container-org c7d269b " class = "outline-3" >
< h3 id = "org c7d269b "> < span class = "section-number-3" > 6.3< / span > Data Analysis< / h3 >
< div id = "outline-container-org 88bf50f " class = "outline-3" >
< h3 id = "org 88bf50f "> < 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.
@ -2185,8 +2185,8 @@ For example, there is natural language processing code at <a href="https://githu
< / div >
< / div >
< div id = "outline-container-org 8a06ff0 " class = "outline-3" >
< h3 id = "org 8a06ff0 "> < span class = "section-number-3" > 6.4< / span > Assessment Of Hypothesis< / h3 >
< div id = "outline-container-org bfb5bd1 " class = "outline-3" >
< h3 id = "org bfb5bd1 "> < span class = "section-number-3" > 6.4< / span > Assessment Of Hypothesis< / h3 >
< div class = "outline-text-3" id = "text-6-4" >
< p >
I’ ll use an example output to subjectively assess the results of the project.
@ -2402,31 +2402,31 @@ and more.
< / div >
< / div >
< div id = "outline-container-org 1553139 " class = "outline-3" >
< h3 id = "org 1553139 "> < span class = "section-number-3" > 6.5< / span > Visualizations< / h3 >
< div id = "outline-container-org ba06040 " class = "outline-3" >
< h3 id = "org ba06040 "> < span class = "section-number-3" > 6.5< / span > Visualizations< / h3 >
< div class = "outline-text-3" id = "text-6-5" >
< div id = "org 119bbc5 " class = "figure" >
< p > < img src = " assets/ images/rhyme-scatterplot.png" alt = "rhyme-scatterplot.png" / >
< div id = "org 8dcec40 " class = "figure" >
< p > < img src = " images/rhyme-scatterplot.png" alt = "rhyme-scatterplot.png" / >
< / p >
< / div >
< div id = "org 909a2ca " class = "figure" >
< p > < img src = " assets/ images/wordcloud.png" alt = "wordcloud.png" / >
< div id = "org 8e67cf1 " class = "figure" >
< p > < img src = " images/wordcloud.png" alt = "wordcloud.png" / >
< / p >
< / div >
< div id = "org2 d01564 " class = "figure" >
< p > < img src = " assets/ images/rhyme-table.png" alt = "rhyme-table.png" / >
< div id = "org2 b6ab7c " class = "figure" >
< p > < img src = " images/rhyme-table.png" alt = "rhyme-table.png" / >
< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-org a76f1f7 " class = "outline-3" >
< h3 id = "org a76f1f7 "> < span class = "section-number-3" > 6.6< / span > Accuracy< / h3 >
< div id = "outline-container-org 6cbdd1b " class = "outline-3" >
< h3 id = "org 6cbdd1b "> < 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.
@ -2437,8 +2437,8 @@ If we allow ourselves the assumption that the close a generated phrase is to a v
< / p >
< / div >
< div id = "outline-container-org 0db3129 " class = "outline-4" >
< h4 id = "org 0db3129 "> < span class = "section-number-4" > 6.6.1< / span > Percentage Of Generated Lines That Are Valid English Sentences< / h4 >
< div id = "outline-container-org c57d287 " class = "outline-4" >
< h4 id = "org c57d287 "> < 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 > .
@ -2516,8 +2516,8 @@ Where <code>nlp/valid-sentence?</code> is defined as follows.
< / div >
< / div >
< div id = "outline-container-org 3a43 991 " class = "outline-3" >
< h3 id = "org 3a43 991 "> < span class = "section-number-3" > 6.7< / span > Testing< / h3 >
< div id = "outline-container-org 955fa5 9" class = "outline-3" >
< h3 id = "org 955fa5 9"> < 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.
@ -2561,12 +2561,12 @@ Here is an example of the test suite for the code related to syllabification: <a
< / div >
< / div >
< div id = "outline-container-org 2963bab " class = "outline-3" >
< h3 id = "org 2963bab "> < span class = "section-number-3" > 6.8< / span > Source Code< / h3 >
< div id = "outline-container-org 0ab73b1 " class = "outline-3" >
< h3 id = "org 0ab73b1 "> < 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-org a6fa452 " class = "outline-4" >
< h4 id = "org a6fa452 "> < span class = "section-number-4" > 6.8.1< / span > Tightly Packed Trie< / h4 >
< div id = "outline-container-org 00b5cd4 " class = "outline-4" >
< h4 id = "org 00b5cd4 "> < 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.
@ -2578,8 +2578,8 @@ This is the data structure that backs the Hidden Markov Model.
< / div >
< / div >
< div id = "outline-container-org 3f08734 " class = "outline-4" >
< h4 id = "org 3f08734 "> < span class = "section-number-4" > 6.8.2< / span > Phonetics< / h4 >
< div id = "outline-container-org 868fdae " class = "outline-4" >
< h4 id = "org 868fdae "> < 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.
@ -2591,8 +2591,8 @@ This is the helper library that syllabifies and manipulates words, phones, and s
< / div >
< / div >
< div id = "outline-container-org 4fdda7e " class = "outline-4" >
< h4 id = "org 4fdda7e "> < span class = "section-number-4" > 6.8.3< / span > Rhyming< / h4 >
< div id = "outline-container-org 72aa443 " class = "outline-4" >
< h4 id = "org 72aa443 "> < 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.
@ -2604,8 +2604,8 @@ This library contains code for analyzing rhymes, sentence structure, and manipul
< / div >
< / div >
< div id = "outline-container-org 2dfd227 " class = "outline-4" >
< h4 id = "org 2dfd227 "> < span class = "section-number-4" > 6.8.4< / span > Web Server And User Interface< / h4 >
< div id = "outline-container-org c96a09c " class = "outline-4" >
< h4 id = "org c96a09c "> < 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.
@ -2614,16 +2614,16 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / div >
< div id = "outline-container-org 7b2a727 " class = "outline-3" >
< h3 id = "org 7b2a727 "> < span class = "section-number-3" > 6.9< / span > Quick Start< / h3 >
< div id = "outline-container-org af98fb3 " class = "outline-3" >
< h3 id = "org af98fb3 "> < 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 88c2a2d " class = "outline-4" >
< h4 id = "org 88c2a2d "> < span class = "section-number-4" > 6.9.1< / span > How To Initialize Development Environment< / h4 >
< div id = "outline-container-org 760df04 " class = "outline-4" >
< h4 id = "org 760df04 "> < 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 dc49a67 "> < / a > Required Software< br / >
< li > < a id = "org 82ca639 "> < / 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 >
@ -2633,7 +2633,7 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / li >
< li > < a id = "org9 c47a52 "> < / a > Steps< br / >
< li > < a id = "org9 03b0b1 "> < / 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.
@ -2648,12 +2648,12 @@ This application is not publicly available. I’ll upload it with submission
< / ol >
< / div >
< div id = "outline-container-org 88cd7f9 " class = "outline-4" >
< h4 id = "org 88cd7f9 "> < span class = "section-number-4" > 6.9.2< / span > How To Run Software Locally< / h4 >
< div id = "outline-container-org 46b547f " class = "outline-4" >
< h4 id = "org 46b547f "> < 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 6edfb96 "> < / a > Requirements< br / >
< li > < a id = "org dfc2075 "> < / 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 >
@ -2662,7 +2662,7 @@ This application is not publicly available. I’ll upload it with submission
< / div >
< / li >
< li > < a id = "org 55d1f0e "> < / a > Steps< br / >
< li > < a id = "org 24542f9 "> < / 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.
@ -2682,7 +2682,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 19:4 1< / p >
< p class = "date" > Created: 2021-07-22 Thu 19:5 1< / p >
< / div >
< / body >
< / html >