NLP-文本表示-词向量


一、词嵌入概述

词嵌入定义:词嵌入(word embedding)是一种词的类型表示,具有相似意义的词具有相似的表示,是将词汇映射到实数向量的方法总称。

one-hot:它忽略了词之间的相关性,当词过多时,维度比较高。
词嵌入:降低维度,使相似的词具有相似的向量表征。
在这里插入图片描述

词嵌入生成的方法

在这里插入图片描述

二、词嵌入模型

1、模型的输入输出

模型需要学到句子词与词之间的先后顺序,所以输入为前几个次,预测下一个次的概率。

例如:给定三个单词 Thou shalt not …

模型输入:Thou, shalt
模型输出: not

单词表有 10000 个次就是 10000 分类。
在这里插入图片描述

2、词嵌入矩阵建立

明确了输入、输出后。接下来,需要建立一个词嵌入矩阵。

词嵌入矩阵维度:有 10000 个单词,词嵌入的维度是 4,那么词嵌入矩阵的维度就是(10000, 4),每一个单词对应矩阵的一行。

矩阵初始值:随机初始化。

每一次训练,根据输入的单词,在词嵌入矩阵中找到对应的词向量,进行多分类任务训练,反向传播,更新权重,最重要的一点是:模型还会更新词嵌入矩阵权重
在这里插入图片描述
一种查找单词对应词向量的方法: 使用先将所有单词转化 one-hot 编码,用单词的 one-hot 编码与词嵌入矩阵相乘,得到对应单词的词向量。

例如:orange 的 one-hot 编码,除了 6357 为 1,其余位置全为 0。orange 的在词嵌入矩阵的位置同样是 6357。两个矩阵相乘, orange 的 one-hot 编码 只有 6357 为 1, 所以得到 (300,1)的 orange 的词向量。

在这里插入图片描述

3、模型数据集的构建

1)简单方式 -NNLM

选择合适适当的窗口,前几个次作为输入,最后一个次做为输出。
在这里插入图片描述
具体流程:使用将单词转换为 one-hot 编码,通过one-hot 编码转为对应的词向量,接入线性层,经过 softmax,进行训练。
在这里插入图片描述
网络结构:
在这里插入图片描述

2)word2vec: CBOW

上述方式只考虑了前面单词,没有考虑后面单词的顺序。

CBOW : 通过上下文的单词来预测目标单词。
在这里插入图片描述

3)word2vec: skip-gram

skip-gram : 通过当前单词,预测周围的词
在这里插入图片描述

4、负采样

以 skip-gram 为例:当输入分别单词为 not, make, a,machine, in,输出对应如下图:
在这里插入图片描述
最终进行多分类任务:
在这里插入图片描述
反向传播更新参数和词向量矩阵:

上述任务中,最后一层,需要添加 softmax 层,当词表过大时,计算相当慢。
在这里插入图片描述

初始方案:假设用一个次预测后一个单词,是一个 10000 分类任务。当把两个单词同时作为输入时,预测两者同时出现的概率,就是一个二分类问题。
在这里插入图片描述
上述的数据集转换成如下形式
在这里插入图片描述
数据集中全是正样本,训练效果不好,因此需要增加负样本,即负采样。

在这里插入图片描述

由此,每次迭代不是 10000 分类, 而是转为 5 个二分类任务,提高计算效率。

三、整体流程

1、初始化词向量矩阵
在这里插入图片描述
2、根据输入查找对应的词向量
在这里插入图片描述

3、反向传播更新权重参数以及输入的词向量在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Word2Vec.Net 是单词转换成向量形式工具Word2Vec .NET版本。使用示例代码:            var builder = Word2VecBuilder.Create();             if ((i = ArgPos("-train",  args)) > -1)                 builder.WithTrainFile&#40;args[i   1]&#41;;             if ((i = ArgPos("-output", args)) > -1)                 builder.WithOutputFile&#40;args[i   1]&#41;;             //to all other parameters will be set default values             var word2Vec = builder.Build();             word2Vec.TrainModel();             var distance = new Distance(args[i   1]);             BestWord[] bestwords = distance.Search("some_word");或者//more explicit option         string trainfile="C:/data.txt";         string outputFileName = "C:/output.bin";         var word2Vec = Word2VecBuilder.Create()             .WithTrainFile&#40;trainfile&#41;// Use text data to train the model;             .WithOutputFile&#40;outputFileName&#41;//Use to save the resulting word vectors / word clusters             .WithSize(200)//Set size of word vectors; default is 100             .WithSaveVocubFile&#40;&#41;//The vocabulary will be saved to <file>             .WithDebug(2)//Set the debug mode (default = 2 = more info during training)             .WithBinary(1)//Save the resulting vectors in binary moded; default is 0 (off)             .WithCBow(1)//Use the continuous bag of words model; default is 1 (use 0 for skip-gram model)             .WithAlpha(0.05)//Set the starting learning rate; default is 0.025 for skip-gram and 0.05 for CBOW             .WithWindow(7)//Set max skip length between words; default is 5             .WithSample((float) 1e-3)//Set threshold for occurrence of words. Those that appear with higher frequency in the training data twill be randomly down-sampled; default is 1e-3, useful range is (0, 1e-5)             .WithHs(0)//Use Hierarchical Softmax; default is 0 (not used)             .WithNegative(5)//Number of negative examples; default is 5, common values are 3 - 10 (0 = not used)             .WithThreads(5)//Use <int

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大虾飞哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值