บทนำเกี่ยวกับโมเดลภาษา

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

David Cecchini

Data Scientist

ความน่าจะเป็นของประโยค

โมเดลที่มีให้เลือกหลายแบบ

  • ความน่าจะเป็นของ "I loved this movie"
  • Unigram
    • $$P(\text{sentence}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N-gram
    • N = 2 (bigram): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3 (trigram): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

ความน่าจะเป็นของประโยค (ต่อ)

  • Skip gram
    • $$P(\text{sentence}) = P(\text{context of I} | \text{I})P(\text{context of loved} | \text{loved}) \ $$ $$P(\text{context of this} | \text{this})P(\text{context of movie} | \text{movie})$$
  • Neural Networks
    • ความน่าจะเป็นของประโยคคำนวณจากฟังก์ชัน softmax บน output layer ของเครือข่าย
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

ความสัมพันธ์กับ RNN

โมเดลภาษาอยู่ในทุกที่ใน RNN!

  • ตัวเครือข่ายเอง

โมเดล RNN ทำหน้าที่เป็นโมเดลภาษาได้ เนื่องจากสามารถใช้ทำนายคำถัดไปได้

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

ความสัมพันธ์กับ RNN (ต่อ)

  • Embedding layer

แสดงภาพรวมของเลเยอร์ต่าง ๆ ในโมเดล โดย embedding layer ต้องเป็นเลเยอร์แรกหลัง input layer และสร้างการแทนค่าแบบหนาแน่นของคำ

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

สร้าง dictionary ของคลังคำ

# Get unique words
unique_words = list(set(text.split(' ')))
# Create dictionary: word is key, index is value
word_to_index = {k:v for (v,k) in enumerate(unique_words)}
# Create dictionary: index is key, word is value
index_to_word = {k:v for (k,v) in enumerate(unique_words)}
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

การเตรียม input

# Initialize variables X and y
X = []
y = []

# Loop over the text: length `sentence_size` per time with step equal to `step` for i in range(0, len(text) - sentence_size, step):
X.append(text[i:i + sentence_size]) y.append(text[i + sentence_size])
# Example (numbers are numerical indexes of vocabulary):
# Sentence is: "i loved this movie" -> (["i", "loved", "this"], "movie")
X[0],y[0] = ([10, 444, 11], 17)
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

แปลงข้อความใหม่

# Create list to keep the sentences of indexes
new_text_split = []

# Loop and get the indexes from dictionary for sentence in new_text:
sent_split = []
for wd in sentence.split(' '):
ix = wd_to_index[wd]
sent_split.append(ix)
new_text_split.append(sent_split)
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

มาฝึกกันเถอะ!

Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras

Preparing Video For Download...