无监督NN聚类探索
传统无监督聚类方法一般使用KMEANS及其变类,原理使用距离度量.
背景
希望可以对中文句子进行无监督聚类.
最简单的实现可以是利用word2vec求句子平均向量,然后建立KMEANS模型.
但是,显而易见,这个过程中使用平均使得信息的丢失是比较多的,特别是句子或者文章比较长的情况下,越长信息的丢失也就越多,必然导致模型的可用性下降.
另一种思路是使用NN来对句子\多个句子或者文章这种序列进行特征提取(而不是使用平均)–也就可以展到更高的维度空间去,然后使用使用KMEANS模型.
所以关键就是如何使用NN进行特征提取.
思路
- 与传统的NLP任务相似,需要有一步补齐操作,如果在多个句子的词场景下,是不是可以在更高一个维度上进行补齐操作后就与传统NLP任务类似了呢?(高了一个维度)
- 基于word2vec,和补齐\嵌入等操作,直接将高维空间展成二维向量,然后聚类,(这种思路有点将word2vec也视为预训练模型的感觉),也可以再降降维什么的
- 采用迁移学习的思路,利用其它任务的得到的模型进行中间层输出得到特征
几个思路都可以一试.具体效果可能需要到不同的场景下结合数据进行验证.(对的,是”可能”,不然怎么讲是实验科学呢++)
实操
Autoencoder
使用变分自动编码是一种操作,主要也是利用降维的思路.
参考:
Autoencoders
Sparse autoencoder
Autoencoders and Word embeddings
Blog Post Clustering
Variational Autoencoder base on pytorch针对NLP的自动编码
图像领域一般可以用变分自动编码.
那么sentence级别的是不是可以考虑用LSTM进行自编码呢?
可谓之LSTM自动编码++
经过实验表明:是可以的.针对句子无监督聚类的双路LSTM+Attention自动编码
经过实验表明,效果很好很好
我要把它称作: Unsupervised Clustering base on double LSTM&Attention
思路就是使用上面提到的思路,当然具体过程需要有一些操作.结果表明效果很好,不仅可以捕获到内容,还可以捕获到结构,远远不是平均的效果可以匹敌的.哈哈哈哈,真棒.
后面可能单独开一篇做一些介绍,先上线再说,哈哈……
效果
句子级别的聚类,特别是多句子(也可以扩展到篇章)的效果很好,当然会比平均复杂一点点,但是效果好太多.
结语
有了一个新的模型架构,
有点引入了无监督对抗的味道,
使用了数据本身做标签,不依赖结果标签,也就实现了无监督,哈哈,我真棒!