引言

本文主要讨论单词嵌入(Word Embedding)。是用在文本上的降维方法。

单词嵌入

喂给机器大量的文章后,它可以自动的把每个不同的词汇都用一个向量来表示。
我们希望机器在用向量来表示词汇后,向量每个维度都代表某种含义。
或者说这些词汇有相似的关系或某种语义,能在这个向量中呈现出来。

这些来描述词汇的向量我们就称为单词嵌入

一次词汇如果只用一个向量来描述它,最简单的方法就是1-of-N Encoding

就是说,假设英文总共有10万个单词,我们就创建一个10万维度的向量。每次单词我们都用这个10万维的向量表示,但是这个向量只有其中一维是1(代表那个单词出现),其他都是0。

以5维词汇来举例就是上面的样子。这种表示方法有很多缺点,重要的一个是词汇之间的关系无法表示出来。

怎么办呢,我们对词汇也可以做聚类。

把动物放到一类;动作放到一类;植物放到一类。但是这样做太粗糙了。
这时我们可以做单词嵌入,在单词嵌入中,每个词汇不是硬归类于某个类别中,而是每个词汇都用一个 Continuous Vector(连续向量?)来描述,其中每个维度都可能代表某种含义。

我们看这个例子,红线下面的是植物,也可能有其他属性,比如代表不会动的东西;

所以单词嵌入的方式更加精细。
那如何找单词嵌入呢,如何用一个向量来描述这些词汇呢?
基本的概念是每个单词的意思可以从它的上下文看出来。

假设机器读到了“马xx5月20日宣誓就职”和“蔡xx5月20日宣誓就职”(和谐了),机器就可以知道马xx和蔡xx有某种相似的关系。

那如何来根据词汇的上下文来得到词的向量呢?

有两种方式:

  • 基于计数的(Count based)

    • 如果两个单词wiw_iwiwjw_jwj多次同时出现,那V(wi)V(w_i)V(wi)(单词wiw_iwi的向量)和V(wj)V(w_j)V(wj)的相似度应该要高
  • 基于预测的(Prediction based)
    • 预测接下来要出现哪个词汇

基于预测


假设你收集到了很多句子,接下来要机器做的事情是给定前面几个词汇,来判断接下来要出现哪个词汇。

希望找到一个NN,输入“潮水”和“退了”,期望机器输出“就”。可以使用最小化交叉熵的方式,让输出和“就”越接近越好。继续输入“退了”和“就”,期望输出“知道”。

这个东西适用场景似乎不多,可以在成语接龙。其实还可以用在语言模型(Language Modeling)上,
语言模型要做的事是预测一个句子出现的概率。

比如说想要机器预测出现“wreck a nice beach”这个句子个概率,实际上无法直接预测一个句子出现的概率,估测一个句子出现的概率时,通常会拆成很多小的片段。然后把这些片段分开去计算它的概率。
比如要计算上面那个句子出现的概率,先要计算由“wreck”开头的概率,然后后面接“a”的概率,同时“a”后面接“nice”的概率…。


也可以用上面的NN来做,这里把“START”也当成一个词汇,把它丢到NN中,看它预测“wreck”的概率是多少,把“wreck”丢里面看它输出“a”的概率是多少…,最后把这些概率都乘起来,就得到了这个句子出现的概率。

语言模型很重要,一般用在机器翻译和语音识别里面。

基于预测的方式是如何运作的呢。


每个词汇都可以用1-of-N encoding的方式来表示,只有一个维度是1,其他都是0的向量。

希望把这个向量丢到某个NN中,输出就是接下来出现每个词汇的概率。


如上,期望wiw_iwiwi−1w_{i-1}wi1之后出现的话,那么希望wiw_iwi词汇所对应的维度在上面的NN中输出的概率越大越好。

有了这些东西以后,接下来,我们把一个特征向量丢到NN里面去,把这个向量乘上一个矩阵做线性转换(降维)得到一个向量,再经过激活函数变成第一个隐藏层的输入。

我们要对每一个词汇取一个向量,把输入的特征向量(每个词汇的1-of-N encoding向量)乘上线性转换后的向量当([z1,z2,⋯][z_1,z_2,\cdots][z1,z2,])成表示这个词汇的向量。


这样相似的词汇就会有相近的向量。

但是这样只看一个词汇来预测下一个词汇,可能是不太够的。

我们希望机器去看比较长的前面的词汇来预测下一个词汇。


这里假设看了前两个词汇,向量xi−2,xi−1x_{i-2},x_{i-1}xi2,xi1的长度都是∣V∣|V|V,权重矩阵W1,W2W_1,W_2W1,W2都是∣Z∣X∣V∣|Z|X|V|ZXV的矩阵,很巨大。
因此,我们这里把W1,W2W_1,W_2W1,W2共享同样的参数WWW,最后如果只考虑前两个词汇的话,计算向量z=W(xi−1+xi−2)z=W(x_{i-1}+x_{i-2})z=W(xi1+xi2)就简单很多。

