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

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)

结果:


TF-IDF结果

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)

结果:


n-gram结果

5、总结

本文介绍了Gensim库以及使用不同向量的几种表示方法(词袋、TF-IDF和n-grams)。计算机支持多种表示方式来变换单词,TF-IDF和词袋便是其中的两种向量表示方法。Gensim是一个Python包,它为我们提供了生成各种向量表示的方法,这些向量将会作为各种机器学习和信息检索算法的输入。
更高级的预处理技术还包括创建n-grams、固定搭配和删除低频词,能帮助我们获得更好的效果。同时,向量的概念也是构成自然语言处理基础的很大因素之一。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容