Embedding 嵌入
Embedding将离散的符号(如词、句子)映射到连续的向量空间,是深度学习处理自然语言的基础。
01词嵌入
词嵌入将每个词映射为一个固定维度的稠密向量,使得语义相似的词在向量空间中距离相近。
词嵌入原理
词嵌入的核心思想是"分布假设":一个词由其周围的词来决定。 语义相似的词会出现在相似的上下文中,因此会有相似的向量表示。
One-Hot vs 词嵌入
| 特性 | One-Hot | 词嵌入 |
|---|---|---|
| 维度 | 词表大小V(成千上万) | 通常50-300维 |
| 向量特点 | 稀疏、正交 | 稠密、可计算相似度 |
| 语义表示 | 无 | 蕴含语义信息 |
词嵌入方法
Word2Vec
CBOW和Skip-gram两种架构,通过上下文预测或中心词预测学习词向量。
优点:训练快、效果好
GloVe
基于全局词共现统计的嵌入方法,结合了矩阵分解和上下文窗口的优点。
FastText
使用子词(n-gram)信息,适合处理未登录词和形态丰富的语言。
02句嵌入
句嵌入将整个句子映射为一个固定维度的向量,用于句子级别的语义表示和计算。
句嵌入原理
句嵌入捕捉句子的整体语义,可以用于句子相似度计算、分类、聚类等任务。
简单的词向量组合方法
- 平均词向量:将句子中所有词的向量简单平均
- 加权平均:使用IDF等权重进行加权
- TF-IDF加权:用TF-IDF权重组合词向量
简单但有效,常作为基线方法
句嵌入方法
InferSent
使用BiLSTM编码句子,结合预训练语言模型学习句嵌入。
Sentence-BERT (SBERT)
使用孪生网络结构微调BERT,生成适合语义相似度计算的句子向量。
解决了BERT直接输出向量无法很好计算相似度的问题。
Instructor
使用任务指令引导句嵌入学习,可以根据不同任务生成定制化的嵌入。
句嵌入的应用
- 语义搜索:计算查询与文档的向量相似度
- 文本聚类:将相似文档聚类
- 推荐系统:基于内容的推荐
- 语义重复检测:问答系统中的问题重复检测
03上下文嵌入
上下文嵌入根据词所在的上下文动态生成词向量,解决了传统词嵌入的一词多义问题。
上下文嵌入原理
传统词嵌入对同一个词生成固定的向量,但自然语言中很多词是多义的。 上下文嵌入根据词周围的上下文动态调整词向量。
多义词示例
"bank" 在以下两个句子中有不同含义:
"I went to the bank to deposit money" - 银行
"The river bank was covered with flowers" - 河岸
上下文嵌入会根据上下文生成不同的向量表示
上下文嵌入的优势
解决一词多义
同一个词在不同上下文中得到不同的向量表示。
更丰富的语义
向量中蕴含了词在特定上下文中的语义信息。
预训练模型
BERT、GPT等预训练模型通过自监督学习生成上下文嵌入, 可以作为下游任务的强大特征。
代表模型
- ELMo:早期上下文嵌入模型,使用BiLSTM
- BERT:Transformer编码器,掩码语言模型预训练
- GPT系列:Transformer解码器,自回归预训练
- XLNet:排列语言模型,全排列上下文