Gensim库简介

机器学习算法需要使用向量化后的数据进行预测,对于文本数据来说,因为算法执行的是关于矩形的数学运算,这意味着我们必须将字符串转换为向量。从数学的角度看,向量是具有大小和方向的几何对象,不需过多地关注概念,只需将向量化看作一种将单词映射到数学空间的方法,同时保留其本身蕴含的信息。

Gensim是世界上最大的NLP/信息检索Python库之一,兼具内存高效性和可扩展性。Gensim的可扩展性体现为它采用了Python内置的生成器和迭代器进行流式数据处理,所以数据集事实上并未完全加载到内存中。Gensim的主要特性有内存无关、潜在语义分析的多核实现、潜在Dirichlet分布、随即投影、分层Dirichlet过程,Word2Vec深度学习,以及在计算集群上运行LSA和LDA的能力。

1、数据预处理

本文通过处理部分新闻文本数据的test.txt,使用spacy和Gensim模块包对该文件进行去除停用词等预处理如下:

import spacy
from spacy.lang.zh.stop_words import STOP_WORDS
import pandas as pd
from gensim import corpora
from gensim import models
import gensim #去除停用词
def stopwords(article):
nlp = spacy.load("zh_core_web_sm")
texts = []
doc = nlp(article)
for w in doc:
if w.is_stop == False:
texts.append(w.text)
return texts

在对文本进行预处理后,分别使用词袋、TF-IDF和n-gram三种方法向量化,并分别输出成三份txt。下面讨论向量的几种表示方法:

2、词袋

词袋是将句子转换成向量的直接手段,这种方法在信息检索领域非常常用。词袋模型的一个重要的特征是,他是一种无序的文档表示,唯一的信息是词频,所以我们在使用这种方法的时候无法判断哪个单词会先出现,这样可能导致空间信息以及语义信息的丢失,当然这在一些对词顺序并不重要的应用场景中并不重要。

代码:

#词袋
def cidai(txts):
dictionary = corpora.Dictionary(txts)
corpus = [dictionary.doc2bow(word) for word in txts]
corpus = str(corpus)
##将分好的语料库存储在本地
with open (r"E:\1\Study\大三下\自然语言处理\作业4\bag.txt",'w') as f:
f.write(corpus)

结果:

3、TF-IDF

词袋向量化的方法仅仅有词语出现的词频的信息,但是有些词频很高的词语却并不一定是关键词,因此我们可以用反向文档词频的方法来减少无效词的干扰,因此TF-IDF的向量表示方法便被提出。TF-IDF是一种将句子转换成向量的直观方法,它被广泛用于搜索引擎的算法。其中,TF表示一个词在文档中出现的词频,IDF表示单词在文档中的重要性。

代码:

#TF-IDF
def TfIdf(txts):
doc = []
tfidf = models.TfidfModel(txts)
for document in tfidf[txts]:
doc.append(document)
doc = str(doc)
with open (r"E:\1\Study\大三下\自然语言处理\作业4\TF_IDF.txt",'w') as f:
f.write(doc)

结果:

4、n-gram

前面两种表示方法假设字与字之间是相互独立的,没有考虑它们之间的顺序。于是引入n-gram( n元语法)的概念。n-gram指文本中n个相邻单词的连续序列,它是从一个句子中提取n个连续的字的集合,可以获取到字的前后信息。然而,词表的维度随着语料库的增长而膨胀,n-gram词序列随语料库增长呈指数型膨胀,更加快。

代码:

#n-grams
def N_g(txts):
bigram = gensim.models.Phrases(txts)
txts = [bigram[line] for line in txts]
dictionary = corpora.Dictionary(txts)
#print("token:",dictionary.token2id)
corpus = [dictionary.doc2bow(text) for text in txts]
corpus = str(corpus)
with open (r"E:\1\Study\大三下\自然语言处理\作业4\n_gram.txt",'w') as f:
f.write(corpus)

结果:

5、总结

本文介绍了Gensim库以及使用不同向量的几种表示方法(词袋、TF-IDF和n-grams)。计算机支持多种表示方式来变换单词,TF-IDF和词袋便是其中的两种向量表示方法。Gensim是一个Python包,它为我们提供了生成各种向量表示的方法,这些向量将会作为各种机器学习和信息检索算法的输入。

更高级的预处理技术还包括创建n-grams、固定搭配和删除低频词,能帮助我们获得更好的效果。同时,向量的概念也是构成自然语言处理基础的很大因素之一。

