最近在做文本相似度任务,首先是生成句向量,接着计算两句话的余弦距离,得到两句话的相似程度,从而判断一句话的语义。这时候我就在想,为什么不用文本分类任务做呢,如果用文本分类任务,也是最后得到一句话归属的类别。下面是我的一些想法。
文本分类呢需要先标注好一段文本是属于哪一个类别,类别需要预先定义好,再去训练模型,使得输入一句话或一段文本,模型输出这段文本属于哪个类别。常用的文本分类算法有:
- CNN
- RNN
- Bert接神经网络
而文本相似度是去计算两段文本的相似程度,我们不需要预先标注他们属于哪一个类别,相似度越高说明两段文本的语义较一致。计算相似度的方法有多种,主要有:
- 编辑距离
- 对句子进行分词,得到每个词的词向量,累加得到句子的句向量,并使用余弦距离计算相似度
- 使用bert得到句子的句向量,计算余弦距离得到相似度
根据上述,在类别有限且数量较小的情况下,如情感分类、新闻分类,可以用文本分类任务做。但是当类别非常多甚至无法枚举的情况下,需要用文本相似度任务来做,如搜索工具、问答机器人。
用户输入的一句话,意图可以是多种多样、千奇百怪的,这时候是难以去穷举用户的意图的,用文本分类任务做可以预想到根本做不来,因为你不可能为每一种意图打标注。换一种方式,将这句话与语料库中的语料进行计算,得到相似度最高的几句话,据此返回搜索结果。