分词(Tokenization) - NLP学习(1)

N-grams模型、停顿词(stopwords)和标准化处理 - NLP学习(2)

文本向量化及词袋模型 - NLP学习(3-1)

在上一篇博文中,简单地阐述了如何将文本向量化及词袋模型的。文本向量化是为了将文本转换成机器学习算法可以直接处理的数字,直白点说就是这些转换后数字代表了文本的特征(此过程称之为特征提取或者特征编码),可以直接为机器学习模型所用。词袋模型(Bag-of-Words: BOW)则指的是统计单词在一个文本中出现的次数的表现形式(occurence of words within a specific document),主要是考量文本的两个方面:

  1. 展现文本中出现的已知的词汇 --- 词汇量;
  2. 量化单词的存在。

而之所以称之为词袋主要是因为该方式忽略了文本本来的有序性和结构性。一般词袋模型主要是用来衡量文档的相似性,因为两个类似的文档所含有的类似的文本内容。紧接着,就可以用BOW来做进一步分析,如语意分析等。在这篇博文中,将主要阐述如何从词袋模型过度到TF-IDF词袋模型,接着解释TF-IDF是如何被运用到主题模型中的。

主题模型

1.1 齐波夫定律(Zipf's Law)

在正式介绍TF-IDF之前,先看看什么是齐波夫定律,因为这样子有助于理解TF-IDF的含义。下面是关于英文的介绍:

Zipf's Law describes that given some corpus of natural language utterances, the frequency of any word is inversely proportional to its rank in the frequency table.

上面这段话表述的是:给定一个文档,任何一个单词出现的频次是与其在频次表(很多地方用的频率,这里用频次是为了做一定的区分,频率想表述的是一种占比关系,频次则说明次数的问题)上的位置(排名)成反比的。比如说一个单词出现在频次表上的第一位,那么它出现的次数基本(非严格意义)是排在第二位的单词出现的次数的2倍,第三位的3倍,以此推断下去。上面有说非严格意义的意思是说,并不是精准的两倍三倍的差距,而是说在一个文本足够大的情况下是如此。

1.2 主题模型(Topic Modelling)

知道一个文本各个单词的出现的频次可以提供给机器学习算法一些初步的特征,但是单单知道单词的频次并不能赋予我们做更多的事,也无从得知某个单词对于该文档的重要性。这里正式引入逆文本频率指数(IDF:Inverse Doccument Frequency),通过了解IDF来引出最终所需要的TF-IDF整个计算公式和运用。TF-IDF的意思是:如果一个单词(文本标识符)出现在一个文档中的次数越多,但是却很少出现在其他文档中,那么就可以假设这个单词在这个特定的文本中的分量是很重要的。具体的计算公式如下:

IDF = total number of documents (文本集含有的文本总数) / the number of documents contain a term (含有特定单词的文本数)

举个例子,假设我们现在有一个文本集,这个文本集一共含有5个不同的文本内容,其中3个文本含有‘China’这个单词,那么IDF('China') = 5 / 3 = 1.67。但是直接拿IDF来衡量一个单词在一个文本中的重要性,那样子显然会碰到一个问题,那就是数量级问题。比如我们有一个文本集,该文本集有100万个文档,在这100个文档中寻找apple这个单词,已知只有一个文本含有apple这个单词,又已知有10个文档含有orange这单词,那么可以得到这两个单词的IDF分别为:100万和10万,通过这个例子可以看到量级差别太巨大,并不适合比较,所以在处理这样子情况下建议引入log()和exp()函数来让单词的出现的频次和文档频次处于统一水平,这样子做的好处是后期计算得到的TF-IDF值会是均匀分布(uniformly distributed)。通过引入log,这个时候之前关于查找apple和orange的例子就会变成:

IDF('apple') = log(1000000/1) = 6

IDF('orange') = log(1000000/10) = 5

综上,假设一个标识符 t 出现在一个文本集 D 中的特定文档 d 的频率可以定义为:

TF(t, d) = number of t appears in document d /total tokens in document d

IDF(t, D) = log(number of documents / number of documents containing t)

TF-IDF(t, d, D) = TF * IDF

从上述公式可以看出,如果一个单词出现在特定文档的次数越多,那么IDF的值也会相应的增大,紧接着TF-IDF的权重也会变大。这也就是说明了TF-IDF的值可以帮助理解一个文档想要表达的或者帮助理解主题模型,因为按照之前的假设,一个单词出现次数越多越能表达一个文档想要表达的意思(注意停顿词等的影响要去除)。下面代码简单描述了如何计算TF-IDF向量:

 import copy
from nltk.tokenize import TreebankWordTokenizer
from collections import OrderedDict docs = ["The faster Harry got to the store, the faster and faster Harry would get home."]
docs.append("Harry is hairy and faster than Jill.")
docs.append("Jill is not as hairy as Harry.") tokenizer = TreebankWordTokenizer() doc_tokens = [] for doc in docs:
doc_tokens += [sorted(tokenizer.tokenize(doc.lower()))]
all_doc_tokens = sum(doc_tokens, [])
lexicon = sorted(set(all_doc_tokens))
zero_vector = OrderedDict((token, 0) for token in lexicon) document_tfidf_vectors = []
for doc in docs: vec = copy.copy(zero_vector)
tokens = tokenizer.tokenize(doc.lower())
token_counts = Counter(tokens) for key, value in token_counts.items():
docs_containing_key = 0
for _doc in docs:
if key in _doc:
docs_containing_key += 1
tf = value / len(lexicon)
if docs_containing_key:
idf = len(docs) / docs_containing_key
else:
idf = 0
vec[key] = round(tf * idf, 4)
document_tfidf_vectors.append(vec)

TF-IDF与主题模型 - NLP学习(3-2)的更多相关文章

  1. LDA算法 (主题模型算法) 学习笔记

    转载请注明出处: http://www.cnblogs.com/gufeiyang 随着互联网的发展,文本分析越来越受到重视.由于文本格式的复杂性,人们往往很难直接利用文本进行分析.因此一些将文本数值 ...

  2. NLP传统基础(2)---LDA主题模型---学习文档主题的概率分布(文本分类/聚类)

    一.简介 https://cloud.tencent.com/developer/article/1058777 1.LDA是一种主题模型 作用:可以将每篇文档的主题以概率分布的形式给出[给定一篇文档 ...

  3. 算法工程师进化-NLP之主题模型

    1 引言 主题模型是文本挖掘的重要工具,近年来在学术界和工业届都获得了非常多的关注.学术界的工作主要集中在建模层面,即提出各种各样的主题模型来适应不同的场景,因此缺乏指导主题模型在工业场景落地的资源和 ...

  4. NLP学习(2)----文本分类模型

    实战:https://github.com/jiangxinyang227/NLP-Project 一.简介: 1.传统的文本分类方法:[人工特征工程+浅层分类模型] (1)文本预处理: ①(中文) ...

  5. 文本分类学习(三) 特征权重(TF/IDF)和特征提取

    上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...

  6. NLP学习(1)---Glove模型---词向量模型

    一.简介: 1.概念:glove是一种无监督的Word representation方法. Count-based模型,如GloVe,本质上是对共现矩阵进行降维.首先,构建一个词汇的共现矩阵,每一行是 ...

  7. LDA( Latent Dirichlet Allocation)主题模型 学习报告

    1     问题描述 LDA由Blei, David M..Ng, Andrew Y..Jordan于2003年提出,是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一 ...

  8. 用scikit-learn学习LDA主题模型

    在LDA模型原理篇我们总结了LDA主题模型的原理,这里我们就从应用的角度来使用scikit-learn来学习LDA主题模型.除了scikit-learn,  还有spark MLlib和gensim库 ...

  9. Familia:百度NLP开源的中文主题模型应用工具包

    参考:Familia的Github项目地址.百度NLP专栏介绍 Familia 开源项目包含文档主题推断工具.语义匹配计算工具以及基于工业级语料训练的三种主题模型:Latent Dirichlet A ...

随机推荐

  1. 前端静态文件如何应对HTTPS的到来

    近几年,越来越多的网站开始支持https,我们可以看到国外的比如github.谷歌.facebook:国内的有百度.淘宝.博客园.coding.net.worktile等一系列的网站. 我再最近的开发 ...

  2. ffmpeg 学习

    1.ffmpeg使用语法 命令格式:    ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]    ffmpeg [[options][`-i' input_file]] ...

  3. 多线程编程-设计模式之保护性暂挂(Guarded Suspesion)模式

    Guarded Suspension模式的架构 核心是一个受保护方法(Guarded Method).该方法需要执行其所要真正执行的操作时需要满足特定的条件(Predicate,以下称之为保护条件). ...

  4. IPv4和IPv6的兼容问题

    一网络拓扑 Ipv6网络1 路由器A IPv4网络 路由器B IPv6网络2 二知识补充 [注]双协议栈主机(路由器A.B)通过域名解析器区分传过来的是IPv4还是IPv6 三处理技术 双协议栈 Ip ...

  5. iOS | FMDB快速上手

    任何的开发都或多或少的接触到数据库,而在IOS中一般使用的是SQLite数据库,这是一个轻量功能较为不错的数据库.而现在用到比较多的第三方数据库操作框架就是FMDB.废话不多说,相信查找到这篇文章的都 ...

  6. 经验之谈—控制器的view的显示

    经验之谈—控制器的view的显示 开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果. ...

  7. 《计算机图形学3D》

    <计算机图形学方法原理应用> Opengl语言    光线跟踪   贝塞尔曲线  射线追踪   色彩理论  纹理映射 逆向运动   MPI  仿射   绘制流水线   透视变换   bre ...

  8. jquery 层级选择器

    关于层级选择器. $("parent > child") 选择所有指定“parent”元素中指定的“child”的直接子项元素. parent :任何有效的选择器. chil ...

  9. 监控tomcat工具使用

    用LambdaProbe监控Tomcat 简介: Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具.Lambda Probe ...

  10. 【前行&赛时总结】◇第2站&赛时·8◇ Atcoder ABC-109

    [第2站&赛时·8] ABC-109 把最后一题题意理解错了……在第二组数据卡了好久(然而并不知道是special judge)QwQ 最终AK,速度慢了一些 Rank:357 Rating: ...