夜雨聆风学习资料网

ARTICLE · 1205554

【计算相似度工具】AI 是怎么“看懂“文字的?

【计算相似度工具】AI 是怎么“看懂“文字的?

计算相似度,把 AI 的底层逻辑装进脑子

配套工具:文脉 · 相似度雷达(双击 启动工具.bat 即可打开) 学完你会有两个收获:① 真正搞懂 AI 是怎么"看懂"文字的;


路线图

这五个格子,就是所有 AI 语义应用的骨架。ChatGPT 的知识库问答、推荐系统、语义搜索,无非是把中间那步换成更聪明的模型,骨架一模一样。

第 1 课 AI 不认识字,它只认识数字

一句话结论:文字必须先变成数字,计算机才能"算"它。 你输入「我要一份三年经验的新媒体运营」,AI 内部看到的其实是:

[0.02, 0.00, 0.71, 0.13, 0.00, 0.00, 0.42, ...]

这串数字叫向量(Vector)。为什么必须这样? 因为计算机只会加减乘除,不会算"像不像"。只有把文字变成坐标,才能比距离、比方向。一个好用的类比——把每个词都放到一张巨大的城市地图上:

  • 「运营」「新媒体」「抖音」挤在同一个街区
  • 「财务」「报税」「总账」挤在另一个街区
  • 一段文字的位置,就是这串数字

💡 直觉检验:如果两段文字在地图上离得近,它们说的就是同一件事。这就是本工具在做的事。


第 2 课 怎么把字变成数字:TF-IDF

一句话结论:数词频,但稀有的词更值钱。

第一步:分词

中文没有空格,机器得先切开。这一步叫分词。

原文:我想做自媒体赚钱分词:我 / 想 / 做 / 自媒体 / 赚钱

工具用的是业界最常用的 jieba。

第二步:去停用词

「的、了、是、我、在」这些词出现最多,却完全没有信息量。必须扔掉。

去掉后:做 / 自媒体 / 赚钱

第三步:算权重(这就是 TF-IDF)

最朴素的想法:数出现次数(TF)。 但立刻出问题——「的」出现次数最多,难道它最重要?显然不是。于是有了 IDF(逆文档频率):一个词在越多文章里出现,它越不值钱。

词
出现在多少篇文章里
权重
直觉
的
几乎所有
极低
谁都在用,没区分度
运营
一部分
中等
有点用
私域转化
很少
很高
一说就知道在讲行话
公式(不用背,懂意思就行):
TF-IDF = 词频(TF) × 逆文档频率(IDF)IDF = log(总文档数 / 含该词的文档数)

第四步:编码成向量

把留下来词的权重,按词表顺序排成一条数字,向量就诞生了。

🎯 这一步是本工具的引擎核心,代码在 engine.py 的 _build_matrix() 里,不到 20 行。


第 3 课 怎么判断像不像:余弦相似度

一句话结论:不比长度,比方向。

为什么不能比长度?

一篇 500 字的稿子和一篇 50 字的稿子,哪怕讲的是同一件事,向量长度也差 10 倍。比长度必然误判。

正确做法:算两个向量的夹角

                 A · B  cos θ = ──────────────────           |A| × |B|
  • 分子:对应位置相乘再求和 → 重合越多越大
  • 分母:各自长度 → 做归一化,让长短文公平比较

分数怎么读

余弦值
夹角
含义
1.0
0°
完全一致
0.7
约 45°
主题接近,部分内容重合
0.3
约 72°
只有零星用词重叠
0.0
90°
毫不相干
工具把 0~1 乘 100,变成你看到的 0~100 分。

🎯 对应代码:engine.py 里的 cosine_similarity()。


第 4 课 为什么光看余弦不够:三指标加权

这一课是本工具最值钱的工程经验,也是我们自测时真实踩到的坑。

踩坑现场

拿一段稿子和它的"逐句改写洗稿版"比对:

