- Published on
Giới thiệu về Markov Chain và ứng dụng
- Authors
- Name
- SnowyField
- @SnowyField1906
Markov Chain là một mô hình xác suất được sử dụng để mô tả các quá trình ngẫu nhiên dựa trên trạng thái trước đó Tuy mô hình này đơn giản nhưng nó lại được ứng dụng rộng rãi trong hầu hết các lĩnh vực trong đời sống nói chung và Machine Leaning nói riêng.
Bài viết này sẽ giới thiệu tổng quan về Markov Chain và các ứng dụng của nó, hướng dẫn chi tiết cách tính Markov Chain và triển khai bằng Python.
Khái niệm
Markov Chain (Chuỗi Markov) là một mô hình xác suất mô tả một chuỗi các sự kiện có thể xảy ra. Đặc điểm quan trọng của Markov Chain là tính memorylessness (không có trí nhớ), nghĩa là xác suất của một sự kiện tiếp theo chỉ phụ thuộc vào sự kiện hiện tại, các sự kiện trước đó sẽ không được ghi nhớ.
Hay nói cách khác, sự phân bố của các trạng thái tương lai chỉ phụ thuộc vào trạng thái hiện tại chứ không phụ thuộc vào cách nó đến trạng thái hiện tại, tính chất này còn được gọi là Markov Property hay Markovian (Tính Markov).
Một ván cờ có tính Markov, vì xác suất chiến thắng chỉ phụ thuộc vào vị trí hiện tại của các quân cờ, không phụ thuộc vào các nước đi trước đó. Trong khi đó, hành động lấy bóng trong một chiếc hộp có thể không có tính Markov, vì xác suất lấy được quả bóng cần tìm phụ thuộc vào các quả bóng đã lấy trước đó.
Các thành phần của Markov Chain
Giả sử có một dịch vụ thuê xe đạp gồm 3 trạm: , và .
Tất cả xe đạp phải được trả lại trạm vào cuối ngày tại một trạm nào đó trong 3 trạm trên. Sau khi kiểm tra tất cả các trạm vào mỗi cuối ngày. Ta nhận thấy rằng:
- Trong các xe đạp mượn từ trạm , có được trả lại trạm , đến trạm và đến trạm .
- Trong các xe đạp mượn từ trạm , có đến trạm , được trả lại trạm và đến trạm .
- Trong các xe đạp mượn từ trạm , có đến trạm , đến trạm và được trả lại trạm .
Khi đó ta có thể biểu diễn Markov Chain của dịch vụ thuê xe đạp này như hình bên dưới.
Qua đó, ta có thể thấy rằng Markov Chain có thể được biểu diễn bởi một Directed Networks (Mạng Có hướng), trong đó các đỉnh là tập hợp các State (Trạng thái) có thể xảy ra, với trọng số là xác suất chuyển từ một trạng thái này sang trạng thái khác.
📝 Nhắc lại
Trong Graph Theory, một Directed Networks (Mạng Có hướng) là sự kết hợp giữa Directed Graph (Đồ thị Có hướng) và Weighted Graph (Đồ thị Có trọng số).
State
State (Trạng thái) là một tập hợp các trạng thái có thể xảy ra trong Markov Chain.
Ở ví dụ trên, ta có 3 trạng thái là , vì một chiếc xe đạp khi muốn đưa về trạm thì chỉ xảy ra 1 trong 3 trường hợp này.
State Vector
State Vector (Vector Trạng thái) là một ma trận có một hàng mô tả xác suất của mỗi trạng thái trong Markov Chain.
Ở ví dụ trên, giả sử tại thời điểm quan sát ban đầu, ta có xe đạp ở trạm , ở trạm và ở trạm . Khi đó ta có vector trạng thái ban đầu là:
Transition Matrix
Transition Matrix (Ma trận Chuyển tiếp) là một ma trận mô tả xác suất chuyển từ một trạng thái này sang một trạng thái khác trong Markov Chain.
Trong đó là xác suất chuyển từ trạng thái sang trạng thái . Có thể kí hiệu là:
Ở ví dụ trên, thay vì mô tả bằng graph (vừa không thân thiện với máy tính, vừa phức tạp khi có nhiều trạng thái), ta có thể mô tả bằng transition matrix sau:
Lưu ý rằng transition matrix là một ma trận vuông, và các dòng của ma trận này phải có tổng bằng .
Các phép tính trên Markov Chain
Tìm xác xuất các trạng thái
Quay lại ví dụ vừa rồi, ta đã có transition matrix biểu diễn xác suất thay đổi trạm của các xe đạp, và vector trạng thái ban đầu biểu diễn xác suất phân bố giữa các trạm ban đầu.
Lúc này, ta có thể tính được xác suất phân bố của các chiếc xe đạp ở các trạm sau 1 ngày bằng cách tính như sau:
Vậy ta đã tính được sau ngày đầu tiên, xác suất các xe đạp ở các trạm , , lần lượt là , và .
Bây giờ, để tính được xác suất phân bố của các xe đạp ở các trạm sau 2 ngày, ta sẽ tính dựa trên state vector của ngày thứ nhất:
Vậy ta đã tính được sau ngày thứ hai, xác suất các xe đạp ở các trạm , , lần lượt là , và .
Tới đây, ta có thể rút ra được công thức tổng quát để tính xác suất phân bố của các xe đạp ở các trạm sau ngày:
Ta đã biết vì , nên ,... Tuy nhiên ý nghĩa thực sự của là gì?
Tìm xác suất chuyển trạng thái
Để giải quyết câu hỏi trên, ta sẽ thử tìm :
Từ định nghĩa của transition matrix tại , còn cho ta biết biết xác suất chuyển trạng thái của xác xe đạp sau ngày đầu tiên.
Vậy, chính là ma trận mô tả xác suất phân phối các trạng thái sau ngày. Ví dụ, xác suất một chiếc xe đạp chuyển từ trạm sang trạm sau ngày là .
Ta có công thức tổng quát để tính xác suất chuyển trạng thái sau ngày:
Ví dụ khác
Coca vs. Pepsi
Cho rằng:
- Nếu loại nước ngọt gần nhất mà một người mua là , sẽ có khả năng người đó sẽ mua trong lần mua tiếp theo.
- Nếu loại nước ngọt gần nhất mà một người mua là , sẽ có khả năng người đó sẽ mua trong lần mua tiếp theo.
Giả sử một người mua trong lần mua đầu tiên, hãy tính xác suất người đó sẽ mua trong lần mua thứ .
Ta lập transition matrix với là các trạng thái:
Với:
Khi đó:
Ta cũng có thể tính bằng cách tính :
Bài toán con chuột
Cho một con chuột sống trong căn nhà gồm phòng như sau:
Mỗi ngày, con chuột sẽ lựa chọn ngẫu nhiên giữa việc ở lại phòng hiện tại với xác suất , hoặc di chuyển đến một phòng liền kề với xác suất .
Giả sử con chuột ban đầu ở phòng , hãy tính xác suất con chuột sẽ ở phòng sau ngày.
Ta lập transition matrix với là các trạng thái:
Tính :
Do đó, xác suất con chuột từ phòng chuyển đến phòng sau ngày là .
Triển khai language model đơn giản bằng Markov Chain
Dựa vào ý tưởng của bài toán con chuột, ta có thể sử dụng Markov Chain để tạo ra văn bản ngẫu nhiên. Bằng cách nhập vào một từ bất kỳ, ta sẽ tạo ra một câu ngẫu nhiên với độ dài tuỳ ý.
Ví dụ khi ta nhập từ "I", sẽ có một xác suất sinh ra từ "can", và với từ "can", sẽ có một xác suất sinh ra từ "fix" hoặc "not", và với từ "not", sẽ có một xác suất sinh ra từ "fix",...
Để có thể triển khai được mô hình này, ta cần một đoạn văn lớn làm dữ liệu, và shakespeare.txt là một tập dữ liệu phù hợp cho ví dụ này.
Về lí thuyết, ta sẽ tách các bi-gram (cặp từ) trong đoạn văn đó ra làm các trạng thái, và tính xác suất chuyển trạng thái giữa các trạng thái đó.
Tuy nhiên để đơn giản hoá, ta sẽ sử dụng một dictionary
với các key là các từ duy nhất trong đoạn văn, và các value là một list
chứa các từ tiếp theo đã xuất hiện sau từ đó. Ví dụ:
{
"I": ["can", "am", "do", "am", ...],
"can": ["fix", "go", "not", "not", ...]
}
Toàn bộ code có thể xem chi tiết tại: snowyfield1906/ai-general-research/markov_chain /markov_chain.py.
Tiền xử lí và train model
class Markov():
def __init__(self, file_path):
self.file_path = file_path
self.text = self.remove_punctuations(self.get_text())
self.text = self.remove_newline(self.text)
self.model = self.model()
def get_text(self):
text = []
for line in open(self.file_path):
text.append(line)
return ' '.join(text)
def remove_punctuations(self, text):
return text.translate(str.maketrans('','', string.punctuation))
def remove_newline(self, text):
return text.replace('\n', '')
def model(self):
words = self.text.split(' ')
markov_dict = defaultdict(list)
for current_word, next_word in zip(words[0:-1], words[1:]):
markov_dict[current_word].append(next_word)
return dict(markov_dict)
Tạo câu ngẫu nhiên
def predict_words(chain, first_word, number_of_words=5):
if first_word in list(chain.keys()):
word1 = str(first_word)
predictions = word1.capitalize()
for i in range(number_of_words-1):
word2 = random.choice(chain[word1])
word1 = word2
predictions += ' ' + word2
predictions += '.'
return predictions
else:
return "Word not in corpus"
Kiểm thử
m = Markov('./shakespeare.txt')
chain = m.model
output = predict_words(chain, first_word = 'but')
print(output)
> But that have bought me.
Ứng dụng
Markov Chain được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau, xét riêng về Machine Learning, Markov Chain được sử dụng trong rất nhiều bài toán như:
- Natural Language Processing (Xử lí Ngôn ngữ Tự nhiên)
- Recommendation System (Hệ thống Gợi ý)
- Reinforcement Learning (Học Tăng cường)
- Computer Vision (Thị giác Máy tính)
- Speech Recognition (Nhận dạng Giọng nói)
- ...
Trong đó, có 2 khái niệm quan trọng là Hidden Markov Model (Mô hình Markov Ẩn) và Markov Decision Process (Quy trình Quyết định Markov). Sẽ được giới thiệu trong các bài viết tiếp theo.
✿
Khái niệm
✿
Các thành phần của Markov Chain
◎
State
◎
State Vector
◎
Transition Matrix
✿
Các phép tính trên Markov Chain
◎
Tìm xác xuất các trạng thái
◎
Tìm xác suất chuyển trạng thái
◎
Ví dụ khác
▣
Coca vs. Pepsi
▣
Bài toán con chuột
✿
Triển khai language model đơn giả...
◎
Tiền xử lí và train model
◎
Tạo câu ngẫu nhiên
◎
Kiểm thử
✿
Ứng dụng