Dusit-P's picture
Upload 11 files
284ba3b verified
import numpy as np
import torch
from model.load_model import tokenizer, bert_model
# Lexicon แบบง่าย
custom_words = {
"อร่อยมาก", "ให้เยอะมาก", "รสชาติดี", "รสชาติเยี่ยม", "อร่อยเด็ด", "อร่อยเว่อร์", "อร่อยสุดๆ",
"คุ้มค่า", "คุ้มราคามาก", "ถูกและดี", "ราคาดี", "คุณภาพดี", "คุ้มสุดๆ", "ถูกมาก",
"บริการดี", "บริการเยี่ยม", "บริการเป็นกันเอง", "พนักงานน่ารัก", "พนักงานเป็นกันเอง",
"สะอาดมาก", "ร้านสะอาด", "บรรยากาศดี", "นั่งสบาย", "เหมาะกับครอบครัว", "เหมาะกับเพื่อน",
"อาหารสด", "สดใหม่", "คุณภาพเยี่ยม", "ชิ้นใหญ่", "เนื้อนุ่ม", "หอมมาก", "กลิ่นหอม",
"ฟินสุดๆ", "ห้ามพลาด", "ต้องลอง", "ประทับใจมาก",
"ไม่อร่อย", "รสชาติแย่", "รสชาติไม่ดี", "รสชาติเผ็ดเกินไป", "รสชาติหวานไป", "รสชาติไม่ถูกปาก",
"แพงเกินไป", "ไม่คุ้มค่า", "ราคาแพง", "แพงเว่อร์", "ไม่คุ้มราคา", "ถูกแต่ไม่ดี",
"บริการแย่", "พนักงานหงุดหงิด", "พนักงานพูดไม่ดี", "พนักงานช้า", "พนักงานหน้าบึ้ง",
"ร้านสกปรก", "อาหารเก่า", "อาหารเหม็น", "อาหารไม่สด", "ชิ้นเล็ก", "เนื้อเหนียว",
"เค็มไป", "หวานไป", "มันไป", "จืดสนิท", "รอนาน", "รอนานมาก", "เสิร์ฟช้า",
"ผิดหวัง", "ไม่เหมือนรีวิว", "ไม่สมราคา", "ห่วยแตก", "อย่ามา", "แย่มาก"
}
positive = {word for word in custom_words if word not in {
"ไม่อร่อย", "รสชาติแย่", "รสชาติไม่ดี", "รสชาติเผ็ดเกินไป", "รสชาติหวานไป", "รสชาติไม่ถูกปาก",
"แพงเกินไป", "ไม่คุ้มค่า", "ราคาแพง", "แพงเว่อร์", "ไม่คุ้มราคา", "ถูกแต่ไม่ดี",
"บริการแย่", "พนักงานหงุดหงิด", "พนักงานพูดไม่ดี", "พนักงานช้า", "พนักงานหน้าบึ้ง",
"ร้านสกปรก", "อาหารเก่า", "อาหารเหม็น", "อาหารไม่สด", "ชิ้นเล็ก", "เนื้อเหนียว",
"เค็มไป", "หวานไป", "มันไป", "จืดสนิท", "รอนาน", "รอนานมาก", "เสิร์ฟช้า",
"ผิดหวัง", "ไม่เหมือนรีวิว", "ไม่สมราคา", "ห่วยแตก", "อย่ามา", "แย่มาก"
}}
def get_sentiment_score(text):
return sum(1 if w in positive else -1 if w in custom_words else 0 for w in text.split())
def get_bert_features(text):
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=512)
with torch.no_grad():
outputs = bert_model(**inputs)
bert_embedding = outputs.last_hidden_state[:, 0, :].cpu().numpy()
sentiment_score = np.array([[get_sentiment_score(text)]])
return np.concatenate([bert_embedding, sentiment_score], axis=1)