关于nlp:关键词提取TFIDF一

33次阅读

共计 2286 个字符,预计需要花费 6 分钟才能阅读完成。

系列文章

✓ 词向量
✗Adam,sgd
✗ 梯度隐没和梯度爆炸
✗ 初始化的办法
✗ 过拟合 & 欠拟合
✗ 评估 & 损失函数的阐明
✗ 深度学习模型及罕用任务说明
✗ RNN 的工夫复杂度
✗ neo4j 图数据库

分词、词向量

TfidfVectorizer

根本介绍

  • TF-IDF 是一种统计办法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要水平。字词的重要性随着它在文件中呈现的次数成正比减少,但同时会随着它在语料库中呈现的频率成反比降落。
  • 比方:为了取得一篇文档的关键词,咱们能够如下进行
  • 对给定文档,咱们进行 ” 词频 ”(Term Frequency,缩写为 TF)
  • 给每个词计算一个权重,这个权重叫做 ” 逆文档频率 ”(Inverse Document Frequency,缩写为 IDF),它的大小与一个词的常见水平成反比。

算法明细

  • 根本步骤

    • 1、计算词频。思考到文章有长短之分,为了便于不同文章的比拟,进行 ” 词频 ” 标准化。

      词频:TF = 文章中某词呈现的频数

      词频标准化:

    • 2、计算逆文档频率。如果一个词越常见,那么分母就越大,逆文档频率就越小越靠近 0。

      逆文档频率:
      其中,语料库(corpus),是用来模仿语言的应用环境。

    • 3、计算 TF-IDF。能够看到,TF-IDF 与一个词在文档中的呈现次数成正比,与该词在整个语言中的呈现次数成反比
      $TF-IDF = TF * IDF$

算法优缺点

  • 长处:

    • TF-IDF 算法的长处是简略疾速,后果比拟符合实际状况。
  • 毛病

    • 单纯以 ” 词频 ” 掂量一个词的重要性,不够全面,有时重要的词可能呈现次数并不多。
    • 这种算法无奈体现词的地位信息,呈现地位靠前的词与呈现地位靠后的词,都被视为重要性雷同,这是不正确的。
    • 对于文档中呈现次数较少的重要人名、地名信息提取成果不佳

利用场景

  • 利用场景简介

    • 1)搜索引擎;
    • 2)关键词提取;
    • 3)文本相似性;
    • 4)文本摘要

可执行实例

# python:3.8
# sklearn:0.23.1
# 1、CountVectorizer 的作用是将文本文档转换为计数的稠密矩阵
from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
# 查看每个单词的地位
print(vectorizer.get_feature_names())
#['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
# 查看后果
print(X.toarray())
# [[0 1 1 1 0 0 1 0 1]
#  [0 2 0 1 0 1 1 0 1]
#  [1 0 0 1 1 0 1 1 1]
#  [0 1 1 1 0 0 1 0 1]]

# 2、TfidfTransformer:应用计算 tf-idf
from sklearn.feature_extraction.text import TfidfTransformer
transform = TfidfTransformer()    
Y = transform.fit_transform(X)  
print(Y.toarray())                # 输入 tfidf 的值
# [[0.         0.46979139 0.58028582 0.38408524 0.         0. 0.38408524 0.         0.38408524]
#  [0.         0.6876236  0.         0.28108867 0.         0.53864762 0.28108867 0.         0.28108867]
#  [0.51184851 0.         0.         0.26710379 0.51184851 0. 0.26710379 0.51184851 0.26710379]
#  [0.         0.46979139 0.58028582 0.38408524 0.         0. 0.38408524 0.         0.38408524]]

# 3、TfidfVectorizer:TfidfVectorizer 相当于 CountVectorizer 和 TfidfTransformer 的联合应用
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vectorizer = TfidfVectorizer() #构建一个计算词频(TF)X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
# ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
print(X.shape)
# (4, 9)

参数项阐明

  • CountVectorizer

  • TfidfTransformer

  • 从函数上来看,咱也能够发现有 TfidfVectorizer=CountVectorizer + TfidfTransformer
  • TfidfVectorizer

正文完
 0