Monday, July 8, 2019

Cycle 3: Naive word segmentation (that works)


This was a complete surprise!
Earlier, I had managed to devise code for syllable segmentation of Myanmar text using tokenization with the “quanteda” R-package plus R implementation of regex. Then another implementation of regex on the the resulting syllables by using a Myanmar wordlist for word-segmentation. I think the set of codes for syllable segmentation is quite dependable. However, the quality of word segementation could be improved when more complete wordlists become accessible.

The tortoise code

For this post, I started out by trying to figure out some way to generate sentence ending syllables faster than I have been doing. That method consisted of (i) the syllabification of the sentences using the approach mentioned in the previous paragraph and then, (ii) creating bigrams, and (iii) collecting the last two syllables. Now, you can see that for analyzing sentence endings I don’t need to syllabify the whole sentences; syllabifying a few characters at the end of sentences would do!
To test this idea out, I extracted 15 characters from the sentence ends for the whole set of 306,405 sentences. The test syllabification of just 100 of them took over 20 seconds. That means handling the entire set of sentences would take more that 17 hours! How could I improve that? I had already made the excution of code faster by using parallel processing, so I was completely lost.

Not my brainwave

Out of my despair I experimented with my code. Before, I built my syllables using characters tokenized “as characters” as the base. Last time I erroneously typed “word” instead of “character”. Like everyone, I knew that a word is delimited by space and Myanmar text doesn’t have words defined like that. So, using standard NLP software to tokenize Myanmar language text into “word” would be just idiotic, I always thought.
Now, look at the result when I did the unthinkable.
I tokenized the whole of 306,405 sentences.
library(quanteda)
system.time(
  x100_itNS5.w <- tokens(x100_itN_Sen.5,"word")
)
   user  system elapsed 
  41.23    0.90   42.14 
