我正在研究Kaggle目前的Allen AI Science Challenge。
挑战背后的想法是使用提供的训练数据(一组八年级科学问题以及四个答案选项,其中一个是正确答案和正确答案)以及任何其他知识来源(维基百科,科学教科书等),以便它可以回答科学问题以及(平均?)八年级学生可以。
我想在R中解决问题的第一个问题(仅精通R和C ++;我不认为C ++将是解决这个问题的非常有用的语言)。在探索了Kaggle论坛后,我决定使用TopicModels(tm),RWeka和Latent Dirichlet算法(LDA)包。
我目前的方法是构建某种文本预测器,在阅读提出的问题时输出一串文本并计算此输出文本与测试集中给出的四个选项之间的余弦相似度并预测正确一个具有最高余弦相似性。
我将使用训练数据,维基百科语料库以及一些科学教科书训练模型,以便模型不会过度拟合。
我在这里有两个问题:
整体方法是否有意义?
构建此文本预测器的良好起点是什么?将语料库(培训数据,维基百科和教科书)转换为术语/文档术语矩阵会有帮助吗?我认为为所有来源形成n-gram会有所帮助,但我不知道下一步将是什么,即模型究竟如何预测并在阅读时带出一串文本(例如,大小为n)一个问题。
我尝试过实施该方法的一部分;找出最佳主题数量并在训练集上执行LDA;这是代码:
library(topicmodels)
library(RTextTools)
data<-read.delim("cleanset.txt", header = TRUE)
data$question<-as.character(data$question)
data$answerA<-as.character(data$answerA)
data$answerB<-as.character(data$answerB)
data$answerC<-as.character(data$answerC)
data$answerD<-as.character(data$answerD)
matrix <- create_matrix(cbind(as.vector(data$question),as.vector(data$answerA),as.vector(data$answerB),as.vector(data$answerC),as.vector(data$answerD)), language="english", removeNumbers=FALSE, stemWords=TRUE, weighting = tm::weightTf)
best.model<-lapply(seq(2,25,by=1),function(k){LDA(matrix,k)})
best.model.logLik <- as.data.frame(as.matrix(lapply(best.model, logLik)))
best.model.logLik.df <- data.frame(topics=c(2:25), LL=as.numeric(as.matrix(best.model.logLik)))
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
best.model.lda<-LDA(matrix,25)
任何帮助将不胜感激!