前言
在探讨大型语言模型的基础时,我们不可避免地会遇到自然语言处理(NLP)领域的四大核心任务:文本分类、文本匹配、序列标注及生成任务。这些任务不仅对于理解大模型的工作机制至关重要,也是实际应用中的关键。深入研究这些内容,有助于超越简单的包调用,实现更深层次的应用。
本文特别强调了“文本分类任务”,虽然其学习重要性略低于文本匹配和生成任务,但仍然是值得探索的内容。
目录
- 文本匹配任务基础认知
- 智能问答与文本匹配的关联
- 文本匹配核心算法(传统方法)
- 文本匹配核心算法(深度学习方法)
- 海量向量高效查找技术
- 各类匹配算法核心对比总结
一、文本匹配任务基础认知
(一)定义与核心目标
文本匹配作为NLP的一个重要组成部分,主要目的是评估两个或多个文本之间的关联程度(如相似度或蕴含关系),并通过是否匹配或相似度分数的形式呈现结果,为后续的问答和搜索等应用场景提供决策支持。
(二)任务分类(狭义与广义)
1. 狭义文本匹配
狭义的文本匹配侧重于确定两段文本在语义上的相似性,通常输出一个介于0到1之间的相似度评分。例如,“今天天气不错”与“今儿个天不错呀”的相似度可能为0.9,表明它们高度匹配;而“今天天气不错”与“你的代码有bug”的相似度则可能仅为0.1,显示它们几乎不相关。
2. 广义文本匹配
广义的文本匹配则涉及更广泛的语义关系判断,如自然语言推理(NLI)、文本蕴含等。这类任务不仅限于简单的相似度评估,还包括对文本间复杂关系的分析,如判断两句话是否相互矛盾或支持对方。
(三)文本匹配的应用场景
1. 按文本长度组合分类
| 文本组合类型 | 典型场景 |
| 短文本 vs 短文本 | 知识库问答、聊天机器人、智能客服意图匹配 |
| 短文本 vs 长文本 | 文章检索、广告推荐、关键词匹配文档 |
| 长文本 vs 长文本 | 新闻关联推荐、论文查重、相似文章聚类 |
2. 核心落地场景
文本匹配技术广泛应用于各种场景,包括但不限于:问答对话系统(如车载导航、智能音箱等)、信息检索系统(如搜索引擎、推荐系统等)。
二、智能问答与文本匹配的关联
(一)智能问答的基本逻辑
智能问答系统的核心在于利用文本匹配技术从基础资源中检索相关信息,以回答用户的提问。这些基础资源可以是FAQ库、书籍、网页、知识图谱等多种形式。

