一、Word Embedding(词嵌入)简介
Word Embedding(词嵌入): 词嵌入技术是自然语言处理(NLP)领域的一项重大创新,它极大地推动了计算机理解和处理人类语言的能力。
通过将单词、句子甚至图像转换为数字向量,词嵌入技术不仅改善了文本的表示方式,更重要的是,它捕捉到了语言的本质
Word Embedding
语义搜索(Semantic Search): Word Embedding这一创新使得语义搜索成为可能,我们能够更精准地理解和分析不同语言的文档。通过探索这些高级的数值表示形式,我们能够洞察计算机是如何开始理解人类语言的细微差别的。 这一进步正在改变我们在数字时代处理信息的方式,使得我们能够更高效地处理和分析大量的文本数据。
2.原理
词嵌入模型则通过将词映射为连续的向量,使得语义上相似的词在向量空间中的位置相近,从而捕捉到了词之间的语义关系。
语义相似性
Word2Vec: 一种基于神经网络的词嵌入模型,它利用神经网络来训练词向量。在训练过程中,Word2Vec通过预测上下文中的词来学习词向量,使得语义上相似的词在向量空间中的距离更近。
它通过在大规模文本语料库上的训练,能够理解单词间复杂的关系,如同义词、反义词和关联词,这些都是通过向量空间的几何属性来实现的。
Word2Vec
Word2Vec工作原理: 通过一个简单的双层神经网络来从大量文本中学习单词之间的联系。 这一模型的设计基于一个核心假设:出现在相似语境中的单词在语义上是相似的。
Word2Vec通过两种主要的训练算法来实现这一目标: 连续词袋(CBOW)和Skip-Gram。 这两种算法在处理单词上下文的方法上有所区别,但共同致力于捕捉单词之间的语义关系。
1.连续词袋(CBOW)
工作原理:CBOW模型通过上下文(即周围的词)来预测当前词。具体来说,它首先接收上下文中的多个词向量作为输入,然后通过对这些词向量的处理(如求和或平均)来预测目标词。
实现方式:CBOW模型通常包括输入层、隐藏层和输出层。输入层接收上下文词的one-hot编码,隐藏层通过权重矩阵将输入转换为低维的密集向量,输出层则使用softmax函数来预测目标词的概率分布。
优点:在处理大型语料库时,CBOW模型能够平滑许多分布信息,对于较小的数据集表现较好。
2. Skip-Gram
工作原理:与CBOW相反,Skip-Gram模型通过当前词来预测上下文中的词。它接收一个中心词的词向量作为输入,然后尝试预测该词周围一定窗口大小内的上下文词。
实现方式:Skip-Gram模型同样包括输入层、隐藏层和输出层。但在这里,输入层只接收中心词的one-hot编码,隐藏层同样通过权重矩阵转换为密集向量,而输出层则尝试为上下文中的每个词分配概率。
优点:Skip-Gram模型在处理较小数据集时表现更好,尤其是在捕捉稀有词上。此外,它通常能够学习到更细致的词向量表示。
3.实现流程
1. 语料库准备
- 数据收集:从各种渠道收集大量的文本数据,这些渠道可以包括新闻网站、社交媒体平台、书籍、学术论文等。例如,若要训练一个新闻领域的词向量模型,就可以从各大新闻媒体网站抓取新闻文章作为语料库的基础数据。
- 数据预处理
- 分词:将文本分割成单个的词或标记。对于英文文本,通常可以使用空格和标点符号进行简单分割;对于中文文本,需要使用专门的分词工具,如结巴分词。例如,“我爱自然语言处理” 经过分词后可能变为 “我 爱 自然语言处理”。
- 去除停用词:停用词是指在文本中频繁出现但对语义表达贡献较小的词,如 “的”“是”“在” 等。去除停用词可以减少数据的噪声,提高后续处理的效率。
- 标准化处理:包括将所有单词转换为小写形式,统一数字、标点符号的表示等。例如,将 “Apple” 和 “apple” 都转换为 “apple”。
2. 词汇表构建
- 提取唯一词汇:对预处理后的语料库进行遍历,提取其中出现的所有唯一词汇。例如,对上述分词后的文本集合进行处理,得到一个包含所有不同词汇的列表。
- 过滤低频词:根据实际需求,过滤掉那些在语料库中出现频率过低的词汇。因为这些低频词可能是拼写错误或者非常罕见的词汇,对模型的训练贡献不大,反而会增加计算量和存储成本。
- 构建映射关系:为词汇表中的每个词分配一个唯一的索引,形成词到索引和索引到词的映射关系。这样在后续处理中,可以方便地通过词查找其索引,或者通过索引查找对应的词。
3. 词向量训练
- 选择模型:常见的词向量训练模型有 Word2Vec(包括 CBOW 和 Skip - gram 模型)、GloVe 等。以 Word2Vec 的 Skip - gram 模型为例,它的目标是根据当前词来预测其上下文词。
- 初始化词向量:为词汇表中的每个词随机初始化一个低维向量表示。这些初始向量是模型训练的起点,在训练过程中会不断调整和优化。
- 训练模型:使用预处理后的语料库对模型进行训练。在训练过程中,模型会根据输入的上下文信息,不断调整词向量的参数,使得语义相近的词在向量空间中的距离逐渐靠近。例如,在一个包含大量体育新闻的语料库中训练时,“篮球” 和 “投篮” 的词向量会在训练过程中逐渐变得相似。
- 保存词向量:训练完成后,将每个词对应的最终向量保存下来,以便后续使用。可以将词向量保存为文本文件、二进制文件等格式
4.基于别人预训练的词向量来实现:
self.embedding_pretrained = torch.tensor(np.load(dataset + '/data/' + embedding)["embeddings"].astype('float32'))\if embedding != 'random' else None self.embed = self.embedding_pretrained.size(1)\if self.embedding_pretrained is not None else 300
确定维度和以及预训练的模型
if config.embedding_pretrained is not None:self.embedding = nn.Embedding.from_pretrained(config.embedding_pretrained, freeze=False)else:self.embedding = nn.Embedding(config.n_vocab, config.embed, padding_idx=config.n_vocab - 1)
调用api 来训练