关于向量化、TF-IDF的一些事情

如果从一开始就给大家说什么是向量化再抛出类似稀疏矩阵、文本特征等一系列专业名词大家必然听的云里雾里不知所云,那不如就由浅入深从头开始讲起我们的到底在干什么(what)我们又是如何实现的(how)、我们为什么要这样实现(why)这三个方面开始讲吧!

一、首先我们到底在干什么

身处于互联网大数据时代,每个人、每个企业既是数据的生产者又是信息的消费者,数据的价值也备受着关注越来越多的企业开始去尝试挖掘数据的价值,越来越多的用户也正享受着大数据时代为他们提供的便利,大数据的获取、处理与分析,已成为提高未来竞争力的关键因素,所以我们要做的就是————数据分析

对于文本的分析有一个专有名词叫做 nlp(Natural Language Processing),翻译为自然语言处理,它是计算机科学、人工智能和语言学的交叉领域,目的是让计算机处理或“理解”自然语言,以执行诸如语言翻译和问题回答等任务。他主要用到三种技术:

▌技术1:文本嵌入(Text Embeddings)

在传统的NLP中, 我们把单词看成是离散符号, 然后用一个one-hot向量来表示。向量的维数是整个词库中单词的数量。单词作为离散符号的问题在于, 对于一个one-hot向量来说,没有自然的相似性概念。因此, 另一种方法是学习在向量本身中的编码相似性。核心思想是一个词的意思是由经常出现在其附近的词给出的。

文本嵌入是字符串的实值向量表示形式。我们为每个单词构建一个稠密的向量, 这样做是以便它与出现在相似上下文中的单词向量相似。对于大多数深度NLP任务而言,词嵌入被认为是一个很好的起点。它们允许深度学习在较小的数据集上有效,因为它们通常是深度学习体系结构的第一批输入,也是NLP中最流行的迁移学习方式。

▌技术2:机器翻译

机器翻译是语言理解的经典测试。它由语言分析和语言生成两部分组成。大型机器翻译系统有巨大的商业用途,因为全球语言是一个每年400亿美元的产业

▌技术3:Dialogue 和 Conversations

关于会话AI的文章很多,其中大部分集中在垂直聊天机器人、messenger平台、商业趋势和创业机会(比如亚马逊Alexa、苹果Siri、Facebook M、谷歌助理、微软Cortana)。人工智能理解自然语言的能力仍然有限。因此,创建完全自动化的开放域会话助理仍然是一个开放的挑战

我们要用到的技术就是文本嵌入(Text Embeddings)!

数据分析师Seth Grimes曾指出“80%的商业信息来自非结构化数据,主要是文本数据”,这一表述可能夸大了文本数据在商业数据中的占比,但是文本数据的蕴含的信息价值毋庸置疑

如果原始文本是数据,那么文本挖掘就是信息,NLP就是知识,也就是语法和语义的关系。下面的金字塔表示了这种关系:

金字塔

二、1、我们又是如何实现的呢

我们要分析的原始数据、符号文字序列不能直接传递给算法,因为它们大多数要求具有固定长度的数字矩阵特征向量,而不是具有可变长度的原始文本文档。为解决这个问题,scikit-learn提供了从文本内容中提取数字特征的最常见方法,即:

令牌化(tokenizing) 对每个可能的词令牌分成字符串并赋予整数形的id,例如通过使用空格和标点符号作为令牌分隔符。

统计(counting) 每个词令牌在文档中的出现次数。

标准化、归一化(normalizing) 在大多数的文档 / 样本中,可以减少重要的次令牌的出现次数的权重。

在该方案中,特征和样本定义如下:

每个单独的令牌发生频率(归一化或不归零)被视为一个特征

给定文档中所有的令牌频率向量被看做一个多元sample样本

因此,文本的集合可被表示为矩阵形式,每行对应一条文本,每列对应每个文本中出现的词令牌(如单个词)。

矩阵

我们称向量化是将文本文档集合转换为数字集合特征向量的普通方法。 这种特殊思想(令牌化,计数和归一化)被称为 Bag of Words 或 “Bag of n-grams” 模型,也就是词袋模型。 文档由单词出现来描述,同时完全忽略文档中单词的相对位置信息。

词袋模型