(二)智能问答的技术路线分类
1. 按基础资源划分
根据所使用的基础资源不同,智能问答系统可分为基于FAQ知识库、基于文档/网页/书籍、基于知识图谱、基于表格等多种类型。
2. 按答案产出方式划分
根据答案的生成方式,智能问答系统又可分为检索式、生成式和混合式三种。检索式问答直接从已有资源中提取答案;生成式问答则由系统根据上下文生成答案;混合式则是两者的结合。
3. 按NLP技术划分
根据所采用的NLP技术,智能问答系统还可以进一步细分为单轮/多轮问答、多语种问答、事实性/开放性问答等。
(三)FAQ知识库问答核心细节
1. 关键名词定义
在FAQ知识库中,每个问答对由一个问题及其对应的答案组成,其中标准问题是具有代表性的核心问题,而相似问或扩展问则是为了扩大匹配范围而添加的同义或近义问题。知识加工是指通过人工编辑来优化和扩充FAQ库的过程。
2. 运行核心流程
用户提出问题后,系统首先通过文本匹配技术在FAQ库中查找最相关的问答对,然后返回相应的答案给用户。
三、文本匹配核心算法(传统方法)
传统文本匹配方法主要包括编辑距离(Levenshtein Distance)、Jaccard相似度、BM25算法以及word2vec等。这些方法各有特点,在不同的应用场景中发挥着重要作用。
四、文本匹配核心算法(深度学习方法)
深度学习方法在文本匹配任务中表现出色,主要包括表示型和交互型两大范式。表示型方法通过学习文本的高维向量表示来进行匹配,而交互型方法则通过直接比较文本间的交互特征来评估相似度。
五、海量向量高效查找技术
随着数据量的增加,如何高效地在大量文本向量中找到最相似的项成为了一个挑战。为此,研究人员开发了多种高效的查找算法,如KD树和Annoy等。
六、各类匹配算法核心对比总结
通过对不同文本匹配算法的比较,我们可以更好地理解它们各自的优缺点,从而在实际应用中做出更合适的选择。
文本预处理
包括分词、去除停用词、去除标点符号、大小写转换、全半角转换、词性标注及句法分析等步骤。
相似度计算
将经过预处理的用户提问与FAQ数据库中的问题(包括标准问题及其变体)进行相似度计算。
排序筛选
根据相似度得分从高到低排序,挑选出最接近的问题。
答案返回
提供最匹配问题的答案作为回应。
文本匹配核心算法(传统方法)
编辑距离(Levenshtein Distance)
核心原理: 定义两个字符串之间的转换所需最少编辑操作次数,允许的操作包括替换、插入或删除一个字符。
相似度计算: 完全相同的字符串编辑距离为0,相似度为1;完全不同则编辑距离等于较长字符串的长度,相似度为0。通用公式为:相似度 = 1 -(编辑距离 / 较长字符串长度)。
例如:“今天天气真不错” vs “估计明天天气更好” 的编辑距离为6。
代码实现特点: 动态规划为基础,是面试中常见的技术点。
优缺分析: 优点在于解释性强,适用于多种语言或非语言序列,无需训练模型。缺点则是不考虑字符的语义相似性,容易受到停用词或无关词汇的影响,对句子顺序敏感,且文本越长计算效率越低。
反例:“我没钱” vs “俺没钱”(相似度0.66)、“今天天气不错” vs “天气不错今天”(相似度0.33)。
Jaccard相似度
核心原理: 通过两个集合的交集与并集的比例来衡量相似度。应用于文本匹配时,可以以单个字或词语为单位构建集合,然后计算交集与并集的比值。
公式为:Jaccard相似度 = (文本A与B的共同元素数量) / (文本A与B的总元素数量)。
例如:“今天天气真不错”(7字) vs “估计明天天气更好”(8字) —— 共同字为“天、气”,相似度为2/(7+8-2)=0.18。
关键选择:使用单字还是词语? 这取决于具体应用场景,如分词的准确性、文本中是否含有大量专有名词或缩写、文本长度等因素。例如,“我去农行取钱” vs “我去农业银行取钱”,使用词语计算时需特别注意“农行”与“农业银行”之间的同义关系(这通常需要额外的处理)。
优缺分析: 优点是不受语序影响(采用词袋模型)、实现简便、计算快速、支持多语言。缺点包括:某些情况下语序无关可能成为劣势(如“他打了我” vs “我打了他”相似度为1)、无法衡量字词的语义相似性、易受无关词汇干扰、不同步的文本可能错误地判定为完全匹配。
BM25算法
核心思想: 基于关键词权重评估匹配度,即一个词在特定类型文本中频繁出现而在其他文本中很少见,则该词对于识别这种类型的文本非常有帮助(权重较高)。其基本理论源自TF·IDF统计方法,但对文本长度的影响进行了优化。
关键概念解释:
- TF(词频):某个词在文档中出现的次数除以该文档总词数,反映了词在文档内部的重要性。
- IDF(逆文档频率):log(N/dfi),其中N表示文档总数,dfi表示包含特定词qi的文档数,用于反映词在整个语料库中的区分度。
- TF·IDF = TF * IDF:结合了词在文档内的局部重要性和在整体语料库中的区分度。
BM25公式(优化文本长度影响):
\[ \text{BM25}(Q, D) = \sum_{q_i \in Q} \text{IDF}(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot \left(1 - b + b \cdot \frac{dl}{avgdl}\right)} \]
参数说明:
- \( q_i \):查询Q中的第i个词,\( f(q_i, D) \):\( q_i \)在文档D中的词频。
- \( k_1, b \):可调参数,\( k_1 \)控制词频饱和的程度,\( b \)控制文档长度的影响。
- \( dl \):文档D的长度,\( avgdl \):所有文档的平均长度。
优缺分析: 优点在于通过TF·IDF加强了重要词的作用而削弱了无关词的影响,效果优于编辑距离和Jaccard相似度;计算迅速,不需要迭代训练过程;支持词袋模型和多语言环境。缺点是没有考虑到词与词之间的语义相似性;需要一定的统计样本(如FAQ数据库);当引入新类别时需要重新计算统计模型;评分没有标准化。
word2vec(词向量方法)
核心原理: 将每个词或字映射到同一个向量空间中的固定维度向量,使得语义相近的词向量在空间中的距离也较近。文本匹配时,可以通过平均或其他方式聚合两段文本的词向量形成句子向量,再计算这两个句子向量的相似度(如使用余弦相似度)。
词向量训练细节: 初始状态通常随机设置词向量。训练过程中,基于上下文窗口、语言模型或共现矩阵来学习词的语义关联。为了加速训练,可以采用层次softmax(利用Huffman树)或负采样的技术。
优缺分析: 优点是可以捕捉到词的语义相似性(例如“吃饭了吗”和“你吃了吗”具有相似的向量距离),训练数据简单(仅需纯文本语料),计算速度快,支持提前计算知识库问题的向量表示,便于后续复杂的模型处理。缺点是模型不考虑词与词之间的深层语义联系;需要较大的训练数据集;对于新加入的类别,可能需要重新训练模型;分数没有统一的标准化。
缺点:
句向量的效果很大程度上取决于词向量的质量;处理多义词的能力有限;受到停用词及文本长度的影响较大(这是词袋模型的特征);当更换语种或领域时需要重新训练模型;此外,模型的表现还会受到语料的数量、领域的适应性、分词的结果以及未登录词的影响。
反例:
例如,“梨-苹果”(这两个词语义相近,因此它们的向量距离也较近)与“梨-华为”(这两个词没有直接的语义联系,所以它们的向量距离较远)。
四、文本匹配核心算法(深度学习方法)
(一)深度学习匹配的两大核心范式

