Mô hình ẩn Markov ngưỡng


14

Tôi đã phát triển một bằng chứng về hệ thống khái niệm để nhận dạng âm thanh bằng cách sử dụng mfcc và các mô hình markov ẩn. Nó cho kết quả đầy hứa hẹn khi tôi kiểm tra hệ thống trên các âm thanh đã biết. Mặc dù hệ thống, khi một âm thanh không xác định được nhập vào sẽ trả về kết quả với trận đấu gần nhất và điểm số không khác biệt để phát minh ra nó là một âm thanh không xác định, ví dụ:

Tôi đã đào tạo 3 mô hình markov ẩn một cho bài phát biểu, một cho nước chảy ra từ vòi nước và một cho gõ trên bàn. Sau đó, tôi kiểm tra chúng trên dữ liệu chưa thấy và nhận được kết quả sau:

input: speech
HMM\knocking:  -1213.8911146444477
HMM\speech:  -617.8735676792728
HMM\watertap:  -1504.4735097322673

So highest score speech which is correct

input: watertap
HMM\knocking:  -3715.7246152783955
HMM\speech:  -4302.67960438553
HMM\watertap:  -1965.6149147201534

So highest score watertap which is correct

input: knocking
HMM\filler  -806.7248912250212
HMM\knocking:  -756.4428782636676
HMM\speech:  -1201.686687761133
HMM\watertap:  -3025.181144273698

So highest score knocking which is correct

input: unknown
HMM\knocking:  -4369.1702184688975
HMM\speech:  -5090.37122832872
HMM\watertap:  -7717.501505674925
Here the input is an unknown sound but it still returns the closest match as there is no system for thresholding/garbage filtering.

Tôi biết rằng trong từ khóa phát hiện ra âm thanh OOV (không có từ vựng) có thể được lọc ra bằng mô hình rác hoặc chất độn nhưng nó nói rằng nó được đào tạo bằng cách sử dụng một tập hợp các từ chưa biết hữu hạn mà từ này không thể áp dụng cho hệ thống của tôi khi tôi không 't biết tất cả các âm thanh mà hệ thống có thể ghi lại.

Làm thế nào là một vấn đề tương tự được giải quyết trong hệ thống nhận dạng giọng nói? Và làm thế nào tôi có thể giải quyết vấn đề của mình để tránh những sai lầm tích cực?

Câu trả lời:


5

Câu hỏi rất hay!

Như bạn đã đề cập, cách duy nhất để HMM cung cấp cho bạn câu trả lời "Tôi không biết" (hãy gọi nó là OOV) là cung cấp cho nó một trạng thái đặc biệt vì nó luôn đưa ra các trạng thái có khả năng cao nhất theo mô hình của bạn. Vì vậy, bạn phải đảm bảo rằng OOV có khả năng cao hơn dưới mọi đầu vào không speech, watertaphoặc knocking.

Câu trả lời ngắn gọn là điều này là không thể. Bởi vì HMM không phải là một nhận dạng mẫu tuyệt đối. Nó chỉ so sánh khả năng của các kết quả đầu ra theo mô hình của bạn và trong bối cảnh nó được đào tạo .

Hãy suy nghĩ về một đầu vào sẽ speechknockingđồng thời. Nhiều khả năng HMM sẽ "do dự" giữa hai trạng thái này vì đầu vào này có các tính năng của mỗi trạng thái. Cuối cùng, nó sẽ xuất ra một trong số đó, nhưng có vẻ như nó sẽ không xuất ra OOV. Trong trường hợp phát hiện từ khóa, tôi đoán là bạn có thể tìm thấy đầu vào thông minh sẽ liên tục đánh lừa HMM của họ. Tuy nhiên, các tác giả có thể biết đầu vào nào để mong đợi và họ đã chọn danh sách hữu hạn các từ chưa biết để những đầu vào độc hại này không phổ biến.

Tôi khuyên bạn nên làm như vậy. Hãy suy nghĩ về các tình huống mà bạn sẽ sử dụng HMM và huấn luyện trạng thái OOV trên các đầu vào phổ biến nhất mà bạn muốn loại bỏ. Bạn thậm chí có thể nghĩ rằng có một số tiểu bang OOV.


2
Nhưng làm thế nào về một mô hình ngưỡng dựa trên hmm để nhận dạng cử chỉ được mô tả ở đây: herin.kaist.ac.kr/Publication/PS/hklee_PAMI_i09611.pdf . Họ tạo ra một mô hình ngưỡng là một hmm ergodic có các trạng thái của mỗi hmm kết hợp với nhau. "Mô hình ngưỡng hoạt động như một đường cơ sở. Một cử chỉ ứng cử viên được tìm thấy khi một mô hình cử chỉ cụ thể tăng lên trên ngưỡng" Nhưng vấn đề của tôi là tôi đang sử dụng thư viện java và jahmm và tôi không nghĩ rằng nó có tùy chọn cho ergodic hmm
Radek

