Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ການສ້າງລະບົບແນະນຳສິນຄ້າ (Recommendation System) ສຳລັບ E-commerce ໃນລາວ

ໂພສເມື່ອ # Machine Learning # E-commerce # Collaborative Filtering # Deep Learning

ການສ້າງລະບົບແນະນຳສິນຄ້າ (Recommendation System) ສຳລັບ E-commerce ໃນລາວ ດ້ວຍ Collaborative Filtering

ຕະຫຼາດການຄ້າອອນລາຍ (E-commerce) ໃນປະເທດລາວພວມເຕີບໂຕຢ່າງກ້າວກະໂດດ. ຈາກການຂາຍເຄື່ອງຜ່ານ Facebook Live ຂອງບັນດາ SME ໄປຈົນເຖິງແພລດຟອມແອັບພລິເຄຊັນທ້ອງຖິ່ນທີ່ນັບມື້ນັບຫຼາຍຂຶ້ນ. ເມື່ອລາຍການສິນຄ້າມີຈຳນວນຫຼັກໝື່ນ ໄປຈົນເຖິງຫຼັກແສນລາຍການ (ເຊັ່ນ: ກາເຟປາກຊ່ອງ, ສິ້ນໄໝ, ເຄື່ອງຫັດຖະກຳ, ຈົນຮອດເຄື່ອງໃຊ້ໄຟຟ້າ), ສິ່ງທ້າທາຍໜຶ່ງທີ່ແພລດຟອມເຫຼົ່ານີ້ຕ້ອງປະເຊີນຄື: “ເຮັດແນວໃດເພື່ອສະແດງສິນຄ້າທີ່ກົງກັບໃຈຜູ້ຊື້ຫຼາຍທີ່ສຸດ?”

ການໃຊ້ລະບົບແນະນຳ (Recommendation System) ທີ່ມີປະສິດທິພາບ ບໍ່ພຽງແຕ່ເພີ່ມຍອດຂາຍ (Conversion Rate) ແຕ່ຍັງສ້າງປະສົບການທີ່ດີໃຫ້ກັບລູກຄ້າ. ໃນບົດຄວາມນີ້, ເຮົາຈະມາເຈາະລິກເຖິງວິທີການສ້າງລະບົບແນະນຳສິນຄ້າດ້ວຍເຕັກນິກ Neural Collaborative Filtering (NCF) ແລະ ວິທີແກ້ໄຂບັນຫາທີ່ພົບເລື້ອຍໃນບໍລິບົດຂອງຂໍ້ມູນນິໄສການຊື້ຂອງຄົນລາວ ໂດຍເນັ້ນໄປທີ່ການປະມວນຜົນດ້ວຍ PyTorch.

ຄວາມເຂົ້າໃຈກ່ຽວກັບ Collaborative Filtering ແລະ ຂໍ້ຈຳກັດຂອງ Matrix Factorization

ຮູບແບບດັ້ງເດີມຂອງ Collaborative Filtering (CF) ມັກຈະອ້າງອີງໃສ່ Matrix Factorization (MF) ເຊິ່ງເປັນການແຍກຕາຕະລາງມາຕຣິກ (Matrix) ຂອງຜູ້ໃຊ້ (Users) ແລະ ໄອເທັມ (Items) ອອກເປັນອົງປະກອບຍ່ອຍ (Latent vectors). ແນວໃດກໍຕາມ, MF ອາໄສພຽງແຕ່ການຄູນແບບ Dot Product ເຊິ່ງອາດບໍ່ສາມາດຈັບຮູບແບບຄວາມສຳພັນທີ່ຊັບຊ້ອນ (Non-linear relationships) ໄດ້ດີ.

