How the level estimate works
Vidoumo reads the Japanese captions, finds the words, and asks four things of them. How hard are the words. How hard are the kanji. How much advanced grammar is in there. How fast is everyone talking. The answers become one score, and the score becomes a level. It all runs in your browser.
Reading the label
Hover the label for the breakdown: the words by level, the spread of kanji, how much advanced grammar there is, and the speed of speech where it can be measured.
The estimate is unofficial. The JLPT has published no word, kanji or grammar lists since 2010, so the levels here come from community lists. It describes the Japanese in the captions. It says nothing about how you would do on the test.
- JLPT N3The estimated level. N5 is the easiest, N1 the hardest.
- JLPT N2–N3Two levels, when the score falls between them.
- JLPT ~N3The ~ means the captions are automatic. They mishear, so the estimate is softer.
- JLPT unratedToo little speech to judge. Hover for the counts and the reason.
How it works
Captions go in and words come out, each one looked up on the JLPT lists. Four signals are read from the words, blended into a single raw score, stretched across the full N5 to N1 range and rounded to a level.
Every score is read on one scale: 5 is N5 and 1 is N1. The word and grammar lists ship inside the extension, so nothing is sent anywhere to work out a level.
Vocabulary
A video is hard because of its hardest few per cent, not because of its average word.
Most difficulty estimates average the words. That is the wrong measure. Easy words are most of any speech, so the average of an easy video and a hard one barely differs. The tail is what separates them.
So I count how often words of each level are said, line the levels up from N5 to N1, and find the point where the running share reaches 93%. That is the level you need to follow nearly everything. The point is fractional: if the share crosses 93% halfway through the N2 words, vocabulary reads halfway between N3 and N2, not as a flat N2.
A word said ten times counts ten times. I tried counting each distinct word once, and it crushed every video toward the middle. Repeats are what a listener actually hears.
- N5 50%
- N4 18%
- N3 14%
- N2 8%
- N1 10%
running(L) = share of listed words said
that are level L or easier
vocabulary = the point, counting up from N5,
where running reaches 0.93 Why 93%
Because it worked best, not because anything about 93 is special. Cover every word and one rare name sets the level. Cover 70% and the hard words stop mattering. On my checks 93% gave the lowest error, and 90% and 97% did worse.
It is a sensitive number. Move it by one point either way and a video’s final score shifts by a median of 0.15 of a level. Nine in ten move 0.27 or less. The worst case moves 0.82, a listening test whose crossing lands in a thin level. I also tried scoring the average of the hardest few per cent of words in place of the crossing point. It fitted no better.
Which words count
Only content words are looked up: nouns, verbs, adjectives, adverbs and interjections, by dictionary form. Names, numbers, pronouns and particles are skipped, and so are katakana loanwords and kana-only words that are not on a list.
Every spelling of a word takes one level. 美味しい and おいしい are the same word, so both take the easier of the two levels the lists give. A kana-only word filed as N1 or N2 is ignored, because advanced words are written in kanji and these are almost always a reading of a kanji word, a fragment or an everyday word: おはよう, ごめん, ちる. A leading お or ご is stripped, so お話 takes the level of 話. A potential verb takes the level of its base verb, so 使える takes 使う. Other kanji words on no list are names, jargon and caption slips. They show as “Not listed” in the hover and do not move the level.
Kanji
Kanji do something vocabulary cannot. Spoken Japanese reuses the same easy words across levels, but the kanji a caption writes still climb steadily from N5 to N1.
Each distinct kanji has a level, or counts as beyond N1 if it is on no list. Names are not counted. The average is stretched onto the vocabulary scale. With fewer than 15 distinct kanji, the signal is dropped and the others share its weight. The stretch was fitted on videos that had kanji, so a video without them is scored through a line calibrated for a different mix. None of my videos has so few, so I have not tested it. On the ones I have, dropping kanji makes the score about a quarter of a level easier.
The 1.5 and 1.8 put kanji on the same scale as vocabulary. Kanji averages run from about 1.5 in beginner text to about 3.5 in dense text, while vocabulary runs from roughly 1 to 4.5. I read those ranges off my first test texts and have not revisited them.
kanji = clamp( 1 + (mean difficulty − 1.5) × 1.8,
1, 6 )
difficulty is 1 for an N5 kanji ... 5 for N1,
and 6 for a kanji on no list Grammar
Vocabulary cannot tell a beginner conversation from an intermediate one. They use the same everyday words. The grammar is where they differ.
Vidoumo looks for 416 grammar patterns from N3, N2 and N1, such as 〜わけにはいかない, 〜ざるを得ない and 〜に基づいて. Each is stored as a sequence of dictionary forms, so it matches whatever the verb or adjective is doing: 得なかった still matches 〜ざるを得ない. The longest match at each position wins, and a pattern never runs across a caption break. The signal is how many patterns turn up per 1,000 tokens. Here a token is every piece the tokenizer produces, particles and endings included, not only the content words used for vocabulary. The count therefore depends a little on how the tokenizer splits a caption.
density = 1000 × (patterns found) ÷ (tokens)
grammar = 1 + 4 × position of density on a
log scale from 10 (simple)
to 110 (complex) N5 and N4 patterns (は, ている, たい) are in every sentence of every kind of speech, so I ignore them. Counting only N3 and above leaves what separates a learner video from a lecture.
The bounds are read off the data. Beginner exams and a slow learner podcast come out at 8 to 11 patterns per 1,000 tokens. Ordinary native conversation runs 40 to 85, and university lectures 58 to 74. I put the top of the scale at 110 so everyday talk does not hit the ceiling. A log scale stops a few very dense passages from dominating.
It is the weakest signal for telling N2 from N1, and it has a blind spot. The detector matches written patterns, not meaning, so a pattern with two meanings counts either way, and grammar made of ordinary words in an ordinary order is invisible to it.
Speed
Speed matters to anyone learning, so it is in. It is also the weakest rule I have.
Speech speed is measured in morae a second, roughly syllables, over the time captions are on screen. Ordinary speech is about 6.5. Slower is easier and faster is harder, capped so that after the stretch below the largest nudge is about a fifth of a level. Speed needs real timing, and most automatic captions have none, so it is measured mostly for manual captions. Of my nine reference videos, one has it, so the comparison below rests on a single video.
Netflix gives no timing for single words, so there the speed is the morae over the whole running time of the title, silences included. That runs far below the pace of speech, so it has its own scale, with normal at 2.5. I guessed that figure from YouTube videos and have not fitted it, so treat Netflix speed as a rough nudge. It is capped in the same way.
On my checks it does not help. The scale error is 0.40 with speed and 0.37 without, and the order is unchanged. I am keeping it anyway, because speed is plainly part of how hard a video is to follow.
nudge = clamp( (6.5 − rate) × 0.25,
−0.1, +0.1 )
0 when speed is not measured 6.5 sits near the middle of the speeds I measured, most of which fall between about 5.4 and 8.6. It is not a published norm. Timing counts as real when at least 70% of the captions carry it and they run past 30 seconds. Both figures are judgements.
From score to level
Blend
Vocabulary carries half the weight, kanji 30% and grammar 20%. The three climb together from N5 to N1, so the data cannot tell one split from another: a broad band of weights fits about equally well, and 50/30/20 is my choice within it. If a signal is missing, the others share its weight. A video with too few kanji is judged on vocabulary and grammar.
difficulty = 0.5 × vocabulary
+ 0.3 × kanji
+ 0.2 × grammar
raw = 6 − difficulty + speed nudge Stretch
The raw scores of an easy video and a hard one sit about two levels apart, because easy words dominate all speech. Read straight, nearly everything would come out between N2 and N4. So the raw score is stretched across the full range and clamped at the ends.
I did not choose 2.26 and −2.62 by hand. They are the straight line that best maps the raw scores of my nine reference videos onto the levels I judged for them. The slope is above 2 because raw scores cover so little of the scale. It multiplies any wobble in the raw score too, which is why short videos are less steady than the numbers suggest.
final = clamp( 2.26 × raw − 2.62, 1, 5 )
Level
The level is the final score rounded to the nearest whole level. If the score sits more than 0.3 from that level, the neighbour is shown too, so the label reads N2–N3. Near a level, one label. Between two, both.
The 0.3 is a design choice, not a fitted number. It gives a single label 60% of the span around each level and two labels the 40% between. A smaller margin would make the label hedge more often.
When there is not enough to rate
With fewer than 300 listed word tokens, repeats counted, there is no level. The label reads JLPT unrated and the hover still shows the counts and the reason. The reason is a code, so other causes can be added without changing the label.
The 300 is a judgement. Clips of about 110 tokens missed their stated level badly, and a score moves by about 0.3 of a level at 300 to 450 tokens against 0.2 or less above that. A higher floor would leave many ordinary ten-minute videos unrated.
How far to trust it
Only the words actually said count, and a short video says few of them. To see how much that matters I resampled the captions of about 60 real videos, caption by caption, rescored them and recorded the spread.
That table measures one thing: how much the score moves with a different slice of the same video. It does not measure whether the score is right. A bias in the method does not shrink with more words.
The 0.40 error on my nine reference videos is not a forecast either. Those are the videos the stretch was fitted to, so it is the best the method can do on them, and it will be worse on new ones. I have not yet tested it on videos I judged before scoring them.
Past sample size, the estimate does not see register, sentence length, topic, accent, background noise or how clearly someone speaks. A video that uses easy words in a hard way, or hard words clearly, can land a level away from how it feels to follow.
Where it is weakest
At the ends. On listening exams N5 and N4 both clamp to N5, and N2 and N1 sit close together on every signal. Spoken exam dialogue stays in everyday words even at the top. The label separates easy from hard well. It separates neighbours at either end poorly, and it does not say so. A score pinned at the end sits well clear of a boundary, so it shows a single confident N5 or N1 where the middle levels are the ones that hedge. The hedge is weakest where the method is.
| Listed word tokens | Typical wobble of the score |
|---|---|
| 300 to 450 | about ±0.3 of a level |
| 450 to 1,000 | about ±0.2 |
| 1,000 to 2,000 | about ±0.1 |
| over 2,000 | about ±0.07 |
Wobble is the standard deviation of the resampled score, measured for scores away from the N5 and N1 ends, where the clamp hides some of the spread. Automatic captions wobble a little more than manual ones: at 300 to 700 tokens, about ±0.3 against ±0.26.
How I checked it
There are no official levels for YouTube videos, so I used two small sets.
Nine videos set the scale: learner and kids’ shows, lectures and a novel read aloud, with levels I judged myself. They fix the stretch and test the obvious cases, that an easy video reads easy and a lecture reads N1. The error on them is 0.40 of a level.
Thirty-five listening tests check the order: past JLPT listening exams, practice tests and teaching videos labelled with a level, from 20 channels. Their absolute level does not match the scale, because spoken exam dialogue stays in everyday words even at N4 and N3. But harder tests should score harder, and the rank correlation between stated level and score is 0.92.
Neither set is held out. I chose the weights and bounds against the first and checked the order against the second, so the numbers are an informed guess, not a calibration against official levels. Change any one of them a little and the results move a little, which the constants table shows.
| Stated level | Videos | Words that are N5 | Kanji signal | N3+ grammar per 1,000 | Score |
|---|---|---|---|---|---|
| N5 | 6 | 80% | 2.4 | 8 | 5.0 |
| N4 | 6 | 74% | 2.8 | 20 | 5.0 |
| N3 | 8 | 63% | 3.2 | 30 | 4.4 |
| N2 | 6 | 53% | 3.6 | 33 | 3.1 |
| N1 | 7 | 50% | 3.7 | 33 | 2.8 |
The listening tests, by stated level, on the scale where 5 is N5 and 1 is N1. N5 and N4 exams both clamp to N5, though unclamped the N5 exams sit about half a level above N4. Vocabulary alone cannot tell N5 from N4 or N2 from N1 on this material. Kanji and grammar separate the lower levels. N2 and N1 stay close on every signal.
The constants
Where each number comes from, and what happens if it changes. Scale error is the root-mean-square gap, in levels, between the score and the level I judged on the nine reference videos. Every scale-error figure here is computed with the speed nudge off, which is why the best rows read 0.4 and not the 0.40 quoted elsewhere, and the stretch is refitted for each value tried. Nine videos is few: read differences of less than about 0.1 as noise.
| Name | Value | Origin | What it controls, and what changing it does |
|---|---|---|---|
COVERAGE | 0.93 | Fitted | The share of what is said that the level has to cover. Scale error is about 0.4 from 0.90 to 0.93 and about 0.5 at 0.97 and at 0.85. Nine videos cannot separate 0.90 from 0.93. |
KANJI_WEIGHT | 0.30 | Fitted | How much the kanji signal counts. Scale error is about 0.4 anywhere from none to 0.5. Nine videos cannot say where in that range the weight belongs. 0.3 fitted lowest, by a hair. |
GRAMMAR_WEIGHT | 0.20 | Fitted | How much the grammar signal counts. Scale error is 0.5 with none and about 0.4 from 0.1 to 0.4. 0.2 and 0.3 cannot be told apart. |
Grammar bounds | 10, 110 | Observed | Patterns per 1,000 tokens that count as simple and as complex, read off the data. Bounds nearby give similar results. |
RAW_SCALE, RAW_OFFSET | 2.26, −2.62 | Fitted | The stretch: a least-squares line through the levels I judged. |
Kanji stretch | 1.5, 1.8 | Observed | Puts the kanji average on the vocabulary scale, from the ranges on my first test texts. |
SPEED_MAX | 0.10 | Judgement | The largest speed nudge on the raw scale, about 0.23 of a level after the stretch. |
RATE_NORMAL, RATE_SWING | 6.5, 0.25 | Judgement | Normal speech speed in morae a second, and the levels per mora a second away from it. The cap is reached at 0.4 morae a second off normal. |
Netflix pace, normal | 2.5 | Judgement | On Netflix, captions carry no word timing, so speed is morae over the whole running time, with normal at 2.5 morae a second. A starting guess from how whole-video pace ran on YouTube, not fitted. The cap on the nudge is the same. |
MIN_TOKENS | 300 | Judgement | The fewest listed word tokens that can be rated. |
MIN_KANJI | 15 | Judgement | The fewest distinct kanji for the kanji signal. With fewer, a handful of kanji sets the average. |
Band margin | 0.3 | Judgement | How far from a level the score can sit before both neighbours are shown. |
Fitted means chosen by search to match the levels I judged. Observed means read off ranges in the data. Judgement means picked by reasoning, with no data behind it.
What it is built on
Word and kanji levels come from Jonathan Waller’s JLPT lists at tanos.co.uk, as packaged by the yomitan-jlpt-vocab and kanji-data projects, with JMdict and KANJIDIC. Grammar patterns come from the grammar points in OpenJLPT, and their levels follow common JLPT preparation materials. Both sets of levels are unofficial. Captions are split into words by kuromoji.js, which runs in your browser. The word and grammar data are shared under CC BY-SA 4.0, with the credits in the extension’s LICENSES file.
Treat the label as a compass. It points the right way. How far to trust the last half level, I do not yet know.
The ruleset in a few lines
words = content words in the captions, by dictionary form, with how often each is said
level(w) = easiest level on the lists for any spelling of w
ignore kana-only words listed N1 or N2; resolve お/ご prefixes and potential verbs
said[L] = times a word of level L is said, L = N5..N1
if listed word tokens < 300: return unrated
vocabulary = point where the running share of said[] reaches 0.93, counting N5 up to N1, fractional inside the level
kanji = clamp(1 + (mean kanji difficulty − 1.5) × 1.8, 1, 6) if distinct kanji ≥ 15
grammar = 1 + 4 × logscale(patterns per 1,000 tokens, 10 → 110) N3, N2 and N1 patterns
difficulty = 0.5 × vocabulary + 0.3 × kanji + 0.2 × grammar (missing signals share their weight)
raw = 6 − difficulty + clamp((6.5 − rate) × 0.25, ±0.1) (no nudge if speed is unknown)
final = clamp(2.26 × raw − 2.62, 1, 5)
level = round(final)
lo = level − 1 if final − level < −0.3 else level
hi = level + 1 if final − level > +0.3 else level
label = "JLPT " + ("~" if automatic captions) + (lo == hi ? Nlevel : Nlo–Nhi)