Mô hình Markov ẩn
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.
Các chuyển tiếp trạng thái trong mô hình Markov ẩn
[sửa | sửa mã nguồn]Sự tiến hóa của mô hình Markov
[sửa | sửa mã nguồn]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.
Sử dụng các mô hình Markov
[sửa | sửa mã nguồn]Có ba vấn đề cơ bản để giải quyết bằng HMM:
- Cung cấp cho mô hình các tham số, tính xác suất của dãy đầu ra cụ thể. Giải bằng thuật toán tiến trước (thuật toán tham lam).
- Cung cấp cho mô hình các tham số, tìm dãy các trạng thái (ẩn) có khả năng lớn nhất mà có thể sinh ra dãy đầu ra đã cung cấp. Giải bằng thuật toán Viterbi.
- Cung cấp dãy đầu ra, tìm tập hợp có khả năng nhất của chuyển tiếp trạng thái và các xác suất đầu ra. Giải bằng thuật toán Baum-Welch.
Ví dụ cụ thể
[sửa | sửa mã nguồn]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
Các ứng dụng
[sửa | sửa mã nguồn]- Sự nhận biết lời nói hay sự nhận biết ký tự quang học
- Quy trình ngôn ngữ tự nhiên
- Tin sinh học và hệ gen học
- Dự đoán các vùng mang mã (khung đọc mở) trên một trình từ gene.
- Xác định các họ gene hoặc họ protein liên quan.
- Mô phỏng cấu trúc không gian của protein từ trình tự amino acid.
- và còn nhiều nữa...
Xem thêm
[sửa | sửa mã nguồn]Tham khảo
[sửa | sửa mã nguồn]- Lawrence Rabiner, 1989. A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition. http://www.caip.rutgers.edu/~lrr/Reprints/tutorial%20on%20hmm%20and%20applications.pdf Lưu trữ 2007-02-09 tại Wayback Machine
- Kristie Seymore, Andrew McCallum, and Roni Rosenfeld. Learning Hidden Markov Model Structure for Information Extraction. AAAI 99 Workshop on Machine Learning for Information Extraction, 1999. (also at CiteSeer: [1] Lưu trữ 2003-12-08 tại Wayback Machine)
- Profile hidden Markov models SR Eddy Bioinformatics 1998.
Tham khảo
[sửa | sửa mã nguồn]Liên kết ngoài
[sửa | sửa mã nguồn]- Hidden Markov Model (HMM) Toolbox for Matlab Lưu trữ 2005-01-07 tại Wayback Machine (by Kevin Murphy)
- Hidden Markov Models (an exposition using basic mathematics)
- GHMM Library (home page of the GHMM Library project)
- A step-by-step tutorial on HMMs Lưu trữ 2017-08-13 tại Wayback Machine (University of Leeds)