ໃນບໍລິບົດຂອງ E-commerce ລາວ, ລູກຄ້າສ່ວນໃຫຍ່ມັກຈະບໍ່ໃຫ້ຄະແນນ (Rating 1-5 ດາວ) ຢ່າງຊັດເຈນ. ພວກເຂົາມັກຈະສ້າງ Implicit Feedback ເຊັ່ນ: ການກົດເບິ່ງສິນຄ້າ (Click), ການເພີ່ມລົງກະຕ່າ (Add to cart), ຫຼື ການສັ່ງຊື້ (Purchase). ຕົວຢ່າງ: ຜູ້ໃຊ້ A ແລະ B ມັກຊື້ “ກາເຟປາກຊ່ອງ” ຕະຫຼອດແຕ່ບໍ່ເຄີຍໃຫ້ຄະແນນດາວ. ດັ່ງນັ້ນ, ການນຳໃຊ້ Deep Learning ເຂົ້າມາຊ່ວຍໃນນາມຂອງ Neural Collaborative Filtering (NCF) ຈະຊ່ວຍໃຫ້ໂມເດລຮຽນຮູ້ການໂຕ້ຕອບເຫຼົ່ານີ້ໄດ້ເລິກເຊິ່ງກວ່າ.

ສະຖາປັດຕະຍະກຳຂອງ Neural Collaborative Filtering (NCF)

NCF ທົດແທນການໃຊ້ Dot Product ທຳມະດາ ດ້ວຍກຸ່ມຂອງ Neural Networks (Multi-Layer Perceptron ຫຼື MLP) ເພື່ອຮຽນຮູ້ການປະຕິສຳພັນລະຫວ່າງ User Embeddings ແລະ Item Embeddings.

ການສ້າງໂມເດລຮູບແບບພື້ນຖານດ້ວຍ PyTorch

ລຸ່ມນີ້ແມ່ນໂຄດຕົວຢ່າງສຳລັບການສ້າງສະຖາປັດຕະຍະກຳ NCF ໂດຍໃຊ້ PyTorch. ໃນນີ້ເຮົາຈະສ້າງ Embedding layers ສຳລັບຜູ້ໃຊ້ ແລະ ສິນຄ້າ ກ່ອນຈະປ້ອນເຂົ້າສູ່ຊັ້ນ MLP.

import torch
import torch.nn as nn

class NCFModel(nn.Module):
    def __init__(self, num_users, num_items, embedding_dim=64):
        super(NCFModel, self).__init__()
        
        # User & Item Embeddings
        self.user_embedding = nn.Embedding(num_users, embedding_dim)
        self.item_embedding = nn.Embedding(num_items, embedding_dim)
        
        # Multi-Layer Perceptron (MLP)
        self.mlp_layers = nn.Sequential(
            nn.Linear(embedding_dim * 2, 128),
            nn.ReLU(),
            nn.Dropout(0.2), # ປ້ອງກັນ Overfitting
            nn.Linear(128, 64),
            nn.ReLU(),
            nn.Linear(64, 32),
            nn.ReLU(),
            nn.Linear(32, 1)
        )
        
        # Output layer for probability score (0 ເຖິງ 1)
        self.sigmoid = nn.Sigmoid()

    def forward(self, user_indices, item_indices):
        user_emb = self.user_embedding(user_indices)
        item_emb = self.item_embedding(item_indices)
        
        # ເຊື່ອມຕໍ່ (Concatenate) Latent vectors
        vector_concat = torch.cat([user_emb, item_emb], dim=-1)
        
        # ຜ່ານ MLP
        x = self.mlp_layers(vector_concat)
        prediction = self.sigmoid(x)
        return prediction.squeeze()

ການປັບຈູນໂມເດລດ້ວຍ Bayesian Personalized Ranking (BPR)

ດັ່ງທີ່ກ່າວໄປ, ຂໍ້ມູນຂອງ E-commerce ສ່ວນໃຫຍ່ແມ່ນ Implicit. ຖ້າເຮົາໃຊ້ Loss Function ທົ່ວໄປເຊັ່ນ MSE (Mean Squared Error), ມັນຈະບໍ່ເໝາະສົມເທົ່າທີ່ຄວນ. ສຳລັບ Implicit Feedback, ເຮົາຢາກໃຫ້ໂມເດລ “ຈັດອັນດັບ” (Rank) ສິນຄ້າທີ່ຜູ້ໃຊ້ນ່າຈະສົນໃຈ ໃຫ້ຢູ່ສູງກວ່າສິນຄ້າທີ່ພວກເຂົາບໍ່ສົນໃຈ.

