Malayalam Tokenizers¶
This notebook explores several existing tokenizers for the Malayalam language. Currently, there is no publicly available gold-standard dataset for Malayalam tokenization.
I found one rule based tokenization via indic nlp library, and several model-integrated tokenizers to sample how effectively they segment Malayalam text.
In [1]:
Copied!
samples = [
"മലയാളം ഇന്ത്യയിലെ ഒരു ദ്രാവിഡഭാഷയാണ്.",
"ഇത് കേരള സംസ്ഥാനത്തിന്റെ ഔദ്യോഗിക ഭാഷയാണ്.",
"ഞാൻ ഇന്ന് സിനിമ കാണാൻ പോയി.",
"അവൻ മലയാളം നല്ല രീതിയിൽ സംസാരിക്കുന്നു.",
]
samples = [
"മലയാളം ഇന്ത്യയിലെ ഒരു ദ്രാവിഡഭാഷയാണ്.",
"ഇത് കേരള സംസ്ഥാനത്തിന്റെ ഔദ്യോഗിക ഭാഷയാണ്.",
"ഞാൻ ഇന്ന് സിനിമ കാണാൻ പോയി.",
"അവൻ മലയാളം നല്ല രീതിയിൽ സംസാരിക്കുന്നു.",
]
In [2]:
Copied!
import os
from indicnlp import common
from indicnlp.normalize.indic_normalize import IndicNormalizerFactory
from indicnlp.tokenize import indic_tokenize
INDIC_NLP_RESOURCES = os.path.join(os.getcwd(), "resources/indic_nlp_resources")
common.set_resources_path(INDIC_NLP_RESOURCES)
factory = IndicNormalizerFactory()
indic_normalizer = factory.get_normalizer("ml")
def tokenize_with_indicnlp(text, normalizer=indic_normalizer):
if normalizer:
text = normalizer.normalize(text)
return indic_tokenize.trivial_tokenize(text)
import os
from indicnlp import common
from indicnlp.normalize.indic_normalize import IndicNormalizerFactory
from indicnlp.tokenize import indic_tokenize
INDIC_NLP_RESOURCES = os.path.join(os.getcwd(), "resources/indic_nlp_resources")
common.set_resources_path(INDIC_NLP_RESOURCES)
factory = IndicNormalizerFactory()
indic_normalizer = factory.get_normalizer("ml")
def tokenize_with_indicnlp(text, normalizer=indic_normalizer):
if normalizer:
text = normalizer.normalize(text)
return indic_tokenize.trivial_tokenize(text)
In [3]:
Copied!
sample = "മലയാളം ഒരു ദ്രാവിഡ ഭാഷയാണ്."
tokenize_with_indicnlp(sample), tokenize_with_indicnlp(sample, normalizer=indic_normalizer)
sample = "മലയാളം ഒരു ദ്രാവിഡ ഭാഷയാണ്."
tokenize_with_indicnlp(sample), tokenize_with_indicnlp(sample, normalizer=indic_normalizer)
Out[3]:
(['മലയാളം', 'ഒരു', 'ദ്രാവിഡ', 'ഭാഷയാണ്', '.'], ['മലയാളം', 'ഒരു', 'ദ്രാവിഡ', 'ഭാഷയാണ്', '.'])
Transformers¶
In [4]:
Copied!
import warnings
warnings.filterwarnings("ignore")
import warnings
warnings.filterwarnings("ignore")
In [5]:
Copied!
from transformers import AutoTokenizer
sarvam_tok = AutoTokenizer.from_pretrained("sarvamai/sarvam-1", trust_remote_code=True)
indicbert_tok = AutoTokenizer.from_pretrained("ai4bharat/IndicBERTv2-MLM-only")
muril_tok = AutoTokenizer.from_pretrained("google/muril-base-cased")
mbert_tok = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")
from transformers import AutoTokenizer
sarvam_tok = AutoTokenizer.from_pretrained("sarvamai/sarvam-1", trust_remote_code=True)
indicbert_tok = AutoTokenizer.from_pretrained("ai4bharat/IndicBERTv2-MLM-only")
muril_tok = AutoTokenizer.from_pretrained("google/muril-base-cased")
mbert_tok = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")
In [6]:
Copied!
tokenization_map = {
'IndicNLP Trivial Tokenizer': tokenize_with_indicnlp,
'Sarvam/sarvam-1':sarvam_tok.tokenize,
'ai4bharat/IndicBERTv2-MLM-only':indicbert_tok.tokenize,
'google/muril-base-cased':muril_tok.tokenize,
'bert-base-multilingual-cased':mbert_tok.tokenize,
}
tokenization_map = {
'IndicNLP Trivial Tokenizer': tokenize_with_indicnlp,
'Sarvam/sarvam-1':sarvam_tok.tokenize,
'ai4bharat/IndicBERTv2-MLM-only':indicbert_tok.tokenize,
'google/muril-base-cased':muril_tok.tokenize,
'bert-base-multilingual-cased':mbert_tok.tokenize,
}
Display Tokenized Output¶
In [7]:
Copied!
import pandas as pd
token_data = []
for name, func in tokenization_map.items():
tokens = func(sample)
token_data.append({
"tokenizer": name,
"tokens": tokens,
"num_tokens": len(tokens)
})
df_tokens = pd.DataFrame(token_data)
df_tokens
import pandas as pd
token_data = []
for name, func in tokenization_map.items():
tokens = func(sample)
token_data.append({
"tokenizer": name,
"tokens": tokens,
"num_tokens": len(tokens)
})
df_tokens = pd.DataFrame(token_data)
df_tokens
Out[7]:
| tokenizer | tokens | num_tokens | |
|---|---|---|---|
| 0 | IndicNLP Trivial Tokenizer | [മലയാളം, ഒരു, ദ്രാവിഡ, ഭാഷയാണ്, .] | 5 |
| 1 | Sarvam/sarvam-1 | [▁മല, യാള, ം, ▁ഒരു, ▁ദ, ്ര, ാവി, ഡ, ▁ഭാഷ, യാണ്... | 11 |
| 2 | ai4bharat/IndicBERTv2-MLM-only | [മലയാളം, ഒരു, ദ്രാവി, ##ഡ, ഭാഷ, ##യാണ്, .] | 7 |
| 3 | google/muril-base-cased | [മലയാളം, ഒരു, ദ്രാവിഡ, ഭാഷയാണ്, .] | 5 |
| 4 | bert-base-multilingual-cased | [മ, ##ല, ##യ, ##ാളം, ഒരു, ദ, ##്, ##ര, ##ാ, ##... | 14 |