W2A1 Odd Word Analogy Results -- Why?

I was able to run my complete_analogy() just fine on the provided triads. However, I got some strange results when I put in my own triads:

small → tiny :: large → tiny
man → woman :: girl → 816-822-8448

Why does girl get matched to a number?
Why does the analogy work for man → woman :: boy-> __ but not when boy is replaced with girl?

Interesting question.
Here’s what I was able to learn.

Word embeddings aren’t perfect.

Apparently the word embedding for ‘tiny’ is very similar to both ‘small’ and ‘large’.

For some reason, the word embedding has an entry for that phone number. I have no idea why, and a quick internet search did not turn up any clues.

For your man->woman:: girl-> example, part of the trouble is that you have the genders reversed. Your logical argument compares ‘man’ and ‘girl’. So you should expect weird results for that.