本文共 2525 字,大约阅读时间需要 8 分钟。
词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。简单来说,它是将一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。词嵌入的核心思想是,通过低维向量表示词语,能够捕捉词语之间的语义关系,从而在许多自然语言处理任务中发挥重要作用。
在此之前,我曾撰写过多篇AI基础的快速入门文章。本篇文章将深入探讨词嵌入的基础以及Word2vec这一具体方法。
你是否知道五个人格特质测试可以用向量表示你的个性?通过测试,我们可以将一个人的个性用0到100的范围表示,其中0是最内向的,100是最外向的。这种方法不仅能反映一个人的性格特质,还能通过向量相似度计算人与人之间的性格相似度。
以下是一些关于个性嵌入的示例:
单维度表示:
一个维度的信息显然不足以全面反映一个人的个性。因此,我们需要添加多个维度来捕捉不同方面的个性特征。向量表示:
通过多个维度的向量表示,我们可以比较不同个体的性格特质。例如,测试结果显示,一个人的内向/外向得分为38/100,可以用向量表示为(-0.5,0.3)。虽然我们不知道每个维度代表什么,但整个向量却能提供丰富的信息。相似度计算:
通过余弦相似度,我们可以计算两个向量之间的相似度。例如,向量A为(0.4,-0.2),向量B为(0.3,0.1),它们的相似度可以通过以下公式计算: [ \text{相似度} = \frac{A \cdot B}{|A| \cdot |B|} ] 这里的A·B表示两个向量的点积,|A|和|B|分别表示向量的模长。词嵌入的两个核心思想是:
以下是一个简单的词嵌入示例:
我们可以通过以下代码加载预训练的GloVe向量:
from gensim import downloader as apimodel = api.load('glove-wiki-gigaword-50')
然后,我们可以查看“king”这个词的词嵌入表示:
model["king"]
输出是一个包含50个数字的向量列表。例如: [ [0.50451, 0.68607, -0.59517, \dots, 1.493] ] 这些数字代表了“king”这个词在50个不同的语义维度上的嵌入值。
通过model.most_similar("king")
方法,我们可以找到“king”最相似的词语及其相似度分数:
model.most_similar("king")
输出可能如下: [ [('prince', 0.8236179351806641), ('queen', 0.7839042544364929), \dots] ] 这意味着“king”与“prince”、“queen”等词语的语义最为相似。
词嵌入技术在实际应用中有广泛的应用,尤其是在语言模型中。以下是一个简单的语言模型示例:
智能手机键盘的下一个字预测功能就是一个典型的语言模型应用。语言模型接受输入的前两个字(例如“thou”和“shalt”),并预测接下来的字。
模型的预测过程可以想象为一个黑盒子: [ \text{模型} \xrightarrow{输入} \text{输出}(词汇表中的每个单词的概率) ] 在实际训练中,模型会通过以下步骤学习:
Word2vec是一种具体的词嵌入方法,其训练流程可以分为以下几个步骤:
为了提高训练效率,Word2vec采用负采样技术。通过随机选择非邻居单词作为负样本,模型需要区分正例(邻居单词)和负例(非邻居单词),从而学习更有意义的嵌入。
Word2vec的训练过程中,窗口大小和负样本数量是两个关键超参数:
通过上述内容,我们可以看到词嵌入与Word2vec技术的核心思想:通过高效的训练方法,生成语义相关的低维向量表示,从而为自然语言处理任务提供强大的语义理解能力。
如果你对词嵌入感兴趣,可以进一步阅读相关论文和代码实现:
转载地址:http://mvgfk.baihongyu.com/