Giống như nó nói trong tiêu đề, đây là một thuật toán dựa trên HMM, vì vậy nó không phải là một HMM. Dường như với tôi rằng một HMM thuần túy không phù hợp với nhu cầu của bạn và phân loại dựa trên ngưỡng thực sự phù hợp hơn.
gui11aume

5

Điều này là hơi phổ biến trong lĩnh vực nhận dạng cử chỉ. Câu trả lời là tạo ra một mô hình ngưỡng như được mô tả trong bài báo của Lee và Kim (1999)

Nó đóng vai trò tương tự như mô hình phụ hoặc mô hình rác, nhưng nó không cần phải được đào tạo riêng như bạn nói. Bạn có thể tạo mô hình ngưỡng bằng cách kết nối tất cả các trạng thái tự chuyển đổi từ các mô hình khác của mình và khởi tạo chuyển đổi với xác suất thống nhất, kết nối đầy đủ các trạng thái đó. Xin hãy xem trên giấy để xem làm thế nào nó thực sự có thể được thực hiện.

Ngay cả khi thư viện của bạn không hỗ trợ các mô hình ergodic, nó cũng không ngăn bạn tạo thủ công một mô hình có kích thước theo yêu cầu và đặt trạng thái phù hợp. Nếu bạn thực sự muốn có một thư viện cho điều đó, thì việc triển khai cho các trình phân loại mô hình Markov ẩn bao gồm hỗ trợ cho các mô hình ngưỡng có sẵn trong Accord.NET Framework , chẳng hạn.

Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của thư viện này.


Phải tôi có thể tự tạo một mô hình ngưỡng. Vì vậy, giả sử tôi có hai mô hình hmm có tên: sound1 và sound2. Cả hai đều có 2 trạng thái. Sau đó, tôi tạo một mô hình ngưỡng với 4 trạng thái. Mỗi trạng thái có cùng giá trị ban đầu là 0,25. Sau đó, tôi đặt phân phối đồng đều cho tất cả các chuyển đổi có thể để tất cả các chuyển đổi trạng thái có thể (0,0), (0,1), (1,0), (1,1), (1,2), (2,1), (2,2), vv có được phân phối đồng đều 0,0625. Sau đó, đối với trạng thái 1 và 2 của mô hình ngưỡng, tôi đặt opdf của trạng thái 1 và 2 từ sound1 và cho trạng thái 3 và 4 của ngưỡng tôi đặt opdf của trạng thái 1 và 2 từ sound2.
Radek

Là cách tiếp cận được mô tả ở trên là chính xác?
Radek

1
Không hoàn toàn ... có lẽ tôi đã hơi lỏng lẻo trong mô tả của mình. Các phần tử đường chéo của ma trận chuyển tiếp của bạn cho mô hình ngưỡng nhận được xác suất tự chuyển đổi ban đầu từ các mô hình khác của bạn. Việc chuyển đổi từ trạng thái này sang trạng thái khác được khởi tạo với xác suất thống nhất. Tôi biết có vẻ lười biếng khi chỉ ra mã, nhưng đôi khi mã dễ hiểu hơn các công thức .
Cesar

Nhân tiện, nếu bạn đã đọc bài báo của Lee và Kim và đã diễn giải nó theo cách khác, hoặc tin rằng việc thực hiện của tôi là không chính xác, xin vui lòng cho tôi biết.
Cesar

3

Vì vậy, những gì tôi đã làm là: Tôi đã tạo phiên bản đơn giản hóa của một mô hình phụ. Mỗi hmm đại diện cho âm thanh watertap, âm thanh gõ và âm thanh giọng nói là một trạng thái 6 hmm riêng biệt được đào tạo bởi các âm thanh từ tập luyện 30, 50, 90 âm thanh có độ dài khác nhau 0,3 giây đến 10 giây. Sau đó, tôi đã tạo ra một mô hình phụ là 1 hmm bao gồm tất cả các âm thanh tập huấn cho tiếng gõ, tiếng nước và tiếng nói. Vì vậy, nếu điểm số của mô hình hmm lớn hơn đối với một âm thanh nhất định so với điểm số của chất độn - âm thanh được nhận ra nếu không đó là âm thanh không xác định. Tôi thực sự không có dữ liệu lớn nhưng tôi đã thực hiện một thử nghiệm sau đây cho việc từ chối dương tính giả và từ chối dương tính thực sự đối với các âm thanh không nhìn thấy.

true positives rejection
knocking 1/11 = 90% accuracy
watertap 1/9 = 89% accuracy
speech 0/14 = 100% accuracy


false positives rejection
Tested 7 unknown sounds
6/7 = 86% accuracy

Vì vậy, từ thử nghiệm nhanh này tôi có thể kết luận rằng phương pháp này cho kết quả hợp lý mặc dù tôi có cảm giác lạ là nó có thể không đủ.


+1 Điều này rất thú vị. Nếu bạn chưa quên công việc này, cuối cùng thì phương pháp này có hiệu quả không? Đã đủ như một mô hình 'filler / other' chưa? Nếu không, cuối cùng bạn đã thực hiện một cái gì đó khác?
Zhubarb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.