Skip to content

To Mispell Is Only Human

October 16, 2012

Since launch, I’ve been logging natural language ingredient queries within the KitchenPC UI.  There are two places where the NLP engine is exposed; the search by ingredient mechanism, which allows users to include or exclude specific ingredients in their searches, and the What Can I Make? feature, which allows users to enter an ingredient with an optional amount.

During development, my initial design was to simply ignore anything I didn’t understand.  I would silently log it so I could improve the NLP vocabulary later, but I didn’t want to bother the user with silly errors messages.  Unfortunately, this totally bombed during usability testing.  Users typed in all sorts of randomness, and then couldn’t complete the tasks as they weren’t sure if the feature was working or not.  Ultimately, I decided to popup a message when I encountered something I didn’t understand, with a link to a video showing the user how to properly use the feature (those videos are quite popular, by the way!)

After a few weeks of use, I’d like to share the list of failed NLP queries with you, which will hopefully shed some light on the way users interact with the site.  This shows how incredibly difficult it is to teach computers to understand user intentions based on human language.  If nothing else, you’ll probably chuckle over a few of the queries.

beans
garbonzo beans
chick peas
1 pound of chicken
1 pd of chicken
capsicum
capsicum
cucmber
brussel sprouts
brussel sprout
brussel sprout
palak
obergine
Pasta
noodles
roast beef
beef
cooked pork
cooked pork
left over pork
left over cooked pork
left over cooked pork
cooked pork
boiled green beans
small beans
moong
pulled pork
pasta
a pound of pasta
lake trout
lake trout
wheatberries
annisette
grilled pork tenderloin
pork tenderloin cooked
water chestnuts
Tuna fish
Canned tuna
2 heads of celery
dairy
brussel sprouts
broccoli, pasta, olive oil
pasta
pasta
noodles
Mozarella
Bred
Beef
Grou d
beef
beef
meat
beef
red meat
pile of lettuce
16 ounce can of kidney beans
14.5 ounces reduced sodium chicken stock
asparagas
asparagas
linseed oil
Linseed oil
meat loaf
noodles
chicken, lentils
pureed jalapenos
"jethro tull" and "new haven" AND collection:etree
mac nuts butter eggs flour hamburger
eggs flour
eggs flour butter hamburger
meyer lemon
meyer lemon
meyer lemon
greek salad
beans
garbenzo beans
garbenzo beans
chick peas
melbourne cricket ground
brioche
brioche
brioche
noodles
noodles
noodles
noodles
sun dries tomatoes
pasta
sun dried tomatos
makarel
tomatos
tomatos
Canned tomatoe
wheal
chocolote
chocolate
chocolate
chocolate
chocolate
pasta
pasta
full milk
fruit
fruit
flouer
bakeing soda
bakeing soda
peppers
peppers
chiles
cooked rice
cooked rice
cooked rice
cooked rice
cooked rice
CARAMEL
CARMEL
CHOCOLATE
8 OZ COOKED CHICKEN
COOKED CHICKEN
COOKED HAM
Bambi rice chile pepper cheese
Bamba rice
cannelini beans
Risotto
French radish
meatloaf
chicken fingers
meatloaf
meatloaf
meatloaf
meat loaf
meatloaf
squash
meatloaf
cherry
cherri3es
jello, marshmallows, fruit cocktail  c
fruit cocktail, marshmallows
soja
beef
beef
Tao sauce
General tao
mayonaise
pound of ground beef
Red curly kale
tomatos
brats
brats
brats
bratwarts
portabello
malt
malt
crackers
monosodium
agave
molassas
Potatoe
potaoes
wasabi
wasabi
gluten free
peacon
maladextren
chocolate
aged cheese
chedder
honey chicken
honey grilled chicken
pasta
noodles
a bag of noodles
a bag of rice
ground turken
meat
avacodo
avacodo
top round steak
top round steak
top round
round rump roast
sirloin tip roast
potatos
calliflour
califlour
culiflour
pasta
Mozarella
Mozarela
grilled chicken
cornstart
corn surup
fresh spinanch
aparagus
fetta cheese
fetta
glurten
corn starcfh
fetta
chicken corn potatoes black beans
cooked chicken
cooked chicken
cooked chicken
1 cooked chicken
thai basel
blachan
Noodles
Pasta
Pasta
pasta
chicken, pasta, scallions
meatloaf
brussel sprout greens
greens
chili
lamb chop
fried tofu
lamb chop
Zuchini
1 LB. GROUND BEEF
sweet peppers
sweet peppers
sweet peppers
peppers
braising greens, parsnips
braising greens
tomatoe
leftover pork
beans
lentils,beans, bacon, peas
pound of split peas
ice cream
hot dog
pasta
parsley root
squash
squash
squash
squash
kiwitcha
farro
garbanzo
pumplkin
lunch meat, apples, lettuce, tomato, chinese noodles
pasta
pasta
parmesaen
squash
squash
sguash
meatloaf
1 instant noodle
meat ball
meat
butter/oil
margerine
margerin
canola
canola
chocolate
chocolate
chicked
ganulated sugar
brocoli
candy corn
meat
bell papper
mushroom soup
can of cream of mushroom soup
chicken potatoes
squash
tom
meat
pasta
noodles
noodles
noodles
black eyed peas
black eyed pea
blackeyed peas
caper
chili peeppers
chili pepper
cornstartch
corn startch
crackers
cracker
soy beans
soy bean
splendda
tartar sauce
veggie burgeer
Ricotta,spaghetti,gark
Ricotta,spaghetti,ragu
Chicken, pasta, garlic, tomato paste
canned salmon
canned salmon
canned salmon
tin of salmon
can of salmon
salmon tin
mexican corn
canned corn
salsa verde
black eyed peas
refried black  beans
sliced chiles
canned jalapenos
chipotle peppers canned
beef
frozen scallops
frozen scallops
Bowie pasta,ricotta, frox
Rotisserie chicken
rotisserie chicken
Leftover chicken
chicken piccata
fish filets
whole tomatoes
tomatoes whole
tomatoes canned
refried black beans
chicken corden blu
coocke chicken
cooked chicken
dry pasta
milk cheese
tortalini
pasta
frozen vegetables
can of chili
a can of chili
chili
noodles
pasta
minced beef
pasta
pasta
left over turkey
pasta
roast
pasta
crab
seafood
shellfish
fish
refrigerated biscuits
wheate
beans
red peper
bell peper
brocolli
cooked pork chops
pumpkin 2 cups
beans
beans
beans
potatos

