全新Gensim4.0代码实战(01)-安装与快速上手

简介: 全新Gensim4.0代码实战(01)-安装与快速上手

本节代码地址:https://www.kesci.com/mw/project/600ade02e455800015b7e609


Gensim简介


29.png

Image Name


  • 专门训练词向量的Python接口。 Gensim中的核心算法使用了核心算力,高度优化和并行化的C例程。
  • Gensim可以使用数据流算法处理任意大的语料库。没有“数据集必须适合RAM”的限制。
  • Gensim可在Linux,Windows和OS X以及任何其他支持Python和NumPy的平台上运行。
  • 每天都有成千上万的公司使用Gensim,每周有2600多个学术引用和100万次下载,Gensim是最成熟的ML库之一。
  • Gensim的所有源代码均由GNU LGPL许可证托管在Github上,并由其开源社区维护。有关商业安排,请参阅业务支持。
  • Gensim社区还通过Gensim-data项目发布了针对特定领域(例如法律或健康)的预训练模型。


Gensim安装


安装非常简单;一种是pip另外可以通过conda安装:

  • pip install --upgrade gensim
  • conda install -c conda-forge gensim

In [8]:

!pip install  gensim==4.0.0b0 -i https://pypi.tuna.tsinghua.edu.cn/simple


安装成功


Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting gensim==4.0.0b0
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d0/86/2d03cb418e9fae6dbc17bafd7524d407be0691a703829cecca23e2bc31a9/gensim-4.0.0b0-cp38-cp38-manylinux1_x86_64.whl (24.0 MB)
     |████████████████████████████████| 24.0 MB 8.7 MB/s eta 0:00:01
Requirement already satisfied: numpy>=1.11.3 in /opt/conda/lib/python3.8/site-packages (from gensim==4.0.0b0) (1.19.1)
Requirement already satisfied: smart-open>=1.8.1 in /opt/conda/lib/python3.8/site-packages (from gensim==4.0.0b0) (4.1.2)
Requirement already satisfied: scipy>=0.18.1 in /opt/conda/lib/python3.8/site-packages (from gensim==4.0.0b0) (1.5.2)
Installing collected packages: gensim
  Attempting uninstall: gensim
    Found existing installation: gensim 3.8.3
    Uninstalling gensim-3.8.3:
      Successfully uninstalled gensim-3.8.3
Successfully installed gensim-4.0.0b0


快速上手


Gensim相关的概念:

  • 文档:一些文本。
  • 语料库:文档的集合。
  • 向量:一种数学上方便的文档表示。
  • 模型:一种将向量从一种表示形式转换为另一种表示形式的算法

import pprint


文档 Document

document = "Human machine interface for lab abc computer applications"


语料 Corpus

text_corpus = [
    "Human machine interface for lab abc computer applications",
    "A survey of user opinion of computer system response time",
    "The EPS user interface management system",
    "System and human system engineering testing of EPS",
    "Relation of user perceived response time to error measurement",
    "The generation of random binary unordered trees",
    "The intersection graph of paths in trees",
    "Graph minors IV Widths of trees and well quasi ordering",
    "Graph minors A survey",
]

# Create a set of frequent words
stoplist = set('for a of the and to in'.split(' '))
# Lowercase each document, split it by white space and filter out stopwords
texts = [[word for word in document.lower().split() if word not in stoplist]
         for document in text_corpus]
# Count word frequencies
from collections import defaultdict
frequency = defaultdict(int)
for text in texts:
    for token in text:
        frequency[token] += 1
# Only keep words that appear more than once
processed_corpus = [[token for token in text if frequency[token] > 1] for text in texts]
pprint.pprint(processed_corpus)

from gensim import corpora
dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)


Dictionary(12 unique tokens: ['computer', 'human', 'interface', 'response', 'survey']...)

向量 Vector

pprint.pprint(dictionary.token2id)

{'computer': 0,
 'eps': 8,
 'graph': 10,
 'human': 1,
 'interface': 2,
 'minors': 11,
 'response': 3,
 'survey': 4,
 'system': 5,
 'time': 6,
 'trees': 9,
 'user': 7}


doc2bow将token转换为id表示,(第一代表单词的索引,第二个代表出现的次数)

new_doc = "Human computer interaction"
new_vec = dictionary.doc2bow(new_doc.lower().split())
print(new_vec)

