text2vec 是一类用于文本向量化的开源工具库的通用名称,其核心功能是把词、句子、段落等文本转换为计算机可处理的向量矩阵,并据此计算文本之间的语义相似度。同名项目主要有两个:一个是由 Dmitriy Selivanov 等人开发、面向 R 语言的文本挖掘框架,另一个是由许明(Xu Ming)等人开发、面向 Python 的中文文本向量化工具包。二者都提供词向量、句向量表示与相似度计算能力,广泛应用于语义检索、文本匹配、聚类与检索增强生成等场景。
定义
text2vec 指把文本转换为稠密或稀疏向量表示的开源工具库,其名称来自「text to vector」的缩写[1]。它的输入可以是词、句子或段落,输出则是一组数值向量,向量之间的距离或夹角被用来度量文本在语义上的接近程度[1]。在这个意义上,text2vec 属于文本表示学习与文本相似度计算的工程实现,而不是某一个单一的模型。
由于同名项目不止一个,使用该名称时需要区分具体指代。较为知名的实现包括面向 R 语言的 text2vec (R 包) 与面向 Python 的中文工具包 text2vec (Python 库),两者在目标语言、依赖生态与所支持的模型上并不相同[2][1]。
原理
文本向量化的基本思路是把文本映射到同一个向量空间中,使语义相近的文本在空间中的位置也相互靠近。以词向量模型为例,词被表示为固定维度的实数向量,句子向量则可由句子中所有词向量取平均得到,随后通过计算两个向量的余弦相似度来判断句子是否相似[3]。余弦相似度的取值通常在 0 到 1 之间,数值越大表示两段文本越相似[3]。
在基于预训练语言模型的方案中,输入的文本先经过分词并送入编码器,得到每个位置上的上下文相关表示,再通过池化操作把变长序列压缩为定长向量[4]。常用的池化方式包括对全部词元取平均的均值池化,以及取首尾词元表示再平均的做法[4][1]。这种池化过程可以记作 $z = \mathrm{Pool}(h_1, h_2, \dots, h_N)$,其中 $h_i$ 为编码器输出的词元表示。
训练阶段的目标是让正样本对的相似度大于负样本对。CoSENT 提出了一种基于余弦相似度的排序损失,使训练过程与预测阶段所优化的目标保持一致[5]。其思路可概括为让训练数据中正样本对的 $\cos(u_i, u_j)$ 尽量高于负样本对的 $\cos(u_k, u_l)$,并借助改进的交叉熵形式实现该约束[5]。
发展历程
面向 R 语言的 text2vec 由 Dmitriy Selivanov 等人开发,2016 年 1 月发布了 0.2.0 版本,同年 10 月发布 0.4.0 版本,其后持续更新至 0.6.6 版本[6][2]。该包以 C++ 编写核心部分,并提供基于流的接口,使文档集合规模超过可用内存时仍可进行分析[2]。
面向 Python 的中文工具包由许明等人维护,2022 年发布的论文引用中将其名称写作 Text2vec: A Tool for Text to Vector[4]。项目早期主要基于腾讯词向量提供字词级表示,随后陆续加入 Sentence-BERT、CoSENT 与 BGE 等模型的训练和推理支持[1]。2022 年 3 月,项目发布了基于 CoSENT 方法在中文 STS 数据上训练的中文匹配模型[7]。
此后该项目又发布了多语言匹配模型与基于 FlagEmbedding 的中文语义匹配模型,并加入了多卡训练支持[7]。围绕原始项目还派生出若干衍生实现,例如移植到其他深度学习框架的版本以及基于 onnxruntime 的推理版本[8][9]。
应用
文本向量化的直接用途是语义相似度计算,即给定两段文本输出一个相似度分数[1]。在此之上可以进行语义搜索:把候选语料批量编码为向量,再将查询语句编码后与语料向量比较,按相似度排序返回最相关的若干条结果[9]。
在工程实践中,这类向量表示是 检索增强生成 流水线的组成部分,用于从文档库中召回与用户问题相关的内容。由于推理开销较低,相关模型也常被用于资源受限或边缘侧的部署场景。
在学术研究中,text2vec 提供的句向量曾被用于计算记忆语句与问题之间的相似度[10]。也有研究将其作为文本特征提取环节,与自编码器降维和聚类算法结合,用于社交平台短文本的话题聚类分析[11]。
局限
基于 BERT 架构的模型存在句子表示「坍缩」的问题,即倾向把所有句子编码到空间中一个较小的区域内,使多数句子对都得到偏高的相似度分数,语义完全无关的句子也可能被判定为相似[5]。有分析指出,这一现象与句向量由高频词主导有关,通过 CoSENT 等方法微调可以得到缓解,但未必能完全消除[5][12]。
序列长度是另一项限制。以中文句向量模型为例,其最大输入长度通常为 512 个词元,更长的文本会被截断,长文本中的部分语义信息因此丢失,可能影响对整体语义的把握和长文档的检索效果[12]。相应地,处理长文档时常见的做法是切分为多个片段分别编码,再通过取最大值或平均值等方式聚合,分段策略本身会影响结果[13]。
此外,句向量模型对词序和上下文较为敏感,某些情况下对语义的判断可能不够准确[12]。有技术文档指出,这类轻量模型在检索任务上的表现整体落后于部分后续模型,且其生态以个人项目为主,企业级支持相对有限。
参见
参考资料
- README_EN [引用日期2026-10-14]
- text2vec [引用日期2026-10-14]
- text2vec [引用日期2026-10-14]
- shibing624/text2vec-base-chinese · Hugging Face [引用日期2026-10-14]
- model_report [引用日期2026-10-14]
- text2vec package [引用日期2026-10-14]
- text2vec — Stars, Velocity & Guide | OSS AI Hub [引用日期2026-10-14]
- ms2vec [引用日期2026-10-14]
- text2vec2onnx - text2vec-onnx [引用日期2026-10-14]
- 2024.sighan-1.18(PDF) [引用日期2026-10-14]
- hit.edu.cn 上的 PDF 文件 [引用日期2026-10-14]
- MaxKB中如何选择向量模型? [引用日期2026-10-14]
- tao-8k效果对比展示:与text2vec-large-chinese在长文本语义匹配任务中的表现 [引用日期2026-10-14]