博客
关于我
AI基础:词嵌入基础和Word2vec
阅读量:798 次
发布时间:2023-04-17

本文共 2525 字,大约阅读时间需要 8 分钟。

词嵌入与Word2vec基础

词嵌入是自然语言处理(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向量

    我们可以通过以下代码加载预训练的GloVe向量:

    from gensim import downloader as api
    model = 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是一种具体的词嵌入方法,其训练流程可以分为以下几个步骤:

    1. 数据准备

    • 词汇表:确定词汇表的大小(vocab_size)。
    • 嵌入维度:设置嵌入的维度(embedding_size),通常为300或50。

    2. 初始化嵌入矩阵

    • 使用随机值初始化嵌入矩阵和上下文矩阵: [ \text{Embedding Matrix} \in \mathbb{R}^{vocab_size \times embedding_size} ] [ \text{Context Matrix} \in \mathbb{R}^{vocab_size \times embedding_size} ]

    3. 训练过程

    • 正样本:输入单词与其邻居单词(上下文单词)。
    • 负样本:随机选择非邻居单词作为负样本。
    • 点积计算:计算输入嵌入与上下文嵌入的点积。
    • 损失函数:使用sigmoid函数将点积转换为概率分数,并通过交叉熵损失函数优化模型。

    4. 负采样

    为了提高训练效率,Word2vec采用负采样技术。通过随机选择非邻居单词作为负样本,模型需要区分正例(邻居单词)和负例(非邻居单词),从而学习更有意义的嵌入。


    窗口大小和负样本数量

    Word2vec的训练过程中,窗口大小和负样本数量是两个关键超参数:

    • 窗口大小:通常设置为2-15(较小窗口嵌入表示词语可互换性;较大窗口更能反映词语的语义相关性)。
    • 负样本数量:通常设置为5-20。Gensim默认为5个负样本。

    结论

    通过上述内容,我们可以看到词嵌入与Word2vec技术的核心思想:通过高效的训练方法,生成语义相关的低维向量表示,从而为自然语言处理任务提供强大的语义理解能力。

    如果你对词嵌入感兴趣,可以进一步阅读相关论文和代码实现:

    • 参考文献
      • Distributed Representations of Words and Phrases and their Compositionality
      • Efficient Estimation of Word Representations in Vector Space
      • A Neural Probabilistic Language Model
    • 代码实现
      • Gensim的Python实现
      • Mikolov的原始C实现

    转载地址:http://mvgfk.baihongyu.com/

    你可能感兴趣的文章
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>
    MySQL - 解读MySQL事务与锁机制
    查看>>
    MTTR、MTBF、MTTF的大白话理解
    查看>>
    mt_rand
    查看>>
    mysql -存储过程
    查看>>
    mysql /*! 50100 ... */ 条件编译
    查看>>
    mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
    查看>>
    mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
    查看>>
    mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
    查看>>
    mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
    查看>>