It took just 42 seconds! Below I’m showing you a sample of ten original sentences.
length(x100_itNS5.w)
[1] 306405
set.seed(6719)
s10 <- sample(1:306405, 10)
cat(x100_itN_Sen.5[s10])
ဂစ္ဆတိ ဟုသောပုဒ်သည် အရင်းခံအားဖြင့် ဂမုဓာတ်၊ တိဝိဘတ်တို့ဖြင့် ဆက်သွယ်ပေါင်းစပ်ထားသောပုဒ်ဖြစ်သည်။ နိုင်ငံရေး စည်းရုံးမှုကြီးတစ်ရပ် အနေနှင့်သော် ခရစ် ၁၉၄၄ ခုနှစ် ဩဂုတ်လတွင် ဗိုလ်ချုပ်အောင်ဆန်းနှင့် အပေါင်းပါ တစ်စုတို့က ခေါင်းဆောင်လျက် ဖက်ဆစ် တိုက်ဖျက်ရေး ပြည်သူ့လွတ်လပ်ရေး အဖွဲ့ချုပ်ကို ဖွဲ့စည်းလိုက်ကြသည်။ ၎င်းတို့မှာ-# အိန္ဒိယပြည်၊ ဘုံဘိုင်မြောက်ပိုင်း၊ နမ္မဒါမြစ်ထဲ၌ ခြေတော်ရာတစ်ဆူ။ သိပ္ပံပညာရှင်တို့သည် အရာဝတ္ထုတို့ကို အလွန်နိမ့်သော အပူချိန်အထိ အအေးခံရာတွင် လေဆာ ကို အသုံးပြု၍ အက်တမ် တို့ကို အရှိန်လျော့ချကြသည်။ ဗားရှင်းများကို မြှင့်တင်ရင်း များစွာသောကလပ်စ်နှင့် များသည် အခြေခံ အသုံးချ ကလပ်စ် အစုအဝေး ထဲကို ပါဝင်လာခဲ့ကြ၏။ ကိုယ်ပိုင် သံစဉ် အပုဒ်ရေပေါင်း ၂၀ဝ ကျော် ရေးဖွဲ့ခဲ့သည်။ ဝက်သားအဆီများ ကောက်ညှင်းအတွင်း စိမ့်ဝင်ပြီး အသားများနူးလာချိန်တွင် ကောက်ညှင်းထုပ်ကို ကျက်သောအနေအထားနှင့် တွေ့ပြီး အရသာရှိလှသော ဝက်သားကောက်ညှင်းစားစရာ အမယ်တစ်မျိုးကို ရရှိပေလိမ့်မည်။ ထိုတော်လှန်ရေး၏ ထိရောက်စွာ ဆောင်ရွက်မှုကြောင့် မဟာမိတ်တို့သည် မြန်မာပြည်ကို ပြန်လည်တိုက်ခိုက် သိမ်းပိုက်ရာ၌ လွယ်ကူလျင်မြန်ခဲ့လေသည်။ ဗမာပြည်နယ်စပ်သို့ တရုတ်ဖြူများဝင်ရောက် လှုပ်ရှားမှုကို အကဲဖြတ်ရာတွင် အမေရိကန်ကသွယ်ဝိုက် သောနည်းအားဖြင့် ငါတို့အားအကူအညီပေးလာပြီဟု အစပိုင်းတွင် ငါတို့ထင်မှတ်ခဲ့ပေသည်။ မြန်မာတို့၏ ဓလေ့ထုံးစံနှင့် ရိုးရာ အစဉ်အလာများကိုလည်း မပျောက်ကွယ်စေရန် ရည်ရွယ်၍ …ဗုဒ္ဓဝေယျာဝစ္စအသင်းများဖွဲ့လျက် သီတင်းနေ့များ၌ ဥပုသ်ဆောက်တည်ခြင်း၊ ဆွမ်းလောင်းခြင်းတို့ကိုပြုလုပ်နိုင်သည်။
And then the ten sentences segmented into “words”.
Here, you see that “ဂစ္ဆတိ is broken up into its component syllables “ဂ စ္ ဆ တိ”. But that is not true with every stacked syllables. We see that “အိန္ဒိယ” remains unchanged! As for others, every syllables in our language carry a meaning and in that sense word or syllable produced by “word” segmentation, I think, is fine.
With this setting, you can easily collect one syllable/or a syllable-group (word) to analyze sentence endings. Here if I would like to uniformly use syllables only for sentence ending analysis, I can use my syllabification code to do that for a combination of just a few syllables. Unless the sentence in question is a Pali sentence written in Myanmar script, I guess you won’t get the kind of stacked consonant problem noted earlier with sentence endings.
cat(paste0(x100_itNS5.w[s10]))
ဂ စ္ ဆ တိ ဟု သော ပုဒ် သည် အရင်း ခံ အားဖြင့် ဂ မု ဓာတ် ၊ တိ ဝိဘတ် တို့ ဖြင့် ဆက် သွယ် ပေါင်းစပ် ထား သော ပုဒ် ဖြစ်သည် ။ နိုင်ငံရေး စည်းရုံး မှု ကြီး တစ်ရပ် အနေ နှင့် သော် ခရစ် ၁၉၄၄ ခု နှစ် ဩဂုတ်လ တွင် ဗိုလ်ချုပ် အောင် ဆန်း နှင့် အပေါင်းပါ တစ်စု တို့ က ခေါင်းဆောင် လျက် ဖက် ဆစ် တိုက် ဖျက် ရေး ပြည် သူ့ လွတ်လပ်ရေး အဖွဲ့ ချုပ် ကို ဖွဲ့စည်း လိုက် ကြ သည် ။ ၎ င်း တို့ မှာ - # အိန္ဒိယ ပြည် ၊ ဘုံ ဘိုင် မြောက် ပိုင်း ၊ န မ္ မ ဒါ မြစ် ထဲ ၌ ခြေတော်ရာ တစ် ဆူ ။ သိပ္ပံပညာ ရှင် တို့သည် အရာ ဝတ္ထု တို့ ကို အလွန် နိမ့် သော အပူချိန် အထိ အအေးခံ ရာတွင် လေ ဆာ ကို အသုံးပြု ၍ အက်တမ် တို့ ကို အရှိန် လျော့ ချ ကြ သည် ။ ဗား ရှင်း များ ကို မြှင့် တင် ရင်း များ စွာ သောက လ ပ် စ် နှင့် များသည် အခြေခံ အသုံးချ က လ ပ် စ် အစုအဝေး ထဲ ကို ပါဝင် လာ ခဲ့ ကြ ၏ ။ ကိုယ်ပိုင် သံစဉ် အပုဒ် ရေ ပေါင်း ၂၀ဝ ကျော် ရေး ဖွဲ့ ခဲ့ သည် ။ ဝက်သား အဆီ များ ကောက်ညှင်း အတွင်း စိမ့် ဝင် ပြီး အသား များ နူး လာ ချိန် တွင် ကောက်ညှင်း ထုပ် ကို ကျက် သော အနေအထား နှင့် တွေ့ ပြီး အရသာ ရှိ လှ သော ဝက်သား ကောက်ညှင်း စားစရာ အမယ် တစ် မျိုး ကို ရရှိ ပေ လိမ့်မည် ။ ထို တော်လှန်ရေး ၏ ထိ ရောက် စွာ ဆောင်ရွက် မှု ကြောင့် မဟာမိတ် တို့သည် မြန်မာ ပြည် ကို ပြန်လည် တိုက်ခိုက် သိမ်းပိုက် ရာ ၌ လွယ်ကူ လျင်မြန် ခဲ့ လေ သည် ။ ဗမာ ပြည်နယ် စပ် သို့ တရုတ် ဖြူ များ ဝင် ရောက် လှုပ်ရှားမှု ကို အကဲဖြတ် ရာတွင် အ မေ ရိ ကန် က သွယ်ဝိုက် သော နည်း အားဖြင့် ငါ တို့ အား အကူအညီ ပေး လာ ပြီ ဟု အစ ပိုင်း တွင် ငါ တို့ ထင်မှတ် ခဲ့ ပေ သည် ။ မြန်မာ တို့ ၏ ဓလေ့ထုံးစံ နှင့် ရိုးရာ အစဉ်အလာ များ ကို လည်း မ ပျောက် ကွယ် စေ ရန် ရည်ရွယ် ၍ … ဗုဒ္ဓ ဝေယျာဝစ္စ အသင်း များ ဖွဲ့ လျက် သီတင်းနေ့ များ ၌ ဥပုသ် ဆောက်တည် ခြင်း ၊ ဆွမ်း လောင်း ခြင်း တို့ ကို ပြုလုပ် နိုင်သည် ။
Next, I looked at a sample of five sentences containing at least one stacked-consonants, before and after “word” segmentation using the quanteda default method.
stackedCon <- grepl("([\u1000-\u1021]\u1039[\u1000-\u1021]){1}",x100_itN_Sen.5)
cat(x100_itN_Sen.5[stackedCon][10000:10005])
သုဏာတု မေ ဘန္တေ(အာဝုသော) သံဃော စဏ္ဍာရုဒ္ဓါ ရဘသာ အဒယာလုကာ ဝိဟေသကာ မဟာစောရ ယောဓ န.အ.ဖ ရာဇာနော ပခုက္ကူ သံဃံ အမူလကေန မဟာရ ဒါနဉ္စ ဒဏ္ဍဒါနဉ္စ အဒါသိ၊ ဇီဝိတိန္ဒြိယဉ္စ ကရောတိ။ သံဃော စဏ္ဍာရုဒ္ဓါ ရဘသာ အဒယာလုကာ ဝိဟေသကာ မဟာစောရ ယောဓ န.အ.ဖ ရာဇူနံ ပတ္တံ နိက္ကုဇ္ဖတိ အသမ္ဘောဂံ သံဃေန ကရောတိ။ ယဿာ .သ္ခတော ခမတိ စဏ္ဍာ ရုဒ္ဒါ ရဘသာ အဒယာလုကာ ဝိဟေသကာ မဟာစောရ ယောဓ န.အ.ဖ ရာဇူနံ ပတ္တဿ နိက္ကုဇ္ဖနာ အသမ္ဘောဂံ သံဃေန ကရဏံ သောတုဏှဿ ယဿ နက္ခမတိသော ဘာသေယျ။ ပထမတွင် “ နမောတဿ” သုံးကြိမ်ရွတ်ပြီး “ သုဏာတုမေ ” မှ “ ဇသာ ဉ တ္တိ ” အထိ၊ အချို့ တစ်ကြိမ် တချို့ သုံးကြိမ်ရွတ်ဖတ်ကြသည်။ “ သုဏာတု မေ” မှ “သောဘာသေယျ ” အထိ အလယ်ပိုဒ်နှင့် “ နိက္ကုဇ္ဇိတော ” မှ “ ဓါရယာမိ ” အထိ အဆုံးပိုဒ်ကို သုံးကြိမ်စီ အသီးသီး ရွတ်ဖတ်ရ ဖြစ်သည်။ အခြား ကမ္မဝါများကဲ့သို့ပင် အသံ အနိမ့်အမြင့်၊ အပြင်း အပျော့၊ သိထိလ ဓနိတ ဌာန်ကရိုဏ်း “တုန်း” သဘောတရားဆန်သည့် သံစဉ်များနှင့် ရွတ်ရမည်ဖြစ်သည်။
cat(sapply(x100_itNS5.w[stackedCon][10000:10005],paste0, collapse=" "))
သု ဏာ တု မေ ဘ န္ တေ ( အာဝုသော ) သံ ဃော စ ဏ္ ဍာ ရု ဒ္ ဓါ ရ ဘ သာ အ ဒ ယာ လု ကာ ဝိ ဟေ သကာ မဟာ စောရ ယော ဓ န.အ.ဖ ရာဇာ နော ပ ခု က္ ကူ သံဃံ အမူ လ ကေ န မဟာ ရ ဒါ န ဉ္ စ ဒ ဏ္ ဍ ဒါ န ဉ္ စ အ ဒါ သိ ၊ ဇီ ဝိ တိ န္ ဒြိ ယ ဉ္ စ က ရော တိ ။ သံ ဃော စ ဏ္ ဍာ ရု ဒ္ ဓါ ရ ဘ သာ အ ဒ ယာ လု ကာ ဝိ ဟေ သကာ မဟာ စောရ ယော ဓ န.အ.ဖ ရာဇူ နံ ပ တ္ တံ နိ က္ ကု ဇ္ ဖ တိ အ သ မ္ ဘော ဂံ သံ ဃေ န က ရော တိ ။ ယဿာ . သ္ ခ တော ခ မ တိ စ ဏ္ ဍာ ရု ဒ္ ဒါ ရ ဘ သာ အ ဒ ယာ လု ကာ ဝိ ဟေ သကာ မဟာ စောရ ယော ဓ န.အ.ဖ ရာဇူ နံ ပ တ္ တဿ နိ က္ ကု ဇ္ ဖ နာ အ သ မ္ ဘော ဂံ သံ ဃေ န က ရ ဏံ သော တု ဏှဿ ယဿ န က္ ခ မ တိ သော ဘာ သေ ယျ ။ ပထမ တွင် " နမောတဿ " သုံး ကြိမ် ရွတ် ပြီး " သု ဏာ တု မေ " မှ " ဇ သာ ဉ တ္ တိ " အထိ ၊ အချို့ တစ် ကြိမ် တချို့ သုံး ကြိမ် ရွတ်ဖတ် ကြ သည် ။ " သု ဏာ တု မေ " မှ " သော ဘာ သေ ယျ " အထိ အလယ် ပိုဒ် နှင့် " နိ က္ ကု ဇ္ ဇိ တော " မှ " ဓါ ရ ယာ မိ " အထိ အဆုံး ပိုဒ် ကို သုံး ကြိမ် စီ အသီးသီး ရွတ်ဖတ် ရ ဖြစ်သည် ။ အခြား ကမ္မဝါ များ ကဲ့သို့ ပင် အသံ အနိမ့် အမြင့် ၊ အပြင်း အပျော့ ၊ သိ ထိ လ ဓနိ တ ဌာန် ကရိုဏ်း " တုန်း " သဘောတရား ဆန် သည့် သံစဉ် များ နှင့် ရွတ် ရ မည် ဖြစ်သည် ။

Conclusion

I am very much excited because the quanteda default word segmentation works contrary to the expectations for a language without word delimitation by space. Having being developed for the English language, I don’t think it would consciously include some special facilities to segment Myanmar language text into syllables/words. Much of that capability must arise from the Unicode representation of our script, I guess. But don’t believe me. Look into it yourselves, and if you are smarter explain to us how that happens!

No comments:

Post a Comment