An eojeol is analyzed as NA: diagnosing the cause and fixing it
Have you ever seen an eojeol (space-delimited word unit) come back as NA (unanalyzable) in the morphological analysis result?
This page explains step by step why Bareun outputs NA for certain eojeols and how to reduce it.
Symptoms
You see NA in the morpheme tag of the analysis result. It usually looks like this.
듣보잡/NA
NA is the "unanalyzable" tag that Bareun attaches when it could not split a string of characters into known morphemes.
Similarly, NF (estimated noun) and NV (estimated predicate) appear when the model is not confident, and NA is the case among them where
it is hard to estimate any part of speech at all.
Causes
Why does this happen? There are three typical causes.
| Cause | Description |
|---|---|
| Out-of-vocabulary word (OOV) | Words that are not in the training data or dictionaries, such as new words, slang, proper nouns, and technical terms |
| Broken word spacing | Several eojeols are stuck together, so the model cannot find the eojeol boundaries |
| Abnormal input | Eojeols mixed with typos, garbled characters, foreign languages, or special symbols |
If the morpheme's out_of_vocab value is OUT_OF_VOCAB (not registered, automatically guessed), the first cause is likely.
Fix
Checking in the following order solves most cases.
-
Check whether it is a proper noun or technical term. If it is a person's name, company name, product name, or new word, registering it in the custom dictionary is the surest fix. Add the headword to
np_set(proper noun),cp_set(compound noun), and so on withUpdateCustomDictionaryofCustomDictionaryService, and specify that dictionary name incustom_dict_namesin the analysis request. -
Check the word spacing. If an eojeol is abnormally long or several words are stuck together, turn on
auto_spacingand let it correct the spacing.{ "document": { "content": "오늘듣보잡신곡나왔대", "language": "ko_KR" }, "auto_spacing": true } -
Recheck after registering in the dictionary. For the registered word's morpheme,
out_of_vocabchanges toIN_CUSTOM_DICTandcustom_dict_nameshows the dictionary name. Check thatNAis gone.
Checklist
- Is the
out_of_vocabvalueOUT_OF_VOCAB? → Register it in the custom dictionary - Is the eojeol abnormally long? → Turn on
auto_spacing - Are typos or garbled characters mixed in? → Clean the input
Prevention and tips
- If you supplement frequently appearing domain terms in the custom dictionary ahead of time,
NA/UNKdrop greatly. - The custom dictionary detects file changes in real time and updates, so adding a word takes effect without a server restart.
Are NA and UNK different?
NA is a morpheme tag classified as "unanalyzable" at the POS tagging stage, and UNK is the unclassified state (tag=0) that was not
classified as any part of speech. Both are often caused by OOV words, so the fixes are similar.
If UNK is frequent, also see the UNK token check page.
Frequently asked questions
Q. Why is something analyzed as NA?
Because Bareun could not break the string of characters into known morphemes. The main causes are
OOV words such as new words and proper nouns, input with broken word spacing, and typos or garbled characters.
Q. How do I get rid of NA?
Register the word in the custom dictionary (np_set, cp_set, and so on) and specify the dictionary name in custom_dict_names
in the analysis request. If word spacing is the cause, try turning on auto_spacing.
Q. I registered it in the dictionary but it is still NA.
Check that you specified custom_dict_names in the analysis request and that the dictionary name is exact. For details, see
When the custom dictionary is not applied.
Q. Are NA and UNK the same?
No. NA is a morpheme tag classified as "unanalyzable" at the POS tagging stage, and UNK is the unclassified state (tag=0) that was not
classified as any part of speech. Both are often caused by OOV words, so the fixes are similar.
If UNK is frequent, also see the UNK token check page.
Q. If I put a word analyzed as NA into the dictionary, is it applied immediately?
Yes. The custom dictionary is managed through the CustomDictionaryService API (UpdateCustomDictionary), and the server watches the dictionary
directory in real time and applies changes immediately without downtime. After registering, just specify custom_dict_names
in the analysis request, and from the next request NA disappears and out_of_vocab changes to IN_CUSTOM_DICT.