文章目录
NLP的常见任务
一、文本分类
1、任务介绍
文本分类是将文本划分到不同的类别中,是NLP中最基础的任务之一,常见的应用有垃圾邮件识别、情感分析、新闻分类等。
2、常用模型
文本分类的常用模型有朴素贝叶斯、SVM、深度学习等。
3、利用深度学习进行文本分类
- 加载训练数据,对文本进行预处理,如加载词表、加载分类标签、文本补齐、文本转化为向量等。
- 构建模型,embedding->不同网络层(如CNN、RNN、LSTM、bert等)->pooling->全连接层->计算损失函数(交叉熵即可)
- 训练模型,使用Adam等优化器,对模型进行训练,得到最优的参数。
- 模型评估,使用测试集对模型进行评估,计算准确率、召回率、F1值等指标。
- 模型预测,使用训练好的模型对新的文本进行分类预测。
二、文本匹配
1、任务介绍
文本匹配是指给定两个文本,判断他们是否具有某种关系,如是否是同义句、是否是重复句等,常见的应用有问答系统、信息检索等。
2、一些专业名词
问答对、Faq库/知识库、标准问、相似问/扩展问、用户问、知识加工
3、利用深度学习进行文本匹配
有两种方式,一种是表示型,一种是交互性。
- 表示型:将两个文本通过encoder分别表示为向量(在这里可以用linear、RNN、CNN、transformer等结构),然后计算两个向量之间的相似度得分(如欧式距离、余弦距离)。具体的训练方式有两种——
I. 对于两个匹配的样本预期输出分值为1,对于两个不匹配的样本预期输出分值为0,使用二分类交叉熵损失函数。
II. Triplet_loss,对于一个锚点样本anchor,一个正样本positive和一个负样本negative,预期锚点样本和正样本的相似度大于锚点样本和负样本的相似度 d ( a , p ) < d ( a , n ) d(a,p) < d(a,n) d(a,p)<d(a,n),
使用三元组损失函数。 L = m a x ( 0 , m a r g i n + d ( a , n ) − d ( a , p ) ) L = max(0, margin + d(a,n) - d(a,p)) L=max(0,margin+d(a,n)−d(a,p)) - 交互型:将两个文本通过encoder分别表示为向量,然后通过交互层得到一个交互向量,最后通过表示层-全连接层计算相似度得分。
表示型和交互型的优缺点:
表示型:优点是计算简单,训练好的模型可以对知识库内的问题计算向量,在实际查找过程中,只对输入文本做一次向量化;缺点是无法捕捉文本之间的交互信息,在向量化的过程不知道文本重点。
交互型:优点是可以捕捉文本之间的交互信息,可以通过对比把握句子重点;缺点是每次计算都需要两个输入,每输入一个句子都要与已有的所有句子放在一起来做输入,运算效率太低,不适合Feq问答。
说明:在第一部分文本分类中介绍的方法理论上也可以做文本匹配,但在实际应用中会有如下缺点:
- 无法处理新增类别,因为文本分类是提前固定输出类别的,而文本匹配是一个动态的过程,可能会有新的类别出现。每新增类别都需要重新训练模型,而文本匹配的训练方法在遇到新增类别情况时也可以处理(至少可以保证原句一定命中,因为embedding向量相同)。
- 无法做到原句一定命中(即要求训练集的正确率达到100%),在文本匹配的表示型方法中可以做到这一点。
除了上述方法外,还有一些其他的方法,如:
- 编辑距离:两个字符串之间的编辑距离是指通过增加、删除、替换等操作,将一个字符串转换为另一个字符串所需的最小操作次数 e d i f _ d i s t a n c e edif\_distance edif_distance。可以用于计算两个句子之间的相似度。
s i m i l a r i t y = 1 − e d i t _ d i s t a n c e m a x ( l e n ( s 1 ) , l e n ( s 2 ) ) similarity = 1 - \frac{edit\_distance}{max(len(s1),len(s2))} similarity=1−max(len(s1),len(s2))edit_distance<