使用Gensim库对文本进行词袋、TF-IDF和n-gram方法向量化处理的更多相关文章

  1. 用jieba库统计文本词频及云词图的生成

    一.安装jieba库 :\>pip install jieba #或者 pip3 install jieba 二.jieba库解析 jieba库主要提供提供分词功能,可以辅助自定义分词词典. j ...

  2. NLP从词袋到Word2Vec的文本表示

    在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本.早期是基于规则 ...

  3. tensorflow在文本处理中的使用——词袋

    代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)——第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-coo ...

  4. 词袋和 TF-IDF 模型

    做文本分类等问题的时,需要从大量语料中提取特征,并将这些文本特征变换为数值特征.常用的有词袋模型和TF-IDF 模型 1.词袋模型 词袋模型是最原始的一类特征集,忽略掉了文本的语法和语序,用一组无序的 ...

  5. 学习笔记CB001:NLTK库、语料库、词概率、双连词、词典

    聊天机器人知识主要是自然语言处理.包括语言分析和理解.语言生成.机器学习.人机对话.信息检索.信息传输与信息存储.文本分类.自动文摘.数学方法.语言资源.系统评测. NLTK库安装,pip insta ...

  6. 『Kaggle』Sklearn中几种分类器的调用&词袋建立

    几种分类器的基本调用方法 本节的目的是基本的使用这些工具,达到熟悉sklearn的流程而已,既不会设计超参数的选择原理(后面会进行介绍),也不会介绍数学原理(应该不会涉及了,打公式超麻烦,而且近期也没 ...

  7. 文本特征提取---词袋模型,TF-IDF模型,N-gram模型(Text Feature Extraction Bag of Words TF-IDF N-gram )

    假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...

  8. python根据文本生成词云图

    python根据文本生成词云图 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analy ...

  9. paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.

    paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:// ...

随机推荐

  1. js & replaceAll & non-global RegExp bug

    js & replaceAll https://caniuse.com/#search=replaceAll https://developer.mozilla.org/en-US/docs/ ...

  2. navigator.geolocation.getCurrentPosition

    navigator.geolocation.getCurrentPosition Geolocation API Specification 2nd Edition W3C Recommendatio ...

  3. ES-Next & ES7 @decorator

    ES-Next & ES7 @decorator @decorator https://tc39.github.io/proposal-decorators/#sec-syntax https ...

  4. 🎊 Element UI 新春快报

    新年好,Element UI 开发团队给各位支持我们的开发者们拜个晚年,祝大家在新的一年里工作没 bug, 天天不加班. 在过去一年里,Element UI 团队在稳定维护 Vue 2.x 版本的同时 ...

  5. Mysql训练:第二高的薪水(IFNULL,OFFSET,LIMIT)

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 ...

  6. 前端传数据到后台,后台用实体类接收不到引发的思考----Java bean中字段命名潜规则

    1.按照Java语法规范,通常在实体类中的属性,首字母都是小写的.这是由于JavaBean的规范导致的.一般JavaBean属性都是首字母小写,以驼峰命名格式命名,相应的 getter/setter ...

  7. 基于QT的全自动超声波焊接机上位机追溯系统(已经在设备上应用)

    应用说明: 本上位机程序是我在做锂电池产线项目的时候开发的,用于采集设备数据以及实现设备自动控制,下位机采用基恩士PLC,超声波机采用上海一家的超声波焊接机,实现电芯极耳的自动焊接,上位在设备焊接过程 ...

  8. PHP代码审计_用==与===的区别

    目录 背景介绍 如何审计 绕过案例1 绕过案例2 背景介绍 比较==与===的差别 == 是等于符号,=== 是恒等于符号,两个符号的功能都是用来比较两个变量是否相等的,只不过两个符号的比较维度不一样 ...

  9. HDOJ-6645(简单题+贪心+树)

    Stay Real HDOJ-6645 由小根堆的性质可以知道,当前最大的值就在叶节点上面,所以只需要排序后依次取就可以了. #include<iostream> #include< ...

  10. Java 基础加强 01

    基础加强·网络编程 和 GUI 网络编程概述 * A:计算机网络 * 是指将地理位置不同的具有独立功能的多台计算机及外部设备,通过通信连接起来 在网路操作系统,网络管理软件和网络通信协议的管理下,实现 ...