Day 20 - [语料库模型] 08-绘制语料库模型Heatmap图

莫烦 Python 的原版程序码: https://github.com/MorvanZhou/NLP-Tutorials
我修改过的版本: https://gitlab.com/graduate_lab415/nlp/-/blob/master/main.py

今天要来介绍绘制语料库模型分布状况的 Heatmap,成果图大概会长这样

  • 图片截自 莫烦Pythton
    tfidf_matrix
  • 以我的语料库之第三类别绘制
    category3

认真观察图片,以词的部分来看,可以发现越常出现的词,会呈现 浅色+多格;少出现的词会呈现 深色+少格
以一个句子来看,每个有出现在句中的词,会呈现深浅不一的颜色,其中颜色越深的部分,代表这个句子中越重要的词

TF-IDF 假设出现越多次的词越不重要

程序码

plt.rcParams['font.sans-serif'] = ['simhei']
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['axes.unicode_minus'] = False


def show_tfidf(tfidf, vocb, filename):
    # [n_vocab, n_doc]
    plt.imshow(tfidf, cmap="YlGn", vmin=tfidf.min(), vmax=tfidf.max())
    plt.xticks(np.arange(tfidf.shape[1]), vocb, fontsize=6, rotation=90)
    plt.yticks(np.arange(tfidf.shape[0]), np.arange(1, tfidf.shape[1] + 1), fontsize=6)
    plt.tight_layout()
    plt.savefig("./visual/results/%s_%d.png" % (filename, calendar.timegm(time.gmtime())), format="png", dpi=500)
    plt.rcParams['font.family'] = 'AR PL UKai CN'
    plt.show()

遇到的问题

在执行的过程中,其实遇到一些问题,所以这段程序码是根据莫烦 Python 的范例修改的。

由於我的语料库是中文为主,所以使用预设字体时遇到中文缺字很严重的状况,几乎全都变成方框。後来参考了这篇文章 centos下python使用matplotlib绘图出现中文乱码,修改了预设字体後,才能正常显示。

BTW,我的环境是 Ubuntu 20.04

另外,还有另一个问题,一开始我用来画 Heatmap 的资料是整个语料库,就变成用 matplot 的小视窗可以看到完整版,但截图下来所有的字就会全挤在一起,可读性很差,所以後来才改成只用第三类的资料来画。

最後,为了可以保存每次执行生成的图片,不会被洗掉,我修改了档名的格式,可以依当下的 timestamp 生成,就不会重复了。

结语

画图的部分满有趣的,平常只看数据,不一定看得出词权重的关系,一旦画成了 Heatmap,可以更视觉化的了解 TF-IDF 的意义。

参考资料



<<:  Day 19 - 在SQL server 建立Table以及设计资料表

>>:  卡夫卡的藏书阁【Book20】- Kafka - KafkaJS 消费者 2

Day 30 : DetailView

前言 今天要将 RecipeFeaturedView 中的图片变成可点开的, 点开後会显示相应的 D...

DAY 21 Big Data 5Vs – Variety(速度) Kinesis (1)

串流处理的应用场景近年来越来越常见,尤其是IOT产业的蓬勃发展,加上硬体技术的发展,越来越多的即时资...

(10)建立基本类神经网路程序

参考网站:Keras官方指南   根据上面的参考网站,可以做出基本的类神经网路。   首先要先有基本...

Day 23 摘要就是抓住重点!

千丝万缕就像风一样的吹过,但总要抓住想要的那一丝一缕。 《iT邦帮忙铁人赛的观点》(以下简称铁人赛)...

入侵检测系统( intrusion detection system :IDS)

一个基於主机的IDS可以监视并通过安装加密的网络通信中分析活性剂在端点上。一个基於网络的IDS,依靠...