专栏文章

如何统计词频

科技·工程参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqv8fnl
此快照首次捕获于
2025/12/04 11:17
3 个月前
此快照最后确认于
2025/12/04 11:17
3 个月前
查看原文
  • 朴素的想法
    我们可以把各种新闻中的各个词用 F=在某一篇文章的出现次数文章总词数F=\frac{在某一篇文章的出现次数}{文章总词数} 来得到一个频率,那么一个词的词频可以是
    Fi=σ(ti)σ(t)F_i=\frac{\sigma(t_i)}{\sigma( t)}
    那对于一则新闻而言,我们不妨用一个暴力的想法,现代汉语大概64000个词,把每个词在新闻中的词频都统计一遍,然后直接余弦暴算。
    但存在一些问题,如下:
    • 诸如“的”,“是”,“和”这样的虚词和“因此”,“所以”,“非常”一类的东西,对余弦的计算来说其实是一种噪声,会干扰到分类结果的准确性。怎么解决?
    • 一篇新闻里,不同的词对最终结果的影响的权重是不一样的。比如政治类新闻中,“大选”“支持率”“战争”一类的词应该比“应用”“公民”“社会”要重要一些。这样的权重又要如何分配?

  • 正好学了对数,可以讲 TFIDFTF-IDF
  • TFIDFTF-IDF 是什么
    这个缩写的全称是 TermFrequencyInverseDocumentFrequencyTerm \: Frequency - Inverse\:Document\:Frequency , 翻译过来是『单文本词频-逆文本频率指数』。
    其实没必要搞清楚这名词啥意思,直接来看咋用的就可以。

  • 如何确定一个词的权重?
    这个权重的设定应该满足这样的条件:
    • 其对新闻主题的影响越大,权重就应该越大。比如,“尹锡悦宣布韩进入戒严状态”这个词,倘若在文章中看到“戒严”,大概就知道又是韩国的事儿;而看到“状态”,还是不知道讲的是什么。所以,“戒严”的权重应该比“状态”高。
    • 各种虚词和“噪声”词的权重为零。
    显然,一个词如果在很少的文章出现,其对文章主题的把握就会比在很多文章中都出现的词更强。概括地讲,若一个词 ttDtD_t 篇文章中出现过,那么 DtD_t 越大,tt 的权重要越小,反之亦然。
    如今使用的最多的权重是 IDFIDF ,它的公式是
    w=lg(DDt)w=lg(\frac{D}{D_t})
    其中 DD 是全部文章数。
    利用 IDFIDF ,上述对于词频的计算,要更新成
    Fi=σ(ti)σ(t)lg(DDt)F_i=\frac{\sigma(t_i)}{\sigma( t)} \cdot lg(\frac{D}{D_t})
    这么做有一个很显著的好处,就是把各种“噪声词”优化掉了,同时根据对数运算的性质,越关键的词被赋予的权重越高,挺好的。

终于可以开讲新闻分类了

考虑统计一篇新闻中所有词的加权词频,然后按词典表的顺序列一个六万多维的向量。不难想象,和新闻主题相关性高的词,其加权词频会很大,向量的方向也将主要由这些参数决定。
对新闻“向量化”后,计算新闻的相似性也就成了可能。
接下来的算法可分为两种。
  • 第一种是,假定我们已经知道了一些新闻的特征向量,那对于一条要被分类的新闻 NN , 直接拿它的特征向量和标准向量比一比,并将其归到相应的类中就好。
    标准向量的获得有两种途径,第一是人工建立,但工作量极大且不准确;第二种就是自动建立(具体方法以后讲)。
  • 第二种就比较麻烦了,如果一开始没有标准参照怎么办。
    没事,前辈想到了。
    他们提出了一种基于自上而下不断合并的方式:
    • 计算所有新闻之间两两的相似性,把相似性大于一个阈值的新闻合并成一小类。这样所有新闻就被合成了一些小类。
    • 把每个小类中的新闻作为一个整体,算出小类的特征向量,再计算小类之间两两的余弦相似性,合并成大一点的小类,总数越来越小。
    • 如此迭代,直到所有新闻被归为一类。搞定。

评论

0 条评论,欢迎与作者交流。

正在加载评论...