文本进阶处理2022/10/261文本相似度计算目录文本向量化2文本分类与聚类3文本向量化就是将文本表示成一系列能够表达文本语义的机读向量, 它是文本表示的一种重要方式。在NLP中,文本向量化是一个重要环节,其产出的向量质量直接影响到后续模型的表现,例如,在一个文本相似度 比较的任务中,可以取文本向量的余弦值作为文本相似度,也可以将文本向量输入到神经网络中进行计算得到相似度,但是无论后续模型是怎样的, 前期的文本向量表示都会影响整个相似度比较的准确性。例如,图像领域天然有着高维度和局部相关性的特性,NLP领域也有着其自身的特性。一 是计算机任何计算的前提都是向量化,而文本难以直接被向量化;二是文本的向量化应当尽可能地包含语言本身的信息,但是文本中存在多种语法规 则及其他种类的特性,导致向量化比较困难;三是自然语言本身体现了人类社会的一种深层次的关系(如讽刺等语义),这种关系给向量化带来了挑 战。文本向量化简介文本向量化按照向量化的粒度可以将其分为以字单位、以词为单位和以句子为单位向量表达,根据不同的情景选择不同的向量表 达方法和处理方式。目前对文本向量化的大部分研究都是通过以词为单位的向量化。随着深度学习技术的广泛应用,基于神经网络的文本向量化已经 成为NLP领域的研究热点,尤其是以词为单位的向量化研究。Word2Vec是目前以词为单位中最典型的生成词向量的工具,其特点是将所有 的词向量化,这样词与词之间即可度量它们之间的关系、挖掘词之间的联系。也有一部分研究将句子作为文本处理的基本单元,于是就产生了Doc 2Vec和Str2Vec等技术。文本向量化简介文本向量化主要有离散表示和分布式表示。离散表示是一种基于规则和统计的向量化方式,常用 的方法有词集模型和词袋(BOW)模型,两类模型都是基于词之间保持独立性、没有关联为前提,将所有文本中的词形成一个字典,然后根据字典 统计词出现频数。但两类模型也存在不同之处。例如,词集模型中的独热表示(one-hot representation),只要单个文本 中单词出现在字典中,就将其置为1,不管出现多少次。BOW模型只要文本中有一个词出现在字典中,就将其向量值加1,出现多少次就加多少次 。文本离散表示的特点是忽略文本信息中的语序信息和语境信息,仅将其反映为若干维度的独立概念。这类模型由于本身原因存在无法解决的问题, 如主语和宾语的顺序问题,会导致无法理解诸如“我为你鼓掌”和“你为我鼓掌”两个语句之间的区别。文本离散表示one-hot表示用一个长 的向量表示一个词,向量长度为词典的大小,每个向量只有一个维度为1,其余维度全部为0,为1的位置表示该词语在词典的位置。例如,有两句 话“小张喜欢看电影,小王也喜欢。”和“小张也喜欢看足球比赛。”。首先对这两句话分词后构造一个词典,词典的键是词语,值是ID,即{" 小张": 1, "喜欢": 2, "也": 3, "看": 4, "电影": 5, "足球": 6, "比赛": 7, "小王": 8 }。然后根据ID值对每个词语进行向量化,用0和1代表这个词是否出现,如“小张”和“小王”的one-hot表示分别为[1, 0 , 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 1]。文本离散表示1. one-hot表示on e-hot表示词向量构造起来简单,但通常不是一个好的选择,它有明显的缺点,具体如下。(1)维数过高上例只有2句短语,每个词是一个8 维向量,随着语料的增加,维数会越来越大,导致维数灾难。(2)矩阵稀疏利用one-hot表示的每一个词向量只有1维是有数值的,其他维 度上的数值都为0。(3)不能保留语义one-hot表示的结果不能保留词语在句子中的位置信息。文本离散表示BOW模型就是用一个向量表 示一句话或一个文档。BOW模型忽略文档的词语顺序、语法、句法等要素,将文档看作是若干个词汇的集合,文档中每个词都是独立的。BOW模 型每个维度上的数值代表ID对应的词在句子里出现的频次。上例中两句话的BOW模型向量化表示分别为[1, 2, 1, 1, 1, 0, 0, 1],[0, 1, 1, 1, 0, 1, 1, 1]。文本离散表示2. BOW模型BOW模型与one-hot表示相比,也 存在自己的缺点,具体如下。(1) 不能保留语义。不能保留词语在句子中的位置信息,如“我为你鼓掌”和“你为我鼓掌”向量化结果依然没有 区别。“我喜欢北京”和“我不喜欢北京”这两个文本语义相反,利用这个模型得到的结果却能认为它们是相似的文本。(2) 维数高和稀疏性。 当语料增加时,维数也会增大,一个文本里不出现的词就会增多,导致矩阵稀疏。文本离散表示TF-IDF表示是用一个向量表示一个句话或一个 文档,它是在BOW的基础上对词出现的频次赋予TF-IDF权值,对BOW模型进行修正,进而表示该词在文档集合中的重要程度。文本离散表 示3. TF-IDF表示分布式表示将每个词根据上下文从高维空间映射到一个低维度、稠密的向量上。分布式表示的思想是词的语义是通过上下 文信息确定的,即相同语境出现的词,其语义也相近。分布式表示的优点是考虑到了词之间存在的相似关系,减小了词向量的维度。常用的方法有基 于矩阵的分布表示、基于聚类的分布表示和基于神经网络的分布表示,如LSA矩阵分解模型、PLSA潜在语义分析概率模型、LDA文档生成模 型和Word2Vec模型。分布式表示与one-hot表示对比。在形式上,one-hot表示的词向量是一种稀疏词向量,其长度就是字典 长度,而分布式表示是一种固定长度的稠密词向量。在功能上,分布式表示最大的特点是相关或相似的词在距离上更接近。分布式表示Word2V ec模型其实就是简单化的神经网络模型。随着深度学习技术的广泛应用,基于神经网络的文本向量化成为NLP领域的研究热点。2013年,G oogle开源了一款用于词向量建模的工具Word2Vec,它引起了工业界和学术界的广泛关注。首先,Word2Vec可以在百万数量级 的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果可以很好地度量词与词之间的相似性。Word2Vec模型的输入是on e-hot向量,根据输入和输出模式不同,分为连续词袋模型(Continuous Bag-of-Words,CBOW)和跳字模型(S kip-Gram)。CBOW模型的训练输入是某一个特定词的上下文对应的one-hot向量,而输出是这个特定词的概率分布。Skip- Gram模型和CBOW模型的思路相反,输入是一个特定词的one-hot词向量,而输出是这个特定词的上下文的概率分布。CBOW对小型 数据库比较合适,而Skip-Gram在大型语料中表现更好。分布式表示1. Word2Vec模型Word2Vec模型特点是,当模型训 练好后,并不会使用训练好的模型处理新的任务,真正需要的是模型通过训练数据所学得的参数,如隐藏层的权重矩阵。(1) CBOW模型CB OW模型根据上下文的词语预测目标词出现的概率。CBOW模型的神经网络包含输入层、隐藏层和输出层。输入层输入的是某一个特定词上下文的 one-hot向量,输出层的输出是在给定上下文的条件下特定词的概率分布。分布式表示假设词向量空间维度为 ,上下文词的个数为 ,词汇 表中的所有词都转化为one-hot向量,CBOW模型的学习步骤如下。初始化权重矩阵 ( 矩阵, 为人为设定的隐藏层单元的数量),输入层的所有one-hot向量分别乘以共享的权重矩阵 ,得到隐藏层的输入向量。隐藏 层的输入向量求平均作为隐藏层的输出。隐藏层的输出向量乘以权重矩阵 ( 矩阵),得到输出层的输入向量 。输入向量通过激活函数处理得到输出层的概率分布。计算损失函数。更新权重矩阵。分布式表示CBOW模型由 和 确定,学习的过程就是确定权重矩阵 和 的过程,权重矩阵可以通过随机梯度下降法确定。先给这些权重赋一个随机值 初始化,然后按序训练样本,计算损失函数,并计算这些损失函数的梯度,并在梯度方向更新权重矩阵。(2) Skip-Gram模型Skip -Gram模型与CBOW模型相反,是根据目标词预测其上下文,假设词汇表中词汇量的大小为 ,隐藏层的大小为 ,相邻层 的神经元是全连接的。分布式表示Skip-Gram模型的结构组成如下。输入层含有 个神经元,输入是一个 维one- hot向量。输入层到隐藏层连接权重是一个 维的权重矩阵 ,如式错误!未找到引用源。所示。输出层含有 个单元,每个单元含有 个神经元,隐藏层到输出层每个单元连接权重共享一个 维权重矩阵 ,如式错误!未找到引用源。所示。输出层每个单元使用softmax函数计算得到上下文的概率分布。分布式表示通过Word2Vec模型 获取一段文本的向量,一般做法是先对文本分词,提取文本的关键词,用Word2Vec获取这些关键词的词向量,然后计算这些关键词向量的平 均值,或将这些词向量拼接起来得到一个新的向量,这个新向量可以看作是这个文本的向量。然而,这种方法只保留了句子或文本中词的信息,却丢 失了文本中的主题信息。为此,有研究者在Word2vec的基础上提出了文本向量化Doc2Vec模型。Doc2Vec模型与Word2V ec模型类似,只是在Word2Vec模型输入层增添了一个与词向量同维度的段落向量,可以将这个段落向量看作是另一个词向量。Doc2V ec技术存在两种模型,它们分别是分布式记忆模型(Distributed Memory,DM)和分布式词袋模型(Distribute d Bag of Words,DBOW),分别对应Word2Vec模型里的CBOW和Skip-gram模型。分布式表示2. Doc 2Vec模型(1) DM模型DM模型与CBOW模型类似,在给定上下文的前提下,试图预测目标词出现的概率,只不过DM模型的输入不仅包 括上下文而且还包括相应的段落。假设词汇表中词汇量的大小为 ,每个词都用one-hot向量表示,神经网络相邻层的神经元是全连 接的,DM模型的网络结构如下。输入层含1个段落单元, 个上下文单元,每个单元有 个神经元,用于输入 维one -hot向量。隐藏层的神经元个数为 ,段落单元到隐藏层链接权重为 维矩阵 ,每个上下文单元到隐藏 层连接权重值共享一个 维的权重矩阵 。输出层含有 个神经元,隐藏层到输出层连接权重为 维权重矩阵 。通过softmax函数计算输出层的神经元输出值。分布式表示DM模型增加了一个与词向量长度相等 的段落向量即Paragraph ID,从输入到输出的计算过程如下。Paragraph ID通过矩阵 映射成段落向量。段落 向量和词向量的维数虽然一样,但是代表了两个不同的向量空间。每个段落或句子被映射到向量空间中,可以用矩阵 的一列表示。上下文 通过矩阵 映射到向量空间,用矩阵 的一列表示。将段落向量和词向量求平均或按顺序拼接后输入Softmax层。分布 式表示结构如图所示。分布式表示在句子或文档的训练过程中,Paragraph ID始终保持不变,共享着同一个段落向量,相当于每次在预 测单词的概率时,都利用了整个句子的语义。这个段落向量也可以认为是一个词,它的作用相当于上下文的记忆单元或作为这个段落的主题。在预测 阶段,预测的句子新分配一个Paragraph ID,词向量和输出层的参数保持不变,重新利用随机梯度下降算法训练预测的句子,待误差收 敛后即可得到预测句子的段落向量。分布式表示(2) DBOW模型与Skip-gram模型只给定一个词语预测上下文概率分布类似,DBO W模型输入只有段落向量,其结构如图所示。DBOW模型通过一个段落向量预测段落中随机词的概率分布。分布式表示DBOW模型的训练方法忽 略输入的上下文,让模型去预测段落中的随机一个词,在每次迭代的时候,从文本中采样得到一个窗口,再从这个窗口中随机采样一个词作为预测任 务并让模型去预测,输入就是段落向量。Doc2Vec模型主要包括以下两个步骤。训练模型。在已知的训练数据中得到词向量 、各 参数项和段落向量或句子向量 。推断过程。对于新的段落,需要得到它的向量表达。具体做法是,在矩阵 中添加更多的列, 并且在固定参数的情况下利用上述方法进行训练,使用梯度下降的方法得到新的 ,从而得到新段落的向量表达。由于Doc2vec完 全是从Word2Vec技术扩展而来,DM模型与CBOW模型相对应,所以可以根据上下文词向量和段落向量预测目标词的概率分布。DBOW 模型与Skip-gram模型对应,只输入段落向量,预测从段落中随机抽取的词组概率分布。总而言之,Doc2vec是Word2Vec的 升级,Doc2vec不仅提取文本的语义信息,而且提取了文本的语序信息。分布式表示词向量的训练可以分为两个步骤进行。先对中文语料进行 预处理然后利用gensim库训练词向量Word2Vec词向量的训练1文本相似度计算目录文本向量化2文本分类与聚类3在自然语言处理中 ,经常会涉及到如何度量两个文本的相似度问题。在诸如对话系统和信息检索等的问题中,如何度量句子或者短语之间的相似度尤为重要。文本相似 度可定义为:其中, common(A,B)是A和B的共性信息,description(A,B)是描述A和B的全部信息, 上述公式中 表达出相似度与文本共性成正相关。由于没有限制应用领域, 此定义是被较多采用的概念。文本相似度的定义相似度一般可用[0,1]之间的实 数表示,该实数可通过语义距离计算获得。相似度与语义距离呈反比关系, 语义距离越小,相似度越高;语义距离越大则相似度越低。通常用如下 公式表示相似度与语义距离的关系。其中, Dis(SA, SB)表示文本SA , SB之间的非负语义距离,α为调节因子,保证了当语义 距离为 0 时上述公式具有意义。文本相似度的定义文本相似度计算中还有一个重要概念是文本表示, 代表对文本的基本处理, 目的是将半结 构化或非结构化的文本转换为计算机可读形式。文本相似度计算方法的不同的本质是文本表示方法的不同,包括如下三种方法。一是基于关键词匹配 的传统方法,如N-gram相似度;二是将文本映射到向量空间,再利用余弦相似度等方法;三是深度学习的方法,如基于用户点击数据的深度学 习语义匹配模型DSSM,基于卷积神经网络的ConvNet,以及Siamese LSTM等方法。随着深度学习的发展,文本相似度的各种 方法已经逐渐不再是基于关键词匹配的传统方法,而转向深度学习,目前结合向量表示的深度学习使用较多。文本的表示(1) N-gram 相 似度基于N-Gram模型定义的句子(字符串)相似度是一种模糊匹配方式,通过两个长得很像的句子间的“差异”来衡量相似度。N-Gram 相似度的计算是指按长度N切分原句得到词段,也就是原句中所有长度为N的子字符串。对于两个句子S和T,则可以从共有子串的数量上去定义两 个句子的相似度。其中, GN(S)和 ?GN(T)分别表示字符串S和T中N-Gram的集合,N一般取2或3。字符串距离越近,它们就 越相似,当两个字符串完全相等时,距离为0。文本的表示1. 基于关键词匹配(2)Jaccard 相似度Jaccard相似度的计算相对 简单,原理也容易理解。就是计算两个句子之间词集合的交集和并集的比值。该值越大,表示两个句子越相似,在涉及大规模并行运算的时候,该方 法在效率上有一定的优势,公式如下。其中。文本的表示表达词意目前有三种方法:第一种的代表就是WordNet,它提供了一种词的分类资源 但是缺少了词之间的细微区别,同时它也很难计算词之间的相似度;第二种就是Discrete representation,如One-h ot representation,它的向量维度和词典的长度相同,因此向量维度可能十分高,同时由于向量之间本身正交,无法计算词之间 的相似度;第三种就是Distributed representation,基本想法就是将每个词映射为一个固定长度的短向量(相对于o ne-hot representation而言),所有这些词构成一个词向量空间,每一个向量视为空间中的一个点,在这个空间引入“距离 ”,就可以根据词之间的距离来判断它们之间的相似性,代表方法如word2vec, LDA等。文本的表示2. 基于向量空间随着深度学习 在图像和语音识别中取得不错的进展,近些年深度学习也开始应用于自然语言处理的不同应用中。语义相似性匹配问题已经逐渐从人工设计特征转向 分布式表达和神经网络结构相结合的方式。DSSM是一种深度学习语义匹配模型,在检索场景下,利用用户的点击数据来训练语义层次的匹配。D SSM利用点击率来代替相关性,点击数据中包含大量的用户问句和对应的点击文档,这些点击数据将用户的问题和匹配的文档连接起来。DSSM 的优点在于直接利用了用户的点击数据,得到的结果可以直接排序,但是缺点在于没有利用上下文信息。DSSM的扩展还包括CDSSM、DSS M-LSTM等,其中CDSSM在一定程度上弥补了上下文缺失的问题,结构上将DNN替换成CNN。DSSM-LSTM中使用LSTM记录 上下文。文本的表示3. 基于深度学习 ConvNet通过精心设计卷积神经网络,结合不同规格的卷积神经网络的差异性度量句子的相似度。 实际应用中,可采用“Siamese”(孪生)CNN结构,分别对两个句子建模,然后利用一个句子相似度测量层计算句子相似度,最后通过一 个全连接层输出softmax相似度得分。一个句子首先被转化为嵌入矩阵(embedding matrix),然后输入卷积-池化层得到 处理后的句子向量,为更好计算句子之间的相似度,分别对向量不同的输出结果计算其相似性,最终将相似度向量输入全连接层得到相似性分数,与 标签值相比较。总体来看,这个模型的复杂度还是很高的,而且卷积核在垂直方向的计算也没有特别直观的解释。文本的表示Skip-thoug hts的核心思想:将Word2vec中的skip-gram方法从词的层面扩展到句子的层面,利用seq2seq模型预测输入语句的上下 句。在之前的各类监督方法中,模型通过确定的标签作为优化目标更新参数虽然能取得不错的效果,但是只能适用于不同的任务。模型在一个连续的 文本语料(小说)上进行训练,通过Encoder端将词转化为句子向量,然后在Decoder端结合Encoder端的句子向量生成上下文 语句。对于这样一个模型,最大的问题在于如何把有限的词扩展到任意的词或句。论文中采用的方法是学习一种映射,将一个模型中的词表示映射到 另外一个模型中。具体的操作是把CBOW中预训练得到的词向量映射到Encoder端的词空间。最终将词汇量扩展。训练好的Skip-th oughs模型,会把Encoder端作为特征提取器,对所有的句子提取Skip-thoughs向量,得到的这些向量表示可以用在不同的 任务中,如语义相似度计算。文本的表示Tree -LSTM的核心思想:将对语序敏感的标准LSTM序列推广为树状结构的网络拓扑图。标准 LSTM仅仅考虑了句子的序列信息,但是在自然语言中句法结构能够自然的将词结合成短语或句子,因此可利用句法结构信息生成LSTM扩展结 构:The Child-Sum Tree-LSTM和N-arr Tree-LSTM。对于Dependency Tree-LSTM模 型,最大的问题在于训练数据的收集十分困难并且句法分析结果也不是在所有语言中都有。Siamese Network用来度量数据之间的相 似性,两组数据(文本,图像等)同时输入到一个神经网络中,并经由这个神经网络转化为N1维的向量,此后会通过一个数值函数(如余弦相似 度)计算这两个向量的距离,通过得到的距离来度量原始输入数据的相似性。在标准的Siamese Network中,两侧的神经网络需要使 用相同的网络结构和参数;同时在进行梯度更新前,需要先对两侧的梯度平均;两个输出向量需要满足相似或者不相似的关系。文本的表示关于该模 型有两点值得注意:一是在Siamese Network中采用孪生LSTM,是因为LSTM能够解决RNN的长期依赖问题,通过使用记忆 单元(memory cell),LSTM能够储存更长输入序列的信息。当然对于特别长的句子而言,标准的LSTM能力也是有限的,对于长 度超过30的长句子,通过模型得到的最终隐藏层状态,占据比重较大的还是后面的词,前面的词基本消失,因此需要Attention。二是在 度量相似性的时候,采用了曼哈顿距离而不是欧式距离,根据论文和博客的观点,一方面用Word2vec训练出来的词,存在大量欧式距离相等 的情况,如果用L2范数去衡量,存在语义丢失的情况,而cosine similarity适合度量向量维度特别大的情况,因此采用Man hattan距离最合适;另一方面,采用L2范数会存在梯度消失的问题,在训练的早期,L2范数会错误的认为两个语义不相关的句子相似因为 采用欧式距离时的梯度消失问题。文本的表示欧氏距离公式是数学中的一个非常经典的距离公式,公式如下所示。例如:计算 “产品经理” 和“ 产业经理是什么”之间的欧氏距离,过程如下:文本向量A =(产,品,经,理),即x1 =产, x2 =品, x3 =经, x4 =理 , x5、x6、x7均为空;文本向量B =(产,业,经,理,是,什,么),即y1 =产, y2 =业, y3 =经, y4 =理, y5 =是, y6 =什, y7 =么。这里规定,若xi=yi ,则xi-yi=0 ;若xi≠yi , |xi-yi|=1 。常 用算法1. 欧氏距离所以,欧氏距离d是:该相似度算法主要适用场景为编码检测等类似领域。两串编码必须完全一致,才能通过检测,这时一个 移位或者一个错字,可能会造成非常严重的后果。比如一个二维码是“这是一篇文本相似度的文章”,第二个是“这是一篇文本相似度文章”。从人 的理解来看,这两句话相似度非常高,但是生成的二维码却千差万别。文本相似度,意味着要能区分相似/差异的程度,而欧氏距离更多的只能区分 出是否完全一样。而且,欧氏距离对位置、顺序非常敏感,比如“我的名字是孙行者”和“孙行者是我的名字”,在人看来,相似度非常高,但是用 欧氏距离计算,两个文本向量每个位置的值都不同,即完全不匹配。常用算法和欧氏距离非常相似(把平方换成了绝对值,拿掉了根号),公式如下 :适用场景同欧氏距离。常用算法2. 曼哈顿距离顾名思义,编辑距离指的是将文本A编辑成文本B需要的最少变动次数(每次只能增加、删除或 修改一个字)。例如:计算“椰子”和“椰子树”之间的编辑距离。因为将“椰子”转化成“椰子树”,至少需要且只需要1次改动(反过来,将“ 椰子树”转化成“椰子”,也至少需要1次改动,如下图),所以它们的编辑距离是1。椰子----增加树---椰子树椰子树---删除树-- -椰子因此,编辑距离是对称的,即将A转化成B的最小变动次数和将B转化成A的最小变动次数是相等的。常用算法3. 编辑距离(Leven shtein距离、莱文斯坦距离)同时,编辑距离与文本的顺序有关。比如,“椰子”和“子椰”,虽然都是由“椰”“子”组成,但因为顺序变 了,编辑距离是2(如下图),而不是0。椰子----删除子--- 椰 ---增加子---子椰椰子----删除椰--- 子 ---增加 椰---子椰椰子----子变椰---椰椰---椰变子---子椰椰子----椰变子---子子---子变椰---子椰编辑距离算出来很小 ,文本相似度肯定很高。如果用算法语言来说的话,就是准确率很高(即虽然会漏掉一些好的case,但可以确保选出来的case一定非常好) 。反过来说,虽然准确率很高,但召回率不高。在某些业务场景中,漏掉的case会引起严重后果,比如“批发零售”和“零售批发”,人的理解 应该非常相似,可编辑距离却是4,相当于完全不匹配,这显然不符合预期。常用算法杰卡德相似度,指的是文本A与文本B中交集的字数除以并集 的字数,公式非常简单:如果要计算Jaccard距离,公式稍作变更即可:常用算法4. Jaccard相似度(杰卡德相似度)例如:计算 “荒野求生”和“绝地求生”的杰卡德相似度。因为它们交集是{求,生},并集是{荒,野,求,生,绝,地},所以它们的杰卡德相似度=2/ 6=1/3。杰卡德相似度与文本的位置、顺序均无关。比如“王者荣耀”和“荣耀王者”的相似度是100%。无论“王者荣耀”这4个字怎么排 列,最终相似度都是100%。在某些情况下,会先将文本分词,再以词为单位计算相似度。比如将“王者荣耀”切分成“王者/荣耀”,将“荣耀 王者”切分成“荣耀/王者”,那么交集就是{王者,荣耀},并集也是{王者,荣耀},相似度恰好仍是100%。常用算法该算法主要适用于对 字/词的顺序不敏感的文本,比如前述的“零售批发”和“批发零售”,可以很好地兼容,以及长文本,比如一篇论文,甚至一本书。如果两篇论文 相似度较高,说明交集比较大,很多用词是重复的,存在抄袭嫌疑。该算法不太适用于两种情况,一是重复字符较多的文本,比如“这是是是是是是 一个文本”和“这是一个文文文文文文本”,这两个文本有很多字不一样,直观感受相似度不会太高,但计算出来的相似度却是100%(交集=并 集)。二是对文字顺序很敏感的场景,比如“一九三八年”和“一八三九年”,杰卡德相似度是100%,意思却完全不同。常用算法余弦相似度的 灵感来自于数学中的余弦定理,计算公式为:其中,A、B分别是文本一、文本二对应的n维向量。取值方式用语言比较难描述,直接看例子吧。常 用算法5. 余弦相似度例如:文本一是“一个雨伞”,文本二是“下雨了开雨伞”,计算它们的余弦相似度。它们的并集是{一,个,雨,伞,下 ,了,开},共7个字。若并集中的第1个字符在文本一中出现了n次,则A1=n(n=0,1,2……)。若并集中的第2个字符在文本一中出 现了n次,则A2=n(n=0,1,2……)。依此类推,算出A3、A4、……、A7,B1、B2、……、B7 ,最终得到:A =(1, 1,1,1,0,0,0);B =(0,0,2,1,1,1,1)。将A、B代入计算公式,得到常用算法余弦相似度和杰卡德相似度虽然计算 方式差异较大,但性质上很类似(与文本的交集高度相关),所以适用场景也非常类似。余弦相似度相比杰卡德相似度最大的不同在于它考虑到了文 本的频次,比如上面例子出现了2次“雨”,和只出现1次“雨”,相似度是不同的;再比如“这是是是是是是一个文本”和“这是一个文文文文文 文本”,余弦相似度是39%,整体上符合“相同的内容少于一半,但超过1/3”的观感(仅从文本来看,不考虑语义)。该算法不太适用于向量 之间方向相同,但大小不同的情况(这种情况下余弦相似度是100%)。比如“太棒了”和“太棒了太棒了太棒了”,向量分别是(1,1,1) 和(3,3,3),计算出的相似度是100%。这时候要根据业务场景进行取舍,有些场景下我们认为它们意思差不多,只是语气程度不一样,这 时候余弦相似度是很给力的;有些场景下我们认为它们差异很大,哪怕意思差不多,但从文本的角度来看相似度并不高(最直白的,一个3个字,一 个9个字),这时候余弦相似度就爱莫能助了。常用算法Jaro相似度据说是用来判定健康记录上两个名字是否相同,公式如下:其中,m是两个 字符串中相互匹配的字符数量; |s1|和|s2|表示两个字符串的长度(字符数量);t是换位数量。常用算法6. Jaro相似度这里着 重说一下“匹配”和“换位”的概念,先列一个公式,称之为“匹配阈值”:当s1中某字符与s2中某字符相同,且它们的位置相距小于等于k时 ,就说它们是匹配的。比如 “我明白了”和“快一点告诉我”,按公式算出k=2。虽然两个字符串中都有 “我” 字,但一个在第1位,另一 个在第6位,相距为5,大于k值,所以这两个字符串没有任何一个字符是匹配的。再比如 “我明白了” 和“明白了我”,k=1,所以这两个 字符串的“明”“白”“了”是匹配的,但是“我”是不匹配的,所以它们有3个字符是匹配的。换位的意思,是将s1和s2匹配的字符依次抽出 来,看它们顺序不一样的字符有多少个,这个数就是换位数量。常用算法例如:计算“我表白了一个女孩”和“近几天我白表了一次情”的Jaro 相似度。|s1| =8, |s2| =10,k=4,匹配的字符有5个,即m=5,分别是“我”“表”“白”“了”“一”。将s1中的匹 配字符依次抽出来,得到一个向量r1 =(我,表,白,了,一)。将s1中的匹配字符依次抽出来,得到一个向量r2 =(我,白,表,了, 一)。比对r1和r2 ,发现有2个位置的值不一样(第2位和第3位),所以换位数t=2。于是,d=1/3[5/8+5/10+(5-2 )/5]=57.5%。该算法主要适用于对位置、顺序敏感的文本。文本位置的偏移,很容易使匹配字符数m变少;文本顺序的变换,会使换位数 量t增大。它们都会使Jaro相似度减小。换句话说,如果某业务场景下需要考虑文本位置偏移、顺序变换的影响,既不希望位置或顺序变了相似 度却保持不变,又不希望直接一刀切将相似度变为0,那Jaro距离是十分合适的。常用算法整体来说,Jaro距离是比较综合的文本相似度算 法,从换位字符数来看,有点像编辑距离;从匹配字符的抽取来看,又有点像“交集”。最后,对最后的例子做个横向对比:“我表白了一个女孩” 和“近几天我白表了一次情”方法3的编辑距离算出来是8,s1长度是8,s2长度是10,编辑距离等于8,从数据上看非常不相似,与人的感 官差异很大。方法4的杰卡德相似度算出来是38.5%,数值比较低,和人的感官差异较大。方法5的余弦相似度算出来是55.9%,和Jar o距离算出来差不多,都是50%+,比较符合人的感官——超过一半的内容是相同的,同时有将近一半内容是不同的。如果在此例中,调整字符顺 序,让换位数量t变大,匹配数量m变小,余弦相似度不变,Jaro相似度会降低。常用算法1文本相似度计算目录文本向量化2文本分类与聚类 3随着网络时代的到来,用户可获得的信息包含了从技术资料、商业信息到新闻报道、娱乐资讯等多种类别和形式的文档,构成了一个异常庞大的具 有异构性、开放性特点的分布式数据库,而这个数据库中存放的是非结构化的文本数据。结合人工智能研究领域中的NLP技术,从数据挖掘中派生 出了文本挖掘这种新兴的数据挖掘研究领域。文本挖掘是抽取有效、新颖、有用、可理解的、散布在文本文件中的有价值知识,并且利用这些知识更 好地组织信息的过程。文本挖掘是NLP中的重要内容。文本挖掘是一个从非结构化文本信息中获取用户感兴趣或有用模式的过程。文本挖掘的基本 技术有5大类,包括文本信息抽取、文本分类、文本聚类、文本数据压缩、文本数据处理。文本挖掘简介文本挖掘是从数据挖掘发展而来,但并不意 味着简单地将数据挖掘技术运用到大量文本的集合上即可实现文本挖掘,还需要做很多准备工作。文本挖掘的准备工作由文本收集、文本分析和特征 修剪3个步骤组成。准备工作完成后,可以开展数据文本挖掘工作。文本挖掘简介文本挖掘的工作流程如图所示。文本挖掘简介从目前文本挖掘技术 的研究和应用状况来看,从语义的角度实现文本挖掘的还很少,目前应用最多的几种文本挖掘技术有文本分类、文本聚类和摘要抽取。(1)文本分 类文本分类将带有类别的文本集合按照每一类的文本子集合共有的特性,归纳出分类模型,再按照该模型将其他文档迁移到已有类中,最终达到文本 的自动分类。这样,既可以方便用户查找信息,又可以缩小查找文本的范围。(2)文本聚类文本聚类将文本集合分为若干个簇,要求同簇内的文本 尽量相似度高,而不同簇的文本尽量相似度低,从而发掘整个数据集的综合布局。例如,用户浏览相关的内容一般会挨着比较近,而与用户浏览无关 的内容往往会离得比较远。因此,用户可运用聚类算法将需要筛选的文本内容聚成若干簇,将与用户浏览内容相关性不强的簇去除,只保留与用户浏 览内容相关性强的簇,能够提高浏览文本的效率。文本挖掘简介(3)摘要抽取摘要抽取利用计算机自动地从原始文档中提取出能够准确地反映该文 档中心内容的简单连贯的短文。摘要抽取能够生成简短的关于文档内容的指示性信息,将文档的主要内容呈现给用户,以便用户决定是否要阅读文档 的原文,这样能够节省用户大量的浏览时间。利用文本挖掘技术处理大量的文本数据,无疑能够给企业带来巨大的商业价值。文本挖掘在商业智能、 信息检索、生物信息处理等方面都有广泛的应用,如客户关系管理、自动邮件回复、垃圾邮件过滤、自动简历评审、搜索引擎等。因此,目前企业对 于文本挖掘的需求非常高,文本挖掘技术应用前景广阔。文本挖掘简介文本分类是指按照一定的分类体系或规则对文本实现自动划归类别的过程,在 信息索引、数字图书管理、情报过滤等领域有广泛的应用。文本分类一般分为基于知识工程的分类方法和基于机器学习的分类方法。基于知识工程的 分类方法是指通过专家经验,依靠人工提取规则进行的分类。基于机器学习的分类方法是指通过计算机自主学习、提取规则进行的分类。最早应用于 文本分类的机器学习方法有朴素贝叶斯,之后几乎所有重要的机器学习算法在文本分类领域得到了应用,如支持向量机、K最近邻、神经网络和决策 树等。文本分类常用算法各分类算法的优缺点如表所示。文本分类常用算法各分类算法的优缺点如表所示。文本分类常用算法在文本挖掘中,文本分 类有着广泛的应用场景,常见的应用场景如下。(1)Web文档自动分类随着互联网的发展,Web已成为拥有庞大信息资源的分布式信息空间, 拥有各式各样海量的Web文档。为了有效地组合和处理Web文档信息,人们希望按照Web文档内容对其进行分类,网页自动分类技术也随之诞 生。(2)新闻分类新闻网站中涵盖了大量的新闻报道,随着电子传播手段在新闻报道中的广泛运用,新闻体裁的分类趋于多样化,各类新闻都有其 定位和表现内容需要的体裁。对此需要根据新闻内容,将新闻网站中的新闻按照一定的分类标准进行分类,如政治、军事、经济、娱乐和体育等。文 本分类常用算法(3)情感分析情感分析是对带有主观感情色彩的文本内容进行分析和处理的过程,它挖掘了人们针对不同的人物、产品或事件的观 点、态度和情绪。互联网中有大量用户参与并发表评论的平台,如淘宝、京东和微博等,这些评论表达了用户的喜、怒、哀、乐。当需要对这些评论 进行情感分析时,文本分类可以帮助实现,按照不同情感将其划分为若干类。(4)信息检索信息检索是用户采用一定的方法,借助搜索引擎从中查 找所需信息的过程。信息检索同样采用了文本分类的方法,通过判断用户查找内容的所属类别,从该类别的信息集合中再做进一步检索。文本分类常 用算法文本聚类主要是从杂乱的文本集合中发掘对用户有价值的信息,这些蕴含在文本集中的未被发现的信息能够更为合理地组织文本集合。文本聚 类的主要思想是可以对无类别标示的文本文档集合进行分析,通过对文本特性的分析探索其应有的信息,再将集合中的文本按照特性分析的结果进行 标识类别,发现文本内容中潜在的信息。文本聚类是对文本数据进行组织、过滤的有效手段,并广泛应用于主题发现、社团发现、网络舆情监测、网 络信息内容安全监测等领域。传统的文本聚类方法使用TF-IDF技术对文本进行向量化,然后使用K-Means等聚类手段对文本进行聚类处 理。文本向量化表示和聚类算法是提升文本聚类精度的重要环节,选择恰当的文本向量化表示和聚类算法成为文本聚类的关键问题。文本聚类常用算 法聚类算法是机器学习中的一种无监督学习算法,它不需要对数据进行标记,也不需要训练过程,通过数据内在的相似性将数据点划分为多个子集, 每个子集也称为一个簇,对应着潜在的类别,而同一类别中的数据相似性较大,不同类别之间的数据相似性较小。聚类实质上就是将相似度高的样本 聚为一类,并且希望同类样本之间的相似度高,不同类别之间的样本相似度低。聚类算法主要分为基于划分的聚类算法、基于层次的聚类算法、基于 密度的聚类算法、基于网格的聚类算法、基于模型的聚类算法和基于模糊的聚类算法。文本聚类常用算法各类聚类算法具体介绍如下。(1)基于划 分的聚类算法这种算法是聚类算法中原理最为简单的算法,划分法的基本思想为给定一个有n个记录的数据集合,将数据集划分为K个分组,每一个 分组称为一个簇。对于给定的K个分组,同一个分组内的数据记录距离越近越好,不同分组之间的距离则要求要远。以划分法为基本思想的算法包括 K-means、Single-Pass增量聚类算法、K-medoids和CLARANS算法等。其中最为经典、应用最多的是K-mea ns算法。文本聚类常用算法(2)基于层次的聚类算法这种算法主要思想是将样本集合合并成凝聚度更高或分裂成更细致的子样本集合,最终样本 集合形成一棵层次树。与K-means算法不同,层次聚类算法不需要预先设定聚类数,只要样本集合通过不断迭代达到聚类条件或迭代次数即可 。基于层次划分的经典聚类算法有变色龙算法、嵌套层次聚类算法(Agglomerative Nesting,AGNES)、基于代表的聚 类算法(Clustering Using REpresentatives,CURE)等。文本聚类常用算法(3)基于密度的聚类算法这 种算法的主要思想是首先找出密度较高的点,然后将周围相近的密度较高的样本点连成一片,最后形成各类簇。基于密度的聚类比较代表性的3种方 法有DBSCAN方法、OPTICS方法和DENCLUE技术。此类算法的优点是鲁棒性强,对于任意形状的聚类都适用,但是结果的精度与参 数设置关系密切,实用性不强。(4)基于网格的聚类算法这种算法的出发点不再是平面而是空间,空间中的有限个网格代表数据,聚类过程就是按 一定的规则将网格合并。由于处理数据时是独立的,仅仅依赖网格结构中每一维的单位数,因此处理速度很快。但是此算法对参数十分敏感,速度快 的代价是精确度不高,通常需要与其他聚类算法结合使用。文本聚类常用算法(5)基于模型的聚类算法这种算法的思路是假设每个类为一个模型, 然后再寻找与该模型拟合最好的数据,通常有基于概率和基于神经网络两种方法。概率模型即概率生成模型,是假设数据是由潜在的概率分布产生的 ,典型的算法是高斯混合模型。这类聚类方法在样本数据量大的时候执行率较低,不适合大规模聚类场合。(6)基于模糊的聚类算法这种算法的主 要思想是以模糊集合论作为数学基础,用模糊数学的方法进行聚类分析。此方法的优点在于对于满足正态分布的样本数据而言它的效果会很好,但是 此算法过于依赖初始聚类中心,为确定初始聚类中心需要多次迭代以寻找最佳点,对于大规模数据样本会大大增加时间复杂度。文本聚类常用算法上 述的聚类方法各有优缺点,在面对不同的数据集时能起到不同的作用。不同聚类算法在性能方面的差异如表所示。文本聚类常用算法利用机器学习算 法进行文本分类或聚类,一般包含数据准备、特征提取、模型选择与训练、模型评估及优化、误差分析、模型融合等步骤,具体介绍如下。(1)数 据准备文本数据一般是非结构化的数据,这些数据或多或少会存在数据缺失、数据异常、数据格式不规范等情况,这时需要对其进行预处理,包括数 据清洗、数据转换、数据标准化、缺失值和异常值处理等。(2)特征提取特征提取是文本分类前的步骤之一,它有几种经典的特征提取方法,分别 是BOW模型、TF、TF-IDF、n-gram和Word2Vec。BOW模型拥有过大的特征维度,数据过于稀疏。TF和TF-IDF运 用统计的方法,将词汇的统计特征作为特征集,但效果与BOW模型相差不大。文本分类与聚类的步骤(3)模型选择与训练对处理好的数据进行分 析,判断适合用于训练的模型。首先,判断数据是否属于监督学习,即数据中是否存在类标签,如果有那么归为监督学习问题,否则划分为无监督学 习问题。在模型的训练过程中,通常会将数据划分为训练集和测试集,训练集用于训练模型,测试集则不参与训练,用于后续验证模型效果。(4) 模型测试通过测试数据可以对模型进行验证,分析产生误差的原因,包括数据来源、特征、算法等。寻找在测试数据中的错误样本,发现特征或规律 ,从而找到提升算法性能、减少误差的方法。(5)模型融合模型融合是提升算法准确率的一种方法,当模型效果不太理想时,可以考虑使用模型融 合的方式进行改善。单个机器学习算法的准确率不一定比多个模型集成的准确率高。模型融合是指同时训练多个模型,综合考虑不同模型的结果,再 根据一定的方法集成模型,得到更好的结果。文本分类与聚类的步骤数据来自新闻网站的新闻数据合集,选取4个类别标签,分别有体育、健康、教 育、旅游、消费每个标签下分别有500条新闻数据,部分信息如表所示。新闻文本分类与聚类部分信息如表所示。新闻文本分类与聚类本小节将运 用朴素贝叶斯模型,分别采用自定义函数和调用Python内置函数两种方法对新闻内容进行分类。新闻分类的流程包括以下步骤。数据读取。读 取原始新闻数据,共有2000条数据。文本预处理。对原始数据进行预处理,对其进行去重、脱敏和分词等操作。新闻文本分类与聚类1. 新闻 文本分类词频统计。分别统计教育、体育、健康、旅游的词频,随后绘制相应的词云图。由于数据不均,对每个类别的数据各取400条数据,共抽 取了1600条数据进行训练模型及分类。分类。分别采用两种方式对新闻内容进行分类,第一种方式是自定义朴素贝叶斯函数,第二种则是调用P ython内置函数实现朴素贝叶斯分类,两种方式的实现步骤基本一致,最终结果将与测试集进行比较,得到模型的分类情况和准确率。模型评价 。使用处理好的测试集进行预测,对比真实值与预测值,获得准确率并进行结果分析。新闻文本分类与聚类(1)数据读取加载库并读取数据(2) 文本预处理对文本数据进行预处理,包括以下几个步骤。单独抽取新闻内容进行预处理,查看数据发现不存在缺失值,对其进行去重和脱敏操作。由 于原始数据中的敏感信息已用统一字符替换,因此进行脱敏时只需减去相应的字符即可,脱敏后共减少了108个字符。新闻文本分类与聚类采用j ieba分词切分短信内容,由于分词的过程中会切分部分有用信息,因此需要加载自定义词典newdic1.txt避免过度分词,文件中包含 了短信内容的几个重要词汇。对分词后的结果过滤停用词,去除停用词后共减少了3989711个字符。经过处理的数据中存在一些无意义的空列 表,对其进行删除。其中,lambda函数是自定义函数,可以借助apply函数实现并返回相应的结果。通过自定义函数统计词频,对于各个 类别的新闻文本,留下词频大于20的词汇。并分别对各个类别的新闻绘制词云图,查看短信内容分布情况。新闻文本分类与聚类(3)调用Mul tinomialNB函数朴素贝叶斯分类可以通过调用MultinomialNB函数实现。首先划分训练集和测试集,分别输入数据集的短信 内容和标签、测试集所占比例以及随机状态,接着利用训练集生成词库,分别构建训练集和测试集的向量矩阵,最后利用内置朴素贝叶斯函数预测分类。(4)模型评价分类预测完成后,对模型进行评价新闻文本分类与聚类新闻文本聚类的流程包括以下步骤。数据读取。读取文件列表中的新闻文本并给定标签,划分训练集与测试集,读入的每条新闻作为一行,方便后续数据处理及词频矩阵的转化。文本预处理。每个新闻文本进行jieba分词和去除停用词处理,去除文本中无用的停用词,降低处理维度,加快计算速度。新闻文本分类与聚类2. 新闻文本聚类特征提取。使用scikit-learn库调用CountVectorizer和TfidfTransformer函数计算TF-IDF值,将文本转为词频矩阵。聚类。根据导入数据类型标签个数,从而定义分类个数,导入训练数据集后通过调用sklearn.cluster训练模型,并保存聚类模型。模型评价。使用处理好的测试集进行预测,对比真实值与预测值,获得准确率并进行结果分析。新闻文本分类与聚类(1) 数据读取通过获取文件列表信息,逐一读取数据,在获得文本内容的同时去除文本中的换行符制表符等特殊符号,最后对每个类别的新闻文本进行划分,80%的数据作为训练集,20%的数据作为测试集。(2) 文本预处理通过对文本预处理,方便对训练集与测试集进行相关的文本处理。由于使用pandas库的read_csv函数读取文件时默认将空格符去除,在加载停用词后会加上空格符号。读取数据中的每个新闻文本,并使用jieba库进行分词处理并去除停用词。本节划分了训练集与测试集,在数据处理时也要分别进行数据的预处理和后续的特征提取。新闻文本分类与聚类(3) 特征提取特征提取环节调用CountVectorizer函数将文本中的词语转换为词频矩阵,矩阵中的元素a[i][j]表示j词在i类文本下的词频;调用TfidfTransformer函数计算TF-IDF权值并转化为矩阵,矩阵中元素w[i][j]表示j词在i类文本中的TF-IDF权重。(4) 聚类由于本节选取4个数据集,因此,选用4个中心点。随后进行模型的训练,调用fit函数将数据输入到分类器中,训练完成后保存模型,并查看训练集的准确率分类情况。(5) 模型评价输入测试数据进行模型训练,计算测试数据的准确率新闻文本分类与聚类本章首先介绍了文本向量化的基本概念和两种表示方法,包括词向量及文本向量化的基本概念以及文本的离散表示和分布式表示方法,其中离散表示介绍了one-hot、BOW模型和TF-IDF三种表示方法,分布式表示介绍了Word2Vec模型和Doc2Vec模型各自的两个模型,结合代码详细介绍利用gensim进行向量化的模型训练和实战应用。(相似度) 最后主要介绍了文本分类与聚类基本概念,以及文本分类和文本聚类常用算法,随后介绍文本分类与聚类的步骤,并实现了文本分类与文本聚类对应的Python案例小结相关的实训、课程视频等资源:https://edu.tipdm.org相关的培训动态:http://www.tipdm.com/pxdt/index.jhtml |
|