This list can be divided into the following categories:

Misspellings:

Entries such as “garbenzo beans” instead of “garbanzo beans” and “tomatos” instead of “tomatoes” are difficult to fix.  I would either have to list common misspellings of these ingredients in the database as ingredient synonyms, or I would have to implement some sort of on-the-fly spelling checking algorithm to actually correct potentially misspelled words.  The former might be a good solution in the short term, especially for very common misspellings, or correct spellings in other dialects of English, however this won’t be of much use to people who are simply really bad spellers.  You know who you are.

Integrating NLP with standard spell checking algorithms is an approach, but both complicates and slows down already extremely complex code.  Plus, it would be no easy task and difficult to prioritize very high with all the things I have on my plate.

Generic Ingredients

Queries such as “chocolate”, “pasta”, “ice cream” and “squash” are very generic.  There’s many types of species of squash in the database, and from a culinary point of view, they can’t be treated as the same ingredient.  However, it’s obvious that users are hoping to include or exclude all varieties of squash from their queries.  I could easily see someone wanting to figure out what to do with a bunch of left over ice cream by searching for recipes that use any type of ice cream.  Unfortunately, the current KitchenPC database design doesn’t support this concept.

This is a limitation that has been on my mind for quite some time, especially for grouping ingredients that could pose issues with certain allergies (such as nuts.)  It could also be used for substitutions on the fly, such as “2% milk” and “1%” milk are quite often interchangeable between recipes.

I think the solution is to introduce a concept of an abstract ingredient into KitchenPC.  This ingredient would help relate similar ingredients together, and could be tied into NLP, searching, etc.  However, this is most likely a huge undertaking and would affect almost every aspect of the code and database.  In fact, when I think about it for more than ten seconds, I start to shudder at all the stuff I’d have to re-write.

People Still Don’t Read The Instructions

There are still queries such as “lentils,beans, bacon, peas” and “mac nuts butter eggs flour hamburger” even though the instructions explicitly say to type in one ingredient at at time.  The help video even shows this very clearly.  Apparently, no matter what you do, there will always be some users who just ignore this and want it to work in a certain way.

There is the possibility of either supporting multiple ingredients at once, or at least detecting when this is done and providing a clearer error message – not that these people are likely to read error messages.

Hopefully this is something that doesn’t happen a lot, and can be ignored as user error.

What The???

Lastly, there are a few queries that just make you scratch your head.  For example, “left over pork”.  Who cares if it’s left over or not?  Just type in pork!

Then of course there’s:

"jethro tull" and "new haven" AND collection:etree

I won’t even ask.

Fixing Valid Queries

It’s also obvious there’s a bunch of queries that should work but don’t.  I’m spending some time this week going through these and fixing as many as possible, or at least the most common ones.  Hopefully, over time, the interface will get harder and harder to fool.  However, that’s going to take a while.

Advertisements

From → Business, Technical

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: