hash trick &TF-IDF

1.hash trick

使用hash trick的根本原因是直接使用词的onehot等方式向量,导致高维度消耗内存太大,需要降维使用

做法就是根据哈希函数使高纬度表示映射到低纬,在使用过程中再反转回去。


 

2.tf-idf(Term Frequency -  Inverse Document Frequency)

利用idf来修正词频较高但是实际的重要性相对低的问题,定性的说,在多个文本中频繁出现的词汇IDF值应该更低,直观理解就是所有文本中都包含同一个词,那么这个词应该是没有实际的意义的,IDF值应该为0.

𝐼𝐷𝐹(𝑥)=𝑙𝑜𝑔(𝑁/𝑁(𝑥))

其中N是文本总数,N(x)是包含词x的文本数目,使用log的具体原因(未查明)

所有统计计数的方法都需要一些平滑算法,简单的可以用加一平滑来做,log(N+1/N(x)+1)+1,

所以使用时候TF-IDF(x) = TF(x) * IDF(x)

简单sklearn代码

 1 from sklearn.feature_extraction.text import TfidfTransformer  
 2 from sklearn.feature_extraction.text import CountVectorizer  
 3 
 4 corpus=["I come to China to travel", 
 5     "This is a car polupar in China",          
 6     "I love tea and Apple ",   
 7     "The work is to write some papers in science"] 
 8 
 9 vectorizer=CountVectorizer()
10 
11 transformer = TfidfTransformer()
12 tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  
13 print tfidf
sklearn 实现tf-idf
1 from sklearn.feature_extraction.text import TfidfVectorizer
2 tfidf2 = TfidfVectorizer()
3 re = tfidf2.fit_transform(corpus)
4 print re
sklearn实现tf-idf 2

 


 

3.潜在语义索引(Latent Semantic Indexing,LSI)也有叫(Latent Semantic  Analysis, LSA)

1)奇异值分解(SVD)原理和应用,参考https://www.cnblogs.com/pinard/p/6251584.html

一个方阵A可以利用特征向量分解成𝐴=𝑊Σ𝑊-1 其中W是特征向量组成的矩阵,Σ 是主对角阵

对于非方阵进行分解,就需要SVD,对非方阵矩阵A属于空间Rm*n,分解的目标是𝐴=𝑈Σ𝑉𝑇 其中Σ 属于空间Rm*n除了主对角线的元素都为0元素,U属于空间Rm*m ,V属于空间Rn*n,都是酉矩阵,UTU = VTV = n, 利用图片理解做法

 

做法,利用AAT的特征向量组成U矩阵,ATA的特征向量组成V矩阵,奇异值是ATA的特征值的平方根。

SVD的性质:

是用最大的k个奇异值来描述Σ ,也就是说,可以只保留U和V的前k列,将矩阵简化成Amxn≈ UmxkΣkxkVkxn ,这样由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。

2)LSI描述

多个词,有少于词数目个主题,一般假设字典有m大小,样本数目有n个,主题有k个,利用上文的方式将产生的TF-IDF矩阵进行分解后,将Σ矩阵的维度保留到k,那么缩减后的U矩阵标识词与词义的相关程度,Σ标识词义和主题之间的相关程度,V
表示该样本和主题之间的相关程度,
3)LSI计算文本相似度,

对于2)的例子,可以利用V矩阵中样本对应的行向量来计算余弦相似度,结果即为相似程度

4)LSI问题

高纬度矩阵计算奇异值分解困难(非负矩阵分解(NMF)可解决),主题个数选取凭借经验,得到是一个矩阵,不是概率模型,很难解释

除非样本很小,一般选取层次狄利克雷过程(HDP)和隐含狄利克雷分布(LDA)

 

4.非负矩阵分解(NMF)

tips:Frobenius 范数,简称F-范数,是一种矩阵范数,记为||·||F。矩阵A的Frobenius范数定义为矩阵A各项元素的绝对值平方的总和。

上文中提到了替换SVD的做法是NMF,

NMF的做法是找到两个矩阵Wmxk和Hkxn 来使得矩阵A ≈ WH,其中做法是最小化||A-WH||也可以加入一定的正则化项,

 

posted @ 2019-08-30 09:51  wwwwb  阅读(234)  评论(0编辑  收藏  举报