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.

D57aec10399cbb252bd890c2bb3fe1c9?s=128

Brad Montgomery

February 24, 2015
Tweet

Transcript

  1. Markov Chains! fun with

  2. Andrey (Andrei) Andreyevich Markov 1856 - 1922

  3. None
  4. 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.
  5. – King James Programming “17:20 O LORD, there is none

    end of the regexp.”
  6. – 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”
  7. Mark V. Shaney A Usenet bot from the 1980s trolling

    net.singles
  8. How does it work? 1. Train it on a bunch

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

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

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

    'talk.'), ('friendly', 'visit.'), ('in', 'ice.'), ('favour', 'fire.'), ('would', ‘suffice.'), … ] A list of all line endings.
  16. 1. Pick a random sentence-ending pair. key: ('still', 'abide.')

  17. 1. Pick a random ending pair. 2. Use that as

    a key to pick a random word { (‘still', ‘abide.’): [‘But'] }
  18. 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.
  19. 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']}
  20. 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']}
  21. 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.
  22. 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