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

慈云数据 2024-03-22 技术支持 92 0

        

目录

一、原理

二、实战

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为整个语料库的文本数

 

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

二、实战

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):

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

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 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon