NLP基础知识和综述

NLP基础知识和综述,第1张

一种流行的自然语言处理库、自带语料库、具有分类,分词等很多功能,国外使用者居多,类似中文的jieba处理库

为单词序列分配概率模型就叫做语言模型。

通俗来说, 语言模型就是这样一个模型:对于任意的词序列,它能够计算出这个序列是一句话的概率。或者说语言模型能预测单词序列的下一个词是什么。

n-gram Language Models

N-gram模型是一种典型的统计语言模型(Language Model,LM),统计语言模型是一个基于概率的判别模型统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。用一句简单的话说,统计语言模型就是计算一个句子的概率大小的这种模型。

n-gram模型可以减轻单词序列没有在训练集中出现过而引起的问题,即数据稀疏问题

n-gram模型问题

对于n-gram模型的问题,这两页ppt说的很明白

N-gram模型基于这样一种假设,当前词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram(N=2)和三元的Tri-Gram(N=3)Bi-Gram所满足的假设是马尔科夫假设。

一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分别用公式表示如下:

Bi-Gram:  P(T)=p(w1|begin) p(w2|w1) p(w3|w2)p(wn|wn-1)

Tri-Gram:  P(T)=p(w1|begin1,begin2) p(w2|w1,begin1) p(w3|w2w1)p(wn|wn-1,wn-2)

注意上面概率的计算方法:P(w1|begin)=以w1为开头的所有句子/句子总数;p(w2|w1)=w1,w2同时出现的次数/w1出现的次数。以此类推。

对于其中每项的计算举个例子:

由上可见Bi-Gram计算公式中的begin一般都是加个<s>标签。

N-gram存在的问题:

举一个小数量的例子进行辅助说明:假设我们有一个语料库(注意语料库),如下:

老鼠真讨厌,老鼠真丑,你爱老婆,我讨厌老鼠。

想要预测“我爱老”这一句话的下一个字。我们分别通过 bigram 和 trigram 进行预测。

1)通过 bigram,便是要对 P(w|老)进行计算,经统计,“老鼠”出现了3次,“老婆”出现了1次,通过最大似然估计可以求得P(鼠|老)=075,P(婆|老)=025, 因此我们通过 bigram 预测出的整句话为: 我爱老鼠。

2)通过 trigram,便是要对便是要对 P(w|爱老)进行计算,经统计,仅“爱老婆”出现了1次,通过最大似然估计可以求得 P(婆|爱 老)=1,因此我们通过trigram 预测出的整句话为: 我爱老婆。显然这种方式预测出的结果更加合理。

