Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ການສ້າງແບບຈໍາລອງຫົວຂໍ້ດ້ວຍ LDA: ການວິເຄາະໂພສໃນເວທີສົນທະນາລາວ

ໂພສເມື່ອ # NLP # Topic Modeling # Data Science

ການສ້າງແບບຈໍາລອງຫົວຂໍ້ດ້ວຍ LDA: ການວິເຄາະໂພສໃນເວທີສົນທະນາລາວ

ໃນຍຸກທີ່ຄົນລາວນຳໃຊ້ອິນເຕີເນັດ ແລະ ສື່ສັງຄົມອອນລາຍຢ່າງກວ້າງຂວາງ, ຂໍ້ມູນຂໍ້ຄວາມ (Text Data) ຈຳນວນມະຫາສານຖືກສ້າງຂຶ້ນໃນແຕ່ລະວັນ. ບໍ່ວ່າຈະເປັນການຈົ່ມເລື່ອງລົດຕິດຢູ່ແຖວໄຟແດງດົງໂດກ, ການຣີວິວລົດຊາດກາເຟປາກຊ່ອງ, ຫຼື ການອັບເດດສະຖານະການນ້ຳຂອງ. ການນັ່ງອ່ານທຸກໆໂພສເພື່ອຈັດໝວດໝູ່ແມ່ນເປັນໄປບໍ່ໄດ້ແນ່ນອນ. ນີ້ຄືຈຸດທີ່ Natural Language Processing (NLP) ແລະ ເຕັກນິກ Topic Modeling ເຂົ້າມາມີບົດບາດສຳຄັນ.

ໃນບົດຄວາມນີ້, ເຮົາຈະມາເຈາະເລິກວິທີການນຳໃຊ້ Latent Dirichlet Allocation (LDA) ເຊິ່ງເປັນອັນກໍຣິທຶມ (Algorithm) ຍອດຮິດໃນການສະກັດເອົາຫົວຂໍ້ທີ່ເຊື່ອງຊ້ອນຢູ່ໃນກຸ່ມຂໍ້ຄວາມ ໂດຍເນັ້ນການປະຍຸກໃຊ້ກັບພາສາລາວ.

Latent Dirichlet Allocation (LDA) ແມ່ນຫຍັງ?

LDA ແມ່ນໂມເດວທາງສະຖິຕິປະເພດໜຶ່ງ (Unsupervised Learning) ທີ່ໃຊ້ສຳລັບການເຮັດ Topic Modeling. ຫຼັກການເຮັດວຽກທີ່ສຳຄັນຂອງມັນມີ 2 ສົມມຸດຕິຖານຫຼັກຄື:

  1. ທຸກໆເອກະສານ (Document) ແມ່ນການປະສົມປະສານຂອງຫຼາຍໆຫົວຂໍ້ (Topics). (ຕົວຢ່າງ: ໂພສໜຶ່ງອາດຈະມີຫົວຂໍ້ກ່ຽວກັບ ວັດທະນະທຳ 70% ແລະ ການທ່ອງທ່ຽວ 30%).
  2. ທຸກໆຫົວຂໍ້ (Topic) ແມ່ນການປະສົມປະສານຂອງກຸ່ມຄຳສັບ (Words). (ຕົວຢ່າງ: ຫົວຂໍ້ “ກະສິກຳ” ອາດຈະມີຄຳວ່າ ສວນ, ປູກຝັງ, ກາເຟ, ຜົນຜະລິດ ຫຼາຍທີ່ສຸດ).

ເປົ້າໝາຍຂອງ LDA ຄືການກວດສອບວ່າພາຍໃນຂະໜາດຂໍ້ມູນທັງໝົດ ມີຫົວຂໍ້ອັນໃດແດ່ທີ່ຊ້ອນຢູ່ ແລະ ເອກະສານໃດມີອັດຕາສ່ວນຂອງຫົວຂໍ້ໃດຫຼາຍທີ່ສຸດ.

ສິ່ງທ້າທາຍຂອງພາສາລາວໃນງານ NLP

ກ່ອນຈະໄປຂຽນໂຄດ, ຂໍ້ຄວນລະວັງສຳລັບນັກພັດທະນາ (Developers) ທີ່ເຮັດ NLP ພາສາລາວຄື ພາສາຂອງເຮົາບໍ່ມີການຍະຫວ່າງ (Space) ລະຫວ່າງຄຳສັບຄືກັບພາສາອັງກິດ. ດັ່ງນັ້ນ, ຖ້າເຮົາບໍ່ເຮັດ Word Tokenization (ການຕັດຄຳ) ໃຫ້ຖືກຕ້ອງ ໂມເດວຈະບໍ່ສາມາດຮຽນຮູ້ຫຍັງໄດ້ເລີຍ. ໃນບົດຮຽນນີ້ ເຮົາຈະໃຊ້ Library laonlp ເຊິ່ງເປັນເຄື່ອງມືສຳລັບຈັດການພາສາລາວ (Lao NLP package) ໂດຍສະເພາະ.

