概述
一、使用TF-IDF对文本进行预处理,将文本化为向量的表示形式
1、TfidfVectorizer可以把原始文本转化为tf-idf的特征矩阵,从而为后续的文本相似度计算,主题模型(如LSI),文本搜索排序等一系列应用奠定基础。
2、实例
tfidf_model = TfidfVectorizer().fit(document) #字典中词语对应的编号
print(tfidf_model.vocabulary_)
# {'一条': 1, '天狗': 4, '日来': 5, '一切': 0, '星球': 6, '全宇宙': 3, '便是': 2}
sparse_result = tfidf_model.transform(document) # 得到tf-idf矩阵,稀疏矩阵表示法
print(sparse_result)
# (0, 4) 0.707106781187
# (0, 1) 0.707106781187
# (2, 5) 1.0
# (3, 6) 0.707106781187
# (3, 0) 0.707106781187
# (4, 3) 1.0
# (5, 2) 1.0
#(文本数,词汇数) tf-idf权值
print(sparse_result.todense()) # 转化为更直观的一般矩阵
[[0. 0.70710678 0. 0. 0.70710678 0. 0. ] [0. 0. 0. 0. 0. 0. 0. ] [0. 0. 0. 0. 0. 1. 0. ] [0.70710678 0. 0. 0. 0. 0. 0.70710678] [0. 0. 0. 1. 0. 0. 0. ] [0. 0. 1. 0. 0. 0. 0. ]]
3、参数
单字的词语,如“我”、“吞”、“呀”等词语在我们的词汇表中怎么都不见了呢?单字的问题是token_pattern这个参数搞的鬼。它的默认值只匹配长度≥2的单词;token_pattern这个参数使用正则表达式来分词,其默认参数为r"(?u)bww+b",其中的两个w决定了其匹配长度至少为2的单词,所以这边减到1个(r"(?u)bw+b")。
参考原文:https://blog.csdn.net/blmoistawinde/article/details/80816179
二、LSI(潜在语义分析),主题模型中较早也较为简单的一种,在sklearn库中以TruncatedSVD的形式实现
使用TruncatedSVD,把原先规模为(文本数,词汇数)的特征矩阵X化为规模为(文本数,主题数)的新特征矩阵X2:
(由于主题数一般比词汇数少,这一方法也可以用来降维,以进行分类或聚类操作)
n_pick_topics = 3 # 设定主题数为3
lsa = TruncatedSVD(n_pick_topics)
X2 = lsa.fit_transform(sparse_result)
print(X2)
[[-0.00000000e+00 1.00000000e+00 0.00000000e+00] [ 5.46951809e-17 0.00000000e+00 -1.35571853e-16] [ 2.93449060e-01 -0.00000000e+00 3.34528242e-01] [-5.33481569e-02 -0.00000000e+00 7.36513957e-01] [ 9.15962109e-01 -0.00000000e+00 -2.23619221e-01] [-2.68430695e-01 -0.00000000e+00 -5.43720967e-01]]
X2[i,t]为第i篇文档在第t个主题上的分布,所以该值越高的文档i,可以认为在主题t上更有代表性,我们便以此筛选出最能代表该主题的文档。
参考原文:https://blog.csdn.net/blmoistawinde/article/details/83446529
最后
以上就是机灵台灯为你收集整理的TF-IDF和TruncatedSVD的全部内容,希望文章能够帮你解决TF-IDF和TruncatedSVD所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复