tf-idf原理 & TfidfVectorizer参数详解及实战

这篇具有很好参考价值的文章主要介绍了tf-idf原理 & TfidfVectorizer参数详解及实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        

目录

一、原理

二、实战

sklearn中提供的文本处理方法

1、导包

 2、初始化词频向量/tf_idf的训练参数

3、CountVectorizer训练及应用函数

4、CountVectorizer使用

5、TfidfTransformer训练及应用函数

6、TfidfTransformer训练及应用函数

三、划重点

少走10年弯路


        tf-idf作为文体特征提取的常用统计方法之一,适合用于文本分类任务,本文从原理、参数详解及实战全方位详解tf-idf,掌握本篇即可轻松上手并用于文本数据分类。

一、原理

        tf 表示词频(某单词在某文本中的出现次数/该文本中所有词的词数),idf表示逆文本频率(语料库中包含某单词的文本数、的倒数、取log),tf-idf则表示词频 * 逆文档频率,tf-idf认为词的重要性随着它在文本中出现的次数成正比增加,但同时会随着它在整个语料库中出现的频率成反比下降。

        idf表达式如下,其中k为包含某词的文本数,n为整个语料库的文本数

 tfidfvectorizer,自然语言处理,机器学习,python,人工智能

        对idf进行平滑、避免出现极大/极小值(smooth_idf=True)

tfidfvectorizer,自然语言处理,机器学习,python,人工智能

二、实战

sklearn中提供的文本处理方法

(1)CountVectorizer: 将文本文档集合转换为词频/字符频数矩阵,在单个类中实现了 tokenization (字符级+词级分词)、n-grams、剔除停用词、筛选高频词和 occurrence counting (频数统计)

(2)TfidfTransformer:将词频/字符频数矩阵转换为标准化的 tf 或 tf-idf 矩阵,Tf 表示词频、而 tf-idf 表示词频乘以逆文档频率,常用于文本分类。

(3)TfidfVectorizer:直接将原始文档集合转换为tf-idf 特征矩阵,将 CountVectorizer 和TfidfTransformer的所有功能组合在一个模型中。

实际应用结果如下图(1-grams + 2-grams):

本文通过使用例子实战,展示这几类的使用方法及功能,以及详细的参数解释、方便不同需求下自行使用。

tfidfvectorizer,自然语言处理,机器学习,python,人工智能

1、导包

import warnings 
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformer,TfidfVectorizer

 2、初始化词频向量/tf_idf的训练参数

        由于存在功能组合的问题,TfidfVectorizer参数=CountVectorizer参数+TfidfTransformer参数,因此初始化参数函数将三部分参数汇总,通过设置传参label、用于确定所需要返回的参数字典。

def init_params(label='TfidfVectorizer'):
    params_count={
        'analyzer': 'word',  # 取值'word'-分词结果为词级、'char'-字符级(结果会出现he is,空格在中间的情况)、'char_wb'-字符级(以单词为边界),默认值为'word'
        'binary': False,  # boolean类型,设置为True,则所有非零计数都设置为1.(即,tf的值只有0和1,表示出现和不出现)
        'decode_error': 'strict',
        'dtype': np.float64, # 输出矩阵的数值类型
        'encoding': 'utf-8',
        'input': 'content', # 取值filename,文本内容所在的文件名;file,序列项必须有一个'read'方法,被调用来获取内存中的字节;content,直接输入文本字符串
        'lowercase': True, # boolean类型,计算之前是否将所有字符转换为小写。
        'max_df': 1.0, # 词汇表中忽略文档频率高于该值的词;取值在[0,1]之间的小数时表示文档频率的阈值,取值为整数时(>1)表示文档频数的阈值;如果设置了vocabulary,则忽略此参数。
        'min_df': 1, # 词汇表中忽略文档频率低于该值的词;取值在[0,1]之间的小数时表示文档频率的阈值,取值为整数时(>1)表示文档频数的阈值;如果设置了vocabulary,则忽略此参数。
        'max_features': None, # int或 None(默认值).设置int值时建立一个词汇表,仅用词频排序的前max_features个词创建语料库;如果设置了vocabulary,则忽略此参数。
        'ngram_range': (1, 2),  # 要提取的n-grams中n值范围的下限和上限,min_n <= n <= max_n。
        'preprocessor': None, # 覆盖预处理(字符串转换)阶段,同时保留标记化和 n-gram 生成步骤。仅适用于analyzer不可调用的情况。
        'stop_words': 'english', # 仅适用于analyzer='word'。取值english,使用内置的英语停用词表;list,自行设置停停用词列表;默认值None,不会处理停用词
        'strip_accents': None,
        'token_pattern': '(?u)\\b\\w\\w+\\b', # 分词方式、正则表达式,默认筛选长度>=2的字母和数字混合字符(标点符号被当作分隔符)。仅在analyzer='word'时使用。
        'tokenizer': None, # 覆盖字符串标记化步骤,同时保留预处理和 n-gram 生成步骤。仅适用于analyzer='word'
        'vocabulary': None, # 自行设置词汇表(可设置字典),如果没有给出,则从输入文件/文本中确定词汇表
    }
    params_tfidf={
        'norm': None, # 输出结果是否标准化/归一化。l2:向量元素的平方和为1,当应用l2范数时,两个向量之间的余弦相似度是它们的点积;l1:向量元素的绝对值之和为1
        'smooth_idf': True, # 在文档频率上加1来平滑 idf ,避免分母为0
        'sublinear_tf': False, # 应用次线性 tf 缩放,即将 tf 替换为 1 + log(tf)
        'use_idf': True, # 是否计算idf,布尔值,False时idf=1。
    }
    if label=='CountVectorizer':
        return params_count
    elif label=='TfidfTransformer':
        return params_tfidf
    elif label=='TfidfVectorizer':
        params_count.update(params_tfidf)
        return params_count

