胡慧华
菜单
首页人工智能机器学习深度学习项目实践关于我
跳至课程正文
← 人工智能课程

ARTIFICIAL INTELLIGENCE · COURSE 11

从关键词到语义:怎样找到相关资料

理解按含义表示和查找文本的思路,认识语义检索的局限。

第 11 / 18 课20–30 分钟(含实验)无需密钥 · 本地实验
透明词元方块流向结构清晰的发光页面,细线连接信息与证据片段
把生成能力用在具体任务里
  • 语义表示
  • 信息检索
01

START WITH A QUESTION

搜索“冷气没效果”,为什么只找“空调”可能不够?

资料写着“空调不制冷”,用户却问“冷气没效果”。逐字匹配可能找不到它。语义检索尝试按含义寻找相关内容,但相近表达也可能属于不同任务,例如“空调安装”与“空调报修”。

一种做法是把文字变成数字向量,也就是一组有顺序的数字,让相近含义的向量更靠近。向量不是人的理解,也不是事实证明;它提供排序线索,仍需检查内容与适用条件。

02

BUILD YOUR VOCABULARY

先把三个概念讲清楚

CONCEPT 01

关键词检索

根据词语命中与统计权重匹配资料。擅长专有名词、编号与精确术语;同义表达需要额外处理。

放进场景看

查“设备 A-17”时,精确编号可能比泛化语义重要。

CONCEPT 02

嵌入向量

将文字映射为一组数字表示,通常由训练过的模型产生。数值维度不一定有可直接命名的意义。

放进场景看

实验手工用三个维度模拟主题接近程度,不是真实嵌入模型。

CONCEPT 03

相似度与排序

余弦相似度比较两个向量的方向。相似度高代表表示接近,不代表文档正确或一定回答问题。

放进场景看

两篇都讨论空调,可能分别讲安装和报修。

03

FOLLOW THE PROCESS

把原理放进完整流程

  1. 01

    准备可检索片段

    保留标题、正文、来源、日期与权限,避免只有孤立向量。

  2. 02

    表示查询

    将查询转换成与资料相同方式产生的向量。

  3. 03

    计算并排序

    按相似度返回候选;也可结合关键词形成混合检索。

  4. 04

    检查候选

    验证是否直接回答问题,比较不同问法与无答案问题。

手工向量只用于看懂计算
项目向量含义
查询[1, 0.9, 0]偏向制冷故障主题
报修资料[1, 1, 0]方向相近,余弦约 0.999
会议预订[0, 0, 1]方向垂直,余弦为 0
04

CHANGE ONE THING & OBSERVE

比较关键词与语义排序

选择不同问法并切换方法,查看每条资料的分数与排名。语义模式使用事先标明的手工向量,不是在线模型,也不根据答案隐藏调整分数。

INTERACTIVE LAB / 11

查询向量 [1, 0.9, 0];各资料向量和计算结果如下。关键词同分时维持原顺序,0 分不应视为有效命中。

  1. 空调不制冷报修空调故障,请提交报修。 · 向量 [1, 1, 0]
    0
  2. 空调安装说明安装空调前确认墙体承重。 · 向量 [1, 0.1, 0]
    0
  3. 会议室预订会议室预订需登记时间。 · 向量 [0, 0, 1]
    0
05

KNOW THE LIMITS

哪些结论不能直接推出?

相似度分数不是事实置信度

0.9 的相似度不表示答案有 90% 概率正确,也不能跨模型直接比较分数。

相关资料仍可能无权查看

权限过滤必须作为系统规则执行,不能只靠提示要求模型保密。

06

READ, RUN & EXPLAIN

亲手计算两个向量的余弦相似度

以下示例仅使用 Python 3 标准库,可复制到本地 Python 环境运行。先看每一行的作用,再修改一个输入观察结果;无需网络或密钥。

Python 3 · 完整示例下载 .py
from math import sqrt
a = [1, 0.9, 0]
b = [1, 1, 0]
dot = sum(x * y for x, y in zip(a, b))
length_a = sqrt(sum(x * x for x in a))
length_b = sqrt(sum(x * x for x in b))
score = dot / (length_a * length_b) if length_a and length_b else 0
print(round(score, 3))

复制或下载只获取本课示例,不会自动执行。

逐行解释(8 行)
  1. 第 1 行from math import sqrt

    导入平方根函数,用来计算向量长度。

  2. 第 2 行a = [1, 0.9, 0]

    查询的手工向量。三个数只是教学表示。

  3. 第 3 行b = [1, 1, 0]

    文档的手工向量,与查询维度一致。

  4. 第 4 行dot = sum(x * y for x, y in zip(a, b))

    对应位置相乘再相加,称为点积。

  5. 第 5 行length_a = sqrt(sum(x * x for x in a))

    各维平方求和后开平方,得到向量长度。

  6. 第 6 行length_b = sqrt(sum(x * x for x in b))

    同样计算另一个向量的长度。

  7. 第 7 行score = dot / (length_a * length_b) if length_a and length_b else 0

    点积除以长度乘积;零向量没有方向,本例约定返回 0。

  8. 第 8 行print(round(score, 3))

    保留三位小数输出,便于阅读。

预期输出
0.999
07

CHECK YOUR UNDERSTANDING

换一个角度,检查自己是否理解

已回答 0 / 3 题 · 当前答对 0 题

1. 余弦相似度主要比较什么?
2. 相似度 0.9 是否表示答案 90% 正确?
3. 查询设备编号时,什么方法值得保留?
08

TAKE IT WITH YOU

带走三个判断,再做一次迁移练习

  • 关键词与语义检索各有优势,可以组合。
  • 嵌入是数字表示,相似度用于候选排序。
  • 检索后仍需检查证据、时效与权限。
参考与延伸阅读

本课例子、代码和模拟数据为教学设计。以下一手文档用于延伸核对,不代表对本示例的认证。