问题一:随着 n 的提升,我们拥有了更多的前置信息量,可以更加准确地预测下一个词。但这也带来了一个问题,当N过大时很容易出现这样的状况:某些n-gram从未出现过, 导致很多预测概率结果为0, 这就是稀疏问题。 实际使用中往往仅使用 bigram 或 trigram 。(这个问题可以通过平滑来缓解参考: https://mpweixinqqcom/s/NvwB9H71JUivFyL_Or_ENA )

问题二:同时由于上个稀疏问题还导致N-gram无法获得上下文的长时依赖。

问题三:n-gram 基于频次进行统计,没有足够的泛化能力。

n-gram总结:统计语言模型就是计算一个句子的概率值大小,整句的概率就是各个词出现概率的乘积,概率值越大表明该句子越合理。N-gram是典型的统计语言模型,它做出了一种假设,当前词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。它其中存在很多问题,再求每一个词出现的概率时,随着N的提升,能够拥有更多的前置信息量,可以使得当前词的预测更加准确,但是当N过大时会出现稀疏问题,导致很多词的概率值为0,为解决这一问题,因此常用的为bigram 或 trigram,这就导致N-gram无法获得上文的长时依赖。另一方面N-gram 只是基于频次进行统计,没有足够的泛化能力。

神经网络语言模型

2003年 Bengio 提出,神经网络语言模型( neural network language model, NNLM)的思想是提出词向量的概念,代替 ngram 使用离散变量(高维),采用连续变量(具有一定维度的实数向量)来进行单词的分布式表示,解决了维度爆炸的问题,同时通过词向量可获取词之间的相似性。

结合下图可知它所建立的语言模型的任务是根据窗口大小内的上文来预测下一个词,因此从另一个角度看它就是一个使用神经网络编码的n-gram模型。

它是一个最简单的神经网络,仅由四层构成,输入层、嵌入层、隐藏层、输出层。(从另一个角度看它就是一个使用神经网络编码的n-gram模型)

输入是单词序列的index序列,例如单词‘这’在字典(大小为∣V∣)中的index是10,单词‘是’的 index 是23,‘测’的 index 是65,则句子“这是测试”通过‘这是测’预测‘试’,窗口大小内上文词的index序列就是 10, 23, 65。嵌入层(Embedding)是一个大小为∣V∣×K的矩阵(注意:K的大小是自己设定的,这个矩阵相当于随机初始化的词向量,会在bp中进行更新,神经网络训练完成之后这一部分就是词向量),从中取出第10、23、65行向量拼成3×K的矩阵就是Embedding层的输出了。隐层接受拼接后的Embedding层输出作为输入,以tanh为激活函数,最后送入带softmax的输出层,输出概率,优化的目标是使得待预测词其所对应的softmax值最大。

缺点:因为这是通过前馈神经网络来训练语言模型,缺点显而易见就是其中的参数过多计算量较大,同时softmax那部分计算量也过大。另一方面NNLM直观上看就是使用神经网络编码的 n-gram 模型,也无法解决长期依赖的问题。

RNNLM

它是通过RNN及其变种网络来训练语言模型,任务是通过上文来预测下一个词,它相比于NNLM的优势在于所使用的为RNN,RNN在处理序列数据方面具有天然优势, RNN 网络打破了上下文窗口的限制,使用隐藏层的状态概括历史全部语境信息,对比 NNLM 可以捕获更长的依赖,在实验中取得了更好的效果。RNNLM 超参数少,通用性更强;但由于 RNN 存在梯度弥散问题,使得其很难捕获更长距离的依赖信息。

Word2vec中的CBOW 以及skip-gram,其中CBOW是通过窗口大小内的上下文预测中心词,而skip-gram恰恰相反,是通过输入的中心词预测窗口大小内的上下文。

Glove 是属于统计语言模型,通过统计学知识来训练词向量

ELMO 通过使用多层双向的LSTM(一般都是使用两层)来训练语言模型,任务是利用上下文来预测当前词,上文信息通过正向的LSTM获得,下文信息通过反向的LSTM获得,这种双向是一种弱双向性,因此获得的不是真正的上下文信息。

GPT是通过Transformer来训练语言模型,它所训练的语言模型是单向的,通过上文来预测下一个单词

BERT通过Transformer来训练MLM这种真正意义上的双向的语言模型,它所训练的语言模型是根据上下文来预测当前词。

以上部分的详细介绍在NLP之预训练篇中有讲到

语言模型的评判指标

具体参考: https://blogcsdnnet/index20001/article/details/78884646

Perplexity可以认为是average branch factor(平均分支系数),即预测下一个词时可以有多少种选择。别人在作报告时说模型的PPL下降到90,可以直观地理解为,在模型生成一句话时下一个词有90个合理选择,可选词数越少,我们大致认为模型越准确。这样也能解释,为什么PPL越小,模型越好。

一般用困惑度Perplexity(PPL)衡量语言模型的好坏,困惑度越小则模型生成一句话时下一个词的可选择性越少,句子越确定则语言模型越好。

简单介绍

Word2vec是一种有效创建词嵌入的方法,它自2013年以来就一直存在。但除了作为词嵌入的方法之外,它的一些概念已经被证明可以有效地创建推荐引擎和理解时序数据。在商业的、非语言的任务中。

背景

由于任何两个不同词的one-hot向量的余弦相似度都为0,多个不同词之间的相似度难以通过onehot向量准确地体现出来。

word2vec⼯具的提出正是为了解决上⾯这个问题。它将每个词表⽰成⼀个定⻓的向量,并使得这些向量能较好地表达不同词之间的相似和类⽐关系。

word2vec模型

word2vec⼯具包含了两个模型,即跳字模型(skip-gram)和连续词袋模型(continuous bag of words,CBOW)。word2vec的input/output都是将单词作为one-hot向量来表示,我们可以把word2vec认为是词的无监督学习的降维过程。

MaxEnt 模型(最大熵模型): 可以使用任意的复杂相关特征,在性能上最大熵分类器超过了 Byaes 分类器。但是,作为一种分类器模型,这两种方法有一个共同的缺点:每个词都是单独进行分类的,标记(隐状态)之间的关系无法得到充分利用,具有马尔可夫链的 HMM 模型可以建立标记之间的马尔可夫关联性,这是最大熵模型所没有的。

最大熵模型的优点:首先,最大熵统计模型获得的是所有满足约束条件的模型中信息熵极大的模型;其次,最大熵统计模型可以灵活地设置约束条件,通过约束条件的多少可以调节模型对未知数据的适应度和对已知数据的拟合程度;再次,它还能自然地解决统计模型中参数平滑的问题。

最大熵模型的不足:首先,最大熵统计模型中二值化特征只是记录特征的出现是否,而文本分类需要知道特征的强度,因此,它在分类方法中不是最优的;其次,由于算法收敛的速度较慢,所以导致最大熵统计模型它的计算代价较大,时空开销大;再次,数据稀疏问题比较严重。

CRF(conditional random field) 模型(条件随机场模型):首先,CRF 在给定了观察序列的情况下,对整个的序列的联合概率有一个统一的指数模型。一个比较吸引人的特性是其为一个凸优化问题。其次,条件随机场模型相比改进的隐马尔可夫模型可以更好更多的利用待识别文本中所提供的上下文信息以得更好的实验结果。并且有测试结果表明:在采用相同特征集合的条件下,条件随机域模型较其他概率模型有更好的性能表现。

CRF 可以用于构造在给定一组输入随机变量的条件下,另一组输出随机变量的条件概率分布模型。经常被用于序列标注,其中包括词性标注,分词,命名实体识别等领域。

建一个条件随机场,我们首先要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。然后为每一个特征函数赋予一个权重,然后针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。

CRF 具有很强的推理能力,并且能够使用复杂、有重叠性和非独立的特征进行训练和推理,能够充分地利用上下文信息作为特征,还可以任意地添加其他外部特征,使得模型能够 获取的信息非常丰富。

CRF 模型的不足:首先,通过对基于 CRF 的结合多种特征的方法识别英语命名实体的分析,发现在使用 CRF 方法的过程中,特征的选择和优化是影响结果的关键因素,特征选择问题的好与坏,直接决定了系统性能的高低。其次,训练模型的时间比 MaxEnt 更长,且获得的模型很大,在一般的 PC 机上无法运行。

潜在语义分析(Latent Semantic Analysis,LSA)模型

在潜在语义分析(LSA)模型首先给出了这样一个 ‘‘分布式假设” :一个 单词的属性是由它所处的环境刻画的。这也就意味着如果两个单词在含义上比较接近,那么它们也会出现在相似的文本中,也就是说具有相似的上下文。

LSA模型在构建好了单词-文档矩阵之后,出于以下几种可能的原因,我们会使用奇异值分解(Singular Value Decomposition,SVD) 的方法来寻找该矩阵的一个低阶近似。

概率潜在语义分析(Probability Latent Semantic Analysis ,PLSA)模型

概率潜在语义分析(PLSA)模型其实是为了克服潜在语义分析(LSA)模型存在的一些缺点而被提出的。LSA 的一个根本问题在于,尽管我们可以把 U k 和 V k 的每一列都看成是一个话题,但是由于每一列的值都可以看成是几乎没有限制的实数值,因此我们无法去进一步解释这些值到底是什么意思,也更无法从概率的角度来理解这个模型。

PLSA模型则通过一个生成模型来为LSA赋予了概率意义上的解释。该模型假设,每一篇文档都包含一系列可能的潜在话题,文档中的每一个单词都不是凭空产生的,而是在这些潜在的话题的指引下通过一定的概率生成的。

在 PLSA 模型里面,话题其实是一种单词上的概率分布,每一个话题都代表着一个不同的单词上的概率分布,而每个文档又可以看成是话题上的概率分布。每篇文档就是通过这样一个两层的概率分布生成的,这也正是PLSA 提出的生成模型的核心思想。

PLSA 通过下面这个式子对d和 w 的联合分布进行了建模:

该模型中的 z 的数量是需要事先给定的一个超参数。需要注意的是,上面这 个式子里面给出了 P (w, d ) 的两种表达方式,在前一个式子里, d 和 w 都是在给定 z 的前提下通过条件概率生成出来的,它们的生成方式是相似的,因此是 ‘‘对称’’ 的;在后一个式子里,首先给定 d ,然后根据 P ( z | d ) 生成可能的话题 z ,然后再根据 P (w| z ) 生成可能的单词 w,由于在这个式子里面单词和文档的生成并不相似, 所以是 ‘‘非对称’’ 的。

上图给出了 PLSA 模型中非对称形式的 Plate Notation表示法。其中d表示 一篇文档,z 表示由文档生成的一个话题,w 表示由话题生成的一个单词。 在这个模型中, d和w 是已经观测到的变量,而z是未知的变量(代表潜在的话题)。

容易发现,对于一个新的文档而言,我们无法得知它对应的 P ( d ) 究竟是什么, 因此尽管 PLSA 模型在给定的文档上是一个生成模型,它却无法生成新的未知的文档。该模型的另外的一个问题在于,随着文档数量的增加, P ( z | d ) 的参数也会随着线性增加,这就导致无论有多少训练数据,都容易导致模型的过拟合问题。这两点成为了限制 PLSA 模型被更加广泛使用的两大缺陷。

潜在狄利克雷分配(Latent Dirichlet Analysis , LDA)模型

为了解决 PLSA 模型中出现的过拟合问题,潜在狄利克雷分配(LDA)模型被 Blei 等人提出,这个模型也成为了主题模型这个研究领域内应用最为广泛的模 型。LDA就是在PLSA的基础上加层贝叶斯框架,即LDA就是PLSA的贝叶斯版本(正因为LDA被贝叶斯化了,所以才需要考虑历史先验知识,才加的两个先验参数)。

从上一节我们可以看到,在 PLSA 这个模型里,对于一个未知的新文档 d ,我们对于 P ( d ) 一无所知,而这个其实是不符合人的经验的。或者说,它没有去使用本来可以用到的信息,而这部分信息就是 LDA 中所谓的先验信息。

具体来说,在 LDA 中,首先每一个文档都被看成跟有限个给定话题中的每一个存在着或多或少的关联性,而这种关联性则是用话题上的概率分布来刻画的, 这一点与 PLSA 其实是一致的。

但是在 LDA 模型中,每个文档关于话题的概率分布都被赋予了一个先验分布,这个先验一般是用稀疏形式的狄利克雷分布表示的。 这种稀疏形式的狄利克雷先验可以看成是编码了人类的这样一种先验知识:一般而言,一篇文章的主题更有可能是集中于少数几个话题上,而很少说在单独一篇文章内同时在很多话题上都有所涉猎并且没有明显的重点。

此外,LDA 模型还对一个话题在所有单词上的概率分布也赋予了一个稀疏形式的狄利克雷先验,它的直观解释也是类似的:在一个单独的话题中,多数情况是少部分(跟这个话题高度相关的)词出现的频率会很高,而其他的词出现的频率则明显较低。这样两种先验使得 LDA 模型能够比 PLSA 更好地刻画文档-话题-单词这三者的关系。

事实上,从 PLSA 的结果上来看,它实际上相当于把 LDA 模型中的先验分布转变为均匀分布,然后对所要求的参数求最大后验估计(在先验是均匀分布的前提下,这也等价于求参数的最大似然估计) ,而这也正反映出了一个较为合理的先验对于建模是非常重要的。

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。

现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。

按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。

中文分词根据实现原理和特点,主要分为以下2个类别:

(1)基于词典分词算法

也称字符串匹配分词算法。该算法是按照一定的策略将待匹配的字符串和一个已建立好的“充分大的”词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别了该词。常见的基于词典的分词算法分为以下几种:正向最大匹配法、逆向最大匹配法和双向匹配分词法等。

基于词典的分词算法是应用最广泛、分词速度最快的。很长一段时间内研究者都在对基于字符串匹配方法进行优化,比如最大长度设定、字符串存储和查找方式以及对于词表的组织结构,比如采用TRIE索引树、哈希索引等。

(2)基于统计的机器学习算法

这类目前常用的是算法是HMM、CRF(条件随机场)、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。

常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。

随着深度学习的兴起,也出现了 基于神经网络的分词器 ,例如有人员尝试使用双向LSTM+CRF实现分词器, 其本质上是序列标注 ,所以有通用性,命名实体识别等都可以使用该模型,据报道其分词器字符准确率可高达975%。算法框架的思路与论文《Neural Architectures for Named Entity Recognition》类似,利用该框架可以实现中文分词,如下图所示:

首先对语料进行字符嵌入,将得到的特征输入给双向LSTM,然后加一个CRF就得到标注结果。

目前中文分词难点主要有三个:

1、分词标准 :比如人名,在哈工大的标准中姓和名是分开的,但在Hanlp中是合在一起的。这需要根据不同的需求制定不同的分词标准。

2、歧义 :对同一个待切分字符串存在多个分词结果。

歧义又分为组合型歧义、交集型歧义和真歧义三种类型。

一般在搜索引擎中,构建索引时和查询时会使用不同的分词算法。常用的方案是,在索引的时候使用细粒度的分词以保证召回,在查询的时候使用粗粒度的分词以保证精度。

3、新词 :也称未被词典收录的词,该问题的解决依赖于人们对分词技术和汉语语言结构的进一步认识。

典型的文本分类过程可以分为三个步骤:

1 文本表示(Text Representation)

这一过程的目的是把文本表示成分类器能够处理的形式。最常用的方法是向量空间模型,即把文本集表示成词-文档矩阵,矩阵中每个元素代表了一个词在相应文档中的权重。选取哪些词来代表一个文本,这个过程称为特征选择。常见的特征选择方法有文档频率、信息增益、互信息、期望交叉熵等等。为了降低分类过程中的计算量,常常还需要进行降维处理,比如LSI。

2 分类器构建(Classifier Construction)

这一步骤的目的是选择或设计构建分类器的方法。不同的方法有各自的优缺点和适用条件,要根据问题的特点来选择一个分类器。我们会在后面专门讲述常用的方法。选定方法之后,在训练集上为每个类别构建分类器,然后把分类器应用于测试集上,得到分类结果。

3 效果评估(Classifier Evaluation)

在分类过程完成之后,需要对分类效果进行评估。评估过程应用于测试集(而不是训练集)上的文本分类结果,常用的评估标准由IR领域继承而来,包括查全率、查准率、F1值等等。

1 Rocchio方法

每一类确定一个中心点(centroid),计算待分类的文档与各类代表元间的距离,并作为判定是否属于该类的判据。Rocchio方法的特点是容易实现,效率高。缺点是受文本集分布的影响,比如计算出的中心点可能落在相应的类别之外。

2 朴素贝叶斯(naïve bayes)方法

将概率论模型应用于文档自动分类,是一种简单有效的分类方法。使用贝叶斯公式,通过先验概率和类别的条件概率来估计文档对某一类别的后验概率,以此实现对此文档所属类别的判断。

3 K近邻(K-Nearest Neightbers, KNN)方法

从训练集中找出与待分类文档最近的k个邻居(文档),根据这k个邻居的类别来决定待分类文档的类别。KNN方法的优点是不需要特征选取和训练,很容易处理类别数目多的情况,缺点之一是空间复杂度高。KNN方法得到的分类器是非线性分类器。

4 支持向量机(SVM)方法

对于某个类别,找出一个分类面,使得这个类别的正例和反例落在这个分类面的两侧,而且这个分类面满足:到最近的正例和反例的距离相等,而且是所有分类面中与正例(或反例)距离最大的一个分类面。SVM方法的优点是使用很少的训练集,计算量小;缺点是太依赖于分类面附近的正例和反例的位置,具有较大的偏执。

文本聚类过程可以分为3个步骤:

1 文本表示(Text Representation)

把文档表示成聚类算法可以处理的形式。所采用的技术请参见文本分类部分。

2 聚类算法选择或设计(Clustering Algorithms)

算法的选择,往往伴随着相似度计算方法的选择。在文本挖掘中,最常用的相似度计算方法是余弦相似度。聚类算法有很多种,但是没有一个通用的算法可以解决所有的聚类问题。因此,需要认真研究要解决的问题的特点,以选择合适的算法。后面会有对各种文本聚类算法的介绍。

3 聚类评估(Clustering Evaluation)

选择人工已经分好类或者做好标记的文档集合作为测试集合,聚类结束后,将聚类结果与已有的人工分类结果进行比较。常用评测指标也是查全率、查准率及F1值。

1.层次聚类方法

层次聚类可以分为两种:凝聚(agglomerative)层次聚类和划分(divisive)层次聚类。凝聚方法把每个文本作为一个初始簇,经过不断的合并过程,最后成为一个簇。划分方法的过程正好与之相反。层次聚类可以得到层次化的聚类结果,但是计算复杂度比较高,不能处理大量的文档。

2.划分方法

k-means算法是最常见的划分方法。给定簇的个数k,选定k个文本分别作为k个初始簇,将其他的文本加入最近的簇中,并更新簇的中心点,然后再根据新的中心点对文本重新划分;当簇不再变化时或经过一定次数的迭代之后,算法停止。k-means算法复杂度低,而且容易实现,但是对例外和噪声文本比较敏感。另外一个问题是,没有一个好的办法确定k的取值。

3.基于密度的方法

为了发现任意形状的聚类结果,提出了基于密度的方法。这类方法将簇看作是数据空间中被低密度区域分割开的高密度区域。常见的基于密度的方法有DBSCAN, OPTICS, DENCLUE等等。

4.神经网络方法

神经网络方法将每个簇描述为一个标本,标本作为聚类的"原型",不一定对应一个特定的数据,根据某些距离度量,新的对象被分配到与其最相似的簇中。比较著名的神经网络聚类算法有:竞争学习(competitive learing)和自组织特征映射(self-organizing map)[Kohonen, 1990]。神经网络的聚类方法需要较长的处理时间和复杂的数据复杂性,所以不适用于大型数据的聚类。

来源 | 雪晴数据网

利用机器学习可以很方便的做情感分析。本篇文章将介绍在R语言中如何利用机器学习方法来做情感分析。在R语言中,由Timothy PJurka开发的情感分析以及更一般的文本挖掘包已经得到了很好的发展。你可以查看下sentiment包以及梦幻般的RTextTools包。实际上,Timothy还写了一个针对低内存下多元Logistic回归(也称最大熵)的R包maxtent。

然而,RTextTools包中不包含朴素贝叶斯方法。e1071包可以很好的执行朴素贝叶斯方法。e1071是TU Wien(维也纳科技大学)统计系的一门课程。这个包的主要开发者是David Meyer。

我们仍然有必要了解文本分析方面的知识。用R语言来处理文本分析已经是公认的事实(详见R语言中的自然语言处理)。tm包算是其中成功的一部分:它是R语言在文本挖掘应用中的一个框架。它在文本清洗(词干提取,删除停用词等)以及将文本转换为词条-文档矩阵(dtm)方面做得很好。这里是对它的一个介绍。文本分析最重要的部分就是得到每个文档的特征向量,其中词语特征最重要的。当然,你也可以将单个词语特征扩展为双词组,三连词,n-连词等。在本篇文章,我们以单个词语特征为例做演示。

注意,在R中用ngram包来处理n-连词。在过去,Rweka包提供了函数来处理它,感兴趣的可以查看这个案例。现在,你可以设置RTextTools包中create_matrix函数的参数ngramLength来实现它。

第一步是读取数据:

创建词条-文档矩阵:

现在,我们可以用这个数据集来训练朴素贝叶斯模型。注意,e1071要求响应变量是数值型或因子型的。我们用下面的方法将字符串型数据转换成因子型:

测试结果准确度:

显然,这个结果跟python得到的结果是相同的(这篇文章是用python得到的结果)。

其它机器学习方法怎样呢?

下面我们使用RTextTools包来处理它。

首先,指定相应的数据:

其次,用多种机器学习算法训练模型:

现在,我们可以使用训练过的模型做测试集分类:

准确性如何呢?

得到模型的结果摘要(特别是结果的有效性):

结果的交叉验证:

结果可在我的Rpub页面找到。可以看到,maxent的准确性跟朴素贝叶斯是一样的,其它方法的结果准确性更差。这是可以理解的,因为我们给的是一个非常小的数据集。扩大训练集后,利用更复杂的方法我们对推文做的情感分析可以得到一个更好的结果。示例演示如下:

推文情感分析

数据来自victornep。victorneo展示的是用python对推文做情感分析。这里,我们用R来处理它:

读取数据:

首先,尝试下朴素贝叶斯

然后,尝试其他方法:

这里,我们也希望得到正式的测试结果。包括:

1analytics@algorithm_summary:包括精确度,召回率,准确率,F-scores的摘要

2analytics@label_summary:类标签摘要

3analytics@document_summary:所有数据和得分的原摘要

4analytics@ensemble_summary:所有 精确度/覆盖度 比值的摘要

现在让我们看看结果:

与朴素贝叶斯方法相比,其它算法的结果更好,召回精度高于095。结果可在Rpub查看

原文链接:http://wwwxueqingcc/cms/article/107

可以用

,这个是情感计算工具,提供了自定义词表,领域情感词表导入、基础情感词表、情感计算、分段情感计算、正面情感、负面情感、中性情感分类计算、汇总、细粒度情感值、异常文本识别、情感分类排行。

“广告看似简单,但是,每条广告都要以大量的数据、信息和持续数月的研究为基础。——克劳德·霍普金斯

一、“显微镜级别洞察力背后的黑科技

无论何时,市场洞察都是营销人的眼睛,视线看向哪里、看到了什么,都左右着未来商业潮水的走向。

20多年前,“市场洞察更多还被称为“市场调研,由于可获取的样本量有限,调研结果在如今看来并不精准,更难以称之为“洞察。

互联网的兴起才让“洞察真正成为可能。但受限于技术和产品能力,广告主只能通过粗粒度的行业通用标签来投放。例如,不同广告主只能共用一个“美妆的行业标签,商业分析依旧无法达到理想中的“精准。

如今,5G时代下,流量潮水正逐渐褪去,接近饱和的移动互联网广告市场正宣告着存量时代的来临,营销步入精细化阶段。这意味着,洞察需要更加精准才有能力支撑更清晰的商业决策。

以美妆行业为例,广告主不仅需要看见对美妆感兴趣的人群在哪里,更需要知道对自己品牌感兴趣的人群有哪些。

广告的投放也不止于有限且固定的位置,还可以结合上下文场景。如主打美白的产品可以植入到所有与“美白相关的内容场景中。

洞察不再只是粗犷的行业调研,而是能够看见某一细分品类甚至某个产品的市场利益分析。

事实上,

上述这些功能都藏在巨量引擎的商业数据产品巨量云图中。有了这些精细的洞察,曾经相对模糊的营销的中上游如今有了更加清晰的视野,广告主也能有的放矢,把控更多决策细节。

“显微镜级别的洞察背后,是机器对万亿级数据流的抽丝剥茧,以及人类与机器的高效联动。

最初,巨量引擎技术团队围绕“精准洞察需求,决定在3个层面升级技术能力,开发出更精细、灵活、快速的解决方案:

1基础层:提升机器的内容理解丰富度,产出更多样化的标签。

2应用层:洞察不仅要精准,更要为广告主真正所需。因此搭建一个标准化标签生产平台,灵活满足广告主个性化标签需求,做到“所需即所得。

3效率层:提升数据查询速度,确保广告主即时看到分析结果,以快速跟进决策。

二、基础层:让机器理解更丰富的世界

在巨量引擎,内容是最基础的“原料,无数内容流汇成数据的基本盘,为商业分析提供不竭动力。但事实上,正如原油要经过一系列工业流程才能变成有商业价值的石油,从海量内容中提炼出精准的商业洞察还需要很多操作。其中最关键的一环就是让机器能理解更多信息。

机器获取的信息量越大,输出的标签颗粒度就会越细,最终发现更具象的商业洞察。

整体上从两个方面入手。

一是在识别粒度上,将机器的文本理解能力提升至词粒度;二是在识别广度上,让机器具备理解视频的能力。二者都是为了让机器从海量内容中获取更多的信息,“看见一个更丰富的世界。

1

细粒度的文本理解能力

在文本识别方面,机器的理解能力按照精细程度主要分为三个级别。同样一篇文章,初级水平的机器只能知道这段文本讲的是汽车,因此标签的分类也十分粗糙;中级水平的机器能理解到语句级别,识别出这篇讲汽车的文章中有多少篇幅讲的是发动机;高级水平的机器更聪明一些,能够识别出句子中的关键词。文章中某辆汽车的品牌、型号、外形、性能、配置等各方面表现都能被准确识别出来。

在巨量引擎,

机器的文本理解水平已经精确到了词粒度,达到了目前语义理解的最小单位

。简单来说,技术同学会制定一套具备商业属性的关键词策略,例如语义上是否相关、词频高低、热度搜索趋势、数据源是否有商业属性等,机器会根据这套策略将识别到的词语按照关键程度进行排序,越符合规定策略的词则排名越高,最终被定义为商业关键词。这些商业关键词如果再经过系统的“美工,就是我们在分析中经常看见的词云图。

2

更广泛的内容识别范围

对机器来说,视频通常集图像、音频、文本等各个形态于一身,所以识别难度也比文本更高。在技术领域,通过机器学习的方法实现和理解多种形态信息的能力称为

多模态学习

,这其中“模态就是指各种信息的载体,如文本、图像、声音等。因此,视频理解就是一个典型的多模态学习应用场景。通过“多模态学习,机器能够识别出更多数据形态,对内容的理解也会更充分。

整体而言,让机器理解视频主要分为表征、融合和分类三个步骤。

“表征的作用类似于翻译,即将文本、图像、声音等不同类型的数据转换成机器能理解的“数据语言,即同一种结构的数据。在“融合阶段,机器将采取不同的策略将多种模态的信息进行整合,寻找这些信息之间的关联性,形成统一的认知。最后,机器在充分理解之后再把数据按照一级、二级行业属性等规则进行归类,相似的数据归为一类,最终输出“标签。

多模态技术科普视频:机器是如何理解视频的?

通俗来讲,有了多模态技术的加持,就像人类掌握了多国语言。一方面,在缺失某种模态的情况下也能凭借另一种模态理解内容;另一方面,通过对不同模态的信息进行融合,机器对内容的理解也更加准确。

通过对文本与视频的理解,机器将底层庞大的内容流“划分成了各式各样的标签,这些标签中有相对粗粒度的类目标签,也有精细到词粒度的关键词,它们组成了庞大的商业标签库,成为满足广告主不同营销需求的底层基础。

三、应用层:高效满足个性化洞察需求

虽然通过内容理解技术,机器最终能够输出更精准的标签。但这些标签属于标准化产物,产出后无法再更改和调整,因此依然很难满足一些广告主的个性化需求。

例如,如果广告主只想投放对自己品牌感兴趣的人群,或仅想知道与自身产品相关的利益点分析,那么就需要重新生产出一套符合自己需求的个性化标签,这其中需要对标签进行定义、根据规则在底层数据库中进行挖掘、以及评估测试等多个流程,最后才能上线使用。

这一系列流程都是在标签平台上实现的。简单来讲,标签平台是

搭建在内容理解的能力基础之上的标签生产和管理工具

。通过一套标准化的流程,让不懂技术的业务同学也能够根据实际需求自定义标签规则,在平台上灵活生产标签。

后来标签平台经过内测后对外开放,在巨量云图上线为“标签工厂。

用技术同学的话说,标签平台的价值就像是将餐厅的后厨开放出来。如果菜单上没有符合客人胃口的菜,那么就可以直接去后厨,挑选合适的食材,做出想要的美食。

一言以蔽之,标签平台让精准洞察具备了“适配性:不仅精准,且为广告主真正所需。

最终,通过内容理解和标签平台,广告主才能通过对全平台的内容指标分析,看到各种品类的市场趋势。甚至还能通过分析某一特定品类的UGC及PGC内容,得知产品卖点与用户认知是否契合、正负评论各有哪些、产品利益点表现情况等。

人群方面,广告主还能在标签平台上圈选出本品的兴趣和机会人群,以及找出与目标群众重合度高的KOL,大大降低营销决策的风险。

四、效率层:让商业分析唾手可得

如同古代的行军打仗,战报的送达时间密切影响着战略决策,事关战局输赢。商业分析也是如此,对广告主而言,如果数据不能被即时看见,就意味着不能尽快复盘,敏捷应对,那么其价值就会被削弱,即便洞察精准,依旧如管中窥豹。

事实上,广告主每发出一次查询请求,系统都要在海量数据库中进行查询、计算、分析等一系列复杂的操作,最终才将目标数据呈现在广告主眼前。但在广告主看来,这一切仅发生在眨眼之间。

如此高效的处理速度主要源于对数据存储方式的优化。对机器而言,不同类型的数据存储方式很大程度上决定了查询速度的快慢。就像从一个拥有10万本藏书的图书馆里找到四大名著一样,如果能将书籍按照内容以及首字母进行分类和排序,很快就能找全四大名著。

因此,在数据存储方式上,团队请了一个“外援——ClickHouse,一种高性能的开源数据库管理系统,专门擅长处理云图这种数据量大、经常承接各种灵活查询需求的场景。凭借列式存储结构和按列计算的特性,结合业务侧数据分片处理,ClickHouse能够高效读取与计算出广告主需要的数据。

例如广告主想对一二线城市爱吃巧克力的女性进行内容分析,传统的数据库则需要读取所有数据才能依次筛选出一二线城市、女性、爱吃巧克力三个标签,最后三个条件都符合的才是广告主的目标人群。但如果使用ClickHouse这个“外援,系统无需读取全部数据,只需查询这三个标签所在的“列,再对这三组数据在用户分片上进行“交并差并行处理就可以了,大大节省了查询时间。

在此基础上,再通过“BitMap技术

缩小数据的存储空间

。Bit是计算机数据系统中的最小单位,一个bit值可以为1或0,我们经常听到的“byte可以换算为8个bit。而“BitMap正是采用bit数组的数据结构,将原始数据与bit数组里的位置建立映射关系。由于Bit的存储单位很小,因此往往能够节省大量存储空间。

高度抽象一点说,“BitMap的原理就像英语的缩略词一样。例如把雅思写成全称的形式“InternationalEnglishLanguageTestingSystem需要占用45个字符,而如果直接简写成“IELTS只需要5个字符就够了,这样机器读取的时间就会大大缩短。

根据业务测试反馈,凭借ClickHouse和“BitMap组合,巨量云图的查询速度提升了10-50倍,查询时间已控制在3-5秒间,真正实现了商业分析的“所需即所得。

结语:

内容理解从底层解决了标签的精准问题,标签平台从上层让精准的洞察发挥出更多价值,查询技术让一切信息秒速进入人们的视线,正是通过一次次技术上的突破,才成就了如今洞悉更多商业细节的能力。

从创意生产到洞察分析,现在巨量引擎团队又有了更多新思考,例如让情感分析更加细腻、系统更加智能、生产更高效营销的科学性也正是在无数次思考中走向普罗大众。相信,这些细微的思考也会在未来带来更先进的技术,解决更多难题。

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/qinggan/7547163.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-09-06
下一篇2023-09-06

发表评论

登录后才能评论

评论列表(0条)

    保存