3、CountVectorizer训练及应用函数

def CountVectorizer_train(train_data,params):
    cv = CountVectorizer(**params)
    # 输入训练集矩阵,每行表示一个文本

    # 训练,构建词汇表以及词项idf值,并将输入文本列表转成VSM矩阵形式
    cv_fit = cv.fit_transform(train_data)
    return cv
def CountVectorizer_apply(model):
    print('词汇表')
    print(model.vocabulary_)
    print('------------------------------')
    
    print('特证名/词汇列表')
    print(model.get_feature_names())
    print('------------------------------')
    
    print('idf_列表')
    print(model.idf_)
    print('------------------------------')
    
    data=['Tokyo Japan Chinese']
    print('{} 文本转化VSM矩阵'.format(data))
    print(model.transform(data).toarray())
    print('------------------------------')
    
    print('转化结果输出为dataframe')
    print(pd.DataFrame(model.transform(data).toarray(),columns=model.get_feature_names()))
    print('------------------------------')
    
    print('model参数查看')
    print(model.get_params())
    print('------------------------------')

4、CountVectorizer使用

train_data = ["Chinese Beijing Chinese",
              "Chinese Chinese Shanghai",
              "Chinese Macao",
              "Tokyo Japan Chinese"]

params=init_params('CountVectorizer')
cv_model=CountVectorizer_train(train_data,params)
CountVectorizer_apply(cv_model)

查看结果可以发现,VSM矩阵并不是词频统计,其实是tf-idf的结果

tfidfvectorizer,自然语言处理,机器学习,python,人工智能

5、TfidfTransformer训练及应用函数

def TfidfTransformer_train(train_data,params):
    tt = TfidfTransformer(**params)
    tt_fit = tt.fit_transform(train_data)
    return tt
def TfidfTransformer_apply(model):
    print('idf_列表')
    print(model.idf_)
    print('------------------------------')
    
    data=[[1, 1, 0, 2, 1, 1, 0, 1]]
    print('词频列表{} 转化VSM矩阵'.format(data))
    print(model.transform(data).toarray())
    print('------------------------------')
    
    print('model参数查看')
    print(model.get_params())
    print('------------------------------')

train_data=[[1, 1, 1, 0, 1, 1, 1, 0],
       [1, 1, 0, 1, 1, 1, 0, 1]]

params=init_params('TfidfTransformer')
tt_model=TfidfTransformer_train(train_data,params)
TfidfTransformer_apply(tt_model)

6、TfidfTransformer训练及应用函数

def TfidfVectorizer_train(train_data,params):
    tv = TfidfVectorizer(**params)
    # 输入训练集矩阵,每行表示一个文本

    # 训练,构建词汇表以及词项idf值,并将输入文本列表转成VSM矩阵形式
    tv_fit = tv.fit_transform(train_data)
    return tv
def TfidfVectorizer_apply(tv_model):
    print('tv_model词汇表')
    print(tv_model.vocabulary_)
    print('------------------------------')
    
    print('tv_model特证名/词汇列表')
    print(tv_model.get_feature_names())
    print('------------------------------')
    
    print('idf_列表')
    print(tv_model.idf_)
    print('------------------------------')
    
    data=['Tokyo Japan Chinese']
    print('{} 文本转化VSM矩阵'.format(data))
    print(tv_model.transform(data).toarray())
    print('------------------------------')
    
    print('转化结果输出为dataframe')
    print(pd.DataFrame(tv_model.transform(data).toarray(),columns=tv_model.get_feature_names()))
    print('------------------------------')
    
    print('tv_model参数查看')
    print(tv_model.get_params())
    print('------------------------------')


