SET A - NOTEBOOK¶
Reading and exploring the dataset 00:03:03
words = open('names.txt', 'r').read().splitlines()
words[:10]
['emma', 'olivia', 'ava', 'isabella', 'sophia', 'charlotte', 'mia', 'amelia', 'harper', 'evelyn']
len(words)
32033
min(len(word) for word in words)
2
max(len(word) for word in words)
15
Exploring the bigrams in the dataset 00:06:24
for word in words[:1]: #Only taking the first word as an example
for ch1, ch2 in zip(word, word[1:]): #Two columns are formed where The first character is taken and is zipped with its next one. So when there is only one character left, then it exits.
print(ch1, ch2)
e m m m m a
for word in words[:1]:
chs = ['<S>'] + list(word) + ['<E>'] #Here we are just adding our own set of characters in the list, so as to get like this custom output - Labelling the first and the last character of the word
for ch1, ch2 in zip(chs, chs[1:]):
print(ch1, ch2)
<S> e e m m m m a a <E>
for word in words[:3]:
chs = ['<S>'] + list(word) + ['<E>']
for ch1, ch2 in zip(chs, chs[1:]):
print(ch1, ch2)
<S> e e m m m m a a <E> <S> o o l l i i v v i i a a <E> <S> a a v v a a <E>
Counting bigrams in a python dictionary 00:09:24
b = {} #We have created a dictionary 'b' - First data structure
for word in words[:1]:
chs = ['<S>'] + list(word) + ['<E>']
for ch1, ch2 in zip(chs, chs[1:]):
bigram = (ch1, ch2) #Then we have created a set 'bigram' which is just a set of two characters - Second data structure
b[bigram] = b.get(bigram, 0) + 1 #Here we are adding it to the dictionary 'b', where the key is 'bigram' (which is a set of character pairs) has the value counts of the set occoured (The number of times that set has occured)
print(ch1, ch2)
<S> e e m m m m a a <E>
Note:
b.get(bigram) is the same as b[bigram]
Just that here: b.get(bigram, 0) if we don't get a bigram value, we want it to assign to 0
Finally we are adding one +1 as we want to count the occurance.
b
{('<S>', 'e'): 1, ('e', 'm'): 1, ('m', 'm'): 1, ('m', 'a'): 1, ('a', '<E>'): 1}
b = {}
for word in words[:3]:
chs = ['<S>'] + list(word) + ['<E>']
for ch1, ch2 in zip(chs, chs[1:]):
bigram = (ch1, ch2)
b[bigram] = b.get(bigram, 0) + 1
print(ch1, ch2)
<S> e e m m m m a a <E> <S> o o l l i i v v i i a a <E> <S> a a v v a a <E>
b
{('<S>', 'e'): 1,
('e', 'm'): 1,
('m', 'm'): 1,
('m', 'a'): 1,
('a', '<E>'): 3,
('<S>', 'o'): 1,
('o', 'l'): 1,
('l', 'i'): 1,
('i', 'v'): 1,
('v', 'i'): 1,
('i', 'a'): 1,
('<S>', 'a'): 1,
('a', 'v'): 1,
('v', 'a'): 1}
b = {}
for word in words:
chs = ['<S>'] + list(word) + ['<E>']
for ch1, ch2 in zip(chs, chs[1:]):
bigram = (ch1, ch2)
b[bigram] = b.get(bigram, 0) + 1
b
{('<S>', 'e'): 1531,
('e', 'm'): 769,
('m', 'm'): 168,
('m', 'a'): 2590,
('a', '<E>'): 6640,
('<S>', 'o'): 394,
('o', 'l'): 619,
('l', 'i'): 2480,
('i', 'v'): 269,
('v', 'i'): 911,
('i', 'a'): 2445,
('<S>', 'a'): 4410,
('a', 'v'): 834,
('v', 'a'): 642,
('<S>', 'i'): 591,
('i', 's'): 1316,
('s', 'a'): 1201,
('a', 'b'): 541,
('b', 'e'): 655,
('e', 'l'): 3248,
('l', 'l'): 1345,
('l', 'a'): 2623,
('<S>', 's'): 2055,
('s', 'o'): 531,
('o', 'p'): 95,
('p', 'h'): 204,
('h', 'i'): 729,
('<S>', 'c'): 1542,
('c', 'h'): 664,
('h', 'a'): 2244,
('a', 'r'): 3264,
('r', 'l'): 413,
('l', 'o'): 692,
('o', 't'): 118,
('t', 't'): 374,
('t', 'e'): 716,
('e', '<E>'): 3983,
('<S>', 'm'): 2538,
('m', 'i'): 1256,
('a', 'm'): 1634,
('m', 'e'): 818,
('<S>', 'h'): 874,
('r', 'p'): 14,
('p', 'e'): 197,
('e', 'r'): 1958,
('r', '<E>'): 1377,
('e', 'v'): 463,
('v', 'e'): 568,
('l', 'y'): 1588,
('y', 'n'): 1826,
('n', '<E>'): 6763,
('b', 'i'): 217,
('i', 'g'): 428,
('g', 'a'): 330,
('a', 'i'): 1650,
('i', 'l'): 1345,
('l', '<E>'): 1314,
('y', '<E>'): 2007,
('i', 'z'): 277,
('z', 'a'): 860,
('e', 't'): 580,
('t', 'h'): 647,
('h', '<E>'): 2409,
('r', 'y'): 773,
('o', 'f'): 34,
('f', 'i'): 160,
('c', 'a'): 815,
('r', 'i'): 3033,
('s', 'c'): 60,
('l', 'e'): 2921,
('t', '<E>'): 483,
('<S>', 'v'): 376,
('i', 'c'): 509,
('c', 't'): 35,
('t', 'o'): 667,
('o', 'r'): 1059,
('a', 'd'): 1042,
('d', 'i'): 674,
('o', 'n'): 2411,
('<S>', 'l'): 1572,
('l', 'u'): 324,
('u', 'n'): 275,
('n', 'a'): 2977,
('<S>', 'g'): 669,
('g', 'r'): 201,
('r', 'a'): 2356,
('a', 'c'): 470,
('c', 'e'): 551,
('h', 'l'): 185,
('o', 'e'): 132,
('<S>', 'p'): 515,
('e', 'n'): 2675,
('n', 'e'): 1359,
('a', 'y'): 2050,
('y', 'l'): 1104,
('<S>', 'r'): 1639,
('e', 'y'): 1070,
('<S>', 'z'): 929,
('z', 'o'): 110,
('<S>', 'n'): 1146,
('n', 'o'): 496,
('e', 'a'): 679,
('a', 'n'): 5438,
('n', 'n'): 1906,
('a', 'h'): 2332,
('d', 'd'): 149,
('a', 'u'): 381,
('u', 'b'): 103,
('b', 'r'): 842,
('r', 'e'): 1697,
('i', 'e'): 1653,
('s', 't'): 765,
('a', 't'): 687,
('t', 'a'): 1027,
('a', 'l'): 2528,
('a', 'z'): 435,
('z', 'e'): 373,
('i', 'o'): 588,
('u', 'r'): 414,
('r', 'o'): 869,
('u', 'd'): 136,
('d', 'r'): 424,
('<S>', 'b'): 1306,
('o', 'o'): 115,
('o', 'k'): 68,
('k', 'l'): 139,
('c', 'l'): 116,
('i', 'r'): 849,
('s', 'k'): 82,
('k', 'y'): 379,
('u', 'c'): 103,
('c', 'y'): 104,
('p', 'a'): 209,
('s', 'l'): 279,
('i', 'n'): 2126,
('o', 'v'): 176,
('g', 'e'): 334,
('e', 's'): 861,
('s', 'i'): 684,
('s', '<E>'): 1169,
('<S>', 'k'): 2963,
('k', 'e'): 895,
('e', 'd'): 384,
('d', 'y'): 317,
('n', 't'): 443,
('y', 'a'): 2143,
('<S>', 'w'): 307,
('w', 'i'): 148,
('o', 'w'): 114,
('w', '<E>'): 51,
('k', 'i'): 509,
('n', 's'): 278,
('a', 'o'): 63,
('o', 'm'): 261,
('i', '<E>'): 2489,
('a', 'a'): 556,
('i', 'y'): 779,
('d', 'e'): 1283,
('c', 'o'): 380,
('r', 'u'): 252,
('b', 'y'): 83,
('s', 'e'): 884,
('n', 'i'): 1725,
('i', 't'): 541,
('t', 'y'): 341,
('u', 't'): 82,
('t', 'u'): 78,
('u', 'm'): 154,
('m', 'n'): 20,
('g', 'i'): 190,
('t', 'i'): 532,
('<S>', 'q'): 92,
('q', 'u'): 206,
('u', 'i'): 121,
('a', 'e'): 692,
('e', 'h'): 152,
('v', 'y'): 121,
('p', 'i'): 61,
('i', 'p'): 53,
('y', 'd'): 272,
('e', 'x'): 132,
('x', 'a'): 103,
('<S>', 'j'): 2422,
('j', 'o'): 479,
('o', 's'): 504,
('e', 'p'): 83,
('j', 'u'): 202,
('u', 'l'): 301,
('<S>', 'd'): 1690,
('k', 'a'): 1731,
('e', 'e'): 1271,
('y', 't'): 104,
('d', 'l'): 60,
('c', 'k'): 316,
('n', 'z'): 145,
('z', 'i'): 364,
('a', 'g'): 168,
('d', 'a'): 1303,
('j', 'a'): 1473,
('h', 'e'): 674,
('<S>', 'x'): 134,
('x', 'i'): 102,
('i', 'm'): 427,
('e', 'i'): 818,
('<S>', 't'): 1308,
('<S>', 'f'): 417,
('f', 'a'): 242,
('n', 'd'): 704,
('r', 'g'): 76,
('a', 's'): 1118,
('s', 'h'): 1285,
('b', 'a'): 321,
('k', 'h'): 307,
('s', 'm'): 90,
('o', 'd'): 190,
('r', 's'): 190,
('g', 'h'): 360,
('s', 'y'): 215,
('y', 's'): 401,
('s', 's'): 461,
('e', 'c'): 153,
('c', 'i'): 271,
('m', 'o'): 452,
('r', 'k'): 90,
('n', 'l'): 195,
('d', 'n'): 31,
('r', 'd'): 187,
('o', 'i'): 69,
('t', 'r'): 352,
('m', 'b'): 112,
('r', 'm'): 162,
('n', 'y'): 465,
('d', 'o'): 378,
('o', 'a'): 149,
('o', 'c'): 114,
('m', 'y'): 287,
('s', 'u'): 185,
('m', 'c'): 51,
('p', 'r'): 151,
('o', 'u'): 275,
('r', 'n'): 140,
('w', 'a'): 280,
('e', 'b'): 121,
('c', 'c'): 42,
('a', 'w'): 161,
('w', 'y'): 73,
('y', 'e'): 301,
('e', 'o'): 269,
('a', 'k'): 568,
('n', 'g'): 273,
('k', 'o'): 344,
('b', 'l'): 103,
('h', 'o'): 287,
('e', 'g'): 125,
('f', 'r'): 114,
('s', 'p'): 51,
('l', 's'): 94,
('y', 'z'): 78,
('g', 'g'): 25,
('z', 'u'): 73,
('i', 'd'): 440,
('m', '<E>'): 516,
('o', 'g'): 44,
('j', 'e'): 440,
('g', 'n'): 27,
('y', 'r'): 291,
('c', '<E>'): 97,
('c', 'q'): 11,
('u', 'e'): 169,
('i', 'f'): 101,
('f', 'e'): 123,
('i', 'x'): 89,
('x', '<E>'): 164,
('o', 'y'): 103,
('g', 'o'): 83,
('g', 't'): 31,
('l', 't'): 77,
('g', 'w'): 26,
('w', 'e'): 149,
('l', 'd'): 138,
('a', 'p'): 82,
('h', 'n'): 138,
('t', 'l'): 134,
('m', 'r'): 97,
('n', 'c'): 213,
('l', 'b'): 52,
('i', 'k'): 445,
('<S>', 'y'): 535,
('t', 'z'): 105,
('h', 'r'): 204,
('j', 'i'): 119,
('h', 't'): 71,
('r', 'r'): 425,
('z', 'l'): 123,
('w', 'r'): 22,
('b', 'b'): 38,
('r', 't'): 208,
('l', 'v'): 72,
('e', 'j'): 55,
('o', 'h'): 171,
('u', 's'): 474,
('i', 'b'): 110,
('g', 'l'): 32,
('h', 'y'): 213,
('p', 'o'): 59,
('p', 'p'): 39,
('p', 'y'): 12,
('n', 'r'): 44,
('z', 'm'): 35,
('v', 'o'): 153,
('l', 'm'): 60,
('o', 'x'): 45,
('d', '<E>'): 516,
('i', 'u'): 109,
('v', '<E>'): 88,
('f', 'f'): 44,
('b', 'o'): 105,
('e', 'k'): 178,
('c', 'r'): 76,
('d', 'g'): 25,
('r', 'c'): 99,
('r', 'h'): 121,
('n', 'k'): 58,
('h', 'u'): 166,
('d', 's'): 29,
('a', 'x'): 182,
('y', 'c'): 115,
('e', 'w'): 50,
('v', 'k'): 3,
('z', 'h'): 43,
('w', 'h'): 23,
('t', 'n'): 22,
('x', 'l'): 39,
('g', 'u'): 85,
('u', 'a'): 163,
('u', 'p'): 16,
('u', 'g'): 47,
('d', 'u'): 92,
('l', 'c'): 25,
('r', 'b'): 41,
('a', 'q'): 60,
('b', '<E>'): 114,
('g', 'y'): 31,
('y', 'p'): 15,
('p', 't'): 17,
('e', 'z'): 181,
('z', 'r'): 32,
('f', 'l'): 20,
('o', '<E>'): 855,
('o', 'b'): 140,
('u', 'z'): 45,
('z', '<E>'): 160,
('i', 'q'): 52,
('y', 'v'): 106,
('n', 'v'): 55,
('d', 'h'): 118,
('g', 'd'): 19,
('t', 's'): 35,
('n', 'h'): 26,
('y', 'j'): 23,
('k', 'r'): 109,
('z', 'b'): 4,
('g', '<E>'): 108,
('a', 'j'): 175,
('r', 'j'): 25,
('m', 'p'): 38,
('p', 'b'): 2,
('y', 'o'): 271,
('z', 'y'): 147,
('p', 'l'): 16,
('l', 'k'): 24,
('i', 'j'): 76,
('x', 'e'): 36,
('y', 'u'): 141,
('l', 'n'): 14,
('u', 'x'): 34,
('i', 'h'): 95,
('w', 's'): 20,
('k', 's'): 95,
('m', 'u'): 139,
('y', 'k'): 86,
('e', 'f'): 82,
('k', '<E>'): 363,
('y', 'm'): 148,
('z', 'z'): 45,
('m', 'd'): 24,
('s', 'r'): 55,
('e', 'u'): 69,
('l', 'h'): 19,
('a', 'f'): 134,
('r', 'w'): 21,
('n', 'u'): 96,
('v', 'r'): 48,
('m', 's'): 35,
('<S>', 'u'): 78,
('f', 's'): 6,
('y', 'b'): 27,
('x', 'o'): 41,
('g', 's'): 30,
('x', 'y'): 30,
('w', 'n'): 58,
('j', 'h'): 45,
('f', 'n'): 4,
('n', 'j'): 44,
('r', 'v'): 80,
('n', 'm'): 19,
('t', 'c'): 17,
('s', 'w'): 24,
('k', 't'): 17,
('f', 't'): 18,
('x', 't'): 70,
('u', 'v'): 37,
('k', 'k'): 20,
('s', 'n'): 24,
('u', '<E>'): 155,
('j', 'r'): 11,
('y', 'x'): 28,
('h', 'm'): 117,
('e', 'q'): 14,
('u', 'o'): 10,
('f', '<E>'): 80,
('h', 'z'): 20,
('h', 'k'): 29,
('y', 'g'): 30,
('q', 'r'): 1,
('v', 'n'): 8,
('s', 'd'): 9,
('y', 'i'): 192,
('n', 'w'): 11,
('d', 'v'): 17,
('h', 'v'): 39,
('x', 'w'): 3,
('o', 'z'): 54,
('k', 'u'): 50,
('u', 'h'): 58,
('k', 'n'): 26,
('s', 'b'): 21,
('i', 'i'): 82,
('y', 'y'): 23,
('r', 'z'): 23,
('l', 'g'): 6,
('l', 'p'): 15,
('p', '<E>'): 33,
('b', 'u'): 45,
('f', 'u'): 10,
('b', 'h'): 41,
('f', 'y'): 14,
('u', 'w'): 86,
('x', 'u'): 5,
('q', '<E>'): 28,
('l', 'r'): 18,
('m', 'h'): 5,
('l', 'w'): 16,
('j', '<E>'): 71,
('s', 'v'): 14,
('m', 'l'): 5,
('n', 'f'): 11,
('u', 'j'): 14,
('f', 'o'): 60,
('j', 'l'): 9,
('t', 'g'): 2,
('j', 'm'): 5,
('v', 'v'): 7,
('p', 's'): 16,
('t', 'w'): 11,
('x', 'c'): 4,
('u', 'k'): 93,
('v', 'l'): 14,
('h', 'd'): 24,
('l', 'z'): 10,
('k', 'w'): 34,
('n', 'b'): 8,
('q', 's'): 2,
('i', 'w'): 8,
('c', 's'): 5,
('h', 's'): 31,
('m', 't'): 4,
('h', 'w'): 10,
('x', 'x'): 38,
('t', 'x'): 2,
('d', 'z'): 1,
('x', 'z'): 19,
('t', 'm'): 4,
('t', 'j'): 3,
('u', 'q'): 10,
('q', 'a'): 13,
('f', 'k'): 2,
('z', 'n'): 4,
('l', 'j'): 6,
('j', 'w'): 6,
('v', 'u'): 7,
('c', 'j'): 3,
('h', 'b'): 8,
('z', 't'): 4,
('p', 'u'): 4,
('m', 'z'): 11,
('x', 's'): 31,
('b', 't'): 2,
('u', 'y'): 13,
('d', 'j'): 9,
('j', 's'): 7,
('w', 'u'): 25,
('o', 'j'): 16,
('b', 's'): 8,
('d', 'w'): 23,
('w', 'o'): 36,
('j', 'n'): 2,
('w', 't'): 8,
('l', 'f'): 22,
('d', 'm'): 30,
('p', 'j'): 1,
('j', 'y'): 10,
('y', 'f'): 12,
('q', 'i'): 13,
('j', 'v'): 5,
('q', 'l'): 1,
('s', 'z'): 10,
('k', 'm'): 9,
('w', 'l'): 13,
('p', 'f'): 1,
('q', 'w'): 3,
('n', 'x'): 6,
('k', 'c'): 2,
('t', 'v'): 15,
('c', 'u'): 35,
('z', 'k'): 2,
('c', 'z'): 4,
('y', 'q'): 6,
('y', 'h'): 22,
('r', 'f'): 9,
('s', 'j'): 2,
('h', 'j'): 9,
('g', 'b'): 3,
('u', 'f'): 19,
('s', 'f'): 2,
('q', 'e'): 1,
('b', 'c'): 1,
('c', 'd'): 1,
('z', 'j'): 2,
('n', 'q'): 2,
('m', 'f'): 1,
('p', 'n'): 1,
('f', 'z'): 2,
('b', 'n'): 4,
('w', 'd'): 8,
('w', 'b'): 1,
('b', 'd'): 65,
('z', 's'): 4,
('p', 'c'): 1,
('h', 'g'): 2,
('m', 'j'): 7,
('w', 'w'): 2,
('k', 'j'): 2,
('h', 'p'): 1,
('j', 'k'): 2,
('o', 'q'): 3,
('f', 'w'): 4,
('f', 'h'): 1,
('w', 'm'): 2,
('b', 'j'): 1,
('r', 'q'): 16,
('z', 'c'): 2,
('z', 'v'): 2,
('f', 'g'): 1,
('n', 'p'): 5,
('z', 'g'): 1,
('d', 't'): 4,
('w', 'f'): 2,
('d', 'f'): 5,
('w', 'k'): 6,
('q', 'm'): 2,
('k', 'z'): 2,
('j', 'j'): 2,
('c', 'p'): 1,
('p', 'k'): 1,
('p', 'm'): 1,
('j', 'd'): 4,
('r', 'x'): 3,
('x', 'n'): 1,
('d', 'c'): 3,
('g', 'j'): 3,
('x', 'f'): 3,
('j', 'c'): 4,
('s', 'q'): 1,
('k', 'f'): 1,
('z', 'p'): 2,
('j', 't'): 2,
('k', 'b'): 2,
('m', 'k'): 1,
('m', 'w'): 2,
('x', 'h'): 1,
('h', 'f'): 2,
('x', 'd'): 5,
('y', 'w'): 4,
('z', 'w'): 3,
('d', 'k'): 3,
('c', 'g'): 2,
('u', 'u'): 3,
('t', 'f'): 2,
('g', 'm'): 6,
('m', 'v'): 3,
('c', 'x'): 3,
('h', 'c'): 2,
('g', 'f'): 1,
('q', 'o'): 2,
('l', 'q'): 3,
('v', 'b'): 1,
('j', 'p'): 1,
('k', 'd'): 2,
('g', 'z'): 1,
('v', 'd'): 1,
('d', 'b'): 1,
('v', 'h'): 1,
('k', 'v'): 2,
('h', 'h'): 1,
('s', 'g'): 2,
('g', 'v'): 1,
('d', 'q'): 1,
('x', 'b'): 1,
('w', 'z'): 1,
('h', 'q'): 1,
('j', 'b'): 1,
('z', 'd'): 2,
('x', 'm'): 1,
('w', 'g'): 1,
('t', 'b'): 1,
('z', 'x'): 1}
b.items() #We know 'b' is a dictionary. So .items() basically gives us that it's values in a (Key, Value) set
dict_items([(('<S>', 'e'), 1531), (('e', 'm'), 769), (('m', 'm'), 168), (('m', 'a'), 2590), (('a', '<E>'), 6640), (('<S>', 'o'), 394), (('o', 'l'), 619), (('l', 'i'), 2480), (('i', 'v'), 269), (('v', 'i'), 911), (('i', 'a'), 2445), (('<S>', 'a'), 4410), (('a', 'v'), 834), (('v', 'a'), 642), (('<S>', 'i'), 591), (('i', 's'), 1316), (('s', 'a'), 1201), (('a', 'b'), 541), (('b', 'e'), 655), (('e', 'l'), 3248), (('l', 'l'), 1345), (('l', 'a'), 2623), (('<S>', 's'), 2055), (('s', 'o'), 531), (('o', 'p'), 95), (('p', 'h'), 204), (('h', 'i'), 729), (('<S>', 'c'), 1542), (('c', 'h'), 664), (('h', 'a'), 2244), (('a', 'r'), 3264), (('r', 'l'), 413), (('l', 'o'), 692), (('o', 't'), 118), (('t', 't'), 374), (('t', 'e'), 716), (('e', '<E>'), 3983), (('<S>', 'm'), 2538), (('m', 'i'), 1256), (('a', 'm'), 1634), (('m', 'e'), 818), (('<S>', 'h'), 874), (('r', 'p'), 14), (('p', 'e'), 197), (('e', 'r'), 1958), (('r', '<E>'), 1377), (('e', 'v'), 463), (('v', 'e'), 568), (('l', 'y'), 1588), (('y', 'n'), 1826), (('n', '<E>'), 6763), (('b', 'i'), 217), (('i', 'g'), 428), (('g', 'a'), 330), (('a', 'i'), 1650), (('i', 'l'), 1345), (('l', '<E>'), 1314), (('y', '<E>'), 2007), (('i', 'z'), 277), (('z', 'a'), 860), (('e', 't'), 580), (('t', 'h'), 647), (('h', '<E>'), 2409), (('r', 'y'), 773), (('o', 'f'), 34), (('f', 'i'), 160), (('c', 'a'), 815), (('r', 'i'), 3033), (('s', 'c'), 60), (('l', 'e'), 2921), (('t', '<E>'), 483), (('<S>', 'v'), 376), (('i', 'c'), 509), (('c', 't'), 35), (('t', 'o'), 667), (('o', 'r'), 1059), (('a', 'd'), 1042), (('d', 'i'), 674), (('o', 'n'), 2411), (('<S>', 'l'), 1572), (('l', 'u'), 324), (('u', 'n'), 275), (('n', 'a'), 2977), (('<S>', 'g'), 669), (('g', 'r'), 201), (('r', 'a'), 2356), (('a', 'c'), 470), (('c', 'e'), 551), (('h', 'l'), 185), (('o', 'e'), 132), (('<S>', 'p'), 515), (('e', 'n'), 2675), (('n', 'e'), 1359), (('a', 'y'), 2050), (('y', 'l'), 1104), (('<S>', 'r'), 1639), (('e', 'y'), 1070), (('<S>', 'z'), 929), (('z', 'o'), 110), (('<S>', 'n'), 1146), (('n', 'o'), 496), (('e', 'a'), 679), (('a', 'n'), 5438), (('n', 'n'), 1906), (('a', 'h'), 2332), (('d', 'd'), 149), (('a', 'u'), 381), (('u', 'b'), 103), (('b', 'r'), 842), (('r', 'e'), 1697), (('i', 'e'), 1653), (('s', 't'), 765), (('a', 't'), 687), (('t', 'a'), 1027), (('a', 'l'), 2528), (('a', 'z'), 435), (('z', 'e'), 373), (('i', 'o'), 588), (('u', 'r'), 414), (('r', 'o'), 869), (('u', 'd'), 136), (('d', 'r'), 424), (('<S>', 'b'), 1306), (('o', 'o'), 115), (('o', 'k'), 68), (('k', 'l'), 139), (('c', 'l'), 116), (('i', 'r'), 849), (('s', 'k'), 82), (('k', 'y'), 379), (('u', 'c'), 103), (('c', 'y'), 104), (('p', 'a'), 209), (('s', 'l'), 279), (('i', 'n'), 2126), (('o', 'v'), 176), (('g', 'e'), 334), (('e', 's'), 861), (('s', 'i'), 684), (('s', '<E>'), 1169), (('<S>', 'k'), 2963), (('k', 'e'), 895), (('e', 'd'), 384), (('d', 'y'), 317), (('n', 't'), 443), (('y', 'a'), 2143), (('<S>', 'w'), 307), (('w', 'i'), 148), (('o', 'w'), 114), (('w', '<E>'), 51), (('k', 'i'), 509), (('n', 's'), 278), (('a', 'o'), 63), (('o', 'm'), 261), (('i', '<E>'), 2489), (('a', 'a'), 556), (('i', 'y'), 779), (('d', 'e'), 1283), (('c', 'o'), 380), (('r', 'u'), 252), (('b', 'y'), 83), (('s', 'e'), 884), (('n', 'i'), 1725), (('i', 't'), 541), (('t', 'y'), 341), (('u', 't'), 82), (('t', 'u'), 78), (('u', 'm'), 154), (('m', 'n'), 20), (('g', 'i'), 190), (('t', 'i'), 532), (('<S>', 'q'), 92), (('q', 'u'), 206), (('u', 'i'), 121), (('a', 'e'), 692), (('e', 'h'), 152), (('v', 'y'), 121), (('p', 'i'), 61), (('i', 'p'), 53), (('y', 'd'), 272), (('e', 'x'), 132), (('x', 'a'), 103), (('<S>', 'j'), 2422), (('j', 'o'), 479), (('o', 's'), 504), (('e', 'p'), 83), (('j', 'u'), 202), (('u', 'l'), 301), (('<S>', 'd'), 1690), (('k', 'a'), 1731), (('e', 'e'), 1271), (('y', 't'), 104), (('d', 'l'), 60), (('c', 'k'), 316), (('n', 'z'), 145), (('z', 'i'), 364), (('a', 'g'), 168), (('d', 'a'), 1303), (('j', 'a'), 1473), (('h', 'e'), 674), (('<S>', 'x'), 134), (('x', 'i'), 102), (('i', 'm'), 427), (('e', 'i'), 818), (('<S>', 't'), 1308), (('<S>', 'f'), 417), (('f', 'a'), 242), (('n', 'd'), 704), (('r', 'g'), 76), (('a', 's'), 1118), (('s', 'h'), 1285), (('b', 'a'), 321), (('k', 'h'), 307), (('s', 'm'), 90), (('o', 'd'), 190), (('r', 's'), 190), (('g', 'h'), 360), (('s', 'y'), 215), (('y', 's'), 401), (('s', 's'), 461), (('e', 'c'), 153), (('c', 'i'), 271), (('m', 'o'), 452), (('r', 'k'), 90), (('n', 'l'), 195), (('d', 'n'), 31), (('r', 'd'), 187), (('o', 'i'), 69), (('t', 'r'), 352), (('m', 'b'), 112), (('r', 'm'), 162), (('n', 'y'), 465), (('d', 'o'), 378), (('o', 'a'), 149), (('o', 'c'), 114), (('m', 'y'), 287), (('s', 'u'), 185), (('m', 'c'), 51), (('p', 'r'), 151), (('o', 'u'), 275), (('r', 'n'), 140), (('w', 'a'), 280), (('e', 'b'), 121), (('c', 'c'), 42), (('a', 'w'), 161), (('w', 'y'), 73), (('y', 'e'), 301), (('e', 'o'), 269), (('a', 'k'), 568), (('n', 'g'), 273), (('k', 'o'), 344), (('b', 'l'), 103), (('h', 'o'), 287), (('e', 'g'), 125), (('f', 'r'), 114), (('s', 'p'), 51), (('l', 's'), 94), (('y', 'z'), 78), (('g', 'g'), 25), (('z', 'u'), 73), (('i', 'd'), 440), (('m', '<E>'), 516), (('o', 'g'), 44), (('j', 'e'), 440), (('g', 'n'), 27), (('y', 'r'), 291), (('c', '<E>'), 97), (('c', 'q'), 11), (('u', 'e'), 169), (('i', 'f'), 101), (('f', 'e'), 123), (('i', 'x'), 89), (('x', '<E>'), 164), (('o', 'y'), 103), (('g', 'o'), 83), (('g', 't'), 31), (('l', 't'), 77), (('g', 'w'), 26), (('w', 'e'), 149), (('l', 'd'), 138), (('a', 'p'), 82), (('h', 'n'), 138), (('t', 'l'), 134), (('m', 'r'), 97), (('n', 'c'), 213), (('l', 'b'), 52), (('i', 'k'), 445), (('<S>', 'y'), 535), (('t', 'z'), 105), (('h', 'r'), 204), (('j', 'i'), 119), (('h', 't'), 71), (('r', 'r'), 425), (('z', 'l'), 123), (('w', 'r'), 22), (('b', 'b'), 38), (('r', 't'), 208), (('l', 'v'), 72), (('e', 'j'), 55), (('o', 'h'), 171), (('u', 's'), 474), (('i', 'b'), 110), (('g', 'l'), 32), (('h', 'y'), 213), (('p', 'o'), 59), (('p', 'p'), 39), (('p', 'y'), 12), (('n', 'r'), 44), (('z', 'm'), 35), (('v', 'o'), 153), (('l', 'm'), 60), (('o', 'x'), 45), (('d', '<E>'), 516), (('i', 'u'), 109), (('v', '<E>'), 88), (('f', 'f'), 44), (('b', 'o'), 105), (('e', 'k'), 178), (('c', 'r'), 76), (('d', 'g'), 25), (('r', 'c'), 99), (('r', 'h'), 121), (('n', 'k'), 58), (('h', 'u'), 166), (('d', 's'), 29), (('a', 'x'), 182), (('y', 'c'), 115), (('e', 'w'), 50), (('v', 'k'), 3), (('z', 'h'), 43), (('w', 'h'), 23), (('t', 'n'), 22), (('x', 'l'), 39), (('g', 'u'), 85), (('u', 'a'), 163), (('u', 'p'), 16), (('u', 'g'), 47), (('d', 'u'), 92), (('l', 'c'), 25), (('r', 'b'), 41), (('a', 'q'), 60), (('b', '<E>'), 114), (('g', 'y'), 31), (('y', 'p'), 15), (('p', 't'), 17), (('e', 'z'), 181), (('z', 'r'), 32), (('f', 'l'), 20), (('o', '<E>'), 855), (('o', 'b'), 140), (('u', 'z'), 45), (('z', '<E>'), 160), (('i', 'q'), 52), (('y', 'v'), 106), (('n', 'v'), 55), (('d', 'h'), 118), (('g', 'd'), 19), (('t', 's'), 35), (('n', 'h'), 26), (('y', 'j'), 23), (('k', 'r'), 109), (('z', 'b'), 4), (('g', '<E>'), 108), (('a', 'j'), 175), (('r', 'j'), 25), (('m', 'p'), 38), (('p', 'b'), 2), (('y', 'o'), 271), (('z', 'y'), 147), (('p', 'l'), 16), (('l', 'k'), 24), (('i', 'j'), 76), (('x', 'e'), 36), (('y', 'u'), 141), (('l', 'n'), 14), (('u', 'x'), 34), (('i', 'h'), 95), (('w', 's'), 20), (('k', 's'), 95), (('m', 'u'), 139), (('y', 'k'), 86), (('e', 'f'), 82), (('k', '<E>'), 363), (('y', 'm'), 148), (('z', 'z'), 45), (('m', 'd'), 24), (('s', 'r'), 55), (('e', 'u'), 69), (('l', 'h'), 19), (('a', 'f'), 134), (('r', 'w'), 21), (('n', 'u'), 96), (('v', 'r'), 48), (('m', 's'), 35), (('<S>', 'u'), 78), (('f', 's'), 6), (('y', 'b'), 27), (('x', 'o'), 41), (('g', 's'), 30), (('x', 'y'), 30), (('w', 'n'), 58), (('j', 'h'), 45), (('f', 'n'), 4), (('n', 'j'), 44), (('r', 'v'), 80), (('n', 'm'), 19), (('t', 'c'), 17), (('s', 'w'), 24), (('k', 't'), 17), (('f', 't'), 18), (('x', 't'), 70), (('u', 'v'), 37), (('k', 'k'), 20), (('s', 'n'), 24), (('u', '<E>'), 155), (('j', 'r'), 11), (('y', 'x'), 28), (('h', 'm'), 117), (('e', 'q'), 14), (('u', 'o'), 10), (('f', '<E>'), 80), (('h', 'z'), 20), (('h', 'k'), 29), (('y', 'g'), 30), (('q', 'r'), 1), (('v', 'n'), 8), (('s', 'd'), 9), (('y', 'i'), 192), (('n', 'w'), 11), (('d', 'v'), 17), (('h', 'v'), 39), (('x', 'w'), 3), (('o', 'z'), 54), (('k', 'u'), 50), (('u', 'h'), 58), (('k', 'n'), 26), (('s', 'b'), 21), (('i', 'i'), 82), (('y', 'y'), 23), (('r', 'z'), 23), (('l', 'g'), 6), (('l', 'p'), 15), (('p', '<E>'), 33), (('b', 'u'), 45), (('f', 'u'), 10), (('b', 'h'), 41), (('f', 'y'), 14), (('u', 'w'), 86), (('x', 'u'), 5), (('q', '<E>'), 28), (('l', 'r'), 18), (('m', 'h'), 5), (('l', 'w'), 16), (('j', '<E>'), 71), (('s', 'v'), 14), (('m', 'l'), 5), (('n', 'f'), 11), (('u', 'j'), 14), (('f', 'o'), 60), (('j', 'l'), 9), (('t', 'g'), 2), (('j', 'm'), 5), (('v', 'v'), 7), (('p', 's'), 16), (('t', 'w'), 11), (('x', 'c'), 4), (('u', 'k'), 93), (('v', 'l'), 14), (('h', 'd'), 24), (('l', 'z'), 10), (('k', 'w'), 34), (('n', 'b'), 8), (('q', 's'), 2), (('i', 'w'), 8), (('c', 's'), 5), (('h', 's'), 31), (('m', 't'), 4), (('h', 'w'), 10), (('x', 'x'), 38), (('t', 'x'), 2), (('d', 'z'), 1), (('x', 'z'), 19), (('t', 'm'), 4), (('t', 'j'), 3), (('u', 'q'), 10), (('q', 'a'), 13), (('f', 'k'), 2), (('z', 'n'), 4), (('l', 'j'), 6), (('j', 'w'), 6), (('v', 'u'), 7), (('c', 'j'), 3), (('h', 'b'), 8), (('z', 't'), 4), (('p', 'u'), 4), (('m', 'z'), 11), (('x', 's'), 31), (('b', 't'), 2), (('u', 'y'), 13), (('d', 'j'), 9), (('j', 's'), 7), (('w', 'u'), 25), (('o', 'j'), 16), (('b', 's'), 8), (('d', 'w'), 23), (('w', 'o'), 36), (('j', 'n'), 2), (('w', 't'), 8), (('l', 'f'), 22), (('d', 'm'), 30), (('p', 'j'), 1), (('j', 'y'), 10), (('y', 'f'), 12), (('q', 'i'), 13), (('j', 'v'), 5), (('q', 'l'), 1), (('s', 'z'), 10), (('k', 'm'), 9), (('w', 'l'), 13), (('p', 'f'), 1), (('q', 'w'), 3), (('n', 'x'), 6), (('k', 'c'), 2), (('t', 'v'), 15), (('c', 'u'), 35), (('z', 'k'), 2), (('c', 'z'), 4), (('y', 'q'), 6), (('y', 'h'), 22), (('r', 'f'), 9), (('s', 'j'), 2), (('h', 'j'), 9), (('g', 'b'), 3), (('u', 'f'), 19), (('s', 'f'), 2), (('q', 'e'), 1), (('b', 'c'), 1), (('c', 'd'), 1), (('z', 'j'), 2), (('n', 'q'), 2), (('m', 'f'), 1), (('p', 'n'), 1), (('f', 'z'), 2), (('b', 'n'), 4), (('w', 'd'), 8), (('w', 'b'), 1), (('b', 'd'), 65), (('z', 's'), 4), (('p', 'c'), 1), (('h', 'g'), 2), (('m', 'j'), 7), (('w', 'w'), 2), (('k', 'j'), 2), (('h', 'p'), 1), (('j', 'k'), 2), (('o', 'q'), 3), (('f', 'w'), 4), (('f', 'h'), 1), (('w', 'm'), 2), (('b', 'j'), 1), (('r', 'q'), 16), (('z', 'c'), 2), (('z', 'v'), 2), (('f', 'g'), 1), (('n', 'p'), 5), (('z', 'g'), 1), (('d', 't'), 4), (('w', 'f'), 2), (('d', 'f'), 5), (('w', 'k'), 6), (('q', 'm'), 2), (('k', 'z'), 2), (('j', 'j'), 2), (('c', 'p'), 1), (('p', 'k'), 1), (('p', 'm'), 1), (('j', 'd'), 4), (('r', 'x'), 3), (('x', 'n'), 1), (('d', 'c'), 3), (('g', 'j'), 3), (('x', 'f'), 3), (('j', 'c'), 4), (('s', 'q'), 1), (('k', 'f'), 1), (('z', 'p'), 2), (('j', 't'), 2), (('k', 'b'), 2), (('m', 'k'), 1), (('m', 'w'), 2), (('x', 'h'), 1), (('h', 'f'), 2), (('x', 'd'), 5), (('y', 'w'), 4), (('z', 'w'), 3), (('d', 'k'), 3), (('c', 'g'), 2), (('u', 'u'), 3), (('t', 'f'), 2), (('g', 'm'), 6), (('m', 'v'), 3), (('c', 'x'), 3), (('h', 'c'), 2), (('g', 'f'), 1), (('q', 'o'), 2), (('l', 'q'), 3), (('v', 'b'), 1), (('j', 'p'), 1), (('k', 'd'), 2), (('g', 'z'), 1), (('v', 'd'), 1), (('d', 'b'), 1), (('v', 'h'), 1), (('k', 'v'), 2), (('h', 'h'), 1), (('s', 'g'), 2), (('g', 'v'), 1), (('d', 'q'), 1), (('x', 'b'), 1), (('w', 'z'), 1), (('h', 'q'), 1), (('j', 'b'), 1), (('z', 'd'), 2), (('x', 'm'), 1), (('w', 'g'), 1), (('t', 'b'), 1), (('z', 'x'), 1)])
sorted(b.items()) #Now this by default sorts the values based on the Key
[(('<S>', 'a'), 4410),
(('<S>', 'b'), 1306),
(('<S>', 'c'), 1542),
(('<S>', 'd'), 1690),
(('<S>', 'e'), 1531),
(('<S>', 'f'), 417),
(('<S>', 'g'), 669),
(('<S>', 'h'), 874),
(('<S>', 'i'), 591),
(('<S>', 'j'), 2422),
(('<S>', 'k'), 2963),
(('<S>', 'l'), 1572),
(('<S>', 'm'), 2538),
(('<S>', 'n'), 1146),
(('<S>', 'o'), 394),
(('<S>', 'p'), 515),
(('<S>', 'q'), 92),
(('<S>', 'r'), 1639),
(('<S>', 's'), 2055),
(('<S>', 't'), 1308),
(('<S>', 'u'), 78),
(('<S>', 'v'), 376),
(('<S>', 'w'), 307),
(('<S>', 'x'), 134),
(('<S>', 'y'), 535),
(('<S>', 'z'), 929),
(('a', '<E>'), 6640),
(('a', 'a'), 556),
(('a', 'b'), 541),
(('a', 'c'), 470),
(('a', 'd'), 1042),
(('a', 'e'), 692),
(('a', 'f'), 134),
(('a', 'g'), 168),
(('a', 'h'), 2332),
(('a', 'i'), 1650),
(('a', 'j'), 175),
(('a', 'k'), 568),
(('a', 'l'), 2528),
(('a', 'm'), 1634),
(('a', 'n'), 5438),
(('a', 'o'), 63),
(('a', 'p'), 82),
(('a', 'q'), 60),
(('a', 'r'), 3264),
(('a', 's'), 1118),
(('a', 't'), 687),
(('a', 'u'), 381),
(('a', 'v'), 834),
(('a', 'w'), 161),
(('a', 'x'), 182),
(('a', 'y'), 2050),
(('a', 'z'), 435),
(('b', '<E>'), 114),
(('b', 'a'), 321),
(('b', 'b'), 38),
(('b', 'c'), 1),
(('b', 'd'), 65),
(('b', 'e'), 655),
(('b', 'h'), 41),
(('b', 'i'), 217),
(('b', 'j'), 1),
(('b', 'l'), 103),
(('b', 'n'), 4),
(('b', 'o'), 105),
(('b', 'r'), 842),
(('b', 's'), 8),
(('b', 't'), 2),
(('b', 'u'), 45),
(('b', 'y'), 83),
(('c', '<E>'), 97),
(('c', 'a'), 815),
(('c', 'c'), 42),
(('c', 'd'), 1),
(('c', 'e'), 551),
(('c', 'g'), 2),
(('c', 'h'), 664),
(('c', 'i'), 271),
(('c', 'j'), 3),
(('c', 'k'), 316),
(('c', 'l'), 116),
(('c', 'o'), 380),
(('c', 'p'), 1),
(('c', 'q'), 11),
(('c', 'r'), 76),
(('c', 's'), 5),
(('c', 't'), 35),
(('c', 'u'), 35),
(('c', 'x'), 3),
(('c', 'y'), 104),
(('c', 'z'), 4),
(('d', '<E>'), 516),
(('d', 'a'), 1303),
(('d', 'b'), 1),
(('d', 'c'), 3),
(('d', 'd'), 149),
(('d', 'e'), 1283),
(('d', 'f'), 5),
(('d', 'g'), 25),
(('d', 'h'), 118),
(('d', 'i'), 674),
(('d', 'j'), 9),
(('d', 'k'), 3),
(('d', 'l'), 60),
(('d', 'm'), 30),
(('d', 'n'), 31),
(('d', 'o'), 378),
(('d', 'q'), 1),
(('d', 'r'), 424),
(('d', 's'), 29),
(('d', 't'), 4),
(('d', 'u'), 92),
(('d', 'v'), 17),
(('d', 'w'), 23),
(('d', 'y'), 317),
(('d', 'z'), 1),
(('e', '<E>'), 3983),
(('e', 'a'), 679),
(('e', 'b'), 121),
(('e', 'c'), 153),
(('e', 'd'), 384),
(('e', 'e'), 1271),
(('e', 'f'), 82),
(('e', 'g'), 125),
(('e', 'h'), 152),
(('e', 'i'), 818),
(('e', 'j'), 55),
(('e', 'k'), 178),
(('e', 'l'), 3248),
(('e', 'm'), 769),
(('e', 'n'), 2675),
(('e', 'o'), 269),
(('e', 'p'), 83),
(('e', 'q'), 14),
(('e', 'r'), 1958),
(('e', 's'), 861),
(('e', 't'), 580),
(('e', 'u'), 69),
(('e', 'v'), 463),
(('e', 'w'), 50),
(('e', 'x'), 132),
(('e', 'y'), 1070),
(('e', 'z'), 181),
(('f', '<E>'), 80),
(('f', 'a'), 242),
(('f', 'e'), 123),
(('f', 'f'), 44),
(('f', 'g'), 1),
(('f', 'h'), 1),
(('f', 'i'), 160),
(('f', 'k'), 2),
(('f', 'l'), 20),
(('f', 'n'), 4),
(('f', 'o'), 60),
(('f', 'r'), 114),
(('f', 's'), 6),
(('f', 't'), 18),
(('f', 'u'), 10),
(('f', 'w'), 4),
(('f', 'y'), 14),
(('f', 'z'), 2),
(('g', '<E>'), 108),
(('g', 'a'), 330),
(('g', 'b'), 3),
(('g', 'd'), 19),
(('g', 'e'), 334),
(('g', 'f'), 1),
(('g', 'g'), 25),
(('g', 'h'), 360),
(('g', 'i'), 190),
(('g', 'j'), 3),
(('g', 'l'), 32),
(('g', 'm'), 6),
(('g', 'n'), 27),
(('g', 'o'), 83),
(('g', 'r'), 201),
(('g', 's'), 30),
(('g', 't'), 31),
(('g', 'u'), 85),
(('g', 'v'), 1),
(('g', 'w'), 26),
(('g', 'y'), 31),
(('g', 'z'), 1),
(('h', '<E>'), 2409),
(('h', 'a'), 2244),
(('h', 'b'), 8),
(('h', 'c'), 2),
(('h', 'd'), 24),
(('h', 'e'), 674),
(('h', 'f'), 2),
(('h', 'g'), 2),
(('h', 'h'), 1),
(('h', 'i'), 729),
(('h', 'j'), 9),
(('h', 'k'), 29),
(('h', 'l'), 185),
(('h', 'm'), 117),
(('h', 'n'), 138),
(('h', 'o'), 287),
(('h', 'p'), 1),
(('h', 'q'), 1),
(('h', 'r'), 204),
(('h', 's'), 31),
(('h', 't'), 71),
(('h', 'u'), 166),
(('h', 'v'), 39),
(('h', 'w'), 10),
(('h', 'y'), 213),
(('h', 'z'), 20),
(('i', '<E>'), 2489),
(('i', 'a'), 2445),
(('i', 'b'), 110),
(('i', 'c'), 509),
(('i', 'd'), 440),
(('i', 'e'), 1653),
(('i', 'f'), 101),
(('i', 'g'), 428),
(('i', 'h'), 95),
(('i', 'i'), 82),
(('i', 'j'), 76),
(('i', 'k'), 445),
(('i', 'l'), 1345),
(('i', 'm'), 427),
(('i', 'n'), 2126),
(('i', 'o'), 588),
(('i', 'p'), 53),
(('i', 'q'), 52),
(('i', 'r'), 849),
(('i', 's'), 1316),
(('i', 't'), 541),
(('i', 'u'), 109),
(('i', 'v'), 269),
(('i', 'w'), 8),
(('i', 'x'), 89),
(('i', 'y'), 779),
(('i', 'z'), 277),
(('j', '<E>'), 71),
(('j', 'a'), 1473),
(('j', 'b'), 1),
(('j', 'c'), 4),
(('j', 'd'), 4),
(('j', 'e'), 440),
(('j', 'h'), 45),
(('j', 'i'), 119),
(('j', 'j'), 2),
(('j', 'k'), 2),
(('j', 'l'), 9),
(('j', 'm'), 5),
(('j', 'n'), 2),
(('j', 'o'), 479),
(('j', 'p'), 1),
(('j', 'r'), 11),
(('j', 's'), 7),
(('j', 't'), 2),
(('j', 'u'), 202),
(('j', 'v'), 5),
(('j', 'w'), 6),
(('j', 'y'), 10),
(('k', '<E>'), 363),
(('k', 'a'), 1731),
(('k', 'b'), 2),
(('k', 'c'), 2),
(('k', 'd'), 2),
(('k', 'e'), 895),
(('k', 'f'), 1),
(('k', 'h'), 307),
(('k', 'i'), 509),
(('k', 'j'), 2),
(('k', 'k'), 20),
(('k', 'l'), 139),
(('k', 'm'), 9),
(('k', 'n'), 26),
(('k', 'o'), 344),
(('k', 'r'), 109),
(('k', 's'), 95),
(('k', 't'), 17),
(('k', 'u'), 50),
(('k', 'v'), 2),
(('k', 'w'), 34),
(('k', 'y'), 379),
(('k', 'z'), 2),
(('l', '<E>'), 1314),
(('l', 'a'), 2623),
(('l', 'b'), 52),
(('l', 'c'), 25),
(('l', 'd'), 138),
(('l', 'e'), 2921),
(('l', 'f'), 22),
(('l', 'g'), 6),
(('l', 'h'), 19),
(('l', 'i'), 2480),
(('l', 'j'), 6),
(('l', 'k'), 24),
(('l', 'l'), 1345),
(('l', 'm'), 60),
(('l', 'n'), 14),
(('l', 'o'), 692),
(('l', 'p'), 15),
(('l', 'q'), 3),
(('l', 'r'), 18),
(('l', 's'), 94),
(('l', 't'), 77),
(('l', 'u'), 324),
(('l', 'v'), 72),
(('l', 'w'), 16),
(('l', 'y'), 1588),
(('l', 'z'), 10),
(('m', '<E>'), 516),
(('m', 'a'), 2590),
(('m', 'b'), 112),
(('m', 'c'), 51),
(('m', 'd'), 24),
(('m', 'e'), 818),
(('m', 'f'), 1),
(('m', 'h'), 5),
(('m', 'i'), 1256),
(('m', 'j'), 7),
(('m', 'k'), 1),
(('m', 'l'), 5),
(('m', 'm'), 168),
(('m', 'n'), 20),
(('m', 'o'), 452),
(('m', 'p'), 38),
(('m', 'r'), 97),
(('m', 's'), 35),
(('m', 't'), 4),
(('m', 'u'), 139),
(('m', 'v'), 3),
(('m', 'w'), 2),
(('m', 'y'), 287),
(('m', 'z'), 11),
(('n', '<E>'), 6763),
(('n', 'a'), 2977),
(('n', 'b'), 8),
(('n', 'c'), 213),
(('n', 'd'), 704),
(('n', 'e'), 1359),
(('n', 'f'), 11),
(('n', 'g'), 273),
(('n', 'h'), 26),
(('n', 'i'), 1725),
(('n', 'j'), 44),
(('n', 'k'), 58),
(('n', 'l'), 195),
(('n', 'm'), 19),
(('n', 'n'), 1906),
(('n', 'o'), 496),
(('n', 'p'), 5),
(('n', 'q'), 2),
(('n', 'r'), 44),
(('n', 's'), 278),
(('n', 't'), 443),
(('n', 'u'), 96),
(('n', 'v'), 55),
(('n', 'w'), 11),
(('n', 'x'), 6),
(('n', 'y'), 465),
(('n', 'z'), 145),
(('o', '<E>'), 855),
(('o', 'a'), 149),
(('o', 'b'), 140),
(('o', 'c'), 114),
(('o', 'd'), 190),
(('o', 'e'), 132),
(('o', 'f'), 34),
(('o', 'g'), 44),
(('o', 'h'), 171),
(('o', 'i'), 69),
(('o', 'j'), 16),
(('o', 'k'), 68),
(('o', 'l'), 619),
(('o', 'm'), 261),
(('o', 'n'), 2411),
(('o', 'o'), 115),
(('o', 'p'), 95),
(('o', 'q'), 3),
(('o', 'r'), 1059),
(('o', 's'), 504),
(('o', 't'), 118),
(('o', 'u'), 275),
(('o', 'v'), 176),
(('o', 'w'), 114),
(('o', 'x'), 45),
(('o', 'y'), 103),
(('o', 'z'), 54),
(('p', '<E>'), 33),
(('p', 'a'), 209),
(('p', 'b'), 2),
(('p', 'c'), 1),
(('p', 'e'), 197),
(('p', 'f'), 1),
(('p', 'h'), 204),
(('p', 'i'), 61),
(('p', 'j'), 1),
(('p', 'k'), 1),
(('p', 'l'), 16),
(('p', 'm'), 1),
(('p', 'n'), 1),
(('p', 'o'), 59),
(('p', 'p'), 39),
(('p', 'r'), 151),
(('p', 's'), 16),
(('p', 't'), 17),
(('p', 'u'), 4),
(('p', 'y'), 12),
(('q', '<E>'), 28),
(('q', 'a'), 13),
(('q', 'e'), 1),
(('q', 'i'), 13),
(('q', 'l'), 1),
(('q', 'm'), 2),
(('q', 'o'), 2),
(('q', 'r'), 1),
(('q', 's'), 2),
(('q', 'u'), 206),
(('q', 'w'), 3),
(('r', '<E>'), 1377),
(('r', 'a'), 2356),
(('r', 'b'), 41),
(('r', 'c'), 99),
(('r', 'd'), 187),
(('r', 'e'), 1697),
(('r', 'f'), 9),
(('r', 'g'), 76),
(('r', 'h'), 121),
(('r', 'i'), 3033),
(('r', 'j'), 25),
(('r', 'k'), 90),
(('r', 'l'), 413),
(('r', 'm'), 162),
(('r', 'n'), 140),
(('r', 'o'), 869),
(('r', 'p'), 14),
(('r', 'q'), 16),
(('r', 'r'), 425),
(('r', 's'), 190),
(('r', 't'), 208),
(('r', 'u'), 252),
(('r', 'v'), 80),
(('r', 'w'), 21),
(('r', 'x'), 3),
(('r', 'y'), 773),
(('r', 'z'), 23),
(('s', '<E>'), 1169),
(('s', 'a'), 1201),
(('s', 'b'), 21),
(('s', 'c'), 60),
(('s', 'd'), 9),
(('s', 'e'), 884),
(('s', 'f'), 2),
(('s', 'g'), 2),
(('s', 'h'), 1285),
(('s', 'i'), 684),
(('s', 'j'), 2),
(('s', 'k'), 82),
(('s', 'l'), 279),
(('s', 'm'), 90),
(('s', 'n'), 24),
(('s', 'o'), 531),
(('s', 'p'), 51),
(('s', 'q'), 1),
(('s', 'r'), 55),
(('s', 's'), 461),
(('s', 't'), 765),
(('s', 'u'), 185),
(('s', 'v'), 14),
(('s', 'w'), 24),
(('s', 'y'), 215),
(('s', 'z'), 10),
(('t', '<E>'), 483),
(('t', 'a'), 1027),
(('t', 'b'), 1),
(('t', 'c'), 17),
(('t', 'e'), 716),
(('t', 'f'), 2),
(('t', 'g'), 2),
(('t', 'h'), 647),
(('t', 'i'), 532),
(('t', 'j'), 3),
(('t', 'l'), 134),
(('t', 'm'), 4),
(('t', 'n'), 22),
(('t', 'o'), 667),
(('t', 'r'), 352),
(('t', 's'), 35),
(('t', 't'), 374),
(('t', 'u'), 78),
(('t', 'v'), 15),
(('t', 'w'), 11),
(('t', 'x'), 2),
(('t', 'y'), 341),
(('t', 'z'), 105),
(('u', '<E>'), 155),
(('u', 'a'), 163),
(('u', 'b'), 103),
(('u', 'c'), 103),
(('u', 'd'), 136),
(('u', 'e'), 169),
(('u', 'f'), 19),
(('u', 'g'), 47),
(('u', 'h'), 58),
(('u', 'i'), 121),
(('u', 'j'), 14),
(('u', 'k'), 93),
(('u', 'l'), 301),
(('u', 'm'), 154),
(('u', 'n'), 275),
(('u', 'o'), 10),
(('u', 'p'), 16),
(('u', 'q'), 10),
(('u', 'r'), 414),
(('u', 's'), 474),
(('u', 't'), 82),
(('u', 'u'), 3),
(('u', 'v'), 37),
(('u', 'w'), 86),
(('u', 'x'), 34),
(('u', 'y'), 13),
(('u', 'z'), 45),
(('v', '<E>'), 88),
(('v', 'a'), 642),
(('v', 'b'), 1),
(('v', 'd'), 1),
(('v', 'e'), 568),
(('v', 'h'), 1),
(('v', 'i'), 911),
(('v', 'k'), 3),
(('v', 'l'), 14),
(('v', 'n'), 8),
(('v', 'o'), 153),
(('v', 'r'), 48),
(('v', 'u'), 7),
(('v', 'v'), 7),
(('v', 'y'), 121),
(('w', '<E>'), 51),
(('w', 'a'), 280),
(('w', 'b'), 1),
(('w', 'd'), 8),
(('w', 'e'), 149),
(('w', 'f'), 2),
(('w', 'g'), 1),
(('w', 'h'), 23),
(('w', 'i'), 148),
(('w', 'k'), 6),
(('w', 'l'), 13),
(('w', 'm'), 2),
(('w', 'n'), 58),
(('w', 'o'), 36),
(('w', 'r'), 22),
(('w', 's'), 20),
(('w', 't'), 8),
(('w', 'u'), 25),
(('w', 'w'), 2),
(('w', 'y'), 73),
(('w', 'z'), 1),
(('x', '<E>'), 164),
(('x', 'a'), 103),
(('x', 'b'), 1),
(('x', 'c'), 4),
(('x', 'd'), 5),
(('x', 'e'), 36),
(('x', 'f'), 3),
(('x', 'h'), 1),
(('x', 'i'), 102),
(('x', 'l'), 39),
(('x', 'm'), 1),
(('x', 'n'), 1),
(('x', 'o'), 41),
(('x', 's'), 31),
(('x', 't'), 70),
(('x', 'u'), 5),
(('x', 'w'), 3),
(('x', 'x'), 38),
(('x', 'y'), 30),
(('x', 'z'), 19),
(('y', '<E>'), 2007),
(('y', 'a'), 2143),
(('y', 'b'), 27),
(('y', 'c'), 115),
(('y', 'd'), 272),
(('y', 'e'), 301),
(('y', 'f'), 12),
(('y', 'g'), 30),
(('y', 'h'), 22),
(('y', 'i'), 192),
(('y', 'j'), 23),
(('y', 'k'), 86),
(('y', 'l'), 1104),
(('y', 'm'), 148),
(('y', 'n'), 1826),
(('y', 'o'), 271),
(('y', 'p'), 15),
(('y', 'q'), 6),
(('y', 'r'), 291),
(('y', 's'), 401),
(('y', 't'), 104),
(('y', 'u'), 141),
(('y', 'v'), 106),
(('y', 'w'), 4),
(('y', 'x'), 28),
(('y', 'y'), 23),
(('y', 'z'), 78),
(('z', '<E>'), 160),
(('z', 'a'), 860),
(('z', 'b'), 4),
(('z', 'c'), 2),
(('z', 'd'), 2),
(('z', 'e'), 373),
(('z', 'g'), 1),
(('z', 'h'), 43),
(('z', 'i'), 364),
(('z', 'j'), 2),
(('z', 'k'), 2),
(('z', 'l'), 123),
(('z', 'm'), 35),
(('z', 'n'), 4),
(('z', 'o'), 110),
(('z', 'p'), 2),
(('z', 'r'), 32),
(('z', 's'), 4),
(('z', 't'), 4),
(('z', 'u'), 73),
(('z', 'v'), 2),
(('z', 'w'), 3),
(('z', 'x'), 1),
(('z', 'y'), 147),
(('z', 'z'), 45)]
sorted(b.items(), key= lambda kv: -kv[1]) #Now, here we are specifying we want to sort based on the values. So we select the key, then in the lambda function, we take the keyvalue (kv) and select the second element in the set, which is what we want
# - sign is to go backwards
[(('n', '<E>'), 6763),
(('a', '<E>'), 6640),
(('a', 'n'), 5438),
(('<S>', 'a'), 4410),
(('e', '<E>'), 3983),
(('a', 'r'), 3264),
(('e', 'l'), 3248),
(('r', 'i'), 3033),
(('n', 'a'), 2977),
(('<S>', 'k'), 2963),
(('l', 'e'), 2921),
(('e', 'n'), 2675),
(('l', 'a'), 2623),
(('m', 'a'), 2590),
(('<S>', 'm'), 2538),
(('a', 'l'), 2528),
(('i', '<E>'), 2489),
(('l', 'i'), 2480),
(('i', 'a'), 2445),
(('<S>', 'j'), 2422),
(('o', 'n'), 2411),
(('h', '<E>'), 2409),
(('r', 'a'), 2356),
(('a', 'h'), 2332),
(('h', 'a'), 2244),
(('y', 'a'), 2143),
(('i', 'n'), 2126),
(('<S>', 's'), 2055),
(('a', 'y'), 2050),
(('y', '<E>'), 2007),
(('e', 'r'), 1958),
(('n', 'n'), 1906),
(('y', 'n'), 1826),
(('k', 'a'), 1731),
(('n', 'i'), 1725),
(('r', 'e'), 1697),
(('<S>', 'd'), 1690),
(('i', 'e'), 1653),
(('a', 'i'), 1650),
(('<S>', 'r'), 1639),
(('a', 'm'), 1634),
(('l', 'y'), 1588),
(('<S>', 'l'), 1572),
(('<S>', 'c'), 1542),
(('<S>', 'e'), 1531),
(('j', 'a'), 1473),
(('r', '<E>'), 1377),
(('n', 'e'), 1359),
(('l', 'l'), 1345),
(('i', 'l'), 1345),
(('i', 's'), 1316),
(('l', '<E>'), 1314),
(('<S>', 't'), 1308),
(('<S>', 'b'), 1306),
(('d', 'a'), 1303),
(('s', 'h'), 1285),
(('d', 'e'), 1283),
(('e', 'e'), 1271),
(('m', 'i'), 1256),
(('s', 'a'), 1201),
(('s', '<E>'), 1169),
(('<S>', 'n'), 1146),
(('a', 's'), 1118),
(('y', 'l'), 1104),
(('e', 'y'), 1070),
(('o', 'r'), 1059),
(('a', 'd'), 1042),
(('t', 'a'), 1027),
(('<S>', 'z'), 929),
(('v', 'i'), 911),
(('k', 'e'), 895),
(('s', 'e'), 884),
(('<S>', 'h'), 874),
(('r', 'o'), 869),
(('e', 's'), 861),
(('z', 'a'), 860),
(('o', '<E>'), 855),
(('i', 'r'), 849),
(('b', 'r'), 842),
(('a', 'v'), 834),
(('m', 'e'), 818),
(('e', 'i'), 818),
(('c', 'a'), 815),
(('i', 'y'), 779),
(('r', 'y'), 773),
(('e', 'm'), 769),
(('s', 't'), 765),
(('h', 'i'), 729),
(('t', 'e'), 716),
(('n', 'd'), 704),
(('l', 'o'), 692),
(('a', 'e'), 692),
(('a', 't'), 687),
(('s', 'i'), 684),
(('e', 'a'), 679),
(('d', 'i'), 674),
(('h', 'e'), 674),
(('<S>', 'g'), 669),
(('t', 'o'), 667),
(('c', 'h'), 664),
(('b', 'e'), 655),
(('t', 'h'), 647),
(('v', 'a'), 642),
(('o', 'l'), 619),
(('<S>', 'i'), 591),
(('i', 'o'), 588),
(('e', 't'), 580),
(('v', 'e'), 568),
(('a', 'k'), 568),
(('a', 'a'), 556),
(('c', 'e'), 551),
(('a', 'b'), 541),
(('i', 't'), 541),
(('<S>', 'y'), 535),
(('t', 'i'), 532),
(('s', 'o'), 531),
(('m', '<E>'), 516),
(('d', '<E>'), 516),
(('<S>', 'p'), 515),
(('i', 'c'), 509),
(('k', 'i'), 509),
(('o', 's'), 504),
(('n', 'o'), 496),
(('t', '<E>'), 483),
(('j', 'o'), 479),
(('u', 's'), 474),
(('a', 'c'), 470),
(('n', 'y'), 465),
(('e', 'v'), 463),
(('s', 's'), 461),
(('m', 'o'), 452),
(('i', 'k'), 445),
(('n', 't'), 443),
(('i', 'd'), 440),
(('j', 'e'), 440),
(('a', 'z'), 435),
(('i', 'g'), 428),
(('i', 'm'), 427),
(('r', 'r'), 425),
(('d', 'r'), 424),
(('<S>', 'f'), 417),
(('u', 'r'), 414),
(('r', 'l'), 413),
(('y', 's'), 401),
(('<S>', 'o'), 394),
(('e', 'd'), 384),
(('a', 'u'), 381),
(('c', 'o'), 380),
(('k', 'y'), 379),
(('d', 'o'), 378),
(('<S>', 'v'), 376),
(('t', 't'), 374),
(('z', 'e'), 373),
(('z', 'i'), 364),
(('k', '<E>'), 363),
(('g', 'h'), 360),
(('t', 'r'), 352),
(('k', 'o'), 344),
(('t', 'y'), 341),
(('g', 'e'), 334),
(('g', 'a'), 330),
(('l', 'u'), 324),
(('b', 'a'), 321),
(('d', 'y'), 317),
(('c', 'k'), 316),
(('<S>', 'w'), 307),
(('k', 'h'), 307),
(('u', 'l'), 301),
(('y', 'e'), 301),
(('y', 'r'), 291),
(('m', 'y'), 287),
(('h', 'o'), 287),
(('w', 'a'), 280),
(('s', 'l'), 279),
(('n', 's'), 278),
(('i', 'z'), 277),
(('u', 'n'), 275),
(('o', 'u'), 275),
(('n', 'g'), 273),
(('y', 'd'), 272),
(('c', 'i'), 271),
(('y', 'o'), 271),
(('i', 'v'), 269),
(('e', 'o'), 269),
(('o', 'm'), 261),
(('r', 'u'), 252),
(('f', 'a'), 242),
(('b', 'i'), 217),
(('s', 'y'), 215),
(('n', 'c'), 213),
(('h', 'y'), 213),
(('p', 'a'), 209),
(('r', 't'), 208),
(('q', 'u'), 206),
(('p', 'h'), 204),
(('h', 'r'), 204),
(('j', 'u'), 202),
(('g', 'r'), 201),
(('p', 'e'), 197),
(('n', 'l'), 195),
(('y', 'i'), 192),
(('g', 'i'), 190),
(('o', 'd'), 190),
(('r', 's'), 190),
(('r', 'd'), 187),
(('h', 'l'), 185),
(('s', 'u'), 185),
(('a', 'x'), 182),
(('e', 'z'), 181),
(('e', 'k'), 178),
(('o', 'v'), 176),
(('a', 'j'), 175),
(('o', 'h'), 171),
(('u', 'e'), 169),
(('m', 'm'), 168),
(('a', 'g'), 168),
(('h', 'u'), 166),
(('x', '<E>'), 164),
(('u', 'a'), 163),
(('r', 'm'), 162),
(('a', 'w'), 161),
(('f', 'i'), 160),
(('z', '<E>'), 160),
(('u', '<E>'), 155),
(('u', 'm'), 154),
(('e', 'c'), 153),
(('v', 'o'), 153),
(('e', 'h'), 152),
(('p', 'r'), 151),
(('d', 'd'), 149),
(('o', 'a'), 149),
(('w', 'e'), 149),
(('w', 'i'), 148),
(('y', 'm'), 148),
(('z', 'y'), 147),
(('n', 'z'), 145),
(('y', 'u'), 141),
(('r', 'n'), 140),
(('o', 'b'), 140),
(('k', 'l'), 139),
(('m', 'u'), 139),
(('l', 'd'), 138),
(('h', 'n'), 138),
(('u', 'd'), 136),
(('<S>', 'x'), 134),
(('t', 'l'), 134),
(('a', 'f'), 134),
(('o', 'e'), 132),
(('e', 'x'), 132),
(('e', 'g'), 125),
(('f', 'e'), 123),
(('z', 'l'), 123),
(('u', 'i'), 121),
(('v', 'y'), 121),
(('e', 'b'), 121),
(('r', 'h'), 121),
(('j', 'i'), 119),
(('o', 't'), 118),
(('d', 'h'), 118),
(('h', 'm'), 117),
(('c', 'l'), 116),
(('o', 'o'), 115),
(('y', 'c'), 115),
(('o', 'w'), 114),
(('o', 'c'), 114),
(('f', 'r'), 114),
(('b', '<E>'), 114),
(('m', 'b'), 112),
(('z', 'o'), 110),
(('i', 'b'), 110),
(('i', 'u'), 109),
(('k', 'r'), 109),
(('g', '<E>'), 108),
(('y', 'v'), 106),
(('t', 'z'), 105),
(('b', 'o'), 105),
(('c', 'y'), 104),
(('y', 't'), 104),
(('u', 'b'), 103),
(('u', 'c'), 103),
(('x', 'a'), 103),
(('b', 'l'), 103),
(('o', 'y'), 103),
(('x', 'i'), 102),
(('i', 'f'), 101),
(('r', 'c'), 99),
(('c', '<E>'), 97),
(('m', 'r'), 97),
(('n', 'u'), 96),
(('o', 'p'), 95),
(('i', 'h'), 95),
(('k', 's'), 95),
(('l', 's'), 94),
(('u', 'k'), 93),
(('<S>', 'q'), 92),
(('d', 'u'), 92),
(('s', 'm'), 90),
(('r', 'k'), 90),
(('i', 'x'), 89),
(('v', '<E>'), 88),
(('y', 'k'), 86),
(('u', 'w'), 86),
(('g', 'u'), 85),
(('b', 'y'), 83),
(('e', 'p'), 83),
(('g', 'o'), 83),
(('s', 'k'), 82),
(('u', 't'), 82),
(('a', 'p'), 82),
(('e', 'f'), 82),
(('i', 'i'), 82),
(('r', 'v'), 80),
(('f', '<E>'), 80),
(('t', 'u'), 78),
(('y', 'z'), 78),
(('<S>', 'u'), 78),
(('l', 't'), 77),
(('r', 'g'), 76),
(('c', 'r'), 76),
(('i', 'j'), 76),
(('w', 'y'), 73),
(('z', 'u'), 73),
(('l', 'v'), 72),
(('h', 't'), 71),
(('j', '<E>'), 71),
(('x', 't'), 70),
(('o', 'i'), 69),
(('e', 'u'), 69),
(('o', 'k'), 68),
(('b', 'd'), 65),
(('a', 'o'), 63),
(('p', 'i'), 61),
(('s', 'c'), 60),
(('d', 'l'), 60),
(('l', 'm'), 60),
(('a', 'q'), 60),
(('f', 'o'), 60),
(('p', 'o'), 59),
(('n', 'k'), 58),
(('w', 'n'), 58),
(('u', 'h'), 58),
(('e', 'j'), 55),
(('n', 'v'), 55),
(('s', 'r'), 55),
(('o', 'z'), 54),
(('i', 'p'), 53),
(('l', 'b'), 52),
(('i', 'q'), 52),
(('w', '<E>'), 51),
(('m', 'c'), 51),
(('s', 'p'), 51),
(('e', 'w'), 50),
(('k', 'u'), 50),
(('v', 'r'), 48),
(('u', 'g'), 47),
(('o', 'x'), 45),
(('u', 'z'), 45),
(('z', 'z'), 45),
(('j', 'h'), 45),
(('b', 'u'), 45),
(('o', 'g'), 44),
(('n', 'r'), 44),
(('f', 'f'), 44),
(('n', 'j'), 44),
(('z', 'h'), 43),
(('c', 'c'), 42),
(('r', 'b'), 41),
(('x', 'o'), 41),
(('b', 'h'), 41),
(('p', 'p'), 39),
(('x', 'l'), 39),
(('h', 'v'), 39),
(('b', 'b'), 38),
(('m', 'p'), 38),
(('x', 'x'), 38),
(('u', 'v'), 37),
(('x', 'e'), 36),
(('w', 'o'), 36),
(('c', 't'), 35),
(('z', 'm'), 35),
(('t', 's'), 35),
(('m', 's'), 35),
(('c', 'u'), 35),
(('o', 'f'), 34),
(('u', 'x'), 34),
(('k', 'w'), 34),
(('p', '<E>'), 33),
(('g', 'l'), 32),
(('z', 'r'), 32),
(('d', 'n'), 31),
(('g', 't'), 31),
(('g', 'y'), 31),
(('h', 's'), 31),
(('x', 's'), 31),
(('g', 's'), 30),
(('x', 'y'), 30),
(('y', 'g'), 30),
(('d', 'm'), 30),
(('d', 's'), 29),
(('h', 'k'), 29),
(('y', 'x'), 28),
(('q', '<E>'), 28),
(('g', 'n'), 27),
(('y', 'b'), 27),
(('g', 'w'), 26),
(('n', 'h'), 26),
(('k', 'n'), 26),
(('g', 'g'), 25),
(('d', 'g'), 25),
(('l', 'c'), 25),
(('r', 'j'), 25),
(('w', 'u'), 25),
(('l', 'k'), 24),
(('m', 'd'), 24),
(('s', 'w'), 24),
(('s', 'n'), 24),
(('h', 'd'), 24),
(('w', 'h'), 23),
(('y', 'j'), 23),
(('y', 'y'), 23),
(('r', 'z'), 23),
(('d', 'w'), 23),
(('w', 'r'), 22),
(('t', 'n'), 22),
(('l', 'f'), 22),
(('y', 'h'), 22),
(('r', 'w'), 21),
(('s', 'b'), 21),
(('m', 'n'), 20),
(('f', 'l'), 20),
(('w', 's'), 20),
(('k', 'k'), 20),
(('h', 'z'), 20),
(('g', 'd'), 19),
(('l', 'h'), 19),
(('n', 'm'), 19),
(('x', 'z'), 19),
(('u', 'f'), 19),
(('f', 't'), 18),
(('l', 'r'), 18),
(('p', 't'), 17),
(('t', 'c'), 17),
(('k', 't'), 17),
(('d', 'v'), 17),
(('u', 'p'), 16),
(('p', 'l'), 16),
(('l', 'w'), 16),
(('p', 's'), 16),
(('o', 'j'), 16),
(('r', 'q'), 16),
(('y', 'p'), 15),
(('l', 'p'), 15),
(('t', 'v'), 15),
(('r', 'p'), 14),
(('l', 'n'), 14),
(('e', 'q'), 14),
(('f', 'y'), 14),
(('s', 'v'), 14),
(('u', 'j'), 14),
(('v', 'l'), 14),
(('q', 'a'), 13),
(('u', 'y'), 13),
(('q', 'i'), 13),
(('w', 'l'), 13),
(('p', 'y'), 12),
(('y', 'f'), 12),
(('c', 'q'), 11),
(('j', 'r'), 11),
(('n', 'w'), 11),
(('n', 'f'), 11),
(('t', 'w'), 11),
(('m', 'z'), 11),
(('u', 'o'), 10),
(('f', 'u'), 10),
(('l', 'z'), 10),
(('h', 'w'), 10),
(('u', 'q'), 10),
(('j', 'y'), 10),
(('s', 'z'), 10),
(('s', 'd'), 9),
(('j', 'l'), 9),
(('d', 'j'), 9),
(('k', 'm'), 9),
(('r', 'f'), 9),
(('h', 'j'), 9),
(('v', 'n'), 8),
(('n', 'b'), 8),
(('i', 'w'), 8),
(('h', 'b'), 8),
(('b', 's'), 8),
(('w', 't'), 8),
(('w', 'd'), 8),
(('v', 'v'), 7),
(('v', 'u'), 7),
(('j', 's'), 7),
(('m', 'j'), 7),
(('f', 's'), 6),
(('l', 'g'), 6),
(('l', 'j'), 6),
(('j', 'w'), 6),
(('n', 'x'), 6),
(('y', 'q'), 6),
(('w', 'k'), 6),
(('g', 'm'), 6),
(('x', 'u'), 5),
(('m', 'h'), 5),
(('m', 'l'), 5),
(('j', 'm'), 5),
(('c', 's'), 5),
(('j', 'v'), 5),
(('n', 'p'), 5),
(('d', 'f'), 5),
(('x', 'd'), 5),
(('z', 'b'), 4),
(('f', 'n'), 4),
(('x', 'c'), 4),
(('m', 't'), 4),
(('t', 'm'), 4),
(('z', 'n'), 4),
(('z', 't'), 4),
(('p', 'u'), 4),
(('c', 'z'), 4),
(('b', 'n'), 4),
(('z', 's'), 4),
(('f', 'w'), 4),
(('d', 't'), 4),
(('j', 'd'), 4),
(('j', 'c'), 4),
(('y', 'w'), 4),
(('v', 'k'), 3),
(('x', 'w'), 3),
(('t', 'j'), 3),
(('c', 'j'), 3),
(('q', 'w'), 3),
(('g', 'b'), 3),
(('o', 'q'), 3),
(('r', 'x'), 3),
(('d', 'c'), 3),
(('g', 'j'), 3),
(('x', 'f'), 3),
(('z', 'w'), 3),
(('d', 'k'), 3),
(('u', 'u'), 3),
(('m', 'v'), 3),
(('c', 'x'), 3),
(('l', 'q'), 3),
(('p', 'b'), 2),
(('t', 'g'), 2),
(('q', 's'), 2),
(('t', 'x'), 2),
(('f', 'k'), 2),
(('b', 't'), 2),
(('j', 'n'), 2),
(('k', 'c'), 2),
(('z', 'k'), 2),
(('s', 'j'), 2),
(('s', 'f'), 2),
(('z', 'j'), 2),
(('n', 'q'), 2),
(('f', 'z'), 2),
(('h', 'g'), 2),
(('w', 'w'), 2),
(('k', 'j'), 2),
(('j', 'k'), 2),
(('w', 'm'), 2),
(('z', 'c'), 2),
(('z', 'v'), 2),
(('w', 'f'), 2),
(('q', 'm'), 2),
(('k', 'z'), 2),
(('j', 'j'), 2),
(('z', 'p'), 2),
(('j', 't'), 2),
(('k', 'b'), 2),
(('m', 'w'), 2),
(('h', 'f'), 2),
(('c', 'g'), 2),
(('t', 'f'), 2),
(('h', 'c'), 2),
(('q', 'o'), 2),
(('k', 'd'), 2),
(('k', 'v'), 2),
(('s', 'g'), 2),
(('z', 'd'), 2),
(('q', 'r'), 1),
(('d', 'z'), 1),
(('p', 'j'), 1),
(('q', 'l'), 1),
(('p', 'f'), 1),
(('q', 'e'), 1),
(('b', 'c'), 1),
(('c', 'd'), 1),
(('m', 'f'), 1),
(('p', 'n'), 1),
(('w', 'b'), 1),
(('p', 'c'), 1),
(('h', 'p'), 1),
(('f', 'h'), 1),
(('b', 'j'), 1),
(('f', 'g'), 1),
(('z', 'g'), 1),
(('c', 'p'), 1),
(('p', 'k'), 1),
(('p', 'm'), 1),
(('x', 'n'), 1),
(('s', 'q'), 1),
(('k', 'f'), 1),
(('m', 'k'), 1),
(('x', 'h'), 1),
(('g', 'f'), 1),
(('v', 'b'), 1),
(('j', 'p'), 1),
(('g', 'z'), 1),
(('v', 'd'), 1),
(('d', 'b'), 1),
(('v', 'h'), 1),
(('h', 'h'), 1),
(('g', 'v'), 1),
(('d', 'q'), 1),
(('x', 'b'), 1),
(('w', 'z'), 1),
(('h', 'q'), 1),
(('j', 'b'), 1),
(('x', 'm'), 1),
(('w', 'g'), 1),
(('t', 'b'), 1),
(('z', 'x'), 1)]
Counting bigrams in a 2D torch tensor ("training the model") 00:12:45
import torch
N = torch.zeros((28, 28), dtype = torch.int32)
chars = sorted(list(set(''.join(words))))
stoi = {s:i for i,s in enumerate(chars)}
stoi['<S>'] = 26
stoi['<E>'] = 27
stoi #Btw this is just 's to i'
{'a': 0,
'b': 1,
'c': 2,
'd': 3,
'e': 4,
'f': 5,
'g': 6,
'h': 7,
'i': 8,
'j': 9,
'k': 10,
'l': 11,
'm': 12,
'n': 13,
'o': 14,
'p': 15,
'q': 16,
'r': 17,
's': 18,
't': 19,
'u': 20,
'v': 21,
'w': 22,
'x': 23,
'y': 24,
'z': 25,
'<S>': 26,
'<E>': 27}
for word in words:
chs = ['<S>'] + list(word) + ['<E>']
for ch1, ch2 in zip(chs, chs[1:]):
ix1 = stoi[ch1]
ix2 = stoi[ch2]
N[ix1, ix2] += 1
N
tensor([[ 556, 541, 470, 1042, 692, 134, 168, 2332, 1650, 175, 568, 2528,
1634, 5438, 63, 82, 60, 3264, 1118, 687, 381, 834, 161, 182,
2050, 435, 0, 6640],
[ 321, 38, 1, 65, 655, 0, 0, 41, 217, 1, 0, 103,
0, 4, 105, 0, 0, 842, 8, 2, 45, 0, 0, 0,
83, 0, 0, 114],
[ 815, 0, 42, 1, 551, 0, 2, 664, 271, 3, 316, 116,
0, 0, 380, 1, 11, 76, 5, 35, 35, 0, 0, 3,
104, 4, 0, 97],
[1303, 1, 3, 149, 1283, 5, 25, 118, 674, 9, 3, 60,
30, 31, 378, 0, 1, 424, 29, 4, 92, 17, 23, 0,
317, 1, 0, 516],
[ 679, 121, 153, 384, 1271, 82, 125, 152, 818, 55, 178, 3248,
769, 2675, 269, 83, 14, 1958, 861, 580, 69, 463, 50, 132,
1070, 181, 0, 3983],
[ 242, 0, 0, 0, 123, 44, 1, 1, 160, 0, 2, 20,
0, 4, 60, 0, 0, 114, 6, 18, 10, 0, 4, 0,
14, 2, 0, 80],
[ 330, 3, 0, 19, 334, 1, 25, 360, 190, 3, 0, 32,
6, 27, 83, 0, 0, 201, 30, 31, 85, 1, 26, 0,
31, 1, 0, 108],
[2244, 8, 2, 24, 674, 2, 2, 1, 729, 9, 29, 185,
117, 138, 287, 1, 1, 204, 31, 71, 166, 39, 10, 0,
213, 20, 0, 2409],
[2445, 110, 509, 440, 1653, 101, 428, 95, 82, 76, 445, 1345,
427, 2126, 588, 53, 52, 849, 1316, 541, 109, 269, 8, 89,
779, 277, 0, 2489],
[1473, 1, 4, 4, 440, 0, 0, 45, 119, 2, 2, 9,
5, 2, 479, 1, 0, 11, 7, 2, 202, 5, 6, 0,
10, 0, 0, 71],
[1731, 2, 2, 2, 895, 1, 0, 307, 509, 2, 20, 139,
9, 26, 344, 0, 0, 109, 95, 17, 50, 2, 34, 0,
379, 2, 0, 363],
[2623, 52, 25, 138, 2921, 22, 6, 19, 2480, 6, 24, 1345,
60, 14, 692, 15, 3, 18, 94, 77, 324, 72, 16, 0,
1588, 10, 0, 1314],
[2590, 112, 51, 24, 818, 1, 0, 5, 1256, 7, 1, 5,
168, 20, 452, 38, 0, 97, 35, 4, 139, 3, 2, 0,
287, 11, 0, 516],
[2977, 8, 213, 704, 1359, 11, 273, 26, 1725, 44, 58, 195,
19, 1906, 496, 5, 2, 44, 278, 443, 96, 55, 11, 6,
465, 145, 0, 6763],
[ 149, 140, 114, 190, 132, 34, 44, 171, 69, 16, 68, 619,
261, 2411, 115, 95, 3, 1059, 504, 118, 275, 176, 114, 45,
103, 54, 0, 855],
[ 209, 2, 1, 0, 197, 1, 0, 204, 61, 1, 1, 16,
1, 1, 59, 39, 0, 151, 16, 17, 4, 0, 0, 0,
12, 0, 0, 33],
[ 13, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 1,
2, 0, 2, 0, 0, 1, 2, 0, 206, 0, 3, 0,
0, 0, 0, 28],
[2356, 41, 99, 187, 1697, 9, 76, 121, 3033, 25, 90, 413,
162, 140, 869, 14, 16, 425, 190, 208, 252, 80, 21, 3,
773, 23, 0, 1377],
[1201, 21, 60, 9, 884, 2, 2, 1285, 684, 2, 82, 279,
90, 24, 531, 51, 1, 55, 461, 765, 185, 14, 24, 0,
215, 10, 0, 1169],
[1027, 1, 17, 0, 716, 2, 2, 647, 532, 3, 0, 134,
4, 22, 667, 0, 0, 352, 35, 374, 78, 15, 11, 2,
341, 105, 0, 483],
[ 163, 103, 103, 136, 169, 19, 47, 58, 121, 14, 93, 301,
154, 275, 10, 16, 10, 414, 474, 82, 3, 37, 86, 34,
13, 45, 0, 155],
[ 642, 1, 0, 1, 568, 0, 0, 1, 911, 0, 3, 14,
0, 8, 153, 0, 0, 48, 0, 0, 7, 7, 0, 0,
121, 0, 0, 88],
[ 280, 1, 0, 8, 149, 2, 1, 23, 148, 0, 6, 13,
2, 58, 36, 0, 0, 22, 20, 8, 25, 0, 2, 0,
73, 1, 0, 51],
[ 103, 1, 4, 5, 36, 3, 0, 1, 102, 0, 0, 39,
1, 1, 41, 0, 0, 0, 31, 70, 5, 0, 3, 38,
30, 19, 0, 164],
[2143, 27, 115, 272, 301, 12, 30, 22, 192, 23, 86, 1104,
148, 1826, 271, 15, 6, 291, 401, 104, 141, 106, 4, 28,
23, 78, 0, 2007],
[ 860, 4, 2, 2, 373, 0, 1, 43, 364, 2, 2, 123,
35, 4, 110, 2, 0, 32, 4, 4, 73, 2, 3, 1,
147, 45, 0, 160],
[4410, 1306, 1542, 1690, 1531, 417, 669, 874, 591, 2422, 2963, 1572,
2538, 1146, 394, 515, 92, 1639, 2055, 1308, 78, 376, 307, 134,
535, 929, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0]], dtype=torch.int32)
Visualizing the bigram tensor 00:18:19
#Okay lmao yeah, dont run this cell. Although the logic provides the same output, it's causing some issue with the plotting
# itos = {i: s for i, s in enumerate(chars)}
# itos
itos = {i:s for s,i in stoi.items()}
itos
#This code is directly taken from the video. Andrej prolly spent a lot of time designing this so
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(16,16))
plt.imshow(N, cmap='Blues')
for i in range(28):
for j in range(28):
chstr = itos[i] + itos[j]
plt.text(j, i, chstr, ha="center", va="bottom", color='gray')
plt.text(j, i, N[i, j].item(), ha="center", va="top", color='gray')
plt.axis('off');
Deleting spurious (S) and (E) tokens in favor of a single . token 00:20:54
N = torch.zeros((27, 27), dtype = torch.int32)
chars = sorted(list(set(''.join(words))))
stoi = {s:i+1 for i,s in enumerate(chars)}
stoi['.'] = 0
itos = {i:s for s,i in stoi.items()}
for word in words:
chs = ['.'] + list(word) + ['.']
for ch1, ch2 in zip(chs, chs[1:]):
ix1 = stoi[ch1]
ix2 = stoi[ch2]
N[ix1, ix2] += 1
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(16,16))
plt.imshow(N, cmap='Blues')
for i in range(27):
for j in range(27):
chstr = itos[i] + itos[j]
plt.text(j, i, chstr, ha="center", va="bottom", color='gray')
plt.text(j, i, N[i, j].item(), ha="center", va="top", color='gray')
plt.axis('off');
Sampling from the model 00:24:02
N[0] #Viewing just the first row
tensor([ 0, 4410, 1306, 1542, 1690, 1531, 417, 669, 874, 591, 2422, 2963,
1572, 2538, 1146, 394, 515, 92, 1639, 2055, 1308, 78, 376, 307,
134, 535, 929], dtype=torch.int32)
First we make them all into float.
Then we make a probability distribution
We do that by dividing p with p.sum()
p = N[0].float()
p = p / p.sum()
p
tensor([0.0000, 0.1377, 0.0408, 0.0481, 0.0528, 0.0478, 0.0130, 0.0209, 0.0273,
0.0184, 0.0756, 0.0925, 0.0491, 0.0792, 0.0358, 0.0123, 0.0161, 0.0029,
0.0512, 0.0642, 0.0408, 0.0024, 0.0117, 0.0096, 0.0042, 0.0167, 0.0290])
p.sum().item()
1.0
So the total probability sums up to 1. Therefore now we have the probability values for each of those characters.
g = torch.Generator().manual_seed(2147483647)
p = torch.rand(3, generator=g)
p = p / p.sum()
p
tensor([0.6064, 0.3033, 0.0903])
torch.multinomial(p, num_samples=20, replacement=True, generator=g)
tensor([1, 1, 2, 0, 0, 2, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1])
So based on the probability percentages p we get a bunch of sample values
So 0 should be 60%, 1 should be 30%, 2 should be 10% of the total samples generated
g = torch.Generator().manual_seed(2147483647)
ix = torch.multinomial(p, num_samples=1, replacement=True, generator=g).item()
itos[ix]
'.'
So now, if we had got another sampled value, lets say 'm' (so we have taken the column), now we go to the row containing 'm' and then check for its correspondant character.
Keeping this jest in mind, we will be making this into a loop.
g = torch.Generator().manual_seed(2147483647)
for i in range(10):
out = []
ix = 0
while True:
p = N[ix].float()
p = p / p.sum()
ix = torch.multinomial(p, num_samples=1, replacement=True, generator=g).item()
out.append(itos[ix])
if ix == 0:
break
print(''.join(out))
junide. janasah. p. cony. a. nn. kohin. tolian. juee. ksahnaauranilevias.
And this is why the Bigram model is so bad lol. The output generated not to great (Andrej said "terrible" xd), for example for p. , is that the model doesn't understand that 'p' should have had something before or after it. Right now, it considers that as a name itself.
But now we will see why the output made by the model is not exactly too terrible
g = torch.Generator().manual_seed(2147483647)
for i in range(10):
out = []
ix = 0
while True:
# p = N[ix].float()
# p = p / p.sum()
p = torch.ones(27) / 27.0
ix = torch.multinomial(p, num_samples=1, replacement=True, generator=g).item()
out.append(itos[ix])
if ix == 0:
break
print(''.join(out))
juwjdvdipkcqaz. p. cfqywocnzqfjiirltozcogsjgwzvudlhnpauyjbilevhajkdbduinrwibtlzsnjyievyvaftbzffvmumthyfodtumjrpfytszwjhrjagq. coreaysezocfkyjjabdywejfmoifmwyfinwagaasnhsvfihofszxhddgosfmptpagicz. rjpiufmthdt. rkrrsru. iyumuyfy. mjekujcbkhvupwyhvpvhvccragr. wdkhwfdztta. mplyisbxlyhuuiqzavmpocbzthqmimvyqwat.
So now this is what we get when the model is completely untrained, it gives you a garbage of values.
This is happening because we removed the probability distribution and added a distribution of uniform values. So all of the characters are equally likely to occur.
So yeah, if we train it with a Bigram, then its a lot better output. So ultimately it is actually working, just that Bigram is not so great for this xD
#Solving the inefficiency problem
P = N.float()
P = P / P.sum(1, keepdim=True) #Here is where we are applying the sum and broadcasting rules. Sum for the function and Broadcasting for the division part that takes place.
# 27 27
# 27 1
P[0].sum() #This should return the tensor object with value 1. So that entire row as been normalised
So the rule says:
Two tensors are “broadcastable” if the following rules hold:
Each tensor has at least one dimension.
When iterating over the dimension sizes, starting at the trailing dimension, the dimension sizes must either be equal, one of them is 1, or one of them does not exist.
So in our case, one of the dimentional sizes is one i.e 27 1
And, the dimension sizes are equal:
27
27
g = torch.Generator().manual_seed(2147483647)
for i in range(10):
out = []
ix = 0
while True:
p = P[ix]
# p = N[ix].float()
# p = p / p.sum()
ix = torch.multinomial(p, num_samples=1, replacement=True, generator=g).item()
out.append(itos[ix])
if ix == 0:
break
print(''.join(out))
#That will produce the same output.
P = N.float()
P /= P.sum(1, keepdim=True)
g = torch.Generator().manual_seed(2147483647)
for i in range(10):
out = []
ix = 0
while True:
p = P[ix]
ix = torch.multinomial(p, num_samples=1, replacement=True, generator=g).item()
out.append(itos[ix])
if ix == 0:
break
print(''.join(out))
Evaluating our model
import torch
N = torch.zeros((27, 27), dtype = torch.int32)
chars = sorted(list(set(''.join(words))))
stoi = {s:i+1 for i,s in enumerate(chars)}
stoi['.'] = 0
itos = {i:s for s,i in stoi.items()}
P = N.float()
P /= P.sum(1, keepdim=True)
log_likelihood = 0.0
n = 0
for word in words[:3]:
chs = ['.'] + list(word) + ['.']
for ch1, ch2 in zip(chs, chs[1:]):
ix1 = stoi[ch1]
ix2 = stoi[ch2]
prob = P[ix1, ix2] #Likelihood - product of all the values
logprob = torch.log(prob) #Log Likelihood
log_likelihood += logprob #Log Likelihood - Adding the logs of all probability values
n += 1 #Log Likelihood - For the average
print(f'{ch1}{ch2}: {prob:.4f} {logprob: .4f}')
print(f'{log_likelihood=}')
nll = -log_likelihood #Negative Log Likelihood
print(f'{nll=}')
print(f'{nll/n}') #Negative Log Likelihood - Average value
.e: 0.0478 -3.0408 em: 0.0377 -3.2793 mm: 0.0253 -3.6772 ma: 0.3899 -0.9418 a.: 0.1960 -1.6299 .o: 0.0123 -4.3982 ol: 0.0780 -2.5508 li: 0.1777 -1.7278 iv: 0.0152 -4.1867 vi: 0.3541 -1.0383 ia: 0.1381 -1.9796 a.: 0.1960 -1.6299 .a: 0.1377 -1.9829 av: 0.0246 -3.7045 va: 0.2495 -1.3882 a.: 0.1960 -1.6299 log_likelihood=tensor(-38.7856) nll=tensor(38.7856) 2.424102306365967
#Model smoothening
P = (N+1).float()
P /= P.sum(1, keepdim=True)
log_likelihood = 0.0
n = 0
# for word in words[:3]:
for word in ["muzzammil"]:
chs = ['.'] + list(word) + ['.']
for ch1, ch2 in zip(chs, chs[1:]):
ix1 = stoi[ch1]
ix2 = stoi[ch2]
prob = P[ix1, ix2] #Likelihood - product of all the values
logprob = torch.log(prob) #Log Likelihood
log_likelihood += logprob #Log Likelihood - Adding the logs of all probability values
n += 1 #Log Likelihood - For the average
print(f'{ch1}{ch2}: {prob:.4f} {logprob: .4f}')
print(f'{log_likelihood=}')
nll = -log_likelihood #Negative Log Likelihood
print(f'{nll=}')
print(f'{nll/n}') #Negative Log Likelihood - Average value
.m: 0.0792 -2.5358 mu: 0.0210 -3.8636 uz: 0.0145 -4.2303 zz: 0.0190 -3.9649 za: 0.3551 -1.0355 am: 0.0482 -3.0321 mm: 0.0253 -3.6753 mi: 0.1885 -1.6687 il: 0.0759 -2.5780 l.: 0.0940 -2.3641 log_likelihood=tensor(-28.9485) nll=tensor(28.9485) 2.894852876663208