本文主要是介绍ngram低维表示学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文是学习N-GRAM-BASED LOW-DIMENSIONAL REPRESENTATION FOR DOCUMENT CLASSIFICATION
的笔记。如果英文好的,请直接看论文。
ngram是词袋模型的子类。对于提取上下文语义有重要意义,然而n很大时,维度将非常高,运算复杂度剧增。而工业界中的认为都对响应速度要求特别高。ngram低维表示能降低维度,大大提高效率。
ngram简介
语句是由词构成的序列,ngram认为当前词只与他前面的n-1个词有关。即一个语句中当前词出现的概率为P=P(w|前n-1个词)。
当n=1时,认为词只与当前词管,即词相互对立。忽略了词序信息
n>1时,能提取到一定程度的语义信息。通常n取1、2、3;由3增加到4时,性能并未增加多少,但是特征空间维度增加特别多(维度为|D|^n)。
ngram低维表示
这个模型在有些博客上称为LD算法,忧伤的是有的人可能查不到。。。。(我和我同事同时用goole搜索LD,我搜出来一些乱七八糟的,同事的第一个搜索结果就是。。。)
基本思想:ngram是基于语句是词序列(字==>词),LD认为语句是一语义序列(词==>语义);ngram是语义的基本提取,但是可能维度特别高,故我们转为学习ngram的特征。这样一个语句就可以由语义特征表示了。
主要流程分三步:
- 构建ngram的词向量:通过skip-gram或者Glove获得词向量,然后通过向量相加并求均值作为聚类的输入。获得的句向量维度相同,可以定义距离,故能做降维。
- 使用KMean对上一步学习到的词向量进行学习。就是普通的聚类算法。例如聚类为100类
- 把语句表示为语义为特征的向量。从上面获得了语义空间特征,语句就可以表示为以语义空间特征的向量,值为对应语义特征在语句中出现的频率。作者的示例中是用计数向量的各个分量最大值作为对应特征的值。如下图
论文中作者总共考虑了5种ngram组合:
作者的实验结果:
- 2-gram好于1-gram、3-gram,混合gram更优
- 语义相近的词属于同一类
- 能清晰的区分反义词
- 模型特征少了几百倍的情况下,性能好于LSA、LDA
论文里说这样获得的向量在SVM上会获得很好的效果。
但是我有疑问,这和词向量有什么区别?
这篇关于ngram低维表示学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!