ສ້າງລະບົບວິເຄາະຄວາມຮູ້ສຶກ (Sentiment Analyzer) ສຳລັບຄອມເມັ້ນ Facebook ພາສາລາວ
ສ້າງລະບົບວິເຄາະຄວາມຮູ້ສຶກ (Sentiment Analyzer) ສຳລັບຄອມເມັ້ນ Facebook ພາສາລາວ
ລອງຈິນຕະນາການວ່າ ທ່ານເປັນເຈົ້າຂອງຮ້ານອາຫານແຄມຂອງໃນນະຄອນຫຼວງວຽງຈັນ ຫຼື ເປັນຜູ້ຈັດການການຕະຫຼາດໃຫ້ກັບທຸລະກິດ SME ທີ່ຂາຍເຄື່ອງອອນລາຍ. ແຕ່ລະມື້, ເພຈ Facebook ຂອງທ່ານໄດ້ຮັບຄອມເມັ້ນຫຼາຍຮ້ອຍຂໍ້ຄວາມ. ການທີ່ຈະມາອ່ານເທື່ອລະຄອມເມັ້ນເພື່ອປະເມີນວ່າ ລູກຄ້າມັກ (Positive), ບໍ່ມັກ (Negative) ຫຼື ພຽງແຕ່ສອບຖາມຂໍ້ມູນ (Neutral) ນັ້ນແມ່ນໃຊ້ເວລາຫຼາຍ ແລະ ອາດເຮັດໃຫ້ພາດໂອກາດໃນການແກ້ໄຂບັນຫາໄດ້ທັນທ່ວງທີ.
ນີ້ຄືຈຸດທີ່ Natural Language Processing (NLP) ແລະ Machine Learning (ML) ເຂົ້າມາມີບົດບາດ! ໃນບົດຄວາມນີ້, ເຮົາຈະມາຮຽນຮູ້ວິທີການສ້າງ “ລະບົບວິເຄາະຄວາມຮູ້ສຶກ ຫຼື Sentiment Analyzer” ສຳລັບພາສາລາວໃນລະດັບກາງ ໂດຍນຳໃຊ້ Python ເຊິ່ງຈະຊ່ວຍໃຫ້ຄອມພິວເຕີສາມາດອ່ານ ແລະ ແຍກແຍະອາລົມຂອງຄອມເມັ້ນໄດ້ໂດຍອັດຕະໂນມັດ.
ສິ່ງທ້າທາຍຂອງ NLP ໃນພາສາລາວ
ການເຮັດ NLP ສຳລັບພາສາອັງກິດອາດຈະລຽບງ່າຍເພາະເຂົາເຈົ້າມີຍະຫວ່າງ (Space) ລະຫວ່າງຄຳ. ແຕ່ສຳລັບພາສາລາວ, ບັນຫາຫຼັກທີ່ເຮົາພົບເຈີຄື:
- ບໍ່ມີຍະຫວ່າງລະຫວ່າງຄຳ: “ອາຫານແຊບຫຼາຍບໍລິການດີ” ຕ້ອງຖືກແຍກເປັນ “ອາຫານ / ແຊບ / ຫຼາຍ / ບໍລິການ / ດີ”. ການຕັດຄຳ (Word Tokenization) ຈຶ່ງເປັນຫົວໃຈສຳຄັນ.
- ຄຳສະແລງ ແລະ ພາສາໃນອິນເຕີເນັດ: ເຊັ່ນ “ດີມາກກກ”, “ແຊບເວີ”, “ປັງຫຼາຍ” ເຊິ່ງລະບົບຕ້ອງສາມາດຮຽນຮູ້ໄດ້.
- ການສະກົດຄຳທີ່ຫຼາກຫຼາຍ: ເຊັ່ນ “ຫຼາຍ” ແລະ “ຫລາຍ”.
ສິ່ງທີ່ຕ້ອງກຽມພ້ອມ (Prerequisites)
ກ່ອນຈະເລີ່ມຂຽນໂຄດ, ຮັບປະກັນວ່າທ່ານໄດ້ຕິດຕັ້ງ Python ໄວ້ແລ້ວ ແລະ ກຳລັງນຳໃຊ້ libraries ເຫຼົ່ານີ້ (ສາມາດຕິດຕັ້ງຜ່ານ pip):
pip install pandas scikit-learn laonlp
ໝາຍເຫດ: laonlp ແມ່ນ Library ພື້ນຖານສຳລັບການປະມວນຜົນພາສາລາວທີ່ສາມາດຊ່ວຍໃນການຕັດຄຳໄດ້.
ຂັ້ນຕອນທີ 1: ກຽມຂໍ້ມູນ (Data Preparation)
ສຳລັບໂປຣເຈັກນີ້, ເຮົາຈະຈຳລອງຊຸດຂໍ້ມູນ (Dataset) ນ້ອຍໆທີ່ເປັນຄອມເມັ້ນຈາກຮ້ານອາຫານ. ໃນການເຮັດວຽກຕົວຈິງ ທ່ານສາມາດ Export ຂໍ້ມູນຈາກ Facebook Graph API ມາເປັນໄຟລ໌ CSV ໄດ້.
import pandas as pd
# ຈຳລອງຂໍ້ມູນຄອມເມັ້ນ Facebook ຮ້ານອາຫານ
data = {
'comment': [
'ອາຫານແຊບຫຼາຍ ສົ່ງໄວແທ້ໆ ປະທັບໃຈ',
'ຮ້ານນີ້ບໍລິການແຍ່ຫຼາຍ ຊັກຊ້າທີ່ສຸດ',
'ຂໍຖາມແດ່ຮ້ານເປີດຈັກໂມງ?',
'ລາຄາເທົ່າໃດຄົວຮ້ານນີ້',
'ບໍ່ມັກເລີຍ ອາຫານເຄັມຫຼາຍ ຜິດຫວັງ',
'ບັນຍາກາດດີ ລາຄາເປັນກັນເອງ ມັກຫຼາຍ'
],
'sentiment': ['positive', 'negative', 'neutral', 'neutral', 'negative', 'positive']
}
df = pd.DataFrame(data)
print(df.head())
ຂັ້ນຕອນທີ 2: ການຕັດຄຳທາງພາສາລາວ (Word Tokenization)
ເຮົາຈະໃຊ້ laonlp ເພື່ອຕັດປະໂຫຍກທີ່ຕິດກັນໃຫ້ກາຍເປັນຄຳດ່ຽວໆ ເພື່ອໃຫ້ Machine Learning ສາມາດເຂົ້າໃຈຄວາມໝາຍຂອງແຕ່ລະຄຳໄດ້.
from laonlp.tokenize import word_tokenize
def preprocess_lao_text(text):
# ຕັດຄຳແລ້ວເຊື່ອມດ້ວຍຍະຫວ່າງ (Space)
tokens = word_tokenize(text)
return " ".join(tokens)
# ນຳໃຊ້ function ກັບທຸກໆຄອມເມັ້ນໃນ Dataset
df['processed_comment'] = df['comment'].apply(preprocess_lao_text)
print(df[['comment', 'processed_comment']])
ຜົນໄດ້ຮັບທີ່ຄາດຫວັງ:
ຈາກ ອາຫານແຊບຫຼາຍ ຈະຖືກຕັດເປັນ ອາຫານ ແຊບ ຫຼາຍ.
ຂັ້ນຕອນທີ 3: ການປ່ຽນຂໍ້ຄວາມເປັນຕົວເລກ (Feature Extraction ດ້ວຍ TF-IDF)
ຄອມພິວເຕີບໍ່ເຂົ້າໃຈຕົວໜັງສື, ມັນເຂົ້າໃຈແຕ່ຕົວເລກ. ດັ່ງນັ້ນ ເຮົາຈະໃຊ້ເຕັກນິກ TF-IDF (Term Frequency-Inverse Document Frequency) ເພື່ອແປງຄຳສັບເປັນ Vector. TF-IDF ຈະໃຫ້ຄ່າຄວາມສຳຄັນກັບຄຳທີ່ບົ່ງບອກອາລົມເຊັ່ນ “ແຊບ”, “ແຍ່”, “ຜິດຫວັງ” ແລະ ຫຼຸດຄວາມສຳຄັນຂອງຄຳທົ່ວໄປເຊັ່ນ “ນີ້”, “ນັ້ນ”, “ທີ່”.
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(df['processed_comment'])
y = df['sentiment']
ຂັ້ນຕອນທີ 4: ການອົບຮົມໂມເດວ (Training the Model)
ສຳລັບລະດັບກາງ, ໂມເດວແບບ Logistic Regression ຫຼື Naive Bayes ແມ່ນເຮັດວຽກໄດ້ຢ່າງດີຢ້ຽມກັບການຈັດປະເພດຂໍ້ຄວາມ (Text Classification).
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# ແບ່ງຂໍ້ມູນສຳລັບ Train (80%) ແລະ Test (20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ສ້າງ ແລະ ແອບປະມວນຜົນໂມເດວ
model = LogisticRegression()
model.fit(X_train, y_train)
# ກວດສອບຄວາມແມ່ນຍຳເບື້ອງຕົ້ນ
accuracy = model.score(X_test, y_test)
print(f"ຄວາມແມ່ນຍຳຂອງໂມເດວ (Accuracy): {accuracy * 100}%")
(ໝາຍເຫດ: ເນື່ອງຈາກຂໍ້ມູນຈຳລອງມີໜ້ອຍ ການທົດສອບຄວາມແມ່ນຍຳອາດຈະຍັງບໍ່ສະທ້ອນເຖິງໂລກປະຕິບັດງານຕົວຈິງ. ໃນການເຮັດເພື່ອໃຊ້ງານຈິງ ທ່ານຄວນມີຂໍ້ມູນຢ່າງໜ້ອຍ 1,000 - 5,000 ຄອມເມັ້ນ)
ຂັ້ນຕອນທີ 5: ທົດສອບກັບຄອມເມັ້ນໃໝ່ (Prediction)
ບາດນີ້, ລອງເອົາໂມເດວຂອງເຮົາໄປທົດສອບກັບຄອມເມັ້ນໃໝ່ໆເທິງ Facebook ທີ່ໂມເດວບໍ່ເຄີຍເຫັນມາກ່ອນ!
# ຄອມເມັ້ນໃໝ່ທີ່ເຮົາຕ້ອງການທົດສອບ
new_comments = [
"ຖ້າດົນຫຼາຍ ບໍ່ປະທັບໃຈເລີຍ",
"ພະນັກງານເວົ້າຈາມ່ວນເນາະ ອາຫານກໍແຊບ",
"ຮ້ານຕັ້ງຢູ່ແຖວໃດຂອງວຽງຈັນ?"
]
# ຜ່ານຂັ້ນຕອນ Preprocess ແລະ TF-IDF
processed_new_comments = [preprocess_lao_text(c) for c in new_comments]
new_vectors = vectorizer.transform(processed_new_comments)
# ທຳນາຍຜົນ
predictions = model.predict(new_vectors)
# ສະແດງຜົນລັດ
for comment, sentiment in zip(new_comments, predictions):
print(f"ຄອມເມັ້ນ: '{comment}' -> ອາລົມ: [{sentiment.upper()}]")
ຜົນລັດທີ່ຄວນຈະໄດ້ດັ່ງນີ້:
ຖ້າດົນຫຼາຍ ບໍ່ປະທັບໃຈເລີຍ-> [NEGATIVE]ພະນັກງານເວົ້າຈາມ່ວນເນາະ ອາຫານກໍແຊບ-> [POSITIVE]ຮ້ານຕັ້ງຢູ່ແຖວໃດຂອງວຽງຈັນ?-> [NEUTRAL]
ສິ່ງທີ່ຄວນຈື່ (Key Takeaways)
- Word Tokenization ຄືພື້ນຖານ: ຄວາມຖືກຕ້ອງຂອງໂມເດວແມ່ນຂຶ້ນກັບການຕັດຄຳລາວທີ່ຊັດເຈນ. ຖ້າຕັດຄຳຜິດ, ຄວາມໝາຍຈະປ່ຽນທັນທີ.
- TF-IDF ຊ່ວຍການຈັດລຳດັບຄວາມສຳຄັນ: ມັນຊ່ວຍປ່ຽນຄຳສັບທາງພາສາລາວໃຫ້ເປັນຕົວເລກ (Vector space) ເຮັດໃຫ້ Machine Learning ກວດຈັບ “Keyword” ຂອງອາລົມໄດ້.
- ຂໍ້ມູນຫຼາຍ ຍິ່ງສະຫຼາດ (Data is King): ໂມເດວຈະແຍກຄຳສະແລງ ຫຼື ຄຳສັບໄວລຸ້ນໄດ້ກໍຕໍ່ເມື່ອເຮົາມີ Dataset ຄອມເມັ້ນທີ່ຫຼາກຫຼາຍ ແລະ ຖືກ Label ມາດີ.
ສະຫຼຸບແລ້ວ, ການສ້າງລະບົບ Sentiment Analyzer ສຳລັບພາສາລາວ ບໍ່ແມ່ນເລື່ອງທີ່ຍາກຈົນເກີນໄປ ຖ້າປະສົມປະສານການໃຊ້ງານເຄື່ອງມືທີ່ມີຢູ່ແລ້ວຢ່າງສະຫຼາດ. ດ້ວຍ Python, PyTorch/Scikit-learn ແລະ ຊຸດເຄື່ອງມື NLP ເຊັ່ນ LaoNLP, ບັນດາທຸລະກິດ ແລະ ນັກພັດທະນາໃນລາວ ກໍສາມາດສ້າງ AI ມາອ່ານຄອມເມັ້ນແທນຄົນໄດ້ແລ້ວ. ຖ້າທ່ານຕ້ອງການອັບເກຣດໂມເດວໃຫ້ເກັ່ງຂຶ້ນ, ທ່ານສາມາດທົດລອງເຊື່ອມຕໍ່ກັບໂມເດວ Deep Learning ຂັ້ນສູງເຊັ່ນ BERT ທີ່ເຄີຍຝຶກຝົນພາສາໄທ ຫຼື ພາສາລາວ ໃນໂອກາດໜ້າໄດ້!