การสร้างโมเดล AI ในการจำแนกข้อความรีวิวแอปพลิเคชั่นด้วย Tensorflow และ Keras โดยใช้ Python
Tags: ai, python, tensorflow, machinelearning
Published: 2024-04-09 15:08:14

การรับรู้ความพึงพอใจจากลูกค้ามีความสำคัญอย่างยิ่ง ไม่ว่าจะเป็นธุรกิจด้านการขายหรือสื่อบันเทิง เพื่อการจัดการข้อเสนอแนะจากลูกค้าได้อย่างรวดเร็วเพื่อความง่ายต่อการจำแนกเราเลยจะเลือกใช้ตัวสร้างโมเดล AI อย่าง Tensorflow และ Keras เข้ามาช่วยในการจำแนก

<u>Tensorflow</u> และ <u>Keras</u> เป็นเครื่องมือสำหรับการพัฒนาและฝึกโมเดล AI และ machine learning โดย
Tensorflow สามารถนำไปใช้งานได้หลากหลายสำหรับการสร้างและฝึกโมเดล AI เช่น การจำแนกข้อความ การจำแนกภาพ  
Keras คือ high-level neural networks API ที่ถูกสร้างขึ้นบน Tensorflow ทำให้สามารถ สร้างและฝึกโมเดล neural networks ได้อย่างรวดเร็ว

โดยบทความนี้เราจะมาดูถึงการใช้งาน Tensorflow และ Keras ใน Python ว่าสามารถจำแนกข้อความได้อย่างไรบ้าง ซึ่งจะใช้ Google Colab ในการรันตัว Code โดย Dataset ที่ใช้ คือ ตัวอย่างข้อความที่สร้างขึ้นมาเองเพื่อรีวิวตัว application

---

**ขั้นตอนที่ 1 นำเข้า Libraries ที่จะใช้ลง Google Colab**

```
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import numpy as np
```

**ขั้นตอนที่ 2 เตรียมข้อมูล train_data คือข้อความรีวิวนั้นเอง**

```
train_data = [
    ("This is a great application", 1),
    ("I love this application", 1),
    ("This is a bad application", 0),
    ("I hate this application", 0),
    ("This application was okay, not great but not bad", 0)
]
```

โดย จากตัว Code ที่เราได้กำหนดข้อความรีวิวไปจะมีทั้งข้อความรีวิวที่แย่ และดี โดยจะกำหนดเลขให้ ข้อความที่ดีเป็น 1 และ ข้อความที่แย่เป็น 0 

`("I love this application", 1)`
`("This is a bad application", 0)`

**ขั้นตอนที่ 3 แยกข้อความกับตัวเลขกำกับและทำการแปลงข้อความเป็นตัวเลข และแปลงเลขกำกับเป็น array**

```
texts, labels = zip(*train_data)
```
แยกข้อความและตัวเลขของรีวิวดีและไม่ดีโดยใช้ `zip`

```
tokenizer = tf.keras.preprocessing.text.Tokenizer(num_words=1000)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
x_train = tf.keras.preprocessing.sequence.pad_sequences(sequences, maxlen=10)
```
เสร็จแล้ว ใช้ `Tokenizer` ใน TensorFlow เพื่อแปลงข้อความเป็น sequences ของตัวเลข และทำการ padding เพื่อให้ทุก sequence มีความยาวเท่ากัน

เพื่อให้ง่ายต่อการฝึกโมเดลเราจะแปลงเลข 0 กับ 1 ให้อยู่ในรูปแบบของ array
```
y_train = np.array(labels)
```

**ขั้นตอนที่ 4 ทำการสร้างโมเดลที่ใช้ในการจำแนกและนำไปคอมไพล์**

ใช้ Sequential API ใน Keras เพื่อสร้างโมเดล neural network ที่ประกอบด้วย Embedding layer, Flatten layer และ Dense layer.

```
model = Sequential([
    layers.Embedding(input_dim=1000, output_dim=16, input_length=10),
    layers.Flatten(),
    layers.Dense(1, activation='sigmoid')
])
```

