NLP学习笔记三

Task 3

从前两次学习发现,学得不是很深入,这次尝试以作业为重点,多实践,还是那句话:输出倒逼输入。
今天的学习目标:
①学会TF-IDF的原理和使用;
②使用sklearn的机器学习模型完成文本分类。

TF-IDF的原理

TF-IDF是由TF(term frequency)和IDF(inverse document frequency)两部分组成的。

TF

词语频率(Term Frequency) 表示某个单词或者短语在文本中出现的频率。

公式: F T ( t ) = 该 词 语 在 当 前 ⽂ 档 出 现 的 次 数 当 前 ⽂ 档 中 词 语 的 总 数 FT(t) = \frac{该词语在当前⽂档出现的次数}{当前⽂档中词语的总数} \quad FT(t)=

IDF

逆向文件频率(Inverse Document Frequency) 表示 包含某词语的文档越少,IDF值越大,则该词语的区分能力越强。

公式: I D F ( t ) = l o g e ⽂ 档 总 数 出 现 该 词 语 的 ⽂ 档 总 数 + 1 IDF(t) = log_e \frac{⽂档总数}{出现该词语的⽂档总数+1} \quad IDF(t)=loge+1
注:+1是避免分母为0。

TF-IDF = TF * IDF

TF-IDF值越大表示该特征词对这个文本的重要性越大。

TF-IDF的主要思想

理解了TF和IDF后,我们不难理解TF-IDF的主要思想:若某个单词在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为该词或者短语具有很好的类别区分能力,适合用于分类。

TF-IDF的使用

可以在sklearn中直接调用

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(ngram_range=(1, 3), max_features=3000)

在这里解释TfidfVectorizer两个重要的参数:ngram_range和max_features:

ngram_range(min, max) 是指将text分成min,min+1,min+2,…,max 个不同的词组。例子:‘nature language processing’中ngram_range(1,3)之后可得到’nature’ ‘language’ ‘processing’ ‘nature language’ ‘language processing’ 和’nature language processing’;如果是ngram_range (1,1) 则只能得到单个单词’nature’ ‘language’和’processing’。

max_features 我个人理解是选择的特征个数,max_features=3000就是选择出3000个特征。

模型调参主要调整这两个参数。

搭建TF-IDF + RidgeClassifier模型

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score

train_df = pd.read_csv('./data/train_set.csv', sep='\t', nrows=15000)
tfidf = TfidfVectorizer(ngram_range=(1,3), max_features=3000)
train_test = tfidf.fit_transform(train_df['text'])
clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])
val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))

输出结果:0.8719372173702

调参

max_features的比较
max_featuresf1_score
10000.8269726675147488
30000.8719372173702
50000.8839189242116695

要打卡了 气死了 回来再补

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值