Mô hình Markov ẩn (tiếng Anh là Hidden Markov Model - HMM) là mô hình thống kê trong đó hệ thống được mô hình hóa được cho là một quá trình Markov với các tham số không biết trước và nhiệm vụ là xác định các tham số ẩn từ các tham số quan sát được, dựa trên sự thừa nhận này. Các tham số của mô hình được rút ra sau đó có thể sử dụng để thực hiện các phân tích kế tiếp, ví dụ cho các ứng dụng nhận dạng mẫu.
Trong một mô hình Markov điển hình, trạng thái được quan sát trực tiếp bởi người quan sát, và vì vậy các xác suất chuyển tiếp trạng thái là các tham số duy nhất. Mô hình Markov ẩn thêm vào các đầu ra: mỗi trạng thái có xác suất phân bổ trên các biểu hiện đầu ra có thể. Vì vậy, nhìn vào dãy của các biểu hiện được sinh ra bởi HMM không trực tiếp chỉ ra dãy các trạng thái.
Đây là một mô hình toán thống kê có ứng dụng rộng rãi trong Tin sinh học.
Biểu đồ(Markov) trên đây làm nổi bật các chuyển tiếp trạng thái của mô hình Markov ẩn. Nó cũng có ích để biểu diễn rõ ràng sự tiến hóa của mô hình theo thời gian, với các trạng thái tại các thời điểm khác nhau t1 và t2 được biểu diễn bằng các tham biến khác nhau, x(t1) và x(t2).
Trong biểu đồ này, nó được hiểu rằng thời gian chia cắt ra (x(t), y(t)) mở rộng tới các thời gian trước và sau đó như một sự cần thiết. Thông thường lát cắt sớm nhất là thời gian t=0 hay t=1.
Có ba vấn đề cơ bản để giải quyết bằng HMM:
Giả sử tôi có một người bạn sống ở rất xa. Hàng ngày chúng tôi gọi điện thoại cho nhau và anh ta kể cho tôi nghe anh ta đã làm gì trong ngày. Người bạn tôi chỉ có 3 công việc mà anh thích làm là 1) đi dạo, 2) đi chợ và 3) dọn phòng. Hiển nhiên là sự lựa chọn phải làm gì thì phụ thuộc trực tiếp vào thời tiết hôm đấy thế nào. Như vậy, tôi không nhận được thông tin cụ thể về thời tiết nơi anh bạn tôi sống nhưng tôi lại biết về xu hướng chung. Dựa vào lời kể của công việc hàng ngày của anh ta, tôi có thể đoán về thời tiết hôm đó.
Như vậy, thời tiết được vận hành như một chuỗi Markov cụ thể. Có 2 trạng thái thời tiết, "Mưa" và "Nắng", nhưng tôi không quan sát trực tiếp, do đó, chúng là ẩn đối với tôi. Vào mỗi ngày, anh bạn tôi sẽ làm một trong các việc sau phụ thuộc vào thời tiết hôm đó là "đi dạo", "đi chợ" và "dọn phòng". Vì anh bạn tôi đã tường thuật lại hoạt động của mình, đó là các dữ liệu quan sát. Toàn bộ hệ thống này là một mô hình Markov ẩn (HMM).
Tôi biết được xu hướng thời tiết nói chung và tôi cũng biết bạn tôi thường thích làm gì. Nói cách khác, các thông số của HMM đã biết. Thực tế, chúng ta có thể mô tả điều này bằng ngôn ngữ lập trình Python:
trạng thái = ('Mưa', 'Nắng') dữ liệu quan sát = ('đi dạo', 'đi chợ', 'dọn phòng') khả_năng_ban_đầu = {'Mưa': 0.6, 'Nắng': 0.4} khả_năng_chuyển_dịch = { 'Mưa' : {'Mưa': 0.7, 'Nắng': 0.3}, 'Nắn' : {'Mưa': 0.4, 'Nắng': 0.6}, } khả_năng_loại_bỏ = { 'Mưa' : {'đi dạo': 0.1, 'đi chợ': 0.4, 'dọn phòng': 0.5}, 'Nắng' : {'đi dạo': 0.6, 'đi chợ': 0.3, 'dọn phòng': 0.1}, }
Trong đoạn câu lệnh trên, khả_năng_ban_đầu
cho thấy tôi không chắc về trạng thái HMM khi người bạn đầu tiên gọi điện cho tôi (tất cả cái tôi biết là trời có vẻ mưa). khả_năng_chuyển_dịch
cho thấy những thay đổi về thời tiết trong chuỗi Markov. Trong ví dụ này, chỉ có 30% khả năng ngày mai trời sẽ nắng nếu hôm nay trời mưa. Khả_năng_loại_bỏ
cho thấy anh bạn thích làm những việc gì mỗi ngày. Nếu trời mưa thì có đến 50% khả năng anh bạn này sẽ dọn phòng, trong khi trời nắng thì 60% khả năng anh ta sẽ đi dạo.
Ví dụ này được xem xét tỉ mỉ hơn trong trang thuật toán Viterbi