Share
Embed
(more) Fun with Markov Chains
Expanded & improved version of this talk given at the Memphis Machine Learning & Data Science meetup. http://www.meetup.com/memphis-technology-user-groups/events/230024221/
Brad Montgomery
May 04, 2016
Transcript
32 slides
-
what is a markov chain? A stochastic process… sequence of
random variables… serial dependence only between adjacent periods… …systems that follow a chain of linked events, where what happens next depends only on the current state of the system. -
markov models & text A Mathematical Theory of Communication 1949
paper by Claude Shannon -
Example from Wikipedia: A creature who eats only grapes, cheese,
or lettuce, based on these rules: • It eats once a day. • If it ate cheese today, tomorrow it will eat lettuce or grapes with equal probability. • If it ate grapes today, tomorrow it will eat • grapes with probability 1/10 • cheese with probability 4/10 • lettuce with probability 5/10. • If it ate lettuce today, tomorrow it will eat • grapes with probability 4/10 • cheese with probability 6/10 • It will not eat lettuce again tomorrow. -
– King James Programming http://kingjamesprogramming.tumblr.com/ “17:20 O LORD, there is
none end of the regexp.” -
– Erowid Recruiter https://twitter.com/erowidrecruiter “Good morning, I saw your profile
looks like a very long profile and thought it looked like monsters and I am an executive recruiter” -
How does it work? 1. Train it on a bunch
of text. 2. Let it generate some text. 3. Commence Hijinks -
– Edgar Allen Frost “But tis not true that thus
I dwelt aloof For the rare and radiant maiden whom the angels name Lenore.” -
A Patch of Old Snow There's a patch of old
snow in a corner That I should have guessed Was a blow-away paper the rain Had brought to rest. It is speckled with grime as if Small print overspread it, The news of a day I've forgotten-- If I ever read it. -
A Patch of Old Snow There's a patch of old
snow in a corner That I should have guessed Was a blow-away paper the rain Had brought to rest. It is speckled with grime as if Small print overspread it, The news of a day I've forgotten-- If I ever read it. -
A Patch of Old Snow There's a patch of old
snow in a corner That I should have guessed Was a blow-away paper the rain Had brought to rest. It is speckled with grime as if Small print overspread it, The news of a day I've forgotten-- If I ever read it. -
A Patch of Old Snow There's a patch of old
snow in a corner That I should have guessed Was a blow-away paper the rain Had brought to rest. It is speckled with grime as if Small print overspread it, The news of a day I've forgotten-- If I ever read it. -
A Patch of Old Snow There's a patch of old
snow in a corner That I should have guessed Was a blow-away paper the rain Had brought to rest. It is speckled with grime as if Small print overspread it, The news of a day I've forgotten-- If I ever read it. -
{ (‘And', 'the'): ['sweet', 'pear', 'cloud', 'stars', 'silken', 'only', 'Raven',
‘lamplight’], } A word pair. Words that always follow the pair -
A Patch of Old Snow There's a patch of old
snow in a corner That I should have guessed Was a blow-away paper the rain Had brought to rest. It is speckled with grime as if Small print overspread it, The news of a day I've forgotten-- If I ever read it. -
[ ('my', 'loss.'), ('all', 'windstirred.'), ('to', 'rest.'), ('read', 'it.'), ('time',
'talk.'), ('friendly', 'visit.'), ('in', 'ice.'), ('favour', 'fire.'), ('would', ‘suffice.'), … ] A list of all line endings. -
1. Pick a random ending pair. 2. Use that as
a key to pick a random word { (‘still', ‘abide.’): [‘But'] } -
1. Pick a random ending pair. 2. Use that as
a key to pick a random word { (‘still', ‘abide.’): [‘But'] } Output: But key: (‘abide.’, ‘But’) 3. Keep the word; use it as part of your key. -
Output: But lookup: {(‘abide', ‘But’): [‘tis']} 4. Keep doing this…
Output: But tis lookup: {(‘But', ‘tis’): [‘not']} Output: But tis not lookup: {(‘tis', ‘not’): [‘true']} Output: But tis not true that lookup: {(‘not', ‘true’): [‘that']} -
Output: But tis not true that thus lookup: {(‘that', ‘thus’):
[‘I']} Output: But tis not true that thus I lookup: {(‘thus', ‘I’): [‘dwelt']} Output: But tis not true that thus I dwelt lookup: {(‘I', ‘dwelt’): [‘aloof']} Output: But tis not true that thus I dwelt aloof lookup: {(‘dwelt', ‘aloof’): [‘For']} -
Key:(‘read', ‘it.’) 5. Until your key is a sentence ending.
But tis not true that thus I dwelt aloof For the rare and radiant maiden whom the angels in Heaven above Nor the demons down under the sea In her sepulchre there by the sea A wind blew out of a day I've forgotten If I ever read it. -
https://github.com/bradmontgomery/shaney Search: Mark v. Shaney for the original. My pep8-compliant
(and more readable!) version: ~109 lines of python with comments -
2nd-order markov chain • Generate a word based on the
TWO preceding words. • Technique used by Mark V. Shaney. • Generates pretty good (almost believable) output. -
3rd-order? • Generate a word based on the THREE preceding
words. • Should be more realistic! -
http://markovian-wizzzdom.herokuapp.com/ A markov chain trained on developer job ads, fox
news, bodybuilding & startup blogs -
Resources • Khan Academy course on Information Theory • Wikipedia
/ Markov Chain • Markov Chains explained visually • http://blog.codinghorror.com/markov-and-you/ • Wikipedia / Mark V. Shaney