ເຮົາສາມາດນຳໃຊ້ BPR Loss (Bayesian Personalized Ranking Loss) ມາແກ້ໄຂບັນຫານີ້ໄດ້. ສົມຜົນທາງຄະນິດສາດຂອງ BPR ແມ່ນອີງໃສ່ຄວາມໜ້າຈະເປັນທີ່ຜູ້ໃຊ້ uu ຈະມັກໄອເທັມ ii (ເຊິ່ງກົດເບິ່ງແລ້ວ) ຫຼາຍກວ່າໄອເທັມ jj (ເຊິ່ງຍັງບໍ່ເຄີຍເບິ່ງ):

BPR_Loss=(u,i,j)Dlnσ(y^uiy^uj)BPR\_Loss = - \sum_{(u, i, j) \in D} \ln \sigma(\hat{y}_{ui} - \hat{y}_{uj})

ການຂຽນ Loss Function ສຳລັບ BPR ໃນ PyTorch:

import torch.nn.functional as F

def bpr_loss(pos_preds, neg_preds):
    """
    pos_preds: ການຄາດເດົາສຳລັບສິນຄ້າທີ່ຜູ້ໃຊ້ກົດຊື້ ຫຼື ເບິ່ງ (Positive interactions)
    neg_preds: ການຄາດເດົາສຳລັບສິນຄ້າທີ່ສຸ່ມຂຶ້ນມາ (Negative interactions)
    """
    # ໄລ່ຄວາມແຕກຕ່າງລະຫວ່າງຄວາມມັກສິນຄ້າ Positive ກັບ Negative
    distance = pos_preds - neg_preds
    
    # ໃຊ້ Log Sigmoid ເພື່ອຮັກສາຄ່າໃນຮູບແບບຂອງ Log likelihood
    loss = -F.logsigmoid(distance).mean()
    return loss

ການຈັດການກັບບັນຫາ Cold Start ໃນພື້ນທີ່ທຸລະກິດລາວ

ຖ້າເວທີ E-commerce ຂອງທ່ານຫາກໍເປີດໂຕໃໝ່ (ເຊັ່ນ App ຂອງ SME ໃນນະຄອນຫຼວງວຽງຈັນ ຫຼື ຮ້ານຂາຍເຄື່ອງຫັດຖະກຳທີ່ຫຼວງພະບາງ) ບັນຫາ Cold Start Problem ຈະເກີດຂຶ້ນແນ່ນອນ ເພາະຜູ້ໃຊ້ໃໝ່ຍັງບໍ່ມີປະຫວັດການຊື້ໃຫ້ເກັບກຳ. ເພື່ອແກ້ໄຂບັນຫານີ້, ທ່ານຄວນ:

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

ການສ້າງ Recommendation System ທີ່ດີຈຳເປັນຕ້ອງມີການທົດລອງ ແລະ ການປັບປ່ຽນ (Fine-Tuning) ຢູ່ສະເໝີ. ເຖິງແມ່ນວ່າເຕັກນິກຕ່າງໆເຊັ່ນ NCF ແລະ BPR Loss ຈະມີຄວາມຊັບຊ້ອນທາງຄະນິດສາດ ແລະ ຕ້ອງການຄວາມເຂົ້າໃຈໃນການພັດທະນາລະບົບດ້ວຍ Deep Learning Framework, ແຕ່ຜົນໄດ້ຮັບທີ່ມັນນຳມາສູ່ພາກທຸລະກິດ E-commerce ແມ່ນຄຸ້ມຄ່າຢ່າງມີໄນຍະສຳຄັນ. ການນຳເອົາເຕັກໂນໂລຊີ AI ລະດັບໂລກມາປັບໃຊ້ໃຫ້ເຂົ້າກັບບໍລິບົດ ແລະ ພຶດຕິກຳຜູ້ບໍລິໂພກໃນປະເທດລາວຢ່າງຖືກຕ້ອງ ຈະເປັນກຸນແຈສຳຄັນໃນການສ້າງຂໍ້ໄດ້ປຽບທາງການແຂ່ງຂັນສຳລັບທຸລະກິດຍຸກດິຈິຕອລນີ້.