全新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


相关文章
|
9月前
|
机器学习/深度学习 数据挖掘 测试技术
软件测试|Python科学计算神器numpy教程(十二)
软件测试|Python科学计算神器numpy教程(十二)
40 0
|
2月前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
LangChain安装和入门案例
LangChain安装和入门案例
252 0
|
2月前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
2月前
|
人工智能 数据挖掘 程序员
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
52 0
|
2月前
|
机器学习/深度学习 数据采集 算法
scikit-learn入门指南:从基础到实践
【4月更文挑战第17天】这篇指南介绍了scikit-learn,一个Python数据分析和机器学习的重要库。内容涵盖安装、数据加载与预处理、模型训练(如KNN分类器)、评估、调参优化及高级应用,如降维和聚类。通过实例展示了scikit-learn在分类任务中的使用,强调其在数据科学中的重要性。要深入了解,可参考官方文档和实践案例。
|
11月前
|
测试技术 Serverless Python
软件测试|Python科学计算神器numpy教程(十一)
软件测试|Python科学计算神器numpy教程(十一)
227 0
|
数据采集 机器学习/深度学习 搜索推荐
通过实践快速上手python
如何快速通过实践上手python技术
|
存储 机器学习/深度学习 IDE
面向初学者的 Python 教程:从头开始构建项目
面向初学者的 Python 教程:从头开始构建项目
205 0
|
IDE 测试技术 开发工具
《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)
《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)
196 0
《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)

相关实验场景

更多