指标
数值
说明
单句最高相似
100%
有一句只改了两个字,等于照搬
关键词重合
53.8%
讲的完全是同一件事
整篇余弦
69.8
判成"中度相似"
问题来了
:这明明就是洗稿,余弦却说"中度"。如果直接拿这个卖钱,客户会说你不准。

原因

整篇余弦会被无关段落稀释。就像一杯浓咖啡兑了半杯水,浓度就下来了。短文本、结构松散的文本尤其明显。

解法:三指标加权

综合分 = 0.45 × 整篇余弦       ← 整体方向像不像       + 0.25 × 关键词重合率   ← 是不是在讲同一件事       + 0.30 × 单句最高相似   ← 有没有成段照搬(查重最关键)

调整后同一组数据变成 74.9 分 → 高度相似 ✅ 判断正确。

三个原始分全部显示在界面上

这不是锦上添花,而是商业必需:

  • 客户看到"单句 100%",立刻明白问题出在哪一句
  • 你不需要让客户"相信 AI",只需要让客户"看懂数字"

🎯 对应代码:engine.py 顶部的 W_COSINE / W_KEYWORD / W_SENTENCE 三个系数。改这三个数,就能调工具的敏感度。


第 5 课 从这一个小点,看懂整个 AI 大世界

一句话结论:你学的不是一个小技巧,而是一块通用积木。

你听过的概念
本质是什么
和本工具的关系
ChatGPT 的 Embedding 接口
把文字变成向量
同一个思路,模型更聪明
知识库问答 RAG
问题变向量,去库里找最近的段落
就是"批量排行"的变体
推荐系统
你喜欢的东西变向量,找方向相近的推给你
同一个几何直觉
语义搜索
不靠关键词,靠向量距离
同一套数学
简历筛选 / 内容查重
本工具
已落地

一个必须记住的关键差别(面试常考)

TF-IDF(本工具)
Embedding 模型(如 BERT)
看什么
字面上有哪些词
语义
同义词
不懂
(「运营」和「操盘」算两个词)
懂
速度
毫秒级
慢一些
硬件
普通电脑就行
最好有 GPU
可解释性
每个分数都能追溯
黑箱
联网
完全离线
通常需要模型文件
所以本工具的定位非常清楚:不需要联网、不需要显卡、每个分数都能解释,搞定 90% 的日常文案查重与简历初筛,够用且便宜。

动手练习(做一遍胜过看十遍)

  1. 体会基础分
    :打开「① 双文比对」,点「开始比对」,记下分数。
  2. 体会稀释效应
    :把 A 框里第三段删掉,再比对一次。分数怎么变?为什么?
  3. 体会关键词威力
    :去「② 批量排行」,点「载入示例」,记下运营简历的分数;然后把基准里的「剪映」删掉再排行,分数掉了多少?
  4. 体会单句定位
    :看右下角的句子对照表,找那句 100% 的——它是不是只改了两个词? 做完这四步,你就真正理解了这个工具,也就理解了 AI 语义计算的底层。

附:工具能做的三件事

页面
能干什么
典型场景
① 双文比对
两段文字有多像,逐句给证据
发文前查重、简历对 JD
② 批量排行
一份基准筛一堆候选,自动排名
100 份简历排优先级
③ 原理速览
工具内复习本手册
忘了随时看
④ 变现指南
四条赚钱路子 + 定价话术
想靠它赚钱时

本手册与「文脉 · 相似度雷达」配套使用。全部计算在本机完成,原文不会上传任何服务器。

文脉 · 相似度雷达 v1.0

一个完全离线、不上传原文的中文文本相似度工具。 两个核心用途:发文前查重、简历对岗位 JD 打分。

一、怎么启动

方式一(推荐):双击启动

双击文件夹里的 启动工具.bat,等两三秒窗就出来了。

方式二:命令行

cd 本文件夹所在路径python app.py

如果报缺少依赖

打开命令行执行一次即可:

pip install customtkinter scikit-learn jieba python-docx

本机环境已具备以上全部依赖,正常情况下无需安装。


二、四个页面怎么用