1. 表示型(Representation-based)
其核心思路是首先利用相同的编码器(Encoder)将两段文本转换成固定维度的句子向量,然后通过计算这些句子向量之间的相似度(例如使用余弦相似度或欧氏距离)或者通过多层感知机(MLP)来评估匹配程度。
可用的编码器架构包括:线性层、循环神经网络(RNN)、卷积神经网络(CNN)、变换器(如BERT)等。
代表性模型有:Sentence-BERT(一种基于Siamese BERT网络的句子向量模型)。

2. 交互型(Interaction-based)
其基本原理是先通过共享的嵌入层将两段文本转化为词向量,接着通过交互层(通常采用注意力机制)实现词与词之间/token与token之间的信息整合,最终输出匹配结果(通常是二分类问题:匹配或不匹配)。
重要特性:在向量层面实现全面的交互,能够有效捕捉文本内部的局部关联信息。
3. 两种范式的比较
| 范式类型 |
优点 |
缺点 |
| 表示型 |
可以提前计算知识库中的文本向量,在检索时只需计算输入文本的向量,效率较高。 |
在向量化过程中可能会丢失文本中的局部重要信息。 |
| 交互型 |
通过元素级别的交互,能够精确地捕捉到文本间的局部关联,提高匹配的准确性。 |
每次匹配都需要同时输入两段文本,无法预先计算,导致效率相对较低。 |
(二)表示型文本匹配的训练方法
1. 二分类训练
该方法的核心在于:将匹配的样本(如意义相同的句子)标记为1,不匹配的样本标记为0,从而使模型学会从“文本对”到“匹配标签”的映射关系。
2. Triplet Loss训练
其主要目标是确保相同标签的样本在嵌入空间中的距离尽可能接近,而不同标签的样本则尽可能远离。
这种训练方式不仅适用于文本匹配任务,也广泛应用于人脸识别等需要进行“相似性区分”的场景。
五、海量向量的高效查找技术
(一)核心需求
当候选向量的数量超过一亿时,如何高效地找到与目标向量最相似的向量成为关键挑战,这一技术特别适用于问答系统、搜索引擎和推荐系统等大规模应用。
(二)经典的查找算法
1. KD树(K-Dimensional Tree)
基本理念是对向量空间进行递归分割,形成树状索引结构。
查找过程包括:
- 按照索引路径找到最底部的叶子节点。
- 向上回溯,计算当前节点与目标向量之间的距离,以及节点分割面与目标向量之间的距离。
- 根据这些距离判断是否需要探索分割面另一侧的节点,直到回溯至根节点。

2. Annoy(Approximate Nearest Neighbors Oh Yeah)
主要思路是基于近似最近邻查找,通过反复执行K-means聚类来划分向量空间。
关键特征:
- 不断地对空间进行分割,直到每个子空间内的向量数目低于设定阈值。
- 支持同时在多个相邻的分支上进行查找,或者创建多棵树以提高查找的准确性。
- 在保持查找速度的同时,也能保证一定的准确性,非常适合处理大规模向量数据。

六、各种匹配算法的核心对比总结
| 算法类型 |
核心优势 |
主要劣势 |
适用场景 |
| 编辑距离 |
易于理解且适用于跨语种或非语言序列 |
缺乏语义理解,易受语序、停用词和文本长度的影响 |
短文本的字符级别匹配、简单的场景(例如拼写纠正) |
| Jaccard相似度 |
实现简单、计算速度快、不受语序影响 |
缺乏语义理解,某些情况下误判率较高 |
短文本的快速匹配、文本去重(初步筛选) |
| BM25 |
增强关键词的重要性、性能稳定、计算效率高 |
缺乏语义理解、依赖于统计样本 |
搜索引擎、FAQ检索、关键词匹配场景 |
| word2vec |
能够捕捉语义相似性、支持复杂模型的进一步处理 |
处理多义词困难、需要特定领域的适应 |
需要语义理解的匹配场景(例如意图识别) |
| 深度学习(表示型) |
效率高、支持预计算、语义捕捉能力强 |
可能会丢失局部信息 |
大规模知识库检索、实时匹配场景 |
| 深度学习(交互型) |
局部关联捕捉准确、匹配准确率高 |
效率低、无法预计算 |
小规模高精度场景(例如核心客服问答) |