R中的隐马尔可夫模型包

时间:2013-07-17 09:50:09

标签: r machine-learning hidden-markov-models information-extraction

我需要一些帮助在R中实现HMM模块。我是R的新手并且对它没有太多的了解。 所以我必须使用HMM实现一个IE,我有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 个答案:

答案 0 :(得分:10)

如果您运行以下命令:

RSiteSearch('hidden markov model')

然后它找到4个任务视图,40个Vignettes和255个函数(当我运行它时,运行它时可能会有更多)。

我建议查看这些结果(可能从视图和小插图开始),看看是否有适合你的东西。如果没有,请告诉我们您尝试过的内容以及您需要的内容。

答案 1 :(得分:8)

我不确定你想要做什么,但你可能会发现这个关于hidden Markov models using R的优秀教程很有用。您可以从常规马尔可夫模型开始构建函数和Markov模型,然后转移到隐藏的Markov模型。了解它们的工作方式非常有价值。

还有R包depmixS4用于指定和拟合隐马尔可夫模型。它的文档非常可靠,通过示例代码可能会对您有所帮助。

答案 2 :(得分:2)

depmixS4是最通用且相当不错的软件包,如果您可以使用它来处理您的数据。它为我检查了虚拟数据,但在实际数据上给出了错误。 HMM也有效,但前提是你有离散变量且不连续。

答案 3 :(得分:0)

DepmixS4就是你要找的。

首先,您需要为模型确定最佳隐藏状态数。这可以通过针对不同的隐藏状态采用具有最小值AIC的模型来完成。

我创建了一个函数HMM_model_execution,它将返回模型变量和模型的状态数。

  library(depmixS4)
  • 第一列应为doc_data

    中的可见状态和剩余外部变量
    HMM_model_execution<-function( doc_data, 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")
    

外部变量(co-variates可以在函数depmix中传递)。 summary(fm)将为您提供所有模型参数。