就是说wi−2w_{i-2}wi2词汇向量的第一维连到z1z_1z1的权重和wi−1w_{i-1}wi1第一维连到z1z_1z1的权重是一样的。

同样颜色的连线权重是同样的。这样每个词汇的权重都是固定的。

看前面词汇预测后面词汇还有一些变种,比如可以预测两个词汇中间的词汇,可以预测某个词汇左右两边的词汇。

参考

1.李宏毅机器学习

李宏毅机器学习——无监督学习(二)相关推荐

  1. 李宏毅机器学习笔记(二)-------Why we need learn Machine Learning?

    视频: 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p=2 真是一个逗波: A ...

  2. 机器学习-无监督学习-聚类:聚类方法(一)--- k-Means(k-均值)算法,k-Means++算法【使用最大期望值算法(EM算法)来求解】

    一.聚类算法 1.聚类算法概述 聚类算法:一种典型的无监督学习算法(没有目标值),主要用于将相似的样本自动归到一个类别中.在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计 ...

  3. 李宏毅机器学习——循环神经网络(二)

    引言 本文是接上一篇李宏毅机器学习--循环神经网络(一) Learning Target 在RNN中如何定义损失函数呢.还是以Slot Filling为例,给定一些句子作为训练数据 并且要给这些句子一 ...

  4. 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】

    密度聚类方法的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中. 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一 ...

  5. apriori算法_机器学习(无监督学习)关联规则Apriori算法原理与python实现

    关联规则Apriori算法 1.关联规则概述 关联规则算法是在一堆数据集中寻找数据之间的某种关联,通过该算法我们可以对数据集做关联分析--在大规模的数据中寻找有趣关系的任务.这些关系可以有两种形式:频 ...

  6. 算法——机器学习——无监督学习—— K均值(K-means)图解动画

    快速排序 简介 算法过程 算法过程详解 一:聚类 二:聚类中心移动 算法结束 简介 k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预 ...

  7. 吴恩达机器学习笔记-无监督学习

    机器学习-无监督学习 一.什么是无监督学习 二.聚类算法(无监督学习) 1.聚类算法的应用 2.K-Means算法 算法流程--图例 算法流程--文字描述 K-means分离不佳簇问题 K-means ...

  8. 机器学习(二)之无监督学习:数据变换、聚类分析

    文章目录 0 本文简介 1 无监督学习概述 2 数据集变换 2.1 预处理和缩放 2.2 程序实现 2.3 降维.特征提取与流形学习 2.3.1 主成分分析 2.3.2 非负矩阵分解 2.3.3 用t ...

  9. 【李宏毅机器学习】Unsupervised Learning - Word Embedding 无监督学习 - 词嵌入(p22) 学习笔记

    文章目录 Unsupervised Learning Word Embedding 用一个vector来表示一个word的几种方法 1-of-N Encoding Word Class Word Em ...

  10. 吴恩达机器学习(二)监督学习/无监督学习

    文章目录 1.监督学习 2.无监督学习 1.监督学习 定义: 根据已有的数据集,知道输入和输出结果之间的关系.根据这种已知的关系,训练得到一个最优的模型.也就是说,在监督学习中训练数据既有特征(fea ...

最新文章

  1. [学习笔记]Segment Tree Beats!九老师线段树
  2. std thread
  3. linux下1sa 密码失效,SA口令
  4. python standard lib_跟Python Standard Library混个脸熟(一)
  5. HTML基础_Day01
  6. KubeEdge vs K3S:Kubernetes在边缘计算场景的探索
  7. 《中国人工智能学会通讯》——6.25 日落的教训
  8. 21/100. Two Sum
  9. mapgis转arcgis数据后发现属性表内没有数据
  10. 教你遇事最有水平的处理方法
  11. 云计算机具体应用场景,云计算的定义、类型及应用场景
  12. 用计算机画图截图图片,电脑怎么截图
  13. 共享单车项目(一)--项目简介
  14. 雷声大雨点小:Bakkt「见光死」了吗?
  15. mac android 模拟器启动,react-native使用脚本启动android模拟器(macos)
  16. vmware校园网虚拟机无法连接网络解决方法
  17. 微信JSSDK invalid signature签名错误的解决方法
  18. 云计算基础:云计算运用越来越广泛,我们应该如何去学习云计算
  19. 计算机实用教学,【实用】计算机教学工作计划3篇
  20. 【云周刊】第130期:阿里研究院发布新网商五大预测,2020年将诞生第一个机器人网商?...

热门文章

  1. 性能测试学习01_理解性能测试基础知识
  2. springmvc集成shiro登录失败处理
  3. 转: Syslog协议介绍
  4. load,initialize方法
  5. Android对话框
  6. linux 下解决arp病毒攻击时上网问题的最简单的治标办法
  7. C#代码与javaScript函数的相互调用(转)
  8. java instanceof和isInstance的关系 精析
  9. LinuxDay19——加密与安全(2)
  10. Vagrant 手册之 Provisioning - file 配置程序