NLP文本分类--词向量
1.基于规则,对于要提取的分类维护一个dict,在dict里面保存需要提取的关键词,存在关键词的对应标记为分类;(缺点,不断的去维护词典)
2.基于机器学习:HMM(分词最常用的),CRF,SVM,LDA,CNN
3.词袋模型:bag of word :(one hot)一种是统计词频和位置,一种是只存储是否出现;(缺点很明显,只有词出现信息,对于词的重要度完全没有体现)
4.tf-idf:先考虑每个词在当前词词表中多高,再考虑在所有的文本中出现频率。这样就有词的重要程度了。(缺点是还是么有词的顺序考量,毕竟 l love you, you love l 是不一样的。但是tf )
5.n-gram:将n个词体现为一个向量表示,这样就可以体现顺序了。那一句话出现的概率就可以表示为:
(这个里面业界一般不会用相乘,用相加处理。)(缺点:维度会爆炸,随着n越大。n小效果不好,一般n要到5才会有量变,这样所有词的顺序组合足以变得非常爆炸。不能表达句子或者说词之间的相似性。只能对文本进行表达。不能捕捉文本含义。)
6.distribution representation:一个东西可以通过分布式表示方法就能可以用很少的东西,也能表示词的相似性。一个词表示可以通过他附近的词表示: 比如 我是一个 _____人 :这个例子中的空格,我们可以填写,中国人,好人,坏人,善良;那这些词都有一些相似性的。这样就可以通过周边词去表示这个词。
7.共线矩阵cocurrence matrix :因为用分布式表达,我们不能无限的取他旁边的词,这个时候要选取几个旁边的词。这个和 n-gram很像。 但不同的是旁边词形成局域窗中的词,而自己本身并不参与。做成一个共线矩阵。
缺点:线性增长,维度太高,太稀疏。
8.对上面的矩阵进行svd降维
缺点: n*n 算法复杂O(n^3)对大型语料库而言:n–40万。1-60Btoken;对新加入词就要重新计算。
9.NNLM(neural network language model)
(缺点:计算量还是很大,需要的参数太多。对于训练就不是很友好了)
10.Word2vector:CBOW,SKIP-GRAM(去掉映射层)
改进:去掉映射层,直接用每个词词向量(初始化好的词表)。把NNLM中拼接维度参数改成直接对词向量的求和。 直接去预测目标词。不使用**函数,是一个线性的表示器。(缺点:最后的soft的分类还是太多了。)
11.CBOW-层次softmax:通过词频出现次数,使用Huffman编码。在最后做决策每次softmax就会只有0,1两种,权重放到了这个上面。这样变成每次softmax按照树进行乘积。使得这个乘积最大。这样相当于4次决策。
(缺点:建立Huffman树,并对这个分层结构进行训练还是比较麻烦。训练每个词都可能全部遍历整个树结构。这个计算也比较大。)
12.CBOW-负采样:对每一个目标词而言。其实训练结果中只有一个词是目标词(比如整个词库有10万个词,去预测一句话里面的一个词出现的概率。这里面只有这个词是正样本,其他词全都是负样本(10-1)。),可以通过只在负样本中取得部分负样本(十万取500个)参与训练。这样一个是平衡数据集,一个是减小了softmax训练成本。这里一个问题是省略的负目标不会对样本训练产生影响。
负样本采集原理:根据概率分布,频率分布来采样的。
13.skip-gram–和cbow反着来的。里面使用的原理一致,不过最后预测出来多个词(取决于你的窗口大小)。样本量小的时候用CBOW,样本量非常大用skip-gram:
词向量评分:类比任务:inner
word2vector缺点:窗口问题,一词多义问题。
14.GloVe 方法: