Gensim详细介绍和使用:一个Python文本建模库

这篇具有很好参考价值的文章主要介绍了Gensim详细介绍和使用:一个Python文本建模库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

The algorithms in Gensim, such as Word2Vec, FastText, Latent Semantic Indexing (LSI, LSA, LsiModel), Latent Dirichlet Allocation (LDA, LdaModel) etc, automatically discover the semantic structure of documents by examining statistical co-occurrence patterns within a corpus of training documents. These algorithms are unsupervised, which means no human input is necessary – you only need a corpus of plain text documents.
Gensim中的算法,如Word2Verc、FastText、潜在语义索引(LSI、LSA、LsiModel)、潜在狄利克雷分配(LDA、LdaModel)等,通过检查训练文档语料库中的统计共现模式,自动发现文档的语义结构。这些算法是无监督的,这意味着不需要人工输入——你只需要一个纯文本文档的语料库。

一、安装

pip install --upgrade gensim

二、文本预处理

  • Document: 文档,文档字符串 即:“这是一段话”
  • Corpus: 语料,文档字符串列表 即:[“这是一段话”, “这是一段话”]
  • Vector: 向量,应该最好懂 即词在空间中的位置表
  • Bow Corpus:文档分词元组化后的语料列表,元组第一个位置是词对应dictionary的id,第二个是文档中该词出现的次数

2.1 中文语料处理

中文语料:无大小写问题,标点符号问题,词之间无空格,无时态词,需要分词

这里我们使用清华的分词工具Thulac进行分词;

def chinese_process(text_corpus, stoplist=[], k=0, punctuation='"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、\u3000、〃〈〉《》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏﹑﹔·.!?。。'):
    """
    text_corpus: 语料
    stoplist: 需要删除的词
    k:过滤次数小于等于k次的词
    punctuation:需要删除的标点符号
    """
    import thulac
    from collections import defaultdict
    model = thulac.thulac(seg_only=True)
    texts = [[word for word in model.cut(document, text=True).split() if word not in stoplist] for document in text_corpus]
    frequency = defaultdict(int)
    for text in texts:
        for token in text:
            frequency[token] += 1
    processed_corpus = [[token for token in text if frequency[token] > k] for text in texts]
    return processed_corpus

测试:

text_corpus = [
    '实验室abc计算机应用的人机界面',
    '用户对计算机系统响应时间的看法调查',
    'EPS用户界面管理系统',
    'EPS的系统与人系统工程测试',
    '用户感知的响应时间与误差测量的关系',
    '随机二进制无序树的生成',
    '树中路径的交集图',
    '图子Ⅳ树的宽度和井的拟序',
    '图表未成年人调查'
]
print(chinese_process(text_corpus))
# [['实验室', 'abc', '计算机', '应用', '的', '人', '机界', '面'],
#  ['用户', '对', '计算机', '系统', '响应', '时间', '的', '看法', '调查'],
#  ['EPS', '用户', '界面', '管理', '系统'],
#  ['EPS', '的', '系统', '与', '人', '系统工程', '测试'],
#  ['用户', '感知', '的', '响应', '时间', '与', '误差', '测量', '的', '关系'],
#  ['随机', '二进制', '无序', '树', '的', '生成'],
#  ['树', '中', '路径', '的', '交集', '图'],
#  ['图子', 'Ⅳ', '树', '的', '宽度', '和', '井', '的', '拟序'],
#  ['图表', '未成年人', '调查']]

2.2 英文语料处理

英文语料:大小写问题,标点符号问题,词之间有空格, 词有不同形式,需要分词

def english_process(text_corpus, stoplist=[], k=0, punctuation='!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'):
    """
    text_corpus: 语料
    stoplist: 需要删除的词
    k:过滤次数小于等于k次的词
    punctuation:需要删除的标点符号
    """
    from collections import defaultdict
    import re
    texts = [[word for word in re.sub(r'[{}]+'.format(punctuation), '', document).lower().split() if word not in stoplist] for document in text_corpus]
    frequency = defaultdict(int)
    for text in texts:
        for token in text:
            frequency[token] += 1
    processed_corpus = [[token for token in text if frequency[token] > k] for text in texts]
    return processed_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",
]
stoplist = set('for a of the and to in'.split(' '))
print(english_process(text_corpus, stoplist))
# [['human', 'machine', 'interface', 'lab', 'abc', 'computer', 'applications'],
#  ['survey', 'user', 'opinion', 'computer', 'system', 'response', 'time'],
#  ['eps', 'user', 'interface', 'management', 'system'],
#  ['system', 'human', 'system', 'engineering', 'testing', 'eps'],
#  ['relation', 'user', 'perceived', 'response', 'time', 'error', 'measurement'],
#  ['generation', 'random', 'binary', 'unordered', 'trees'],
#  ['intersection', 'graph', 'paths', 'trees'],
#  ['graph', 'minors', 'iv', 'widths', 'trees', 'well', 'quasi', 'ordering'],
#  ['graph', 'minors', 'survey']]

2.3 BOW语料建立

首先把语料进行处理后,得到二维列表,然后将二维列表传入gensim库中的corpus.dictionary模块建立字典,然后根据字典对处理后的语料进行生成BOW语料

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",
]
# 中文语料处理
text_corpus = chinese_process(text_corpus)
# 建立字典
dictionary = gensim.corpora.Dictionary(text_corpus)
# dictionary.token2id {'abc': 0, '人': 1,'实验室': 2, '应用': 3, ...}
bow_corpus = [dictionary.doc2bow(item) for item in text_corpus]
# [[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)],
#  [(5, 1), (6, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1)],
#  [(11, 1), (13, 1), (15, 1), (16, 1), (17, 1)],....]

三、模型使用

3.1 word2vec

Word2Vec 是一种词向量模型,它使用浅层神经网络将单词嵌入到低维向量空间中。结果是一组词向量,其中在向量空间中靠近的向量根据上下文具有相似的含义,而彼此相距较远的词向量具有不同的含义。

word2vec 有两种出名的模型,两种加速方式,如果理解可以在此自由配置,
论文实现:Efficient Estimation of Word Representations in Vector Space [CBOW and Skip-gram]
sg : {0, 1}, optional
  Training algorithm: 1 for skip-gram; otherwise CBOW.
hs : {0, 1}, optional
  If 1, hierarchical softmax will be used for model training.
  If 0, hierarchical softmax will not be used for model training.
negative : int, optional
  If > 0, negative sampling will be used, the int for negative specifies how many “noise words” should be drawn (usually between 5-20).
  If 0, negative sampling will not be used.

模型相关代码:

text_corpus = [['实验室', 'abc', '计算机', '应用', '的', '人', '机界', '面'],
 ['用户', '对', '计算机', '系统', '响应', '时间', '的', '看法', '调查']]
 
word2vec = gensim.models.Word2Vec(
    sentences=text_corpus, 
    min_count=1,
    window=3,
    vector_size=100,
)

# 输出word向量
word2vec.wv['中']
# array([ 0.00480066, -0.00362838, -0.00426481,  0.00121976, -0.0041273, ... dtype=float32)

# 计算两个词之间的相似性
word2vec.wv.similarity('图表','图子')
# 0.13703643

# 类似于king-man+woman=queen
word2vec.wv.most_similar(positive=['图子', '图表'], negative=['中'])
# [('系统工程', 0.1806158870458603),('感知', 0.17817144095897675),('界面', 0.13787229359149933),...]

# 找不和其他匹配的项
word2vec.wv.doesnt_match(['图子', '图表', '中'])
# '中'

词向量可视化 这里使用的是TSNE算法进行的降维

from sklearn.manifold import TSNE
import numpy as np
import matplotlib.pyplot as plt

# 中文设置
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.rcParams['axes.unicode_minus']=False

def reduce_dimensions(model):
    num_dimensions = 2

    # 提取vectors和labels
    vectors = np.asarray(model.wv.vectors)
    labels = np.asarray(model.wv.index_to_key)

	# 降维
    tsne = TSNE(n_components=num_dimensions, random_state=0)
    vectors = tsne.fit_transform(vectors)

    x_vals = [v[0] for v in vectors]
    y_vals = [v[1] for v in vectors]
    return x_vals, y_vals, labels


x,y,label = reduce_dimensions(word2vec)
plt.scatter(x,y)
for x_,y_,label_ in zip(x,y,label):
    plt.text(x_, y_, label_)
plt.show()

可视化结果如下:文章来源地址https://www.toymoban.com/news/detail-846768.html

gensim,Python 库 介绍和使用,python

到了这里,关于Gensim详细介绍和使用:一个Python文本建模库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python和PyTorch库构建一个简单的文本分类大模型:

            在当今的大数据时代,文本分类任务在许多领域都有着广泛的应用,如情感分析、垃圾邮件过滤、主题分类等。为了有效地处理这些任务,我们通常需要构建一个强大的文本分类模型。在本篇博客中,我们将使用Python和PyTorch库来构建一个简单的文本分类大模型,

    2024年01月25日
    浏览(46)
  • 快速入门使用spring详细步骤(介绍、导入依赖、第一个简单程序)

    目录 一、spring介绍 二、spring使用步骤 (一)创建maven项目  (二) maven项目导入spring依赖 (三)开始编写第一个spring程序 三、新篇章之springboot(额外篇) spring是作为Java EE企业级开发很好的一个框架,这篇文章就来讲解一下怎么使用spring。要使用spring,现在一般都是 使用

    2024年02月04日
    浏览(51)
  • C语言 文本文件读取、写入与定位(详细介绍)

    目录 文本文件相关介绍 1.打开文件 2.文件的读取  (1) fgetc 函数 (2)fgets 函数 (3)fscanf 函数 (4)fread 函数 3.关闭文件 fclose(FILE *stream ); 4.文件的写入 (1)fpuc 函数 (2)fputs 函数 (3)fprintf 函数 (4)fwrite 函数 5.文本文件的指针定位 (1)rewind 函数  (2)fseek 函数    

    2024年01月22日
    浏览(48)
  • anaconda详细介绍、安装及使用(python)

    Anaconda是用于科学计算(数据科学、机器学习应用程序、大规模数据处理、预测分析等)的Python和R编程语言的发行版,旨在简化包管理和部署。该发行版包括适用于Windows、Linux和macOS的数据科学包。它由 Anaconda, Inc. 开发和维护,该公司由 Peter Wang 和Travis Oliphant于 2012 年创立。

    2024年02月05日
    浏览(71)
  • Python中,hasattr()函数的详细介绍以及使用

    在Python中, hasattr() 函数是一种重要的工具,用于判断对象是否具有指定的属性或方法。通过使用 hasattr() 函数,我们可以在运行时动态地检查对象的能力,提高代码的灵活性和可维护性。本文将介绍 hasattr() 函数的基本概念、使用方法以及与其他相关函数的比较,同时提供实

    2024年02月12日
    浏览(42)
  • Python零基础超详细教程:字典(Dictionary)相关介绍使用

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! Python字典是另一种可变容器模型, 且可存储任意类型对象,如字符串、数字、元组等其他容器模型。 python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、创建字典 字典由键和对应值成对组成。字典也被称作关联数组

    2024年02月10日
    浏览(42)
  • Python的海龟 turtle 库使用详细介绍(画任意多边形,全网最详细)

    学Turtle库,其实就是学数学,而且还能提高对数学和学习的兴趣。Turtle库还能够帮助孩子更好地理解几何学和数学概念,比如角度、比例、几何图形的性质等等,是Python中一个很有趣的库。 Turtle库是Python中一个很有趣的库,可以用来绘制各种图形,比如直线、圆、正方形等等

    2024年04月13日
    浏览(61)
  • Pywifi:Python库pywifi的详细介绍、安装方法和使用攻略

    Pywifi:Python库pywifi的详细介绍、安装方法和使用攻略 一、简介 pywifi是一个用于操纵无线网络接口的Python软件包。通过pywifi,我们能够轻松地控制计算机上的Wi-Fi网络连接。Pywifi的API非常直观简洁,并且支持Windows、Linux、MacOS等操作系统平台。 二、安装 在安装pywifi之前,我们

    2024年02月11日
    浏览(62)
  • PySerial:Python串口通信库的详细介绍、安装及使用方法攻略

    PySerial:Python串口通信库的详细介绍、安装及使用方法攻略 一、PySerial 简介 PySerial 是 Python 的一个串口通信库,支持不同平台下的串口操作。在 Python 应用中,使用 PySerial 可以非常方便地实现对串口设备的读写操作。 二、PySerial 的安装 在 Windows 平台下,可以通过 pip 命令安装

    2024年02月09日
    浏览(59)
  • 详细介绍 Yolov5 转 ONNX模型 + 使用ONNX Runtime 的 Python 部署(包含官方文档的介绍)

    对ONNX的介绍强烈建议看,本文做了很多参考:模型部署入门教程(一):模型部署简介 模型部署入门教程(三):PyTorch 转 ONNX 详解 以及Pytorch的官方介绍:(OPTIONAL) EXPORTING A MODEL FROM PYTORCH TO ONNX AND RUNNING IT USING ONNX RUNTIME C++的部署:详细介绍 Yolov5 转 ONNX模型 + 使用 ONNX Runti

    2024年02月01日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包