ຂັ້ນຕອນການສ້າງໂມເດວ LDA ດ້ວຍ Python

ເຮົາຈະມາຂຽນ Python ແບບ Step-by-Step ໂດຍໃຊ້ Library ຍອດນິຍົມຄື Gensim ສຳລັບການທຳນາຍຫົວຂໍ້.

ຂັ້ນຕອນທີ 1: ຕິດຕັ້ງ Libraries ທີ່ຈຳເປັນ

ເປີດ Terminal ແລ້ວພິມຄຳສັ່ງລຸ່ມນີ້ ເພື່ອຕິດຕັ້ງ gensim (ສຳລັບສ້າງໂມເດວ) ແລະ laonlp (ສຳລັບຕັດຄຳລາວ):

pip install gensim laonlp

ຂັ້ນຕອນທີ 2: ກະກຽມຂໍ້ມູນ (Sample Dataset)

ເຮົາຈະຈຳລອງຖານຂໍ້ມູນໂພສຈາກເວທີສົນທະນາຂອງລາວ (Lao Forum Posts) ທີ່ມີຫົວຂໍ້ປະສົມກັນ ເຊັ່ນ: ການຈະລາຈອນ, ກະສິກຳ ແລະ ວັດທະນະທຳ.

# ຂໍ້ມູນຈຳລອງ (Mock Data) ຈາກເວທີສົນທະນາລາວ
posts = [
    "ມື້ນີ້ລົດຕິດຫຼາຍຢູ່ແຖວໄຟແດງດົງໂດກ ຂັບລົດຍາກແທ້ໆ",
    "ກາເຟປາກຊ່ອງປີນີ້ໄດ້ຜົນຜະລິດດີຫຼາຍ ລົດຊາດກໍແຊບເຂັ້ມຂຸ້ນ",
    "ງານບຸນພະທາດຫຼວງວຽງຈັນປີນີ້ຄົນຫຼາຍ ແລະ ມີຮ້ານຂາຍເຄື່ອງເຕັມໄປໝົດ",
    "ຢາກໃຫ້ແກ້ໄຂບັນຫາລົດຕິດໃນນະຄອນຫຼວງ ໂດຍສະເພາະຕອນເລີກການ",
    "ຊາວສວນປາກຊ່ອງກຽມເກັບກ່ຽວກາເຟສົ່ງອອກຕ່າງປະເທດ",
    "ໄປໃສ່ບາດຢູ່ງານບຸນພະທາດຫຼວງ ໄດ້ບຸນຫຼາຍ ແລະ ອະນຸລັກວັດທະນະທຳ"
]

ຂັ້ນຕອນທີ 3: ການຕັດຄຳ ແລະ ກຳຈັດ Stop Words (Preprocessing)

ໃນຂັ້ນຕອນນີ້, ເຮົາຈະດຶງເອົາ word_tokenize ຈາກ laonlp ມາຊ່ວຍຕັດຄຳ. ພ້ອມທັງກຳຈັດຄຳເຊື່ອມ (Stop words) ເຊັ່ນ: “ນີ້”, “ຫຼາຍ”, “ຢູ່”, ຊຶ່ງບໍ່ໄດ້ຊ່ວຍບົ່ງບອກເຖິງຫົວຂໍ້.

from laonlp.tokenize import word_tokenize

# ລາຍຊື່ຄຳທີ່ບໍ່ສຳຄັນທີ່ເຮົາຈະຕັດອອກ (Custom Stop Words)
stop_words = ["ນີ້", "ຫຼາຍ", "ຢູ່", "ແລະ", "ໃນ", "ຢາກ", "ໃຫ້", "ໄປ", "ໄດ້", "ແທ້ໆ", "ປີ", "ມື້", "ກໍ", "ມີ"]

def preprocess_text(text):
    # ຕັດຄຳດ້ວຍໂມດູນຈາກ laonlp
    tokens = word_tokenize(text)
    # ເອົາສະເພາະຄຳທີ່ບໍ່ຢູ່ໃນ stop words
    cleaned_tokens = [word for word in tokens if word not in stop_words and len(word) > 1]
    return cleaned_tokens

# ນຳໃຊ້ function ກັບທຸກໆໂພສ
processed_docs = [preprocess_text(post) for post in posts]

print(processed_docs[0])
# ຜົນໄດ້ຮັບອາດຈະອອກມາເປັນປະມານ: ['ລົດ', 'ຕິດ', 'ແຖວ', 'ໄຟແດງ', 'ດົງໂດກ', 'ຂັບລົດ', 'ຍາກ']

ຂັ້ນຕອນທີ 4: ສ້າງ Dictionary ແລະ Corpus ສຳລັບ Gensim

