Nice package, not only is using words more token-efficient [saving time and money], but weaker models are also less likely to make mistakes when providing the key, at least in my tests.
That said, for `createAliasMap`, don't you think you could create a deterministic mapping from and to UUIDs <-> word chains? That way, no additional state would be needed. [Might require fairly long word chains...]
Agreed, it almost feels like we have a visual processing unit with special “opcodes” for operations like depth matching and pattern repetition.
The generator first needs a depth map, and then derives the repeating pattern from that.
A normal RGB image would be far too noisy; the fine texture variations would break the repetition needed for the brain to fuse the patterns correctly.
simedw ~ $ claude -p "random number between 1 and 10"
7
simedw ~ $ claude -p "random number between 1 and 10"
7
simedw ~ $ claude -p "random number between 1 and 10"
7
simedw ~ $ claude -p "random number between 1 and 10"
7
It’s fairly sensitive to background noise at the moment. I’m planning to train an improved version with stronger data augmentation, including background noise.
For accents, I’ve mostly tested with a few friends so far. I’m wondering whether region should be a parameter, because training on all dialects might make the system too lax.
I had a quick look at Farsi datasets, and there seem to be a few options. That said, written Farsi doesn’t include short vowels… so can you derive pronunciation from the text using rules?
First of all, big kudos for not missing a single day. When I used flashcards in the past, missing even a couple of days led to an avalanche of cards to review.
Since you’ve been so consistent and are using your own software, have you experimented with different resurfacing rates? Did you notice a material difference in recall?
Thanks for the questions. Very fair concerns. Take all of this with a fairly large pinch of salt; this is still an experiment.
1. How does it know which words I already know?
It doesn’t automatically. You provide that set. For example, if you’ve completed HSK 1, you can paste the HSK 1 word list into LangSeed and mark those as "known". From there, new explanations are constrained to that vocabulary.
You can also paste in real text and mark the easy words as known, though that’s a bit more manual.
2. How much might I misunderstand word meanings?
Depends on how advanced the vocab is and how large your known-word set is. I think of this as building intuition rather than giving dictionary-precise definitions. As you see words in more contexts, that intuition sharpens. This is just my experience from testing it over the last couple of weeks.
3. How inaccurate are the explanations?
I tested it on Swedish (my native language). There are occasional awkward or slightly odd phrasings, but it’s rarely outright wrong.
This is a simplified version: Journey to the West in Easy Chinese by Jeff Pepper and Xiao Hui Wang. Otherwise, I would definitely have waited a bit before biting off something like this.
Surprisingly easy. If the language has a lot of conjugations (e.g., polite past verb forms), running each word through Snowball first makes the process a bit easier.
That's a really cool concept. Naively replacing words might work, but sometimes the context is needed. Maybe a model like gemini 2.5 flash lite would be fast enough but still maintain better context awareness?
Thanks for sharing; you clearly spent a lot of time making this easy to digest. I especially like the tokens-to-embedding visualisation.
I recently had some trouble converting a HF transformer I trained with PyTorch to Core ML. I just couldn’t get the KV cache to work, which made it unusably slow after 50 tokens…
Thanks! I think getting comfortable with characters fairly early is important, as it helps shift your mindset into the right place. That said, I don’t think this project really works until you’re comfortable with at least ~60 characters.
That said, for `createAliasMap`, don't you think you could create a deterministic mapping from and to UUIDs <-> word chains? That way, no additional state would be needed. [Might require fairly long word chains...]