> For the complete documentation index, see [llms.txt](https://chenjunren.gitbook.io/read-the-beauty-of-mathematics/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chenjunren.gitbook.io/read-the-beauty-of-mathematics/di-14-zhang-yu-xian-ding-li-he-xin-wen-fen-lei.md).

# 第 14 章 余弦定理和新闻分类

对于一篇新闻中所有的实词，计算出它们的 TF-IDF 值，没有出现的词的 TF-IDF 为零。把这些词按照对应的实词在词汇表的位置依次排列，就得到一个多维向量，即该新闻的**特征向量**，向量中每一个维度的大小代表每个词对这篇新闻主题的贡献度。

同一类新闻一定是某些主题词用得较多，即它们的特征向量在某几个维度上的值都比较大。如果不属于同一类，则较大的特征向量应该没什么交集。由于每篇新闻的文本长度不同，所以特征向量各个维度的数值也不同。单纯比较各个维度的大小没有太大意义。但是向量的方向却有很大意义。如果两个向量的方向一字，说明对应的新闻用词的比例也基本一致。因此可以**利用余弦定理计算两个向量的夹角来判断对应新闻主题的接近程度**。

![三角形A角的余弦（14.1）](https://www.zhihu.com/equation?tex=%5Ccos%20%5Cleft\(%20A%20%5Cright\)%20%3D%5Cfrac%7Bb%5E2%2Bc%5E2-a%5E2%7D%7B2bc%7D)

若将三角形的两边![b](https://www.zhihu.com/equation?tex=b)和![c](https://www.zhihu.com/equation?tex=c)看成是两个以![A](https://www.zhihu.com/equation?tex=A)为起点的向量，则上述公式等价于：

![（14.2）](https://www.zhihu.com/equation?tex=%5Ccos%20%5Cleft\(%20A%20%5Cright\)%20%3D%5Cfrac%7B%3Cb%2C%5C%20c%3E%7D%7B%7Cb%7C%5Ccdot%20%7Cc%7C%7D)

## 两种计算方法

* 第一种假设我们**已知一些新闻类别的特征向量**，计算出要被分类的新闻和各类新闻特征向量的余弦相似性，余弦越小，相似度越高。
* 第二种假设我们**不知道这些新闻类别的特征向量**，则我们要计算出所有新闻两两之间的余弦相似性，把相似性大于一个阈值的新闻合并成一个小类，然后把每个小类中的所有新闻作为一个整体，并计算出小类的特征向量，再计算出所有小类之间两两的余弦相似性，然后把小类合并成大一点的小类，以此类推，直到小类之间的余弦相似度很小时，就可以停止迭代了。

## 计算向量余弦的技巧

计算 N 篇新闻之间的两两相关性，一次迭代计算复杂度为 N 方，计算量较大。简化方法如下：首先，分母（向量的长度）不需要重复计算，第一次计算余弦以后，长度可以存起来。其次，只考虑向量中的非零元素即可，这样一来复杂度取决于两个向量中非零元素个数的最小值。第三，删除虚词，如“因为、是、的、如果”等等，既提高了计算速度，又减少了干扰。

标题中的词对主题的贡献要大于正文中的；出现在文章首尾中的词比中间部分的词重要。所以，可以对重要位置的词进行额外的加权，以提高文本分类的准确性。

## 小结

求特征向量时，要先计算TF-IDF（即每篇文章中关键词的词频 乘以 关键词的权重。权重与关键词在语料库文章中的集中/分散程度，以及关键字在文章中的位置有关。）。计算余弦相似度时，要注意矩阵存储大小及计算复杂度。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://chenjunren.gitbook.io/read-the-beauty-of-mathematics/di-14-zhang-yu-xian-ding-li-he-xin-wen-fen-lei.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
