词向量(Word Embedding)是一种将自然语言中的单词映射到连续的向量空间的技术,使得语义相似的单词在向量空间中彼此接近。这种技术是现代自然语言处理(NLP)任务的基础之一,广泛应用于文本分类、机器翻译、问答系统等。
一、词向量的基本原理
1. 离散表示 vs 连续表示
传统的自然语言处理方法通常使用离散表示(如one-hot编码)来表示单词。然而,这种方法存在以下问题:
-
**维度灾难**:词汇表越大,向量维度越高。
-
**缺乏语义信息**:每个单词都是独立的向量,无法表达单词之间的语义关系。
词向量通过将单词映射到低维的连续向量空间来解决这些问题。在这样的向量空间中,语义相近的单词具有相似的向量表示。
2. 分布假说(Distributional Hypothesis)
词向量的核心思想基于分布假说,即"一个词的含义可以通过其上下文来定义"。也就是说,如果两个单词在相同的上下文中频繁出现,那么它们可能具有相似的意义。
二、常见的词向量模型
1. Word2Vec
Word2Vec 是由 Google 提出的一种高效生成词向量的方法,主要包括两种架构:
-
**CBOW(Continuous Bag of Words)**:根据上下文预测当前单词。例如,给定 "the cat sits on the",模型需要预测 "mat"。
-
**Skip-Gram**:根据当前单词预测上下文单词。例如,给定 "mat",模型需要预测 "the cat sits on the" 中的其他单词。
**特点**:
-
**效率高**:能够处理大规模语料库。
-
**效果好**:生成的词向量捕捉了丰富的语义信息。
-
**局限性**:固定窗口大小限制了上下文的范围,且不能很好地处理多义词问题。
2. GloVe(Global Vectors for Word Representation)
GloVe 是一种基于全局统计信息生成词向量的方法。它通过对整个语料库中的共现矩阵进行分解来生成词向量。
**特点**:
-
**全局信息**:考虑了整个语料库中的词共现信息,而不是局部上下文。
-
**对称性**:GloVe 模型是对称的,即 `P(w_i|w_j) = P(w_j|w_i)`。
-
**性能优秀**:在许多任务上表现优异,尤其是在捕捉词语间的关系方面。
3. FastText
FastText 是 Facebook 提出的一种改进版本的 Word2Vec,主要特点是将每个单词表示为其子词(n-gram)的组合。例如,"apple"可以表示为 `<a> <ap> <app> <appl> <apple> <pple> <ple> <le> <e>`。
**特点**:
-
**处理未登录词**:由于使用子词表示,FastText 能够更好地处理不在训练集中的单词(OOV, Out-of-Vocabulary)。
-
**形态学信息**:通过子词表示,FastText 能够捕捉单词的形态学信息,从而提高对多义词和形态变化的理解。
4. ELMo(Embeddings from Language Models)
ELMo 是一种基于深度双向语言模型生成上下文相关的词向量的方法。它使用 LSTM 或 Transformer 架构来建模语言序列,并为每个单词生成动态的上下文相关向量。
**特点**:
-
**上下文敏感**:同一个单词在不同的上下文中会有不同的向量表示。
-
**深层表示**:ELMo 使用多层双向 LSTM 来捕捉不同层次的语言特征。
-
**预训练与微调**:可以在下游任务中微调预训练的 ELMo 模型。
5. BERT(Bidirectional Encoder Representations from Transformers)
BERT 是 Google 提出的一种基于 Transformer 的双向预训练模型。它通过 Masked Language Modeling 和 Next Sentence Prediction 两个任务来进行预训练。
**特点**:
-
**双向编码**:BERT 同时考虑了左右两侧的上下文信息,从而生成更丰富的上下文相关向量。
-
**强大的预训练能力**:BERT 在多种 NLP 任务上表现出色,成为近年来最流行的预训练模型之一。
-
**微调简单**:只需在特定任务上进行少量数据的微调即可达到很好的效果。
三、各模型的区别
| 模型 | 基本原理 | 上下文依赖 | 处理未登录词 | 预训练方式 |
| --- | --- | --- | --- | --- |
| Word2Vec (CBOW/Skip-Gram) | 局部上下文预测 | 固定窗口大小 | 不支持 | 无监督学习 |
| GloVe | 全局共现矩阵分解 | 全局信息 | 不支持 | 无监督学习 |
| FastText | 子词表示 | 固定窗口大小 | 支持 | 无监督学习 |
| ELMo | 双向LSTM语言模型 | 动态上下文相关 | 支持 | 无监督预训练 + 微调 |
| BERT | Transformer双向编码 | 动态上下文相关 | 支持 | 无监督预训练 + 微调 |
四、总结
词向量的发展经历了从简单的分布式表示(如 Word2Vec 和 GloVe)到复杂的上下文感知表示(如 ELMo 和 BERT)的过程。随着深度学习技术的进步,词向量不仅能够捕捉静态的语义信息,还能生成动态的上下文相关表示,极大地提高了自然语言处理任务的性能。
选择合适的词向量模型取决于具体的应用场景和需求。对于简单的文本分类或情感分析任务,Word2Vec 或 GloVe 可能已经足够;而对于更复杂的任务,如机器翻译或问答系统,上下文敏感的模型(如 ELMo 和 BERT)则更为适用。