我想使用监督机器学习算法来基于句子中单词的存在或不存在来预测一组句子的二元函数(真或假) .
理想情况下,我希望避免硬编码用于决定输出的单词集,以便算法自动学习哪些单词(一起?)最有可能触发特定输出 .
http://shop.oreilly.com/product/9780596529321.do(编程集体智慧)在第4章中有一个很好的部分, Headers 为"Learning From Clicks",它描述了如何通过在神经网络中使用1层hiden节点来实现这一点,每个新的输入字组合都有一个新的隐藏节点 .
类似地,可以为训练数据集中的每个单词创建一个特征,并使用这些特征训练几乎任何经典的机器学习算法 . 添加新的训练数据将生成新功能,这将要求我从头开始重新训练算法 .
这让我想到了我的问题:
-
如果我必须在训练数据集扩展时从头开始重新训练一切,这实际上是一个问题吗?
-
哪种算法更能体验机器学习用户建议用于此类问题?
-
在选择算法时我应该使用什么标准? (除了实际尝试它们之外,看看哪些表现更好,精确/召回指标)
-
如果你已经解决了类似的问题,那么用2克扩展功能呢(如果存在特定的2克则为1,如果不存在则为0)? 3克?
1 回答
如果要查找通常一起找到的单词,可以查看主题建模的一般区域 .
最简单的方法是使用潜在语义分析(http://en.wikipedia.org/wiki/Latent_semantic_analysis),这只是将SVD应用于术语文档矩阵 . 然后,您需要进行一些额外的事后分析,以使其符合您的特定结果 .
一个更复杂,更复杂的方法是使用潜在的dirichlet分配(http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation)
只要你要重新培训,只需添加新功能(单词)即可 . 您还可以使用TF / IDF在表示矩阵时为该特定单词赋值(而不仅仅是1或0) .
我不知道你正在尝试使用哪种编程语言,但我知道Java中有些库和Pythont都可以完成上述所有工作 .