词嵌入(Word Embedding) 是一种将词汇表示为实数向量的技术,通常是低维度的连续向量。这些向量被设计为捕捉词汇之间的语义相似性,使得语义相似的词在嵌入空间中的距离也更近。词嵌入可以看作是将离散的语言符号(如单词、短语)映射到向量空间,从而在一定程度上解决了自然语言处理中的语义表示问题。
简单来说,词嵌入就是一种将词汇转换成向量的方法,使得计算机能够理解词与词之间的关系,并在不同的NLP任务(如文本分类、机器翻译、问答系统等)中表现出色。
一、词嵌入的动机和重要性
自然语言中的单词本质上是离散的符号,对于计算机来说,直接处理这些符号是困难的。传统的词表示方法(如词袋模型(Bag of Words)、TF-IDF等)会导致词与词之间的相互关系无法捕捉到,例如“king”和“queen”这两个词虽然表示不同的对象,但在某种语义上有相似性。
词嵌入技术通过以下方式克服这些问题:
- 密集表示:将单词表示为低维的密集向量(例如100维或300维),而不是像词袋模型那样的高维稀疏向量。
- 语义信息捕捉:相似的词(如“king”和“queen”)在向量空间中靠得更近。
- 可用于神经网络:词嵌入作为向量输入,能够直接用于神经网络模型(如RNN、LSTM、Transformer)进行下游的NLP任务。
二、词嵌入的表示形式
-
One-hot表示:在早期,单词通常以one-hot编码表示。词汇表中的每个单词用一个长度为词汇表大小的向量表示,在向量中,目标单词的位置为1,其余位置为0。这种表示无法捕捉单词之间的语义相似性,且向量维度非常高。
例如,假设词汇表包含 [“dog”, “cat”, “mouse”, “king”, “queen”],那么 “dog” 的 one-hot 表示是:
[1, 0, 0, 0, 0]
-
词嵌入表示:与one-hot不同,词嵌入将单词映射到低维实数向量。这个向量表示捕捉到了词汇的语义关系和上下文特性,例如,通过预训练的词嵌入,模型会“知道” “king” 和 “queen” 是相似的,因为它们的向量距离较近。
例如,“dog” 的词嵌入可能是:
[0.13, -0.24, 0.65, ... , 0.42]
三、常见的词嵌入技术
-
Word2Vec:
- Word2Vec 是最早成功应用于词嵌入学习的技术之一,由谷歌在2013年推出。它使用浅层神经网络,将单词映射到向量空间,捕捉词汇的语义相似性。
- Word2Vec 有两种模型:CBOW(连续词袋模型)和 Skip-gram。CBOW根据上下文词预测目标词,Skip-gram则根据目标词预测上下文。
优点:
- 能够高效地学习到低维度且能捕捉语义关系的词向量。
- 适用于大规模无监督文本数据。
缺点:
- 对于词汇的不同含义(如“bank”既可以指银行,也可以指河岸),它无法根据上下文进行区分。
-
GloVe:
- GloVe (Global Vectors for Word Representation) 是斯坦福大学提出的另一种词嵌入方法。它通过构建词汇共现矩阵并进行矩阵分解,生成词向量。它的目标是捕捉全局的语义信息,而不仅仅是局部上下文。
优点:
- GloVe捕捉全局语义信息,能够更好地反映词与词之间的统计关系。
- 提供了丰富的预训练模型(如Common Crawl和Wikipedia上训练的模型),可以在各种NLP任务中直接使用。
-
FastText:
- FastText 是Facebook提出的改进版Word2Vec,能够生成单词的子词级别嵌入。例如,FastText能够将词分解为多个n-gram(如“apple”可以分解为 “app”, “ple”),然后为这些n-gram生成向量。这使得FastText在处理稀有词或拼写错误时表现更好。
优点:
- 能够处理未见词(Out-of-Vocabulary, OOV)问题,因为它可以生成单词的子词嵌入。
- 适合多语言和拼写错误的文本处理场景。
-
ELMo:
- ELMo (Embeddings from Language Models) 是一个上下文相关的词嵌入模型。与Word2Vec不同,ELMo可以根据不同的上下文为同一个词生成不同的嵌入向量。例如,词“bank”在“银行”和“河岸”这两种不同的上下文中会有不同的词向量。
- ELMo基于双向LSTM,通过联合语言模型的方式,结合上下文信息生成词向量。
优点:
- 能够根据上下文动态调整词的表示,克服了Word2Vec静态词嵌入的问题。
- 在NLP任务中表现优秀,尤其是在句子级别的任务上。
-
BERT:
- BERT (Bidirectional Encoder Representations from Transformers) 是基于Transformer架构的预训练语言模型。BERT能够捕捉到单词的双向上下文信息,这意味着它不仅考虑当前单词的前后文,而且能够生成动态的词嵌入。与ELMo相似,BERT的词嵌入是上下文相关的,但BERT的架构(Transformer)使得它更强大。
- BERT的预训练任务包括掩码语言模型(MLM)和下一个句子预测(NSP),通过这两项任务使得它在各种NLP任务中表现优异。
优点:
- 动态的词嵌入可以根据上下文生成最符合语义的词向量。
- 在多个NLP任务(如问答、机器翻译、文本分类)中达到了最新的性能记录。
四、词嵌入的应用场景
词嵌入的主要优势在于其能够捕捉单词之间的语义相似性,并为许多NLP任务提供有力支持。以下是一些常见的应用场景:
-
文本分类:
- 在情感分析、垃圾邮件检测、主题分类等任务中,词嵌入可以作为输入特征,为神经网络模型(如CNN、LSTM)提供丰富的语义信息。
-
信息检索:
- 词嵌入帮助提高搜索系统的性能,通过嵌入空间中的语义相似性,用户查询词可以与文档中的内容更好地匹配。
-
机器翻译:
- 词嵌入能够捕捉不同语言中的语义关系,帮助机器翻译系统生成更符合语义的翻译结果。
-
命名实体识别(NER):
- 词嵌入在命名实体识别任务中用于表示输入的单词特征,结合上下文信息帮助模型识别出人名、地名、公司名等实体。
-
问答系统:
- 在问答系统中,词嵌入帮助模型理解用户问题中的词语语义,并从知识库中找到最合适的答案。
-
推荐系统:
- 词嵌入可以用于推荐系统,将用户的文本评论或搜索词转换为语义向量,从而为用户推荐相关的产品或内容。
五、Tokenizer(分词器)
Tokenizer 是将原始文本(通常是句子或段落)**转换为可处理的离散单词或子词单位(token)**的过程。每个 token 通常表示文本中的一个单词、子词甚至字符。Tokenizer 的主要作用是将自然语言的字符串转换为模型能够理解的数值输入形式。
特点:
- 文本到token映射:Tok