ໂມເດວ LDA ບໍ່ສາມາດອ່ານຂໍ້ຄວາມໂດຍກົງໄດ້, ເຮົາຕ້ອງປ່ຽນຄຳສັບພາຍໃນ Document ໃຫ້ເປັນຕົວເລກ (Mathematical Representation).

from gensim import corpora

# ສ້າງ Dictionary ທີ່ຈະຈັບຄູ່ຄຳສັບ (Vocabulary) ກັບ ID ຕົວເລກ
dictionary = corpora.Dictionary(processed_docs)

# ປ່ຽນເອກະສານໃຫ້ເປັນຮູບແບບ Document-Term Matrix ຫຼື Corpus (Bag-of-Words)
# ເຊິ່ງຈະນັບຈຳນວນຄັ້ງທີ່ແຕ່ລະຄຳປະກົດຂຶ້ນໃນແຕ່ລະເອກະສານ
corpus = [dictionary.doc2bow(doc) for doc in processed_docs]

ຂັ້ນຕອນທີ 5: ການຝຶກສອນໂມເດວ (Training the LDA Model)

ຕອນນີ້ຂໍ້ມູນພ້ອມແລ້ວ. ເຮົາຈະກຳນົດໃຫ້ໂມເດວຊອກຫາຫົວຂໍ້ທັງໝົດ 3 ຫົວຂໍ້ (num_topics=3) ເພາະເຮົາຮູ້ລ່ວງໜ້າວ່າຂໍ້ມູນເຮົາມີເລື່ອງ ຈາລະຈອນ, ກະສິກຳ ແລະ ບຸນປະເພນີ.

from gensim.models import LdaModel

# ຝຶກສອນໂມເດວ LDA
lda_model = LdaModel(
    corpus=corpus,
    id2word=dictionary,
    num_topics=3,           # ຈຳນວນຫົວຂໍ້ທີ່ຕ້ອງການຊອກຫາ
    random_state=42,        # ກຳນົດຄ່າ Random Seed ເພື່ອໃຫ້ຜົນອອກມາຄືເກົ່າທຸກຄັ້ງທີ່ Run
    passes=15               # ຈຳນວນຮອບທີ່ໂມເດວຈະອ່ານຂໍ້ມູນ (Epochs)
)

# ສະແດງຜົນຄຳສັບຫຼັກໆໃນແຕ່ລະຫົວຂໍ້
for idx, topic in lda_model.print_topics(-1):
    print(f"Topic {idx}: \nWords: {topic}\n")

ການແປຜົນ (Interpreting Results): ຜົນໄດ້ຮັບຈະສະແດງອອກມາໃຫ້ເຫັນນ້ຳໜັກຄຳສັບ ເປັນຕົ້ນວ່າ Topic 0 ອາດຈະມີຄຳວ່າ "ກາເຟ", "ປາກຊ່ອງ", "ຜົນຜະລິດ" ທີ່ມີນ້ຳໜັກສູງສຸດ. Topic 1 ຈະເປັນ "ບຸນພະທາດຫຼວງ", "ວັດທະນະທຳ" ແລະ Topic 2 ຈະເປັນ "ລົດຕິດ", "ດົງໂດກ". ນີ້ໝາຍຄວາມວ່າໂມເດວ Machine Learning ຂອງເຮົາສາມາດແຍກແຍະຫົວຂໍ້ອອກມາໄດ້ຢ່າງຖືກຕ້ອງ!

ຈຸດສຳຄັນທີ່ຄວນຈື່ (Key Takeaways)

ສະຫຼຸບ

ການຈັດໝວດໝູ່ຂໍ້ຄວາມຂະໜາດໃຫຍ່ບໍ່ແມ່ນເລື່ອງຍາກອີກຕໍ່ໄປຫາກເຮົາມີເຄື່ອງມືທີ່ຖືກຕ້ອງ. ການນຳໃຊ້ວິທີຄິດໄລ່ແບບ Latent Dirichlet Allocation (LDA) ບວກກັບຄວາມເຂົ້າໃຈໃນໂຄງສ້າງຂອງພາສາລາວ ແລະ Library ຕັດຄຳ ເຊັ່ນ laonlp ເຮັດໃຫ້ນັກພັດທະນາສາມາດສ້າງລະບົບວິເຄາະຫົວຂໍ້ສົນທະນາຈາກ Social Media Forums ຫຼື ລະບົບຣີວິວຂອງລູກຄ້າພາຍໃນປະເທດໄດ້ຢ່າງມີປະສິດທິພາບ. ຢ່າລືມນຳເອົາສິ່ງທີ່ໄດ້ຮຽນຮູ້ໃນມື້ນີ້ໄປທົດລອງປັບໃຊ້ກັບ Dataset ຕົວຈິງຂອງທ່ານເອງ.