Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ການກຳນົດຊະນິດຂອງຄຳ (Part-of-Speech Tagging) ສໍາລັບພາສາລາວ

ໂພສເມື່ອ # Natural Language Processing # POS Tagging # Machine Learning # Deep Learning

ການກຳນົດຊະນິດຂອງຄຳ (Part-of-Speech Tagging) ສໍາລັບພາສາລາວ

ພາສາລາວເປັນພາສາທີ່ອຸດົມສົມບູນ ແລະ ມີເອກະລັກສະເພາະຕົວ ແຕ່ໃນຂະນະດຽວກັນກໍມີຄວາມທ້າທາຍສູງໃນວຽກງານປະມວນຜົນພາສາທຳມະຊາດ (NLP). ຫນຶ່ງໃນຂັ້ນຕອນພື້ນຖານແຕ່ສຳຄັນທີ່ສຸດໃນການສ້າງໃຫ້ຄອມພິວເຕີເຂົ້າໃຈພາສາລາວຢ່າງເລິກເຊິ່ງນັ້ນຄືການເຮັດ Part-of-Speech (POS) Tagging ຫຼື ການລະບຸຊະນິດຂອງຄຳ ເຊັ່ນ: ຄຳນາມ (Noun), ຄຳກຳມະ (Verb) ແລະ ຄຳຄຸນນາມ (Adjective).

ສຳລັບນັກພັດທະນາທີ່ເນັ້ນໜັກໄປທາງ AI, ຫາກຕ້ອງການຈະສ້າງລະບົບສະກັດຂໍ້ມູນລູກຄ້າສຳລັບທຸລະກິດ SME, ການສ້າງ Chatbot ຕອບຄຳຖາມ, ຫຼື ລະບົບແປພາສາ, ການມີ POS Tagger ທີ່ມີຄວາມແມ່ນຍໍາສູງແມ່ນກຸນແຈສຳຄັນທີ່ຂາດບໍ່ໄດ້. ໃນບົດຄວາມນີ້, ເຮົາຈະມາເຈາະເລິກເຖິງສະຖາປັດຕະຍະກຳຂັ້ນສູງ ໃນການສ້າງໂມເດວແທັກຄຳສຳລັບພາສາລາວ.

ຄວາມທ້າທາຍຂອງພາສາລາວໃນວຽກງານ POS Tagging

ກ່ອນທີ່ຈະລົງເລິກເຖິງໂມເດວ, ລອງມາເບິ່ງລັກສະນະສະເພາະຕົວຂອງພາສາລາວທີ່ເຮັດໃຫ້ການເຮັດ POS Tagging ກາຍເປັນໂຈດທີ່ຊັບຊ້ອນ:

ສະຖາປັດຕະຍະກຳຂັ້ນສູງ: ໂມເດວ BiLSTM-CRF

ເພື່ອແກ້ໄຂບັນຫາທີ່ກ່າວມາ, ວິທີການ State-of-the-Art ສຳລັບ Sequence Tagging ທີ່ພິສູດແລ້ວວ່າໄດ້ຜົນດີ ແມ່ນການໃຊ້ Deep Learning ດ້ວຍສະຖາປັດຕະຍະກຳ Bidirectional LSTM ຮ່ວມກັບ Conditional Random Fields (BiLSTM-CRF).

  1. BiLSTM: ປຽບເໝືອນການອ່ານໜັງສືຈາກຊ້າຍໄປຂວາ (Forward) ແລະ ຂວາໄປຊ້າຍ (Backward) ເພື່ອທົບທວນຄວາມໝາຍຂອງປະໂຫຍກ. ມັນຈະຊ່ວຍເຂົ້າລະຫັດຄຳ (Encoding) ໂດຍຮຽນຮູ້ບໍລິບົດອ້ອມຂ້າງທັງໝົດໄດ້ຢ່າງສົມບູນ.
  2. CRF: ຊ່ວຍຮຽນຮູ້ກົດເກນການລຽງລຳດັບ POS Tag (Sequence Constraints) ເຊັ່ນ: ໃນພາສາລາວ ໂອກາດທີ່ “ຄຳຄຸນນາມ” ຈະຕາມຫຼັງ “ຄຳນາມ” ແມ່ນມີສູງ (ຕົວຢ່າງ: ເຂົ້າປຽກ(Noun) ແຊບ(Adj)) ແຕ່ເກືອບຈະບໍ່ມີໂອກາດເລີຍທີ່ຄຳບຸພະບົດ (Preposition) ຈະຢູ່ທ້າຍປະໂຫຍກສຸດ.

