Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

Word2Vec: ສ້າງແຜນທີ່ຄວາມໝາຍຂອງຄຳສັບດ້ວຍ Python

ໂພສເມື່ອ # Natural Language Processing # Python # Machine Learning

Word2Vec: ສ້າງແຜນທີ່ຄວາມໝາຍຂອງຄຳສັບດ້ວຍ Python

ເຄີຍສົງໄສບໍ່ວ່າ ຄອມພິວເຕີທີ່ເປັນພຽງເຄື່ອງຈັກທີ່ຮູ້ຈັກແຕ່ຕົວເລກ 0 ແລະ 1 ມັນສາມາດເຂົ້າໃຈພາສາຂອງມະນຸດໄດ້ແນວໃດ? ສຳລັບຄອມພິວເຕີ, ຄຳວ່າ “ຕຳໝາກຫຸ່ງ” ແລະ “ປີ້ງໄກ່” ແມ່ນພຽງແຕ່ຕົວໜັງສືທີ່ບໍ່ມີຄວາມໝາຍ. ແຕ່ໃນໂລກຂອງການປະມວນຜົນພາສາທຳມະຊາດ (Natural Language Processing ຫຼື NLP), ເຮົາສາມາດສອນໃຫ້ຄອມພິວເຕີຮູ້ໄດ້ວ່າ ທັງສອງຄຳນີ້ມັກຈະຖືກກ່າວເຖິງນຳກັນ ແລະ ເປັນໝວດໝູ່ອາຫານຄືກັນ.

ເຕັກໂນໂລຊີທີ່ຢູ່ເບື້ອງຫຼັງຄວາມສະຫຼາດນີ້ແມ່ນ Word Embeddings, ແລະ ໜຶ່ງໃນໂມເດລທີ່ໄດ້ຮັບຄວາມນິຍົມທີ່ສຸດໃນຍຸກບຸກເບີກຂອງ NLP ກໍຄື Word2Vec. ໃນບົດຄວາມນີ້, ເຮົາຈະມາເຈາະເລິກວິທີການເຮັດວຽກຂອງມັນ ແລະ ລອງຂຽນໂຄດດຶງເອົາຄວາມໝາຍຂອງຄຳສັບໂດຍໃຊ້ Python.

Word2Vec ແມ່ນຫຍັງ?

Word2Vec ແມ່ນເຕັກນິກໃນການປ່ຽນຄຳສັບ (Words) ໃຫ້ກາຍເປັນ ຕົວເລກທາງຄະນິດສາດທີ່ເອີ້ນວ່າ ເວກເຕີ (Vectors) ໃນພື້ນທີ່ຫຼາຍມິຕິ (High-dimensional space). ຫຼັກການຂອງມັນແມ່ນຂຶ້ນກັບທິດສະດີທີ່ວ່າ: “ຄຳສັບທີ່ປະກົດຢູ່ໃນບໍລິບົດ (Context) ຄ້າຍຄືກັນ ມັກຈະມີຄວາມໝາຍຄ້າຍຄືກັນ”.

ລອງນຶກພາບແຜນທີ່ນະຄອນຫຼວງວຽງຈັນ. ຖ້າເຮົາປັກໝຸດ “ປະຕູໄຊ” ແລະ “ທາດຫຼວງ”, ສອງສະຖານທີ່ນີ້ອາດຈະຢູ່ໃກ້ກັນ. ໃນທາງດຽວກັນ, Word2Vec ຈະຈັດລຽງເວກເຕີຂອງຄຳວ່າ “ເຂົ້າໜຽວ” ແລະ “ຕຳໝາກຫຸ່ງ” ໃຫ້ຢູ່ໃກ້ຊິດກັນໃນ Data Space, ໃນຂະນະທີ່ຄຳວ່າ “ລົດຈັກ” ຫຼື “ໄຟແດງ” ຈະຖືກຍູ້ອອກໄປຢູ່ອີກມຸມໜຶ່ງ.

ສະຖາປັດຕະຍະກຳຫຼັກຂອງ Word2Vec