可能大家还是听得有些迷糊,那我举个稍微平易的例子为大家巩固一下理解吧。我们可以把待分析的文本、原始数据想象成为一个拼装完成的‘乐高积木’,现在我们要分析这个乐高积木,然后我们把它一块一块拆下来,拆除完成之后原本完整的积木变成了一块块单独的零件,我们为拆下的零件一件一件的按照类型编上序号并且按照顺序排列好,这就完成了第一步———分词标记(tokenizing

乐高(整)

【a零件0号,b零件1号,c零件2号,d零件3号,e零件4号,f零件5号,g零件6号,...........】

积木零件

然后我们要统计拆除下来每个零件的个数,这就是关键的第二部——统计(counting)

【a零件0号:61,b 零件1号:5 ,c 零件2号:6 ,d 零件3号:99 ,e 零件4号:7 ,f 零件5号:5 号,g 零件6号 :2,...........】

统计后的积木零件

但是有许多零件是常常出现但是并不是特别重要的或者太大太小总之我们想要的,我们就要去除对他们的统计,这就是第三部分————归一化(normalizing),我们即将要探讨的TF-IDF模型就是实现归一化的一种方法。

**【b 零件1号:5 ,c 零件2号:6 ,e 零件4号:7 ,f 零件5号:5 ,g 零件6号 :2,...........】 **

现在大家是否对向量化的过程有了更为具象的认识呢,好了重头戏终于来了,到底什么是TF-IDF

TF-IDF(term frequency-inverse document frequency)词频-逆文件频率。在处理文本时,如何将文字转化为模型可以处理的向量呢?TF-IDF就是这个问题的解决方案之一。字词的重要性与其在文本中出现的频率成正比(TF),与其在语料库中出现的频率成反比(IDF)。

TF就是词频,词语在文章中出现的次数。

TF

IDF叫做逆文档频率,有些词可能在文本中频繁出现,但并不重要,也即信息量小,如is,of,that这些单词,或是中文中的是、这、那,这些单词在语料库中出现的频率也非常大,我们就可以利用这点,降低其权重。

IDF

TF-IDF则是将上面的TF-IDF相乘就得到了的综合参数

TF-IDF
对数函数

二、2.具体又是怎么实现的呢

首先请安装sklearn,Scikit-learn是一个用于数据挖掘和数据分析的简单且有效的工具,它是基于Python的机器学习模块,基于BSD开源许可证。

pip install scikit-learn

我们会用到Scikit-Learn中的两个类:CountVectorizerTfidfTransformer

CountVectorizer类 实现了 tokenization (词语切分)和 counting (统计词频)

TfidfTransformer类 实现归一化


from sklearn.feature_extraction.text import TfidfTransformer

from sklearn.feature_extraction.text import CountVectorizer

corpus = [

    'This is the first document.',

    'This is the second second document.',

    'And the third one.',

    'Is this the first document?',

]

# 该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频

vectorizer = CountVectorizer()

# 计算每个出现词的词频

X = vectorizer.fit_transform(corpus)

# 打印词袋中所有文本特征值

print(vectorizer.get_feature_names())

# 打印词频矩阵

print(X.toarray())

# 该类会统计每个词语的tf-idf权值

transformer = TfidfTransformer()

# 计算词频矩阵X的TF-IDF值

tfidf = transformer.fit_transform(X)

# 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重

print(tfidf.toarray())

运行结果如下:

运行结果

请注意在sklearn中计算tfidf可能与教科书中给的公式有所不同,我们输入一个拥有三个特征,3*6的矩阵,手动计算一遍他的权重,然后对比计算机给出的结果

矩阵

他的默认公式如下:

默认公式

tf表示特征出现的次数

nd表示文档的总数

df是包含特征 t 的文档数

对于第一个[3,0,1]有:

计算过程

最后要正则化,使其适应欧几里得标准:

欧几里得
归一化结果

下面是计算机计算的权重:

计算机计算结果

如果要提取中文关键词则需要引用jieba库,对语料库进行分词。

中文

运行结果如下:

运行结果

jieba库中内置了TF-IDF算法,可以直接计算权重并输出topkeywords,比较推荐使用!

jieba内置算法
jieba输出关键词

四、我们为什么要这样做

关键词提取技术是自然语言处理的重要基础。随着信息科学技术的快速发展以及互联网的普及,网络文本资源呈几何级数不断增长。面对更新日益频繁和规模庞大的文本数据,如何高效准确地实现关键词提取成为影响信息检索系统性能的关键。

TF-IDF简单快速,结果符合实际情况使它成为了经典的权重算法但是他也有缺点,单纯以词频衡量词的重要性,不够全面,有时重要的词出现的次数不多,而且对词的出现位置没有设置,出现位置靠前的词和出现位置靠后的词的重要性一样,可能对全文的第一段或者每一段的第一句给予较大的权重。

对经典的 TFIDF 方法进行改进 通过了解中文自然语言的结构和中文关键词的特点,结合关键词的频率、位置关系以及词性等特征,从而提高关键词的提取性能。

目前国内学者提出了以下几种关键词提取的改进办法:

提出一种综合多因素的关键词提取方法。该方法综合网页中词语的词长、词性以及位置信息进行综合加权。

利用词语之间的语义的连贯性,结合词频、位置等特征,提出一种基于词汇链的网页关键词提取方法。

通过自然语言表现出的复杂网络特征,根据语言网络的“小世界”特性,提出基于语言网络的关键词提取方法。该方法借用复杂网络的特性,将词语之间的链接关系和位置信息相融合,从而提高关键词的抽取性能。

四、参考资料:

给出一些我学习过程中的参考资料,希望能与大家交流学习

英文文档:https://scikit-learn.org/stable/modules/feature_extraction.html#common-vectorizer-usage

中文文档:https://github.com/apachecn/sklearn-doc-zh/blob/master/docs/0.21.3/39.md

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

推荐阅读更多精彩内容