短文本观点聚类的一些总结

最近一时兴起做了个根据微博tag爬微博并聚类的工作,大失败。

工作的要求是,希望通过短评聚类得出人群中有哪些不同的观点。
这应该算舆情分析里的评论观点抽取。
我从根本上就想错了数据集。我以为相同观点的数据会在空间中形成一个比较致密的分布,所以简单地用onehot+tfidf作为句子表示,tsne降维,谱聚类+meanshift核作为聚类手段。
事实证明我想错了。大家评论时天马行空,对同一事情的观点评论竟有如此大的差别,导致数据的分布乱七八糟。
而且,观点抽取并不是对一件事的情感分析,它可以是对一件事的不同部分的观点,也可以是整体的观点。这也是我想错的点。

所以,我们的最终目标应该是,从一句话中得出(主体,态度)这个二元组。
例如:隔壁水果店的苹果不好吃。
可以根据依存句法分析得出,顾客对这句话的主体“苹果”的态度是“不好吃”,这是从主谓关系得出的,当然,前提是谓语是个形容词。
根据上面的结论,我们可以根据依存句法+规则得出很多这种(主体,态度)的组合,然后根据word2vec+聚类方法轻易地把主体相似,态度词相似的二元组聚类。
但以上有个缺陷,因为依存句法分析是多个子任务的集合,其中包括分词,这就要求模型必须认得评论中的OOV词,而且还得知道词性。这就要求我们必须自建OOV词表了。
by the way, 现在基于图+attention做最大生成树的依存句法分析效果不错。

更多

其实上面的通用做法适用于量级较大的数据,因为网友的评论往往都是八竿子打不着,需要很强的语义理解才行,毕竟阴阳怪气的人不在少数,扯东扯西的也不在少数。
由于我的任务是按照微博tag提取观点,所以实际情况还有点不一样。大部分人的评论都是:
#苟晶# 靠!感觉就是被迫吞下了一只活苍蝇那么恶心
这种没有主语只有情感的评论,tag自身已经代表了主体。他们的评论是对事件本身的感受或观点。当讨论中心不在事件本身时,例如出现攻击政府的言论,此时主体必然会出现。所以除了原始做法本身,还要有一套对于事件本身观点抽取的方法。
我有两种想法,一种很糟糕,一种不确定:
1.很糟糕:
在做多轮对话系统时,也会遇到句子没有主语的情况。我想是否可以在语句中补全主语,主语的位置就是事件本身。后来马上被我否定,上面的例子就是不能用这种方法的证据。
2.不确定:
现在的模型语义理解能力已经很高了,完全可以试着训练一个bilstm+crf+attention的观点抽取模型。但效果肯定不怎么好。

浏览一些文章后,了解到对于大量数据集的聚类,有一种通常做法:AP聚类算法+word2vec+tfidf。具体做法是,将句子去stopwords后用word2vec和词的tfidf共同代表一个词的高维表示,然后用AP聚类算法。AP聚类是一个无需确定聚类数目,通过句间相似度进行聚类的算法。

你可能感兴趣的:(短文本观点聚类的一些总结)