专栏文章

余弦定理和新闻分类

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@miqvcvad
此快照首次捕获于
2025/12/04 11:21
3 个月前
此快照最后确认于
2025/12/04 11:21
3 个月前
查看原文

向量的基本知识

写在最前面
学过那啥的人应该都知道,向量是多维空间中从原点出发的有向线段。

  • 点积
    nn 维坐标系内有两个向量 a=(x1,x2,...,xn)\vec{a}=(x_1, x_2, ... , x_n) , b=(y1,y2,...,yn)\vec{b}=(y_1, y_2, ... , y_n) , 定义点积运算 <a,b><a,b>
    <a,b>=i=1nxiyi<a,b> = \sum_{i=1}^n x_iy_i
    其结果是一个标量。
    若记 a\vert a \vert 表示向量 a\vec{a} 的模长,即
    a=i=1nxi2\vert \vec{a} \vert = \sqrt{\sum_{i=1}^n x^2_i}
    那么 <a,b><a,b> 还可以由
    <a,b>=abcos(a,b) <a,b>= \vert \vec{a} \vert \cdot \vert \vec{b} \vert \cdot cos(a,b)
    来计算。

向量接近程度的度量

  • 两个向量的接近程度,可以用他们的夹角来度量。
    比如有三个向量 v1=(2.5,3.5)\vec{v_1}=(2.5,3.5) , v2=(4,4.5)\vec{v_2}=(4,4.5)v3=(6,3) \vec{v_3}=(-6,3)
    画一下就可以发现, v1\vec{v_1}v2\vec{v_2} 的夹角(通俗地说,靠近程度)远远小于它们到 v3\vec{v_3} 的夹角。于是我们说, v1\vec{v_1}v2\vec{v_2} 的相似程度高于 v1\vec{v_1}v3v_3 还有 v2\vec{v_2}v3v_3
    把二维平面的结论扩展一下,可以得到我们比较多维空间中向量相似程度的结论:
    • nn 维向量 v1=(x1,x2,...,xn),v2=(y1,y2,...,yn)\vec{v_1}=(x_1, x_2, ... , x_n), \vec{v_2}=(y_1, y_2, ... , y_n) ,若它们的夹角越小,我们就说 v1\vec{v_1} v2\vec{v_2} 越接近。

余弦

  • 必修二里面讲了,假定三角形三边长为 a,b,ca, b, c ,其对角为 A,B,CA, B,C ,则有
cosA=b2+c2a22bc cosA=\frac{ b^2+c^2- a^2}{2bc}
  • 如果将三角形两边 b,cb,c 看做以 AA 为起点的向量,那么上式等价于
    cosA=<b,c>bc cosA=\frac{<b,c>}{\vert b \vert \cdot \vert c \vert}
    三角形是平面图形,而在 nn 维空间中的余弦定理还长这样
    cosA=<b,c>bccosA=\frac{<b,c>}{\vert b \vert \cdot \vert c \vert}
    代入上面对 nn 维向量的描述,我们可以得到
    • nn 维向量 v1=(x1,x2,...,xn),v2=(y1,y2,...,yn)\vec{v_1}=(x_1, x_2, ... , x_n), \vec{v_2}=(y_1, y_2, ... , y_n) , 它们的夹角 θ\theta 的余弦值可以如此计算
    cos θ =i=1nxiyii=1nxi2i=1nyi2cos \ { }\theta \ { }= \frac{\sum_{i=1}^n x_iy_i}{ \sqrt{\sum_{i=1}^n x^2_i } \cdot \sqrt{\sum_{i=1}^n y^2_i }}
    大致如此。

    新闻特征向量的建立

为了做这件事,我们要弄清一个现实:
  • 计算机这玩意唯一能做的事是超高速计算,他读不懂我们的文字,不能像我们一样对新闻进行文学分析,更不能弄明白新闻在讲什么。

那我们要怎么办呢。。。

计算机只能“算”新闻而没法“读”新闻,所以要先把一篇篇“新闻”量化成计算机看得懂的『数据』,再用我们提到的算法来搞清楚他们的相似度如何。
于是问题的关键变成了怎么用一组数据描述一则新闻。
先看看新闻这种文学体裁有什么特点。
  • 这东西主体性超级强,不同的新闻主题对应不同的信息。
  • 描述信息需要『词』,不同主题对应不同领域的词。
这么来看,不同主题的新闻用词应该不太一样。
比如说,题为『黑神话入选时代杂志最佳游戏』(这事是真的) 的新闻中,出现『GDP』、『民意』、『戒严』、『在野党』是几乎不可能的,而题为『尹锡悦支持率降至13%』(这也是真的2333) 的新闻,出现『中华文化』、『西游记』、『文化输出』、『国产3A』也很不可能。
那就好办了。
一个最朴素的想法是把新闻中每一个“词”的词频统计出来,然后每个词对应一个数,所有数用一个向量打包,就可以算了。
事实上呢?前辈们确实是这么办的。很酷。

怎么统计词频

  • 朴素的想法
    我们可以把各种新闻中的各个词用 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 条评论,欢迎与作者交流。

正在加载评论...