Word2Vec ໃຊ້ Neural Network ຂະໜາດນ້ອຍ (Shallow Neural Network) ເພື່ອຮຽນຮູ້ຄວາມສຳພັນຂອງຄຳສັບ ໂດຍມີ 2 ວິທີຫຼັກຄື:

  1. CBOW (Continuous Bag of Words): ເປັນການທວາຍຄຳສັບເປົ້າໝາຍ (Target word) ໂດຍອີງຈາກຄຳສັບອ້ອມຂ້າງ (Context words).
    • ຕົວຢ່າງ: “ຂ້ອຍ ມັກ ກິນ ___ ກັບ ປີ້ງໄກ່” -> ໂມເດລຈະພະຍາຍາມທວາຍວ່າຄຳໃນຊ່ອງຫວ່າງແມ່ນ “ຕຳໝາກຫຸ່ງ”.
  2. Skip-gram: ເປັນການເຮັດວຽກແບບກົງກັນຂ້າມກັບ CBOW, ຄືໃຊ້ຄຳສັບເປົ້າໝາຍ ເພື່ອທວາຍຄຳສັບອ້ອມຂ້າງທັງໝົດ.
    • ຕົວຢ່າງ: ຖ້າຄຳເປົ້າໝາຍແມ່ນ “ທາດຫຼວງ”, ໂມເດລຈະທວາຍຄຳອ້ອມຂ້າງເຊັ່ນ “ງານບຸນ”, “ສະຖຸບ”, “ວຽງຈັນ”. (Skip-gram ມັກຈະເຮັດວຽກໄດ້ດີກັບ Dataset ຂະໜາດໃຫຍ່ ແລະ ຄຳສັບທີ່ຫາຍາກ).

ຄວາມທ້າທາຍກັບພາສາລາວ (Lao Tokenization)

ກ່ອນທີ່ເຮົາຈະໄປຂຽນໂຄດ, ສິ່ງສຳຄັນທີ່ຕ້ອງຮູ້ຄື: ພາສາອັງກິດມີການຍະຫວ່າງ (Space) ລະຫວ່າງຄຳສັບເຊິ່ງເຮັດໃຫ້ແຍກຄຳໄດ້ງ່າຍ. ແຕ່ສຳລັບພາສາລາວ ເຮົາຂຽນຕິດກັນ. ດັ່ງນັ້ນ, ກ່ອນຈະປ້ອນຂໍ້ມູນເຂົ້າ Word2Vec, ເຮົາຈຳເປັນຕ້ອງຕັດຄຳ (Tokenize) ເຊັ່ນ: “ຂ້ອຍໄປຕະຫຼາດເຊົ້າ” ຕ້ອງຖືກແຍກເປັນ ["ຂ້ອຍ", "ໄປ", "ຕະຫຼາດເຊົ້າ"] ເສຍກ່ອນ. (ອາດຈະໃຊ້ວິທີ Dictionary-based ຫຼື Library ເຊັ່ນ ທີ່ນັກພັດທະນາລາວເຄີຍສ້າງໄວ້). ສຳລັບບົດຮຽນນີ້ ເຮົາຈະສົມມຸດວ່າເຮົາໄດ້ຂໍ້ມູນທີ່ຖືກຕັດຄຳມາແລ້ວ.

ການຂຽນໂຄດສ້າງ Word2Vec ດ້ວຍ Python ແລະ Gensim

ໃນ Python, ເຄື່ອງມືທີ່ນິຍົມທີ່ສຸດໃນການເຮັດ Word2Vec ແມ່ນ gensim.

ຂັ້ນຕອນທີ 1: ຕິດຕັ້ງ Library

pip install gensim

ຂັ້ນຕອນທີ 2: ກຽມຂໍ້ມູນ ແລະ ຝຶກອົບຮົມ(Train) ໂມເດລ

from gensim.models import Word2Vec

# 1. ກຽມຂໍ້ມູນ (Corpus) - ຕົວຢ່າງປະໂຫຍກພາສາລາວທີ່ຖືກ Tokenize ແລ້ວ
sentences = [
    ["ຂ້ອຍ", "ມັກ", "ກິນ", "ຕຳໝາກຫຸ່ງ", "ແລະ", "ປີ້ງໄກ່"],
    ["ລາວ", "ໄປ", "ທ່ຽວ", "ຫຼວງພະບາງ", "ໃນ", "ຊ່ວງ", "ບຸນປີໃໝ່"],
    ["ຕຳໝາກຫຸ່ງ", "ເປັນ", "ອາຫານ", "ທີ່", "ແຊບ", "ທີ່ສຸດ", "ໃນ", "ລາວ"],
    ["ຂ້ອຍ", "ຂີ່", "ລົດຈັກ", "ໄປ", "ຕະຫຼາດເຊົ້າ", "ທີ່", "ວຽງຈັນ"],
    ["ອາຫານ", "ລາວ", "ມີ", "ລົດຊາດ", "ແຊບ", "ແລະ", "ເປັນເອກະລັກ"],
    ["ນັກທ່ອງທ່ຽວ", "ມັກ", "ໄປ", "ຫຼວງພະບາງ", "ແລະ", "ວຽງຈັນ"]
]

