Congratulations, definitely a step above for the
generation of passwords that are easy to remember, but
hard to guess.
One thing to keep in mind. While it is hard for a person
to guess, the same concept can be used to narrow the
initial selection set of passwords needed to guess.
Implemented in a program (a simple modification of your
code) it would have a much better success ratio of guessing
the passwords. In the end though they are definitely
tougher to guess than standard dictionary words, so it
is definitely an improvement.
I used to pick passwords of random characters that felt
natural to type. Some combinations of characters are just
awkward to enter quickly. Knowing that a password cracker
to begin its search based on netural key combinations. This
would likely shorten the search time.