Скрытые марковские модели в пакете R
Мне нужна помощь в реализации модуля HMM в R. Я новичок в R и не очень разбираюсь в этом. Поэтому я должен реализовать IE, используя HMM, у меня есть 2 папки с файлами, одна с предложениями, а другая с соответствующими тегами, которые я хочу выучить из каждого предложения.
folder1 > event1.txt: "2013 2nd International Conference on Information and Knowledge Management (ICIKM 2013) will be held in Chengdu, China during July 20-21, 2013."
folder2 > event1.txt:
"N: 2nd International Conference on Information and Knowledge Management (ICIKM 2013)
D: July 20-21, 2013
L: Chengdu, China"
N -> Name; D -> Date; L -> Location
Мой вопрос заключается в том, как реализовать это на R, как я инициализирую модель и как мне ее обучить? И как мне применить его к случайному предложению для извлечения информации?
Заранее спасибо за помощь!
4 ответа
Если вы запустите следующую команду:
RSiteSearch('hidden markov model')
Затем он находит 4 вида задач, 40 виньеток и 255 функций (когда я запустил его, к тому времени, когда вы его запустите, их может быть больше).
Я бы посоветовал просмотреть эти результаты (вероятно, начните с представлений и виньеток), чтобы увидеть, работает ли что-нибудь для вас. Если нет, то скажите нам, что вы пробовали, и что вам нужно, чего там нет.
Я не уверен, что именно вы хотите сделать, но вам может пригодиться этот замечательный учебник по скрытым марковским моделям с использованием R. Вы строите функции и марковские модели с нуля, начиная с обычных марковских моделей, а затем переходя к скрытым марковским моделям. Это действительно ценно понимать, как они работают.
Существует также пакет R depmixS4 для определения и подгонки скрытых моделей Маркова. Его документация довольно солидна, и прохождение примера кода может вам помочь.
depmixS4
является наиболее общим и достаточно хорошим пакетом, если вы заставите его работать с вашими данными. Он проверил фиктивные данные для меня, но дал ошибку на реальных данных. HMM
также работает, но только если у вас есть дискретные переменные, а не непрерывные.
DepmixS4 - это то, что вы ищете.
Прежде всего, вам нужно определить наилучшее количество скрытых состояний для вашей модели. Это можно сделать, взяв модель с наименьшим значением AIC для разных скрытых состояний.
Я создал функцию HMM_model_execution, которая будет возвращать переменную модели и количество состояний для модели.
library(depmixS4)
первый столбец должен быть видимым состоянием и оставшейся внешней переменной в doc_data
HMM_model_execution<-function( doc_data, k)
k количество всего скрытого состояния для сравнения
{ aic_values <- vector(mode="numeric", length=k-1) # to store AIC values for( i in 2:k) { print(paste("loop counter",i)) mod <- depmix(response = doc_data$numpresc ~ 1, data = doc_data, nstates = i) fm <- fit(mod, verbose = FALSE) aic_values[i-1]<- AIC(fm) #print(paste("Aic value at this index",aic_values[i-1])) #writeLines("\n") } min_index<-which.min(aic_values)
нет скрытых состояний для лучшей модели
#print(paste("index of minimum AIC",min_index)) mod <- depmix(response = doc_data$numpresc ~ 1, data = doc_data, nstates = (min_index+1)) fm <- fit(mod, verbose = FALSE)
лучшее исполнение модели
print(paste("best model with number of hidden states", min_index+1)) return(c(fm, min_index+1)) writeLines("\n") writeLines("\n")
Внешние переменные (ко-переменные могут быть переданы в функцию depmix). резюме (ФМ) даст вам все параметры модели.