看你这个相似是那方面的相似,得深入剖析这个相似
文本分类是一个有偏向性的任务。
如果这个相似表示的是“整句话的语义特征”,那这不一定代表它目前分类任务中的特征。语义的相似性只是代表了这些话可能表述的意思相近。
举个例子:
第一组:“小猪佩奇电影真地很有趣啊”、“上海迪士尼乐园真地很有趣”
第二组:“小猪佩奇电影真地很有趣啊”、“小猪佩奇电影好弱智啊”
使用sentence-BERT对上面两组数据做相似性,第一组的相似性要高于第二组的相似性。但是这并不能代表在实际分类任务表现也是这样的。
做具体分类任务。第一组:第一个表达“影视”,第二个就是“旅游地点”,是不相似的;第二组:两个都表达的是“影视”,是相似的。
如果做情感识别,第一组:都表达正向情绪,是相似的;第二组,第一个表达正向情绪,第二个表达负面情绪,是不相似的。
所以这个问题要具体问题具体分析,不能一棒打死。
其实就是 类别体系有很多维度。以机器学习为例 是通过样本偏差来反馈这种维度。相似是需要在某些维度上相似。
有空再补 淘特加班中
我觉得这个问题很好,我来谈一谈自己的一些想法,抛砖引玉。
这个想法超朴素的。是不是找训练集里最相似的句子,然后把最相似的句子的label给要预测的句子不就好了吗?
在图里面,这叫做single link。但这个问题也是很明显的。如果这样本的标签有错误怎么办?那你预测是不是错了?如果你相似度的衡量有问题怎么办?那是不是预测也错啦?
机器学习时代有无数的科学家,验证过这种一言堂式的分类方法,效果并不好。
2. 找topk个最相似的句子
一言堂不好,那咱们就来民主投票嘛。找topk最相似的句子。根据每个句子所具有的标签进行投票,获得票数最多的那个标签就是预测句子的标签。这就是knn classifier,Sklearn那里面都有实现。
但一般实践下来,效果也不是最好的。只考虑topk个最相似的句子,那其他样本的意见就不考虑了吗?
3. 找到所有样本的中心
既然要考虑所有样本的意见。最简单的办法就是把所有样本的表示都拿出来,然后求一个他们的中心喽。然后预测的句子和所有类的中心计算距离,距离最近的那个中心就是句子的标签。
这其实就是现在一般深度学习分类模型的框架。底层模型学习句子的表示。最后一层hidden layer就是每个类的中心。
分类学习的过程,一方面是调节底层表示,进而调整与中心的距离。一方面是不断调整中心的位置,使得训练集的所有样本与中心的距离都接近。
抛砖引玉就到此为止,欢迎大家分享一些最新的进展。