Embedding คือ การแปลงคำศัพท์ในประโยคเป็น dense vectors

Flatten คือ แปลงข้อมูลให้เป็นเวกเตอร์ชั้นเดียว

Dense เพื่อทำนายความน่าจะเป็นว่ารีวิว application เป็นบวกหรือลบ โดยใช้ activation function เป็น `sigmoid` เพื่อให้ได้ผลลัพธ์เป็นค่าความน่าจะเป็นของการเป็นบวกหรือลบ

```
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
```

คอมไพล์โมเดล Neural Network เพื่อเตรียมพร้อมสำหรับการเทรนโมเดล

optimizer เป็น 'adam'
loss function เป็น 'binary_crossentropy'
ใช้เมตริก 'accuracy' เพื่อวัดประสิทธิภาพของโมเดล

**ขั้นตอนที่ 5 Train ข้อมูลที่เตรียมไว้**

```
model.fit(x_train, y_train, epochs=10)
```

ผลลัพธ์ที่ได้

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/btqeze0sio7t75dwzdq5.jpg)

จะเป็นการ Train ข้อมูล 10 รอบเพื่อเพิ่มความแม่นยำและเหมาะสม

**ขั้นตอนที่ 6 ทดลอง Predict จากข้อมูลที่ทดสอบ**

เริ่มจากการ Predict ด้วยคำพูดตัวอย่าง

```
test_data = ["This is a great application", "I hate this application"]
test_seq = tokenizer.texts_to_sequences(test_data)
test_seq_padded = tf.keras.preprocessing.sequence.pad_sequences(test_seq, maxlen=10)
predictions = model.predict(test_seq_padded)
print(predictions)
```
ผลลัพธ์


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q771kxpcsd3vgy2brbb0.png)



ค่าที่ได้จากการสังเกต
`This is a great application` คือ มีค่าความน่าจะเป็นมากกว่า 0.5 จะเป็นความคิดเห็นหรือเป็นรีวิวที่ดี

`I hate this application` คือ มีค่าความน่าจะเป็นน้อยกว่า 0.5 จะเป็นความคิดเห็นที่ไม่ดี

---


**ตัวอย่างการรันใช้งาน**

จาก**ขั้นตอนที่ 5** ถ้าหากเราเพิ่มรอบการ train ข้อมูลที่เตรียมไว้ จาก 10 เป็น 30 ละ??

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/adabxq8lo9bjia636aao.png)

และทำการเปลี่ยนความคิดเห็นจาก Code ของ**ขั้นตอนที่ 6**

```
test_data = ["I love this application", "this application is so bad"]
```

ผลลัพธ์ที่ได้

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3bojbzbx5juil8krvbfu.png)

ค่าที่ได้ มีค่าความน่าจะเป็นมากขึ้นกว่าเก่าเยอะเลย 😮😮

---

**สรุปผล**
จากการ Train model รีวิว application เราจะเห็นได้ว่า ค่าความน่าจะเป็นที่ได้จะเพิ่มขึ้นและแม่นยำมากขึ้นเกิดจากการ Train model ที่ประสิทธิภาพ จากตอนแรกที่เรา Train model ไป 10 รอบ ค่าทั้ง 2 จะอยู่ความคิดเห็นที่ดีอยู่ที่ 0.55 และ ที่แย่ 0.41
แต่เมื่อเราเพิ่มรอบ Train model ไปเป็น 30 รอบ ความคิดเห็นจะเพิ่มขึ้นอย่างเห็นได้ชัดโดยความคิดเห็นที่ดีจะอยู่ที่ 0.61 และที่แย่จะอยู่ที 0.31 

ดังนั้น การเพิ่มรอบการ Train model และการเตรียมข้อมูลในการ Train จึงเป็นสิ่งสำคัญในการหาความแม่นยำจากตัว AI นั้นเอง

---
ขอขอบคุณข้อมูลจาก

https://www.tensorflow.org/tutorials/keras/text_classification