# 2. ສ້າງ ແລະ Train ໂມເດລ Word2Vec
# - vector_size: ຂະໜາດຂອງມິຕິ (Dimensions) ຂອງ Vector (ໃນວຽກຈິງອາດຈະໃຊ້ 100-300)
# - window: ຂະໜາດຂອງປ່ອງຢ້ຽມບໍລິບົດ (ເບິ່ງຄຳໜ້າລັງຈັກຄຳ)
# - min_count: ຕັດຄຳທີ່ປະກົດໜ້ອຍກວ່າຄ່ານີ້ຖິ້ມ (ໃນນີ້ກຳນົດ 1 ເພາະຂໍ້ມູນເຮົາມີໜ້ອຍ)
# - sg: 1 ໝາຍເຖິງໃຊ້ Skip-gram (ຖ້າເປັນ 0 ແມ່ນ CBOW)
model = Word2Vec(sentences, vector_size=10, window=2, min_count=1, sg=1)

# 3. ລອງລຶງຂໍ້ມູນ Vector ຂອງຄຳວ່າ "ວຽງຈັນ"
vector_vt = model.wv["ວຽງຈັນ"]
print("Vector ຂອງ 'ວຽງຈັນ':\n", vector_vt)

# 4. ຊອກຫາຄຳສັບທີ່ກ່ຽວຂ້ອງ / ໃຊ້ໃນບໍລິບົດຄ້າຍຄືກັນກັບ "ຕຳໝາກຫຸ່ງ"
similar_words = model.wv.most_similar("ຕຳໝາກຫຸ່ງ")
print("\nຄຳສັບທີ່ຄ້າຍຄືກັບ 'ຕຳໝາກຫຸ່ງ':")
for word, score in similar_words:
    print(f"- {word} (ຄວາມຄ້າຍຄື: {score:.4f})")

ໝາຍເຫດ: ໃນການໃຊ້ງານຈິງ, ທ່ານຕ້ອງໃຊ້ຂໍ້ມູນຂະໜາດໃຫຍ່ (Corpus ທີ່ມີຫຼາຍລ້ານຄຳ) ຈຶ່ງຈະໄດ້ຄວາມຊັດເຈນສູງ.

ຄະນິດສາດທີ່ມະຫັດສະຈັນ: ການບວກລົບຄຳສັບ!

ຄວາມເຈ໋ງຂອງ Word Vectors ຄື ເມື່ອຄຳສັບກາຍເປັນຕົວເລກ, ເຮົາຈະສາມາດບວກລົບຄຳສັບໄດ້ ເຊັ່ນສົມຜົນຄລາດສິກ: [King] - [Man] + [Woman] = [Queen]

ຖ້າເຮົາ Train ບົດຄວາມພາສາລາວຫຼາຍພຽງພໍ ເຮົາອາດຈະສາມາດເຮັດສົມຜົນພາຍໃນປະເທດໄດ້ເຊັ່ນ: [ປາກເຊ] - [ຈຳປາສັກ] + [ຫຼວງພະບາງ] ≈ [ເມືອງຫຼວງພະບາງ] ຫຼື [ຕຳໝາກຫຸ່ງ] - [ລາວ] + [ຍີ່ປຸ່ນ] ≈ [ຊູຊິ] (ເພາະມັນທຽບເຄຽງບໍລິບົດຂອງອາຫານປະຈຳຊາດ).

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

ສະຫຼຸບ

ການສ້າງແຜນທີ່ຄວາມໝາຍຂອງຄຳສັບຫຼືອັນທີ່ເອີ້ນວ່າ Word2Vec ນັ້ນ ໄດ້ເປັນຈຸດເລີ່ມຕົ້ນທີ່ສຳຄັນທີ່ເຮັດໃຫ້ຄອມພິວເຕີເລີ່ມເຂົ້າໃຈພາສາຂອງເຮົາໄດ້ເລິກເຊິ່ງຂຶ້ນກວ່າແຕ່ກ່ອນ. ຈາກພຽງການຈັບຄູ່ຕົວອັກສອນ, ສູ່ການເຂົ້າໃຈບໍລິບົດ ແລະ ຄວາມສຳພັນທາງພື້ນທີ່ຂອງເວກເຕີ. ສຳລັບນັກພັດທະນາຊາວລາວ ການນຳໃຊ້ Word2Vec ຮ່ວມກັບເຕັກນິກການແຍກຄຳທີ່ຖືກຕ້ອງ ຈະເປັນກຸນແຈສຳຄັນໃນການສ້າງແອັບພລິເຄຊັນສະຫຼາດໆ ເຊັ່ນ: ລະບົບຄົ້ນຫາ (Search Engine) ທີ່ເຂົ້າໃຈພາສາລາວ, ລະບົບແນະນຳສິນຄ້າ ສຳລັບທຸລະກິດ SME ພາຍໃນ, ຈົນກ້າວໄປສູ່ການສ້າງ LLMs ສຳລັບພາສາລາວໃນອະນາຄົດ.