特征加权之TFIDF

小白,因为爱好从物理转自然语言处理方向。喜欢研究新知识新文章,欢迎大家一起交流!个人网站:https://mokundong.cn/

0x00 背景

TF-IDF是信息检索和文本挖掘中常用的特征加权技术,同样常用于文本主题提取和分词加权等场景。

TF-IDF是一种完全基于统计的方法,其核心思想是假设字词的重要性与其在某篇文章中出现的比例成正比,与其在其他文章中出现的比例成反比。

0x01 TF-IDF

怎么理解呢?某个词在一篇文章中反复出现有两种情况,即这个词是关键词或者常用词(可理解为停用词)。要确定这个词的最终属性则需要考虑这个词在其他文章中出现的频率,若其他文章出现频率高则可以判断为常用词,出现频率低则可以确定为该词所属文章的主题词。

2.1 TF

TF (Trem Frequency) 表示词频,即一个词在文章中出现的次数。实际应用中不同长度的文章中指定词出现的次数可能与文档长度有正相关,因此我们需要对词频进行归一化处理,通常用次数除以文章的总词数:

公式中分子 表示词语在文本中的频数,分母表示文档中所有词汇量总和。

即是说:

给定词在当前文章出现的次数当前文章中的总词量

在应用中一般是在分词的时候在线计算。

2.2 IDF

IDF(Inverse Document Frequency)表示逆文档率,定义为文件总数除以包含给定词出现的文档数。

公式中表示语料库的文档总数,分母表示语料库中包含文档中词语的文档数,实际应用中为了避免分母为,因此分母一般采用。

即是说:

语料库文档总数包含词的文档数

在应用中一般是采用业务相关语料离线计算。

2.3、TF-IDF

定义为:

以上就是TF-IDF算法的全部理论。

2.4、实现

目前很多分词框架和机器学习算法包均集成了TF-IDF算法,以下做一个简要的罗列:

2.4.1 结巴分词(Python)

import jieba.analysestr = "自然语言是人类智慧的结晶,自然语言处理是人工智能中最为困难的问题之一,而对自然语言处理的研究也是充满魅力和挑战的。"jieba.analyse.extract_tags(s, topK=10, withWeight=True, allowPOS=())

越是重要的词语所给予的权重就越大。

2.4.2 Scikit-learn

Scikit-learn提供了自己训练的模型的接口

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2019/10/30 09:48# @Author  : mokundong

from sklearn.feature_extraction.text import CountVectorizerfrom sklearn.feature_extraction.text import TfidfTransformer

x_train = ['这是 第一 篇 文章 ,','这 篇 文章 是 第二 篇 文章 。','这是 第三 篇 文章 。'           ]x_test = ['这是 第几 篇 文章 ?']CV = CountVectorizer(max_features=10)transformer = TfidfTransformer()tf_idf = transformer.fit_transform(CV.fit_transform(x_train))x_train_weight = tf_idf.toarray()tf_idf = transformer.transform(CV.transform(x_test))x_test_weight = tf_idf.toarray()print(x_test_weight)

'''output:[[0.61335554 0.         0.         0.         0.78980693]]'''

2.4.3 笔者在项目中,一般采取的方法是:

a、首先用相关的文本训练IDF值保存文件;

b、在项目中首先初始化文件到内存,保存为字典便于快速查询;

c、新文档读入后实时计算TF值并查询相关IDF值计算出TF-IDF值。

0xFF 总结

本质上是一种试图抑制噪声的加权,单纯的以为文本频率小的单词就越重要,文本频率大的单词就越无用。这对于大部分文本信息,并不是完全正确的。 的简单结构并不能使提取的关键词,十分有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能。尤其是在同类语料库中,这一方法有很大弊端,往往一些同类文本的关键词被掩盖。例如:语料库  中教育类文章偏多,而文本 是一篇属于教育类的文章,那么教育类相关的词语的值将会偏小,使提取文本关键词的召回率更低。因此才会有词语逆频率方式计算加权算法  (Term Frequency-Inverse Word Frequency),关于将会在下篇文章讲解。

并且,笔者在工作实践中发现针对于短句应用提取关键词时,由于短句中每个词的值往往是相同的,鉴于上述天然的弱点,此算法应用于短句分析也显得不可靠,针对短句这种情况,笔者的思路是结合词性和黑白名单以及搜索点击数据和业务打tag等,需要比较综合的方式来解决短句问题。

参考文献

  • http://dx.doi.org/10.12677/csa.2013.31012

