gensim实现TF-IDF和LDA模型、sklearn实现聚类

假如我有100篇文章,每篇文章形如:

本发明公开的一种冰箱用的三风门,其包括:一风门本体,所述风门本体上设置有第一风口、第二风口和第三风口;安装在所述风门本体上的电动机构;分别设置在所述第一风口、第二风口和第三风口上的第一风门、第二风门、第三风门,所述第一风门、第二风门、第三风门由所述电动机构驱动按照一定的程序开启和关闭第一风口、第二风口和第三风口。本发明的冰箱用的三风门为整体结构、依靠一套传动机构来驱动三个风门启闭,其能够简化冰箱的结构,降低冰箱的成本。

是一个字符串。
那么我想要使用gensim构造基于TF-IDF的LDA模型模型,首先要构造特征。
思路:构造词袋模型->构造TF-IDF模型->构造LDA模型。
而gensim构造词袋模型的输入必须先对文章进行分词。

1.1 分词

一般使用jieba.lcut(string)
如果有stopwords可以这样
[k for k in jieba.lcut(string,cut_all=False) if k not in stop]
结果是这样:

['本发明', '公开', '一种', '冰箱', '风门', '包括', '风门', '本体', '所述', '风门', '本体', '设置', '第一', '风口', '风口', '第三', '风口', '安装', '所述', '风门', '本体', '电动', '机构', '设置', '所述', '第一', '风口', '风口', '第三', '风口', '第一', '风门', '风门', '第三', '风门', '所述', '第一', '风门', '风门', '第三', '风门', '所述', '电动', '机构', '驱动', '程序', '开启', '关闭', '第一', '风口', '风口', '第三', '风口', '本发明', '冰箱', '风门', '整体', '结构', '一套', '传动', '机构', '驱动', '三个', '风门', '启闭', '简化', '冰箱', '结构', '降低', '冰箱', '成本']

1.2 清洗

如果只想保留汉字,使用:
[i for i in string_list if re.match(r”[\u4e00-\u9fa5]”, i)]

现在已经有一个100string_list的数据。
分别放着100篇文章分词清洗后的词。
假设名为
string_list100*

2.1 词典创建

import gensim.corpora as corpora
id2word = corpora.Dictionary(string_list100)
id2word.filter_extremes(no_below=3, no_above=0.5, keep_n=3000)

id2word.save_as_text("dictionary")

2.2 corpus创建

corpus = [id2word.doc2bow(text) for text in string_list100]

print(corpus[:1])
print([[(id2word[id], freq) for id, freq in cp] for cp in corpus[:1]])

输出形如:

[(0, 2), (1, 2)]
[('一侧', 2), ('一端', 2)]

2.3 词袋转为TF-IDF

from gensim import models

tfidf_model = models.TfidfModel(corpus=corpus, dictionary=id2word)
tfidf_model.save('test_tfidf.model')
tfidf_model = models.TfidfModel.load('test_tfidf.model')
corpus_tfidf = [tfidf_model[doc] for doc in corpus]

print(corpus_tfidf[:1])
print([[(id2word[id], freq) for id, freq in cp] for cp in corpus_tfidf[:1]])

输出形如:

[(0, 0.010196106762123805), (1, 0.0094972374458957)]
[('一侧', 0.010196106762123805), ('一端', 0.0094972374458957)]
lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus_tfidf,
                                           id2word=id2word,
                                           num_topics=20,
                                           random_state=100,
                                           update_every=1,
                                           chunksize=100,
                                           passes=10,
                                           alpha='auto',
                                           per_word_topics=True)

3.1 结果查看

pprint 让输出更美观,num_words指的是每一个主题输出前多少的词。

from pprint import pprint
pprint(lda_model.print_topics(num_words=50))

3.2 评估指标

coherence_model_lda = CoherenceModel(model=lda_model, texts=string_list100, dictionary=id2word, coherence='c_v')
coherence_lda = coherence_model_lda.get_coherence()
print('\nCoherence Score: ', coherence_lda)

4.1 构造特征

def get_features(corpus_one):
    new_feature=[0 for k in range(3000)]
    for j in corpus_one:
        new_feature[j[0]]=j[1]
    return new_feature

因为gensim得到的词袋模型以及tf-idf特征是不完整的,需要使用以上函数把每一篇文章的词袋数据转化为3000维的特征。
维度说明:
corpus = corpus_tfidf: 100 * 若干(每篇文章不一样)
对corpus_tfidf每一项get_features得到all_features: 100 * 3000

4.2 KMeans

from sklearn.cluster import KMeans
from sklearn import metrics
y_pred = KMeans(n_clusters=20, random_state=9).fit(all_features)

n_clusters表示分20类

print(y_pred.labels_)
print(y_pred.cluster_centers_)
print(y_pred.predict(new_feature))

4.3 评估指标

如果有分类的标注数据label

print(metrics.adjusted_rand_score(label, y_pred.labels_))
print(metrics.adjusted_mutual_info_score(label, y_pred.labels_))

以上是常用的KMeans评估方法。

