word2ve是词聚类模型,是基于上下文的,关注的是词与上下文的共现。
算法可以用word2vec+kmeans聚类。
LDA是主题聚类模型,关注的是词与文章的共现。LDA和doc2vec更与对比性。LDA很耗时,商业不喜欢用。
可以参考的博客地址
FastText是facebook开源的一个词向量与文本分类工具,模型简单且训练速度快。
FastText使用的模型与word2vec的模型在结构上是一样的。比如cbow,word2ved的目标是通过当前词的前后N个词来预测当前词,在使用层次softmax的时候,huffman树叶子结点处是训练语料里所有词的向量。
而FastText在进行文本分类时,huffmax树叶子结点处是每一个分类标签的词向量,在训练的过程中,训练语料的每一个词也会得到对应的词向量,输入一个为window内的词对应的词向量,hidden layer为这几个词的线性相加,相加的结果作为该文档的向量,再通过层次softmax得到预测标签,结合文档的真实标签计算loss,梯度与迭代更新词向量。
loss function选用hs(hierarchical softmax)要比ns(negative sampling) 训练速度要快很多倍,并且准确率也更高。
wordNgrams 默认为1,设置为2以上可以明显提高准确率。
如果词数不是很多,可以把bucket设置的小一点,否则预留会预留太多bucket使模型太大。
一种基于CNN的短文本表达模型及相似度计算的全新优化模型
链接
文档中词语权重方案:
用于计算词语间的语义相似度,基本思想是统计两个词语在文本中同时出现的概率,如果概率越大,其相关性就越紧密,关联度越高。
DF:统计特征词出现的文档数量,用来衡量某个特征词的重要性。
DF的动机是,如果某些特征词在文档中经常出现,那么这个词可能很重要。而对于在文档中出现次数很少的特征词,这些特征词对分类器学习的影响也很小。DF特征选择方法是无监督的算法,仅仅考虑了频率因素,因此会引入一些没有意义的词,”的“,”是“这些词得分高但没有实际意义
互信息法用于衡量特征词与文本类别直接的信息量。如果某个特征词的频率很低,那么互信息得分会很大。
信息增益法,通过某个特征词的缺失和存在两种情况下,语料中前后信息的增加,衡量某个特征词的重要性。
句子之间的相似性,一般用词向量组成句向量。词向量一般被看作是文档的特征。
参考文档地址
根据词向量组成句向量的方式:如果是一词一列向量,一般采用简单相加的方式来求得。谷歌的sen2vec可以直接把句子变成一列向量。
将词向量加起来的一个有效的方法:延伸。word2vec考虑了上下语义,doc2vec还考虑了上下语句顺序,用在段落中比较好。
词向量的额外效果:
消除歧义:LDA的主题-词语向量
结合上下文语境:word2vec
文档与文档之间的关系:bow+TFIDF(TFIDF能够较好区分文档的差别指标,而互信息比较有利于文档中核心词的提取)
文本相似性:用词向量来衡量相似性,一般用word2vec(结合了上下文语境,短文本非常优异)、LDA主题-词语向量
词袋模型,基于文档中出现的单词,构建词典向量。该向量与原来文本中单词出现的顺序没有关系,而是词典中每个单词在文本汇总出现的频率。
计算文本相似度有两种方法,一方面从数学角度,计算距离;另一方面,利用语义相似性。 参考文档
1. 莱文斯坦距离
计算文档字符串间的编辑距离
2. Jaro距离
也是一种编辑距离,Jaro距离越高文本相似性越高
3. SimHash
是一种局部敏感hash,它产生的hash签名在一定程度上可以表征原内容的相似度。度量文本相似度最终是汉明距离,我们认为汉明距离小于3的文本是相似的。
SImHash适用于较长的文本,但在大规模语料进行去重的时候,计算速度优势还不错。
1. n-gram模型
假设每个单词只与前n-1个单词有关。
是一种词的类型表示,具有相似意义的词具有相似的表示,是将词汇映射到实数向量的总称。
词嵌入是一种技术,单个词在预定义的向量空间中被表示为实数向量,每个单词都映射到一个向量。将文本映射到多维向量空间,这个映射的过程叫词嵌入。通过将单词转变为词向量,机器便可对单词进行计算,通过不同向量之间夹角余弦值可以得出单词之间的相似性。
另外词嵌入还可以做类比,比如“国王-男人+女人=女王”。有了这些运算,机器人可以“理解”词汇的意思。
词嵌入主要的算法:
1. Embedding Layer
one-hot编码
2. Word2Vec/Doc2Vec
是一种用于有效学习从文本语料库嵌入的独立词语的统计方法。核心思想是基于上下文,先用向量代表各个词,然后通过一个预测目标函数学习这些向量的参数。Word2Vec的网络主体是一种单隐层前馈神经网络,网络的输入和输出均为词向量。
该算法给出了两种训练模型CBOW(Continuous Bag-of-Words Model)和Skip-gram(Continuous Skip-gram Model)。CBOW是将一个词所在的上下文中的词作为输入,而那个词本身作为输出,也就是说看到一个上下文,希望能大概猜出这个词和它的意思,通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型;而Skip-gram的做法是将一个词本身作为输入,而所在的上下文的词作为输出,也就是说给出一个词,希望预测可能出现的上下文的词,2-gram比较常用。
通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型。给定xx预测xxx的模型的输入都是词的量,然后通过种植各种深度学习模型预测下一个词的概率。通过优化目标函数,最后得到这些词汇向量的值。虽然取得了很好的效果,但是模型上仍然存在缺陷,如没有考虑词序,没有考虑全局的统计信息。
句向量
1.深度学习方面
用CNN来句子表示,操作流程是:padding句子让其长度一致->使用词表示技术成为方阵->使用CNN->使用Max-overtime pooling->全连接层->获得句向量
GRU
fasttext
fasttext模型输入一个词的序列(一段文本活着一句话),输出这个词序列属于不同类别的概率。序列中的词和词组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。fasttext在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。fastText模型架构和Word2Vec中的CBOW模型很类似。不同之处,fastText预测标签,而CBOW模型预测中间词。
句向量表达
Sentence2vec
跟句向量简单相加相减类似,通过PCA/SVD的加权得到句向量,这种效果可以与STM表征的效果媲美。
Skip-Thoughts模型
NLP+Skip-Thoughts-Vectors︱基于TensorFlow的带语义特征的句向量编码方式
github地址:https://github.com/tensorflow/models/tree/master/skip_thoughts
该模型是一个句子编码器。它学习将输入的句子编码成固定维度的向量表示,这些向量能够对许多人物游泳,比如对产品评论进行积极或消极的分类。
一个训练好的 Skip-Thoughts 模型会在嵌入的向量空间中对相互临近的相似句子进行编码。以下示例展示了对电影评论数据集中的一些句子的余弦相似性的最近邻域。
我们描述了一种通用、分布式句子编码器的无监督学习方法。使用从书籍中提取的连续文本,我们训练了一个编码器-解码器模型,试图重建编码段落周围的句子。语义和语法属性一致的句子因此被映射到相似的向量表示。我们接着引入一个简单的词汇扩展方法来编码不再训练预料内的单词,令词汇量扩展到一百万词。同时建立word2vec到skip-thoughts向量之间的映射关系。
在训练模型后,我们用线性模型在8个任务上提取和评估我们的向量,包括:语义相关性,释义检测,图像句子排序,问题类型归类,以及4个基准情绪和主观性数据集。最终的结果是一个非专门设计的编码器,能够生成高度通用性的句子表示,在实践中表现良好。
Doc2Vec
也可以用doc2vec来做相似性分析,其他办法有:
第一种方法,使用docsim;第二种办法,使用doc2vec;第三种方式:使用LSH。
能够表征相似的:基于CNN的短文本表达模型及相似度计算的全新优化模型
LSF-SCNN,即基于词汇语义特征的跳跃卷积模型 (Lexical Semantic Feature based Skip Convolution neural network ),基于卷积神经网络模型引入三种优化策略:词汇语义特征 (Lexical Semantic Feature, LSF)、跳跃卷积 (Skip Convolution, SC)和K-Max均值采样 (K-Max Average Pooling, KMA) ,分别在词汇粒度、短语粒度、句子粒度上抽取更加丰富的语义特征,从而更好的在向量空间构建短文本语义表达模型,并广泛的适用于问答系统 (question answering)、释义识别 (paraphrase identification) 和文本蕴含 (textual entailment)等计算成对儿出现的短文本的相似度的任务中。 链接:点击打开链接
LSF特征怎样计算得到?
问题和答案中的每一个单词都会有一个LSF特征,具体来说是一个[0,t]上的整数值。LSF的计算过程可通过下面一个例子说明,当我们想要求解问题中general一词的LSF特征时,第一步我们需要计算general与答案中每一个词的余弦相似度并选取其中的最大值,因此chief被选取出来。第二步,余弦相似度值的最大值0.79将通过一个映射函数映射为一个[0,t]区间的整数,当我们假定t=10,最终计算得到general的LSF特征为3。这是合理的,general和chief一定程度上是近义词。
CNN是分层模型,RNN是连续结构。
如果用分类问题,用CNN。对于顺序建模,需要联系上下文,用RNN。