什么是 token-level 嵌入
🔍 什么是 token-level 嵌入?
简单说,就是:
“对文本中每一个词、子词或标记都生成一个向量。”
这些“词”不是普通意义上的词,而是模型分词器(tokenizer)切出来的最小单位,叫做 token。
📦 举个例子(以英文为例):
假设我们有一句话:
The patient has hypertension.
经过分词器处理后,可能被切成以下几个 token:
['The', 'patient', 'has', 'hyper', '##tension', '.']
每个 token 都会被编码成一个向量:
['The'] → [0.21, 0.78, ..., 0.03] (一个 768 维向量)
['patient'] → [0.01, 0.56, ..., 0.12]
['has'] → [0.91, 0.66, ..., 0.45]
['hyper'] → [0.10, 0.88, ..., 0.22]
['##tension'] → [0.04, 0.71, ..., 0.38]
['.'] → [0.03, 0.59, ..., 0.87]
这就是 token-level 嵌入。每个 token 都有自己的向量,这些向量表示它在句子中的语义位置和含义。
🆚 它和传统的句子嵌入有什么区别?
嵌入类型 | 内容 | 举例 |
---|---|---|
Token-level 嵌入 | 每个词或 token 一个向量 | 一句话分成 10 个 token,就有 10 个向量 |
Sentence-level 嵌入 | 整句话一个向量 | 一句话 → 一个 768维向量 |
传统句子嵌入其实就是把 token-level 嵌入“合并”成一个(比如用均值池化)。
🏥 为什么在医疗文本中很重要?
因为医疗文本通常有很多长句、术语和缩写,比如:
患者有高血压、冠心病史,伴有心功能不全。
如果你直接做句子级嵌入,模型可能会忽略细节,特别是**“冠心病史”和“心功能不全”**这类细粒度信息。
但如果用 token-level 嵌入:
- 你可以保留每个词的语义向量;
- 后续可以分成多种“子块”去处理;
- 对应更精细的语义搜索、摘要和问答。
✅ 总结一句话:
Token-level 嵌入 = 每个词一个向量,能保留文本中的细节和顺序信息,适合需要“精读”和“深挖”语义的任务,比如医学文档处理。