Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fun with Markov Chains

Fun with Markov Chains

A short talk on markov chains and the Mark V Shaney text generator. Given at the Memphis python user group, Feb 2015.

Brad Montgomery

February 24, 2015
Tweet

More Decks by Brad Montgomery

Other Decks in Programming

Transcript

  1. 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.
  2. – Erowid Recruiter “Good morning, I saw your profile looks

    like a very long profile and thought it looked like monsters and I am an executive recruiter”
  3. How does it work? 1. Train it on a bunch

    of text. 2. Let it generate some text. 3. Commence Hijinks
  4. – Edgar Allen Frost “But tis not true that thus

    I dwelt aloof For the rare and radiant maiden whom the angels name Lenore.”
  5. 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.
  6. 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.
  7. 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.
  8. { (‘And', 'the'): ['sweet', 'pear', 'cloud', 'stars', 'silken', 'only', 'Raven',

    ‘lamplight’], } A word pair. Words that always follow the pair
  9. 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.
  10. [ ('my', 'loss.'), ('all', 'windstirred.'), ('to', 'rest.'), ('read', 'it.'), ('time',

    'talk.'), ('friendly', 'visit.'), ('in', 'ice.'), ('favour', 'fire.'), ('would', ‘suffice.'), … ] A list of all line endings.
  11. 1. Pick a random ending pair. 2. Use that as

    a key to pick a random word { (‘still', ‘abide.’): [‘But'] }
  12. 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.
  13. 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']}
  14. 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']}
  15. 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.
  16. 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