① 双文比对 —— 最常用

  1. 左边框贴「原文」(或岗位 JD),右边框贴「待测文本」(或简历)
  2. 选比对模式:查重 / 简历JD / 通用
  3. 点「开始比对」
  4. 看三个地方: 
    • 左边大数字
      :综合相似度(0~100)
    • 左边三行小指标
      :整篇余弦 / 关键词重合 / 单句最高
    • 右边表格
      :哪几句高度雷同,逐句对照
  5. 点「导出报告」,得到一份可直接发给客户或领导的 Markdown 报告分数怎么读(查重模式): | 分数 | 判定 | 建议 | |—|—|—| | ≥ 85 | 极高相似 | 有被判搬运的风险,重写 | | 70~85 | 高度相似 | 换结构、换论据、换表达 | | 50~70 | 中度相似 | 同题不同稿,把自家案例写足 | | < 50 | 差异明显 | 可放心发布 |

注意:单句最高相似 ≥ 90% 时,即使总分不高也要警惕——那说明有整句照搬。

② 批量排行 —— 效率神器

  1. 左边贴基准文本(如岗位 JD)
  2. 右边攒候选:点「添加候选」手输,或「导入文件」批量导入(支持 txt / md / docx,可多选)
  3. 点「开始排行」,自动按匹配度排序,第一名高亮
  4. 点「导出排行榜」得到表格典型用法:把一份 JD 放左边,50 份简历导入右边 → 30 秒排出优先级。

③ 原理速览

工具内复习五节课内容,不用翻手册。

④ 变现指南

四条已梳理好的赚钱路子 + 定价话术 + 启动节奏。这一页建议认真看一遍。

三、分数背后的算法(一句话版)

文字 → 分词去停用词 → TF-IDF 加权 → 向量 → 算夹角余弦 → 三指标加权汇总 详细讲解见同目录的 学习手册_五节课学AI.md,五节课从零讲到能看懂 ChatGPT 的原理。 三个原始指标我们全部保留显示,不做黑箱判断——这是本工具和在线 AI 工具最大的区别之一。

四、常见问题

Q:我的文稿会被上传吗? 不会。全程本机计算,没有一行联网代码。断网也能用。Q:能处理多长的文本? 单篇几千字没问题。批量排行建议单批不超过 200 个候选。Q:为什么同义词它认不出来? 这是 TF-IDF 的固有局限(它只看字面词)。需要懂语义时,业界做法是换成 Embedding 模型,但对 90% 的查重场景来说,TF-IDF 更快、更便宜、更可解释。Q:分数和别的平台不一样,以哪个为准? 不同算法的分数本来就不能直接比。在同一套算法下比较才有意义——比如同一份 JD 筛多份简历,排序是可靠的。Q:窗口显示不全 / 太大? 程序已自动适配屏幕缩放。若仍有问题,手动拖动窗口边缘调整即可。

五、文件清单

文件
作用
启动工具.bat
双击启动
app.py
主程序(窗口 + 导航)
engine.py算法引擎
(核心,可单独复用)
page_compare.py
双文比对页
page_batch.py
批量排行页
page_info.py
原理速览 + 变现指南页
ui_kit.py
界面公共样式
examples.py
内置示例语料
selftest.py
引擎自测(验证算法正确性)
smoke_test.py
界面自测(验证四个页面可用)
学习手册_五节课学AI.md
五节课讲义
使用说明.md
本文件
样例报告_洗稿检测.md
报告样例,可给客户看

想改算法敏感度?打开 engine.py,改顶部三个系数 W_COSINE / W_KEYWORD / W_SENTENCE 即可。


六、二次开发提示

engine.py 是纯算法模块,不含任何界面代码,可以直接:

from engine import similarity, batch_rankres = similarity("文本A", "文本B")print(res.score, res.level)          # 73.4  高度相似print(res.cosine, res.kw_overlap, res.sent_max)   # 三个原始分print(res.as_dict())                 # 转成字典,方便存库/传接口

所以它既能做桌面工具,也能挂到 Flask/FastAPI 后端做成网页版或小程序后端。

相关学习资料