tfidf关键词提取_特征加权之TFIDF相关推荐

  1. tfidf关键词提取_基于TextRank提取关键词、关键短语、摘要,文章排序

    之前使用TFIDF做过行业关键词提取,TFIDF仅从词的统计信息出发,而没有充分考虑词之间的语义信息.TextRank考虑到了相邻词的语义关系,是一种基于图排序的关键词提取算法. TextRank的提 ...

  2. tfidf关键词提取_基于深度学习的个性化商品评论标签提取

    商品评论标签提取作为商品评论中的一个比较有意思的问题.评论标签提取的主要任务是从评论中了解到用户对产品的哪些功能.属性进行了怎样的评论,并抽取成简短有效的信息. 关键词提取Vs评论标签提取 商品标签提 ...

  3. 自然语言处理TF-IDF关键词提取算法

    1.关键词提取简介 关键词是指能反映文本主题或者主要内容的词语.关键词提取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来,是NLP领域的一个重要的子任务.在信息检索中,准确的关键词提取可以大幅提 ...

  4. 【NLP】文本关键词提取的两种方法-TFIDF和TextRank

    背景 前两天看到论文<Chinese Poetry Generation with Planning based Neural Network>中使用TextRank进行关键词提取.在阅读 ...

  5. java 文本分析 关键词提取_文本关键词提取算法总结

    1.TF-IDF 昨天给大家演示简单的文本聚类,但要给每个聚类再提取一两个关键词用于表示该聚类.我们还是用TFIDF算法来做,因为这是比较简单的提取特征算法,不过这里的TF是指某词在本聚类内所有文章的 ...

  6. python中文模糊关键词提取_用Python给你的文本提取关键词

     对代码.编程感兴趣的可以关注「老K玩代码」公众号和我交流!分享代码.经验.项目和资讯 用Python给你的文本提取关键词 关键词提取是自然语言处理中常见的业务模块; 要实现关键词提取,Python ...

  7. python中文模糊关键词提取_如何用Python提取中文关键词?

    本文一步步为你演示,如何用Python从中文文本中提取关键词.如果你需要对长文"观其大略",不妨尝试一下. 需求 好友最近对自然语言处理感兴趣,因为他打算利用自动化方法从长文本里提 ...

  8. java 文本分析 关键词提取_从文本中提取关键字

    就在前几天的任务中用到了从文本描述中提取关键字的操作,特意从网上找到了一些提取关键字的方法. 总结如下:需要引入jieba这个库文件 基于TF-IDF算法进行关键词提取 importjieba.ana ...

  9. 基于百度api的违规文本识别 分词 tfidf关键词提取 违规文本检测

    # encoding:utf-8#导入库 import requests import pandas as pd import math import re import jieba# client_ ...

  10. python 英文关键词提取_如何提取文章的关键词(Python版)

    项目需求: 我们采集来的文章没有关键词,在发布的时候无法设定标签,我们通过代码自动提取出文章的关键词,达到对数据加工的目的. 测试环境: Anaconda Python3.5 Win7 ultmate ...

最新文章

  1. 剑指offer-旋转数组的最小数字
  2. 用CSS伪元素制作箭头
  3. 【tomcat】手动部署动态JavaWeb项目到tomcat
  4. 已知三角形三边长怎么求面积_已知三角形三边求面积的公式——海伦公式
  5. 安装完成后在命令行运行bash时报错0x80070057
  6. 2021-5-18大搜车
  7. java opencv安装路径_Java搭建opencv开发环境
  8. ExtJs 入门 [窗体:Window组件]
  9. CodeFirst 表之间的关联
  10. mybatis多对一,一对一,多对多resultMap映射,pojo映射,传参集合,封装的对象传参
  11. .Net中的Placeholder控件
  12. webpack配置报错WARNING in DefinePlugin Conflicting values for ‘process.env.NODE_ENV‘
  13. 常用的3款光学仿真软件分析---来源网络
  14. 清澄A1223. 画圈圈(范浩强)
  15. 一些著名的软件都用什么语言编写?程序员都熟知这些软件!
  16. 浅析超启发式算法(hyper heuristic)
  17. windows10系统-11-高效软件
  18. 项目部署uwsgi +Nginx
  19. JavaScript,jQuery,Tomcat,Http,Servlet
  20. 网络舆情分析系统的研究与设计

热门文章

  1. ps抠图神器:Topaz ReMask 5 for Mac
  2. dos下\与/有什么区别
  3. 动易html在线编辑器,动易CMS静态页调用FCK编辑器的代码
  4. 【玩转嵌入式屏幕显示】(六)ST7789 SPI LCD硬件垂直滚动功能的使用
  5. linux查看录音驱动程序,Linux 下查看麦克风或音频采集设备
  6. html边框缩短,有什么办法css border缩短
  7. 省份及对应的英文名称
  8. 选择Spring集成好的Spring Cloud Zuul方便更快
  9. STAMP:扩增子、宏基因组统计分析神器(中文帮助文档)
  10. 产品经理如何更优商业思维