Inspiration
My children are learning vocabulary (and other topics) very inefficiently at school, a few words a day with poor retention. I think AI can make this much easier.
What it does
It chooses a word that's suitable for the child based on their age, then tests the child on the word's spelling and meaning, and provides teaching of the word if needed. It tracks which words the child knows and which they should be learning. It adapts the difficulty based on the test results and uses spaced repetition to help the child review the words they're learning. The OpenAI API is used to generate sample sentences, TTS (to pronounce the word), dictation (for children to explain what a word does if typing is too hard for them), and to judge the child's explanation of the word. It also generates stories using multiple words they are learning to further test comprehension in context.
How we built it
100% built with the codex mac app, including feature brainstorming, vocab corpus dataset collection and analysis, brand design, domain purchasing and deployment, often with multiple worktrees working simultaneously. Tested with my children.
Challenges we ran into
- Coming up with a robust score for word difficulty level. We started with using the wordfreq dataset where the more commonly a word is used the easier it is. This has a number of issues where a word like "unsteady" is considered difficult because it's less commonly used, despite its meaning being easily derivable from knowing the more commonly used related word "steady". As a result, many words the children was getting were variations of simpler words, making the exercise less productive. We then tried running the entire vocab corpus (40,000 words) through the OAI api (with batching) asking the LLM to come up with a difficulty level for each word, with metrics like the median age expected for a child to learn a word, what % of adults know this word etc. This produced a somewhat better dataset, but it still suffers from the steady/unsteady problem to a lesser degree. For example, conceited was deemed 10.9yo while naturalistic was deemed 14yo, whereas we think it was a lot easier to derive the meaning of "naturalistic" from the meaning of "nature". We then got the LLM to produce a morphology dataset for us where it would identify that "unsteady" can be derived from the meaning "steady" and "naturalistic" from "nature" each with a few metrics such as how obvious the connection is and how easily the meaning can be derived. We then used these metrics to augment the basic LLM difficulty metric to arrive at a good default starting dataset. As we gather more actual user data on which words users know and don't know, we will refine our model accordingly.
- Another challenge we found was with the codex (and codex app)'s default ability to work in parallel on small projects. There were several times even under different worktrees, codex were overwriting each other's changes. I think good agents.md or skills will largely solve these issues but it would be helpful if codex are able to avoid this out of the box.
Accomplishments that we're proud of
We were able to come up with an app in 2 days that 2 children of different age brackets reported they preferred this over their existing vocabulary curriculum/app.
What we learned
(At least some) children like it when their learning app and process improve their learning, not just that it looks fun. Reliably predict whether a child knows a word is a non-trivial problem and can benefit from more vocabulary learning data. There are many unexplored learning modalities that can further improve learning outcomes.
What's next for NoBS
We will continue to make NoBS the best vocabulary learning app for children across the globe, and then solve similar problems in other areas of learning such as comprehension, maths, and sciences, to provide personal, efficient, and holistic learning for all children.
Built With
- codex
- openai
- supabase
Log in or sign up for Devpost to join the conversation.