参考文章1:文本聚类(一)—— LDA 主题模型
https://blog.csdn.net/weixin_37179744/article/details/108694415#12__94
参考文章2:用scikit-learn学习K-Means聚类
www.cnblogs.com/pinard/p/6169370.html
参考文章3:分别使用sklearn和gensim提取文本的tfidf特征www.jianshu.com/p/c7e2771eccaa

Original: https://blog.csdn.net/weixin_43499457/article/details/121087816
Author: 持续战斗状态
Title: gensim实现TF-IDF和LDA模型、sklearn实现聚类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/550072/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python操作Redis详解

    介绍 Redis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSI C语言编写。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。由于是内存数据库,读写非常…

    人工智能 2023年7月5日
    094
  • 【OpenCV学习】(九)目标识别之车辆检测与计数

    【OpenCV学习】(九)目标识别之车辆检测及计数 背景 本篇将具体介绍一个实际应用项目——车辆检测及计数,在交通安全中是很重要的一项计数;当然,本次完全采用OpenCV进行实现,…

    人工智能 2023年7月19日
    0168
  • 优化算法详解

    文章目录 * – 1、机器学习要求解的数学模型 – 2、最优化算法 – + 2.1 分类 + 2.2 通用的优化框架 – 3 公式解…

    人工智能 2023年6月16日
    0292
  • A5000 VS 3090,谁更强?

    为了迎接618的到来,平台上新了数百台机器,其中,2021年上市的A5000,相对于更早发布的30系列,大家可能还不太熟悉,这边先放上某东618的价格截图,大家参考一下。 由于显存…

    人工智能 2023年7月29日
    099
  • 构建知识图谱(2)—定义数据模型

    构建知识图谱一般有以下两种方式: 自顶向下(Top-Down):即首先为知识图谱定义数据模式,数据模式从最顶层概念构建,逐步向下细化,形成结构良好的分类层次,然后再将实体添加进概念…

    人工智能 2023年6月1日
    097
  • 二叉树的操作

    链式存储结构 先序遍历二叉树 递归算法 非递归算法 中序遍历二叉树 递归算法 非递归算法 后序遍历二叉树 递归算法 非递归算法 层次遍历二叉树 线索树 用土方法找到中序前驱 中序线…

    人工智能 2023年6月27日
    086
  • 深度强化学习-DDPG算法原理与代码

    深度强化学习-DDPG算法原理与代码 引言 1 DDPG算法简介 2 DDPG算法原理 2.1 经验回放 2.2 目标网络 2.2.1 算法更新过程 2.2.2 目标网络的更新 2…

    人工智能 2023年6月16日
    0182
  • Python制作短信发送程序

    作者:虚坏叔叔博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 Python制作短信发送程序 ; 一、Python短信发送界面最后的效果 二、准备…

    人工智能 2023年7月4日
    0101
  • 推荐系统–MovieLens数据集

    MovieLens 数据集是由 GroupLens 项目组制作的公开数据集。MoveieLens数据集可以说是推荐系统领域最为经典的数据集之一,其地位类似计算机视觉领域里的MNIS…

    人工智能 2023年6月16日
    0131
  • 论文整理:GoogLeNet–Going deeper with convolutions

    1.摘要 我们提出了一种代号为”GoogleNet “的深度卷积神经网络架构,它负责在2014 年ImageNet 大规模视觉识别挑战(ILSVRC 14)…

    人工智能 2023年5月25日
    0101
  • 基于点云的深度学习方法综述

    我们生活在一个三维世界里,自从1888年相机问世以来,三维世界的视觉信息就通过相机被映射到二维图象上。但是二维图像的缺点也是显而易见的,那就是缺少深度信息以及真实世界中目标之间的相…

    人工智能 2023年7月28日
    081
  • 朴素贝叶斯法(Naive Bayes,NB)(结合例子推公式,通俗易懂)

    整合一下学习NB的思路与代码,仅代表个人思想。 我们先来看一下这名字的来由。朴素贝叶斯,”贝叶斯”即基于贝叶斯定理,”朴素”即作了特…

    人工智能 2023年7月2日
    0108
  • pandas模块总结一

    pandas模块 1. 基本概念 2. Series的基本操作 * 2.1 Series的创建方法 2.2 获取Series中数据的index、values 2.3 Series的…

    人工智能 2023年7月8日
    0128
  • Logstic Regression模型对German Credit数据集进行分类

    Case: German Credit 在这份作业中,我们使用了Logstic Regression模型对German Credit数据集进行了分类。并用混淆矩阵和ROC曲线对模型…

    人工智能 2023年7月3日
    0107
  • pandas中DataFrame操作(一)

    切片选择 显示第一行数据 print(df.head(1)) 显示倒数三行数据 print(df.tail(3)) loc df.loc[row_index,col_index] …

    人工智能 2023年6月2日
    0121
  • PaddleNLP加载数据集和自定义数据数据集

    本文主要是讲解如何使用PaddleNLP中的 方法,包括如何加载内置和自定义数据集。 [En] Method, including how to load built-in and…

    人工智能 2023年5月27日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球