精华内容
参与话题
问答
  • 文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作。在介绍向量化之前,我们先来了解下词袋模型。   1.词袋模型(Bag of words,简称 BoW )    词袋模型假设我们不考虑文本中词与词之间的上...

    文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作。在介绍向量化之前,我们先来了解下词袋模型。

     

    1.词袋模型(Bag of words,简称 BoW )

     

      词袋模型假设我们不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词的权重。而权重与词在文本中出现的频率有关。

      词袋模型首先会进行分词,在分词之后,通过统计每个词在文本中出现的次数,我们就可以得到该文本基于词的特征,如果将各个文本样本的这些词与对应的词频放在一起,就是我们常说的向量化。向量化完毕后一般也会使用 TF-IDF 进行特征的权重修正,再将特征进行标准化。 再进行一些其他的特征工程后,就可以将数据带入机器学习模型中计算。

      词袋模型的三部曲:分词(tokenizing),统计修订词特征值(counting)与标准化(normalizing)。

      词袋模型有很大的局限性,因为它仅仅考虑了词频,没有考虑上下文的关系,因此会丢失一部分文本的语义。

      在词袋模型统计词频的时候,可以使用 sklearn 中的 CountVectorizer 来完成。下面具体说明。

     

    2.词频向量化

     

      CountVectorizer 类会将文本中的词语转换为词频矩阵,例如矩阵中包含一个元素a[i][j],它表示j词在i类文本下的词频。它通过 fit_transform 函数计算各个词语出现的次数,通过get_feature_names()可获取词袋中所有文本的关键字,通过 toarray()可看到词频矩阵的结果。

    官方文件中提到其参数很多默认值就很好,无需再改动,详细参数设置参见:点击打开链接。例子如下:

    from sklearn.feature_extraction.text import CountVectorizer
    
    vectorizer = CountVectorizer(min_df=1)
    
    corpus = [      'This is the first document.',
        		'This is the second second document.',
        		'And the third one.',
    		'Is this the first document?',
    		]
    X = vectorizer.fit_transform(corpus)
    feature_name = vectorizer.get_feature_names()
    
    
    print (X)
    print (feature_name)
    print (X.toarray())

    输出:

       (0, 1)        1
      (0, 2)        1
      (0, 6)        1
      (0, 3)        1
      (0, 8)        1
      (1, 5)        2
      (1, 1)        1
      (1, 6)        1
      (1, 3)        1
      (1, 8)        1
      (2, 4)        1
      (2, 7)        1
      (2, 0)        1
      (2, 6)        1
      (3, 1)        1
      (3, 2)        1
      (3, 6)        1
      (3, 3)        1
      (3, 8)        1
    ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
    
    
    [[0 1 1 ..., 1 0 1]
     [0 1 0 ..., 1 0 1]
     [1 0 0 ..., 1 1 0]
     [0 1 1 ..., 1 0 1]]

     

      在输出中,左边的括号中的第一个数字是文本的序号i,第2个数字是词的序号j,注意词的序号是基于所有的文档的。第三个数字就是我们的词频。

    可以看到一共有9个词,所以4个文本对应的都是9维的特征向量。

    由于大部分文本都只会用词汇表中很少一部分的词,因此词向量中有大量的0,也就是说词向量是稀疏的。因此在实际应用中一般使用稀疏矩阵来存储。

    3.TF-IDF处理

      然而有些词在文本中尽管词频高,但是并不重要,这个时候就可以用TF-IDF技术。

     

        TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。

    TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF * IDF。

    (1)词频(Term Frequency,TF)指的是某一个给定的词语在该文件中出现的频率。即词w在文档d中出现的次数count(w, d)和文档d中总词数size(d)的比值。

    tf(w,d) = count(w, d) / size(d)
    

    这个数字是对词数 (term count) 的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)

    (2)逆向文件频率(Inverse Document Frequency,IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。即文档总数n与词w所出现文件数docs(w, D)比值的对数。 

    idf = log(n / docs(w, D))
    

    TF-IDF根据 tf 和 idf 为每一个文档d和由关键词w[1]…w[k]组成的查询串q计算一个权值,用于表示查询串q与文档d的匹配度:

    tf-idf(q, d) = sum { i = 1..k | tf-idf(w[i], d) } = sum { i = 1..k | tf(w[i], d) * idf(w[i]) }
    

    某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

     

    4.用sklearn进行TF-IDF预处理

       第一种方法是在用 CountVectorizer 类向量化之后再调用 TfidfTransformer 类进行预处理。第二种方法是直接用 TfidfVectorizer 完成向量化与 TF-IDF 预处理。

    4.1 CountVectorizer 结合 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?',
    		]
    
    
    vectorizer=CountVectorizer()
    
    
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus)) 
    print (tfidf)

     

    输出的各个文本各个词的 TF-IDF 值如下:

     

      (0, 8)        0.438776742859
      (0, 3)        0.438776742859
      (0, 6)        0.358728738248
      (0, 2)        0.541976569726
      (0, 1)        0.438776742859
      (1, 8)        0.272301467523
      (1, 3)        0.272301467523
      (1, 6)        0.222624292325
      (1, 1)        0.272301467523
      (1, 5)        0.853225736145
      (2, 6)        0.28847674875
      (2, 0)        0.552805319991
      (2, 7)        0.552805319991
      (2, 4)        0.552805319991
      (3, 8)        0.438776742859
      (3, 3)        0.438776742859
      (3, 6)        0.358728738248
      (3, 2)        0.541976569726
      (3, 1)        0.438776742859

    4.2 用 TfidfVectorizer

    实现代码如下:

    from sklearn.feature_extraction.text import TfidfVectorizer
    tfidf2 = TfidfVectorizer()
    re = tfidf2.fit_transform(corpus)
    print (re)

    输出:

      (0, 8)        0.438776742859
      (0, 3)        0.438776742859
      (0, 6)        0.358728738248
      (0, 2)        0.541976569726
      (0, 1)        0.438776742859
      (1, 8)        0.272301467523
      (1, 3)        0.272301467523
      (1, 6)        0.222624292325
      (1, 1)        0.272301467523
      (1, 5)        0.853225736145
      (2, 6)        0.28847674875
      (2, 0)        0.552805319991
      (2, 7)        0.552805319991
      (2, 4)        0.552805319991
      (3, 8)        0.438776742859
      (3, 3)        0.438776742859
      (3, 6)        0.358728738248
      (3, 2)        0.541976569726
      (3, 1)        0.438776742859 (0, 8)        0.438776742859
      (0, 3)        0.438776742859
      (0, 6)        0.358728738248
      (0, 2)        0.541976569726
      (0, 1)        0.438776742859
      (1, 8)        0.272301467523
      (1, 3)        0.272301467523
      (1, 6)        0.222624292325
      (1, 1)        0.272301467523
      (1, 5)        0.853225736145
      (2, 6)        0.28847674875
      (2, 0)        0.552805319991
      (2, 7)        0.552805319991
      (2, 4)        0.552805319991
      (3, 8)        0.438776742859
      (3, 3)        0.438776742859
      (3, 6)        0.358728738248
      (3, 2)        0.541976569726
      (3, 1)        0.438776742859

     

      

    统计个数和计算频率两种方法虽然非常实用,但是也由其局限性导致词汇量可能变得非常大。词汇量过大又将导致需要非常大的矢量来编码文档,从而对内存产生很大的要求,同时拖慢算法的速度。卤煮会在后续的博客中介绍优化方法。

     

     

     

     

     

     

     

    参考资料:

    http://scikit-learn.org/stable/modules/feature_extraction.html#common-vectorizer-usage

    http://www.cnblogs.com/weidagang2046/archive/2012/10/22/tf-idf-from-probabilistic-view.html#top

    https://zhangzirui.github.io/posts/Document-14%20(sklearn-feature).md

     

     

     

    展开全文
  • TfidfVectorizer相当于把CountVectorizer, TfidfTransformer合并起来,直接生成tfidf值 参数参考:https://blog.csdn.net/blmoistawinde/article/details/80816179 import pandas as pd from sklearn.feature_...

    TfidfVectorizer相当于把CountVectorizer, TfidfTransformer合并起来,直接生成tfidf值

    参数参考:https://blog.csdn.net/blmoistawinde/article/details/80816179
    在这里插入图片描述

    import pandas as pd
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.feature_extraction.text import TfidfTransformer
    
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.metrics.pairwise import cosine_similarity
    
    corpus = [
      "帮我 查下 明天 北京 天气 怎么样",
      "帮我 查下 今天 北京 天气 好不好",
      "帮我 查询 去 北京 的 火车",
    
    ]
    

    1、CountVectorizer

    # step 1
    vectoerizer = CountVectorizer(min_df=1, max_df=1.0, token_pattern='\\b\\w+\\b')
    # step 2
    vectoerizer.fit(corpus)
    # step 3
    bag_of_words = vectoerizer.get_feature_names()
    print("Bag of words:")
    print(bag_of_words)
    print(len(bag_of_words))
    # step 4
    X = vectoerizer.transform(corpus)
    print("Vectorized corpus:")
    print(X.toarray())
    # step 5
    print("index of `的` is : {}".format(vectoerizer.vocabulary_.get('的')))
    

    在这里插入图片描述
    2、TfidfTransformer 继续在CountVectorizer基础上计算tfidf

    # step 1
    tfidf_transformer = TfidfTransformer()
    # step 2
    tfidf_transformer.fit(X.toarray())
    # step 3
    for idx, word in enumerate(vectoerizer.get_feature_names()):
      print("{}\t{}".format(word, tfidf_transformer.idf_[idx]))
    # step 4
    tfidf = tfidf_transformer.transform(X)
    print(tfidf.toarray())
    

    在这里插入图片描述
    3、TfidfVectorizer

    # step 1
    tfidf_vec = TfidfVectorizer(min_df=1, max_df=1.0, token_pattern='\\b\\w+\\b')
    # step 2
    tfidf_vec.fit(corpus)
    # step 3
    bag_of_words = tfidf_vec.get_feature_names()
    print("Bag of words:")
    print(bag_of_words)
    print(len(bag_of_words))
    # step 4
    X = tfidf_vec.transform(corpus)
    print("Vectorized corpus:")
    print(X.toarray())
    # step 5
    print("index of `的` is : {}".format(vectoerizer.vocabulary_.get('的')))
    

    在这里插入图片描述

    展开全文
  • from sklearn.feature_extraction.text import CountVectorizertexts=["dog cat fish","dog cat cat","fish bird", 'bird'] cv = CountVectorizer() cv_fit=cv.fit_transform(texts)print(cv.get_feature_names()) ...
    • sklearn CountVectorizer函数详解
    from sklearn.feature_extraction.text import CountVectorizer
    
    texts=["dog cat fish","dog cat cat","fish bird", 'bird']
    cv = CountVectorizer()
    cv_fit=cv.fit_transform(texts)
    
    print(cv.get_feature_names())
    print(cv_fit.toarray())
    print(cv_fit)
    • 返回的结果为稀疏矩阵
    ['bird', 'cat', 'dog', 'fish']
    [[0 1 1 1]
     [0 2 1 0]
     [1 0 0 1]
     [1 0 0 0]]
      (0, 3)    1
      (0, 1)    1
      (0, 2)    1
      (1, 1)    2
      (1, 2)    1
      (2, 0)    1
      (2, 3)    1
      (3, 0)    1
    • sklearn TfidfTransformer函数详解
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.feature_extraction.text import TfidfTransformer
    
    texts=["dog cat fish","dog cat cat","dog fish", 'dog pig pig 中国']
    cv = CountVectorizer()
    cv_fit=cv.fit_transform(texts)
    
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(cv_fit)
    tfidf.toarray()
    array([[ 0.64043405,  0.42389674,  0.64043405,  0.        ,  0.        ],
           [ 0.94936136,  0.31418628,  0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.55193942,  0.83388421,  0.        ,  0.        ],
           [ 0.        ,  0.22726773,  0.        ,  0.8710221 ,  0.43551105]])
    • sklearn TfidfVectorizer函数详解
    • TfidfVectorizer函数的功能相当于下面这四行代码的功能,即CountVectorizer+TfidfTransformer
    cv = CountVectorizer()
    cv_fit=cv.fit_transform(texts)
    
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(cv_fit)
    • 上代码,TfidfVectorizer
    from sklearn.feature_extraction.text import TfidfVectorizer
    
    tv = TfidfVectorizer(max_features=100,
                         ngram_range=(1, 1),
                         stop_words='english')
    X_description = tv.fit_transform(texts)
    print(X_description.toarray())
    [[ 0.64043405  0.42389674  0.64043405  0.          0.        ]
     [ 0.94936136  0.31418628  0.          0.          0.        ]
     [ 0.          0.55193942  0.83388421  0.          0.        ]
     [ 0.          0.22726773  0.          0.8710221   0.43551105]]
    • 可观察到输出的结果和上面的结果是一毛一样的。
    • ngram_range=(1, 1)也可以改为(2,3),这就是2-gram.
    • stop_words暂时只支持英文,即”english”
    展开全文
  • smooth_idf=True时 smooth_idf=False时 标准公式 另外tf采用的是频数而不是频率,见 https://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction

    smooth_idf=True时
    在这里插入图片描述是
    smooth_idf=False时

    标准公式
    在这里插入图片描述
    另外tf采用的是频数而不是频率,见
    https://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • vectorizer=...transformer=TfidfTransformer() tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus)) 等价于: transformer=TfidfVectorizer() tfidf2=transformer.fit_transform(corpus...
  • 这里简单介绍下scikit-learn自然语言文本处理的一个开源方法——TfidfVectorizer,该方法分别是由两种方法 CountVectorizer 与 TfidfTransformer 的结合,下面进行说明,说明之前给出三个文档链接(本文基本翻译自...
  • TfidfTransformer 输出

    千次阅读 2019-07-30 14:33:17
    from sklearn.feature_extraction.text import TfidfTransformer from sklearn.feature_extraction.text import CountVectorizer import json corpus = [] f = open("data/msmarco/collection.tsv",mode="r",encodi...
  • TfidfTransformer() 输入:词频TF 输出:词频逆反文档频率TF-IDF(即词频TF与逆反文档频率IDF的乘积,IDF的标准计算公式为 :idf=log[n/(1+df)],其中n为文档总数,df为含有所计算单词的文档数量,df越小,idf值越大...
  • 一、数据集介绍 20 newsgroups数据集18000篇新闻文章,一共涉及到20种话题,所以称作20 newsgroups text dataset,分文两部分:训练集和测试集,通常用来做文本分类。sklearn提供了该数据的接口:sklearn.datasets....
  • TfidfVectorizer、CountVectorizer 和 TfidfTransformer 是 sklearn 中处理自然语言常用的工具。TfidfVectorizer 相当于 CountVectorizer + TfidfTransformer。 下面先说 CountVectorizer。 CountVectorizer ...
  • 这篇文章写的非常详细https://blog.csdn.net/qq_30868235/article/details/80389180
  • TfidfTransformer() 输入:词频TF 输出:词频逆反文档频率TF-IDF(即词频TF与逆反文档频率IDF的乘积,IDF的标准计算公式为 :idf=log[n/(1+df)],其中n为文档总数,df为含有所计算单词的文档数量,df越小,idf值越大...
  • 参考链接: https://www.jianshu.com/p/caa4b923117c ... 1.CountVectorizer CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数,通过get_feature_name...
  • 1. CountVectorizer原理 CountVectorizer是通过fit_transform函数将文本中的词语...from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, TfidfTransformer#导入包 corpus = [ 'This i...
  • Python中的TfidfVectorizer参数解析

    万次阅读 多人点赞 2018-05-25 14:46:36
    vectorizer = CountVectorizer() #构建一个计算词频(TF)的玩意儿,当然这里面不足是可以做这些transformer = TfidfTransformer() #构建一个计算TF-IDF的玩意儿tfidf = transformer.fit_transform(vectorizer.fit_...
  • 转载自:... class sklearn.feature_extraction.text.TfidfVectorizer(input = u'content',encoding = u'utf-8',decode_error = u'strict',strip_acc
  • sklearn+gensim︱jieba分词、词袋doc2bow、TfidfVectorizer

    万次阅读 多人点赞 2017-05-08 22:24:21
    分词这块之前一直用R在做,R中由两个jiebaR+Rwordseg来进行分词,来看看python里面的jieba. 之前相关的文章: R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解) R语言︱文本挖掘——jiabaR包与...
  • sklearn函数CountVectorizer()和TfidfVectorizer()计算方法介绍 CountVectorizer()函数 CountVectorizer()函数只考虑每个单词出现的频率;然后构成一个特征矩阵,每一行表示一个训练文本的词频统计结果。其思想是,...
  • sklearn:CountVectorizer、TfidfTransformer与TfidfVectorizerCountVectorizeCountVectorize的使用功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个...
  • 对于NLP,已经学习一年了,可是一直有一个问题困扰着我,终于忍无可忍,决定将问题解决掉。 首先,介绍一下我的问题: 对于TFIDF算法,当利用训练集训练完成分类器,利用分类器进行训练时,如果测试集中只有一个...
  • 如何在TfidfVectorizer模块中选择max_features参数的编号?我应该使用数据中的最大元素数量吗?参数的description没有给我一个如何选择它的价值的清晰愿景: max_features : int or None, default=None If not None...
  • TfidfVectorizer中的参数norm默认值是l2

    千次阅读 2018-09-28 11:25:34
    TfidfVectorizer中的参数norm默认值是l2,而不是一直以为的None;  注释中的解释: norm是可选 ,而不是None值;如果默认为None,就会用default=None;对比图中的红圈圈; vectorizer = TfidfVectorizer(ngram_...
  • from sklearn.feature_extraction.text import TfidfVectorizer corpus = [] data_file="./tfidf-data.txt" with open(data_file, 'r') as f: for line in f: corpus.append(" ".join(...
  • sklearn: TfidfVectorizer 中文处理及一些使用参数

    万次阅读 多人点赞 2018-06-26 17:03:40
    TfidfVectorizer可以把原始文本转化为tf-idf的特征矩阵,从而为后续的文本相似度计算,主题模型(如LSI),文本搜索排序等一系列应用奠定基础。基本应用如: #coding=utf-8 from sklearn.feature_extraction.text ...
  • In [1]: from sklearn.feature_extraction.text import TfidfVectorizer In [2]: cv = TfidfVectorizer(binary=False, decode_error='ignore', stop_words='english') In [3]: vec = cv.fit_transform(['hello my....
  • 文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作。在介绍向量化之前,我们先来了解下词袋模型。 词袋模型(Bag of words,简称 BoW ) 词袋模型假设我们不考虑文本中词与词之间的上下文关系,仅仅...
  • TfidfVectorizer的实现是通过CountVectorizer和TfidfTransformer共同实现的。 其中TfidfTransformer实现了每个词的tfidf值的计算。 下图是官方文档中,对tfidf值计算的说明: 可以看出默认的计算方法是 idf(d,t)=...
  • TfidfVectorizer

    2019-07-25 03:03:34
    1、参数: https://blog.csdn.net/feng_zhiyu/article/details/81952697 https://cloud.tencent.com/developer/article/1332181 2、 https://www.jianshu.com/p/e2a0aea3630c https://www.wandouip.com/t5i134289/ ...

空空如也

1 2 3 4 5 ... 20
收藏数 5,467
精华内容 2,186
关键字:

tfidftransformer