ທິດສະດີທາງຄະນິດສາດຂອງ CRF (CRF Mathematical Concept)

ສຳລັບລຳດັບຄຳເຂົ້າ X=(x1,x2,...,xn)X = (x_1, x_2, ..., x_n) ແລະ ລຳດັບແທັກທີ່ຄາດເດົາ y=(y1,y2,...,yn)y = (y_1, y_2, ..., y_n), ຄະແນນລວມ (Score) ໃນເຄືອຂ່າຍ CRF ຖືກຄຳນວນດັ່ງນີ້:

Score(X,y)=i[A[yi1,yi]+P[i,yi]]\text{Score}(X, y) = \sum_{i} \left[ A[y_{i-1}, y_i] + P[i, y_i] \right]

ການສ້າງໂມເດວດ້ວຍ PyTorch (Implementation)

ລອງມາເບິ່ງວິທີສ້າງໂຄງຮ່າງ Model ດ້ວຍ PyTorch ສຳລັບ Lao POS Tagging:

import torch
import torch.nn as nn

class BiLSTM_CRF(nn.Module):
    def __init__(self, vocab_size, tagset_size, embedding_dim, hidden_dim):
        super(BiLSTM_CRF, self).__init__()
        self.embedding_dim = embedding_dim
        self.hidden_dim = hidden_dim
        self.vocab_size = vocab_size
        self.tagset_size = tagset_size

        # Embedding Layer ສຳລັບພາສາລາວ
        self.word_embeds = nn.Embedding(vocab_size, embedding_dim)

        # BiLSTM Layer ຮັບ embedding ແລະ ວິເຄາະບໍລິບົດທັງສອງທິດທາງ
        self.lstm = nn.LSTM(embedding_dim, hidden_dim // 2,
                            num_layers=1, bidirectional=True, batch_first=True)

        # Linear Layer ປ່ຽນ hidden dimension ໄປເປັນຂະໜາດຂອງ tags (ເຊັ່ນ NOUN, VERB, ADJ)
        self.hidden2tag = nn.Linear(hidden_dim, tagset_size)

        # CRF Transition Matrix 
        # (ໝາຍເຫດ: ໃນການໃຊ້ງານຈິງແນະນຳໃຫ້ໃຊ້ Library ເຊັ່ນ pytorch-crf ເພື່ອຄຳນວນ Viterbi Decoding ຢ່າງສົມບູນ)
        self.transitions = nn.Parameter(torch.randn(tagset_size, tagset_size))

    def forward(self, sentence):
        # 1. ປ່ຽນຊຸດຄຳເປັນ Dense Vectors
        embeds = self.word_embeds(sentence)
        
        # 2. ເອົາຜ່ານ BiLSTM 
        lstm_out, _ = self.lstm(embeds)
        
        # 3. ໄດ້ຮັບ Emission scores (ຕົວແປ P ກ່ອນເຂົ້າສົມຜົນ CRF)
        lstm_feats = self.hidden2tag(lstm_out)
        
        return lstm_feats

ການກຽມຂໍ້ມູນການເຝິກສອນທີ່ສະທ້ອນບໍລິບົດຂອງລາວ (Training Data Structure)

ຂໍ້ມູນທີ່ໃຊ້ໃນການເຝິກສອນ Model ຈະຕ້ອງຜ່ານການຕັດຄຳ ແລະ ກຳນົດແທັກທີ່ຖືກຕ້ອງ. ຕົວຢ່າງປະໂຫຍກເຊັ່ນ “ນ້ຳຂອງບົກແຫ້ງໃນລະດູແລ້ງ” ຫຼື “ການສັນຈອນໃນນະຄອນຫຼວງວຽງຈັນຕິດຂັດຫຼາຍ” ສາມາດຈັດຮູບແບບ Tuple ດັ່ງນີ້:

training_data = [
    (
        ["ນ້ຳຂອງ", "ບົກແຫ້ງ", "ໃນ", "ລະດູແລ້ງ"],
        ["PROPN", "VERB", "ADP", "NOUN"]
    ),
    (
        ["ການສັນຈອນ", "ໃນ", "ນະຄອນຫຼວງວຽງຈັນ", "ຕິດຂັດ", "ຫຼາຍ"],
        ["NOUN", "ADP", "PROPN", "VERB", "ADV"]
    )
]

(PROPN = Proper Noun (ຄຳນາມຊີ້ສະເພາະ), ADP = Adposition, ADV = Adverb)

ການຍົກລະດັບໂມເດວດ້ວຍ Character-Level Convolution

ເນື່ອງຈາກພາສາລາວມີຄຳສັບເກີດໃໝ່ ຫຼື ຄຳທັບສັບເກີດຂຶ້ນຢ່າງຕໍ່ເນື່ອງ (Out-Of-Vocabulary: OOV) ເຊັ່ນ: “ສະມາດໂຟນ” ຫຼື “ອິນເຕີເນັດ”, ການລວມເອົາແຫຼ່ງຮຽນຮູ້ລະດັບຕົວອັກສອນ ຫຼື ພະຍາງ (Character/Syllable-level embeddings) ດ້ວຍ 1D Convolutional Neural Network (CNN) ເຂົ້າໃນສະຖາປັດຕະຍະກຳຂ້າງເທິງ ຈະຊ່ວຍໃຫ້ໂມເດວຈັບຮູບແບບການສະກົດຄຳໄດ້.

ເຖິງແມ່ນວ່າໂມເດວຈະບໍ່ເຄີຍພົບຄຳວ່າ “ດິຈິຕອລ” ມາກ່ອນ, ແຕ່ດ້ວຍໂຄງສ້າງການລຽງຕົວອັກສອນຍ່ອຍ ທີ່ຄ້າຍຄືກັບຄຳທັບສັບອື່ນໆ ໂມເດວຈະສາມາດຄາດເດົາໄດ້ຖືກຕ້ອງຫຼາຍຂຶ້ນວ່າຄຳນີ້ຄວນຈະເຮັດໜ້າທີ່ເປັນ Noun ຫຼື Adjective ເຊິ່ງຊ່ວຍເພີ່ມຄ່າ F1-score ຂຶ້ນໄດ້ຢ່າງຊັດເຈນໃນການໃຊ້ງານເທິງໂລກຄວາມເປັນຈິງ.

ສິ່ງທີ່ຄວນຈື່ (Key Takeaways)

ສະຫຼຸບ

ການພັດທະນາລະບົບ Part-of-Speech Tagging ສຳລັບພາສາລາວ ໃນລະດັບຂັ້ນສູງນັ້ນ ບໍ່ແມ່ນພຽງແຕ່ການນຳເອົາ Algorithm ຂອງພາສາອື່ນມາໃຊ້ແບບກົງໄປກົງມາ ແຕ່ມັນທ້າທາຍໃຫ້ນັກພັດທະນາຕ້ອງເຊື່ອມໂຍງເຂົ້າກັບຄຸນລັກສະນະຂອງພາສາທີ່ເປັນ Isolating Language ແລະ ບໍ່ມີການແບ່ງວັກຕອນເຂົ້າຫາກັນ. ດ້ວຍການນຳໃຊ້ພະລັງຂອງເຄືອຂ່າຍ BiLSTM-CRF ຮ່ວມກັບການກະກຽມຂໍ້ມູນການເຝິກສອນຢ່າງປະນີດ ຕະຫຼອດຈົນເຖິງການໃຊ້ເຕັກນິກ Character-embedding, ພວກເຮົາສາມາດສ້າງລະບົບຕິດແທັກຄຳທາງຄອມພິວເຕີທີ່ຖືກຕ້ອງແລະຊັດເຈນ ເປີດທາງໃຫ້ແກ່ການພັດທະນາຜະລິດຕະພັນ AI ທີ່ເຂົ້າໃຈພາສາລາວໄດ້ເຖິງແກ່ນແທ້ໃນອະນາຄົດ.