[(0, 1), (1, 1)]


接下来我们表示所有的文档

bow_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(bow_corpus)

[[(0, 1), (1, 1), (2, 1)],
 [(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)],
 [(2, 1), (5, 1), (7, 1), (8, 1)],
 [(1, 1), (5, 2), (8, 1)],
 [(3, 1), (6, 1), (7, 1)],
 [(9, 1)],
 [(9, 1), (10, 1)],
 [(9, 1), (10, 1), (11, 1)],
 [(4, 1), (10, 1), (11, 1)]]


模型 Model


导入Tfidf模型

from gensim import models
# train the model
tfidf = models.TfidfModel(bow_corpus)
# transform the "system minors" string
words = "system minors".lower().split()
print(tfidf[dictionary.doc2bow(words)])


我们可以得到对应词语索引的tfidf值

[(5, 0.5898341626740045), (11, 0.8075244024440723)]


使用tfidf表示所有语料

from gensim import similarities
index = similarities.SparseMatrixSimilarity(tfidf[bow_corpus], num_features=12)


计算查询文档中与所有语料中文档的相似性

query_document = 'system engineering'.split()
query_bow = dictionary.doc2bow(query_document)
sims = index[tfidf[query_bow]]
print(list(enumerate(sims)))


得到所有的相似性

[(0, 0.0), (1, 0.32448703), (2, 0.41707572), (3, 0.7184812), (4, 0.0), (5, 0.0), (6, 0.0), (7, 0.0), (8, 0.0)]

for document_number, score in sorted(enumerate(sims), key=lambda x: x[1], reverse=True):
    print(document_number, score)

3 0.7184812
2 0.41707572
1 0.32448703
0 0.0
4 0.0
5 0.0
6 0.0
7 0.0
8 0.0


相关文章
|
5G 数据处理 UED
超密集网络UDN的核心特点 | 带你读《5G UDN(超密集网络)技术详解》之一
本书全面深入地阐述了 UDN 技术的发展历史、当今的现状及未来趋势,内容 涵盖上层业务应用、部署组网、系统架构、无线接入侧高层和物理层关键技术等方 面。本书从 5G 移动业界大背景为切入点,紧密结合了当前 5G 在 3GPP 的标准化 进展,系统化地梳理和诠释了 5G UDN 的诸多相关技术,从宏观到微观,从高层 到低层。通过本书,读者不仅可以全面丰富地了解目前 5G 在 3GPP 的标准化状况 和未来趋势,系统化地学习 UDN 技术体系的相关知识,还可以体察标准制定背后 的诸多缘由和规律。
超密集网络UDN的核心特点 | 带你读《5G UDN(超密集网络)技术详解》之一
|
监控 NoSQL
JLink + GDB 调试方法
本节主要介绍嵌入式开发中常用的JLink+GDB调试方法。 调试所需软件 J-link,可以从https://www.segger.com下载对应操作系统的软件包,然后安装(注意:segger是仿真器的名字,相当常用的一款,仿真器的接口也是固定的,一般开发版上都会带有这个调试接口,如图) 运行JLinkGDBServer 按照上图中的配置,配置GDBServer,然后点击OK,进入下一个界面 注意,如果硬件连接没有问题,那么上图中的J-Link和 Device栏中显示绿色,GDB显示为红色,因为我们还没有运行GDB软件。
9361 46
|
11月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
3145 12
|
SQL Oracle 关系型数据库
OceanBase数据库
OceanBase数据库
1180 1
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
2538 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
消息中间件 Unix Java
进程间通信(IPC)的各种方式与比较
进程间通信(IPC)的各种方式与比较
|
SQL 前端开发 Java
大数据量下 MyBatis PageHelper 分页查询性能问题的解决办法
项目一直使用的是PageHelper实现分页功能,项目前期数据量较少一直没有什么问题。随着业务扩增,数据库扩增PageHelper出现了明显的性能问题。
|
Ubuntu Unix Linux
ubuntu下perl模块的安装方法(包括windows)
Perl 到了第五版增加了模块的概念,用来提供面向对象编程的能力。这是 Perl 语言发展史上的一个里程碑。此后,广大自由软件爱好者开发了大量功能强大、构思精巧的 Perl 模块,极大地扩展了 Perl 语言的功能。
2279 0

热门文章

最新文章