train_data = ["Chinese Beijing Chinese",
              "Chinese Chinese Shanghai",
              "Chinese Macao",
              "Tokyo Japan Chinese"]

params=init_params('TfidfVectorizer')
tv_model=TfidfVectorizer_train(train_data,params)
TfidfVectorizer_apply(tv_model)

tfidfvectorizer,自然语言处理,机器学习,python,人工智能

将train_data的tf-idf矩阵转化为dataframe结果

pd.DataFrame(tv_model.transform(train_data).toarray(),
                columns=tv_model.get_feature_names())

tfidfvectorizer,自然语言处理,机器学习,python,人工智能

三、划重点

少走10年弯路

        关注公众号Python风控模型与数据分析,回复 tfidf实战 获取本篇的.py代码,不用动手直接调用、它不香吗?

        还有更多理论、代码分享,没有任何保留的输出、不值得一个关注吗?

tfidfvectorizer,自然语言处理,机器学习,python,人工智能文章来源地址https://www.toymoban.com/news/detail-788350.html

到了这里,关于tf-idf原理 & TfidfVectorizer参数详解及实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是 TF-IDF 算法?

    简单来说, 向量空间模型就是希望把查询和文档都表达成向量,然后利用向量之间的运算来进一步表达向量间的关系 。比如,一个比较常用的运算就是计算查询所对应的向量和文档所对应的向量之间的 “ 相关度 ”。 简单解释TF-IDF TF (Term Frequency)—— “单词

    2024年02月10日
    浏览(29)
  • [nlp] TF-IDF算法介绍

    (1)TF是词频(Term Frequency) 词频是文档中词出现的概率。 (2) IDF是逆向文件频率(Inverse Document Frequency) 包含词条的文档越少,IDF越大。

    2024年02月15日
    浏览(30)
  • NLP自然语言处理——关键词提取之 TF-IDF 算法(五分钟带你深刻领悟TF-IDF算法的精髓)

    🔥博客主页: 是dream 🚀 系列专栏: 深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发 💘 每日语录:要有最朴素的生活和最遥远🌏的梦想,即使明天天寒地冻,山高水远,路远马亡。 🎉 感谢大家点赞👍收藏⭐指证✍️         

    2024年02月04日
    浏览(48)
  • TF-IDF (BigData, Data Mining)

    TF-IDF (term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。 TF 是词频(Term Frequency), IDF 是逆文本频率指数(Inverse Document Frequency)。 TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。 字词的重要

    2024年02月06日
    浏览(31)
  • 文本分析-使用jieba库实现TF-IDF算法提取关键词

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+         TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是一种用于资讯检索与资

    2024年02月11日
    浏览(46)
  • 大数据课程K15——Spark的TF-IDF计算Term权重

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 了解Spark的TF-IDF算法概念; ⚪ 了解Spark的TF-IDF算法定义; ⚪ 了解Spark的TF-IDF算法案例; TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),

    2024年02月10日
    浏览(38)
  • 【小沐学NLP】Python实现TF-IDF算法(nltk、sklearn、jieba)

    TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF是词频(Term Frequency),IDF是逆文本频率指数(Inverse Document Frequency)。 TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随

    2024年02月03日
    浏览(55)
  • 【论文阅读】BERTopic:采用一个基于类的TF-IDF流程进行神经网络的主题建模

    主题模型对于在文档的集合中发现潜在的主题非常有用。近期的研究已经展示了主题建模方法作为一个聚类任务的可行性。 本文展示了BERTopic,它是一个话题模型,它通过对一个基于类的TF-IDF的变体的开发,抽取一致的话题表示。 具体来说,BERTopic采用预训练的基于transform

    2023年04月08日
    浏览(32)
  • 基于TF-IDF+TensorFlow+词云+LDA 新闻自动文摘推荐系统—深度学习算法应用(含ipynb源码)+训练数据集

    本项目运用了TF-IDF提取技术,结合词云数据可视化、LDA (Latent Dirichlet Allocation)模型训练以及语音转换系统,来实现一个基于TensorFlow的文本摘要程序。 首先,我们利用TF-IDF(Term Frequency-Inverse Document Frequency)技术来提取文本中的。这有助于找出文本中最具代表性的

    2024年02月13日
    浏览(39)
  • 【机器学习】特征工程 - 文本特征提取TfidfVectorizer

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 对 「文本」 进行特征提取时,一般会用 「单词」 作为特征,即特征词。

    2024年02月12日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包