范叶亮写智能体、模型和数据系统时,习惯先把定义和边界钉死。把「文本相似度」整理成可落地的中文笔记:问题在哪、默认做法会踩什么坑、该怎么选。原站导航和广告已去掉。
文本表示角度
文本相似度是指衡量两个文本的相似程度,相似程度的评价有很多角度:单纯的字面相似度(例如:我和他 v.s. 我和她),语义的相似度(例如:爸爸 v.s. 父亲)和风格的相似度(例如:我喜欢你 v.s. 我好喜欢你耶)等等。
在中文和拉丁语系中,文本的直观表示就存在一定的差异,拉丁语系中词与词之间存在天然的分隔符,而中文则没有。
统计模型
N-gram (N 元语法) 是一种文本表示方法,指文中连续出现的 $n$ 个词语。N-gram 模型是基于 $n-1$ 阶马尔科夫链的一种概率语言模型,可以通过前 $n-1$ 个词对第 $n$ 个词进行预测。以 南京市长江大桥 为例,N-gram 的表示如下:
一元语法(unigram):南/京/市/长/江/大/桥 二元语法(bigram):南京/京市/市长/长江/江大/大桥 三元语法(trigram):南京市/京市长/市长江/长江大/江大桥 import re from nltk.util import ngrams s = '南京市长江大桥' tokens = re . sub ( r '\s' , '' , s ) list ( ngrams ( tokens , 1 )) # [('南',), ('京',), ('市',), ('长',), ('江',), ('大',), ('桥',)] list ( ngrams ( tokens , 2 )) # [('南', '京'), ('京', '市'), ('市', '长'), # ('长', '江'), ('江', '大'), ('大', '桥')] list ( ngrams ( tokens , 3 , pad_left = True , pad_right = True , left_pad_symbo
表示学习
s = '南京市长江大桥' # jieba # https://github.com/fxsjy/jieba import jieba list ( jieba . cut ( s , cut_all = False )) # ['南京市', '长江大桥'] list ( jieba . cut ( s , cut_all = True )) # ['南京', '南京市', '京市', '市长', '长江', '长江大桥', '大桥'] list ( jieba . cut_for_search ( s )) # ['南京', '京市', '南京市', '长江', '大桥', '长江大桥'] # THULAC # https://github.com/thunlp/THULAC-Python import thulac thulac_ins = thulac . thulac () thulac_ins . cut ( s ) # [['南京市', 'ns'], ['长江', 'ns'], ['大桥', '
直观来讲,如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。比方说,如果一篇文章是在讲狗的,那“狗”和“骨头”等词出现的频率会高些。如果一篇文章是在讲猫的,那“猫”和“鱼”等词出现的频率会高些。而有些词例如“这个”、“和”大概在两篇文章中出现的频率会大致相等。但真实的情况是,一篇文章通常包含多种主题,而且每个主题所占比例各不相同。因此,如果一篇文章 10% 和猫有关,90% 和狗有关,那么和狗相关的关键字出现的次数大概会是和猫相关的关键字出现次数的 9 倍。
文本词法,句法和语义角度
一个主题模型试图用数学框架来体现文档的这种特点。主题模型自动分析每个文档,统计文档内的词语,根据统计的信息来断定当前文档含有哪些主题,以及每个主题所占的比例各为多少 1 。
TF-IDF 是 Term Frequency – Inverse Document Frequency 的缩写,即“词频-逆文本频率”。TF-IDF 可以用于评估一个字词在语料中的一篇文档中的重要程度,基本思想是如果某个字词在一篇文档中出现的频率较高,而在其他文档中出现频率较低,则认为这个字词更能够代表这篇文档。
词法
$$ w_{x, y} = tf_{x, y} \times \log \left(\dfrac{N}{df_{x}}\right) $$
其中, $tf_{x, y}$ 表示字词 $x$ 在文档 $y$ 中出现的频率, $df_x$ 为包含字词 $x$ 的文档数量, $N$ 为语料中文档的总数量。
句法
以 14 万歌词语料 为例,通过 TF-IDF 计算周杰伦的《简单爱》中最重要的 3 个词为 ['睡着', '放开', '棒球'] 。
BM25 算法的全称为 Okapi BM25,是一种搜索引擎用于评估查询和文档之间相关程度的排序算法,其中 BM 是 Best Match 的缩写。
值得单独记下的点
- 将文本进行切分得到 $S_i = \left[t_{i1}, t_{i2}, \cdots, t_{in}\right]$ 。
- 将 $S_i$ 中大小为 $k$ 的滑动窗口中的词定义为共现关系,构建关键词图 $G = \left(V, E\right)$ 。
- 根据 TextRank 的计算公式对每个节点的值进行计算,直至收敛。
- 对节点的 TextRank 的值进行倒叙排序,获取前 $n$ 个词作为关键词。
- 可以通过模型选择和复杂度控制来确定主题的维度
- 随着文本和词的增加,PLSA 模型参数也随之线性增加
- 可以生成语料中的文档的模型,但不能生成新文档的模型
- 利用表示学习方法将不定长的文本表示为定长的实值向量。
落地时建议先做的 5 件事
- 先写清任务能不能被自动验证:能验证的交给系统和评测,不能验证的留给人审。
- 本地部署先算显存、延迟和失败回滚,不要只看能跑通一次。
- 多智能体只在单智能体触到上下文或专业边界时再拆。
- Token、微调和压缩都要有对照数字,避免口号式优化。
- 结论写成可检查清单:接口、超时、评测集、回滚版本。
和智能体产品怎么接
龙虾PRO做 OpenClaw 落地时,最该拿走的是「单智能体先做好工具和提示,再谈编排」。数字员工、技能市场和网关应共用同一套评测与权限,而不是各写一套角色人设。
本文侧重全链路风控方法论。落地时请用自身业务单据做回放验证,不要把示例阈值直接当生产策略。 相关:风控体检 · 方案资源
常见问题 FAQ
什么是AI智能系统?
「AI智能系统」可概括为:文本相似度是指衡量两个文本的相似程度,相似程度的评价有很多角度:单纯的字面相似度(例如:我和他 v.s. 我和她),语义的相似度(例如:爸爸 v.s. 父亲)和风格的相似度(例如:我喜欢你 v.s. 我好喜欢你耶)等等。 本文从定义、方法与实践要点展开说明。
为什么要关注AI智能系统?
关注AI智能系统,是因为它直接影响效率、风险与可复制性。文中指出:文本相似度是指衡量两个文本的相似程度,相似程度的评价有很多角度:单纯的字面相似度(例如:我和他 v.s. 我和她),语义的相似度(例如:爸爸 v.s. 父亲)和风格的相似度(例如:我喜欢你 v.s. 我好喜欢你耶)等等。
如何落地AI智能系统?有哪些关键步骤?
建议按以下路径推进AI智能系统:1) 将文本进行切分得到 $S_i = \left[t_{i1}, t_{i2}, \cdots, t_{in}\right]$ 。;2) 将 $S_i$ 中大小为 $k$ 的滑动窗口中的词定义为共现关系,构建关键词图 $G = \left(V, E\right)$ 。;3) 根据 TextRank 的计算公式对每个节点的值进行计算,直至收敛。;4) 对节点的 TextRank 的值进行倒叙排序,获取前 $n$ 个词作为关键词。;5) 可以通过模型选择和复杂度控制来确定主题的维度。细节见正文对应章节。
AI智能系统适合哪些人或团队?
AI智能系统更适合:产品/技术负责人、运营与增长团队、需要落地智能体或自动化的中小团队、关注「AI智能系统」方向的读者。若你只需要单次聊天式问答,可先读概念;若要上生产,请重点看步骤、权限与风控相关段落。
关于「文本表示角度」,本文给出了什么结论?
在「文本表示角度」部分,要点是:则没有。 统计模型 N-gram (N 元语法) 是一种文本表示方法,指文中连续出现的 $n$ 个词语。N-gram 模型是基于 $n-1$ 阶马尔科夫链的一种概率语言模型,可以通过前 $n-1$ 个词对第 $n$ 个词进行预测。以 南京市长江大桥 为例,N-gram 的表示如下: 一元语法(unigram):南/京/市/长/江/大/桥 二元语法(bigram):南京/京市/市长/长江/江大/大桥 三元语法(trigram):南京市/京
关于「统计模型」,本文给出了什么结论?
在「统计模型」部分,要点是:), ('市', '长'), # ('长', '江'), ('江', '大'), ('大', '桥')] list ( ngrams ( tokens , 3 , pad_left = True , pad_right = True , left_pad_symbo 表示学习 s = '南京市长江大桥' # jieba # https://github.com/fxsjy/jieba import jieba list ( jieba