zoukankan      html  css  js  c++  java
  • 机器学习笔记19(unspervised learning -> Word Embedding)

    unspervised learning -> Word Embedding

     简单来说,目的就是将文本信息进行编码,变为及其可以识别的向量 

    单词的表示

    人可以理解文字,但是对于机器来说,数字是更好理解的(因为数字可以进行运算),因此,我们需要把文字变成数字。

    • 中文句子以“字”为单位。一句中文句子是由一个个字组成的,每个字都分别变成词向量,用一个向量vector来表示一个字的意思。
    • 英文句子以“单词”为单位。一句英文句子是由一个个单词组成的,每个单词都分别变成词向量,用一个向量vector来表示一个单词的意思。
      在这里插入图片描述

    句子的表示

    对于一句句子的处理,先建立字典,字典内含有每一个字所对应到的索引。比如:

    • “I have a pen.” -> [1, 2, 3, 4]
    • “I have an apple.” -> [1, 2, 5, 6]

    得到句子的向量有两种方法:

    1. 直接用 bag of words (BOW) 的方式获得一个代表该句的向量。
    2. 我们已经用一个向量 vector 来表示一个单词,然后我们就可以用RNN模型来得到一个表示句子向量

    1-of-N encoding

    一个向量,长度为N,其中有1 11个是1,N − 1 N-1N−1个都是0,也叫one-hot编码,中文翻译成“独热编码”。

    现在假设,有一句4个单词组成的英文句子“I have an apple.”,先把它变成一个字典:
                “I have an apple.” -> [1, 2, 5, 6]

    然后,对每个字进行 1-of-N encoding:

    	1 -> [1,0,0,0]
    	2 -> [0,1,0,0]
    	5 -> [0,0,1,0]
    	6 -> [0,0,0,1]

    这里的顺序是人为指定的,可以任意赋值,比如打乱顺序:

    	5 -> [1,0,0,0]
    	6 -> [0,1,0,0]
    	1 -> [0,0,1,0]
    	2 -> [0,0,0,1]

    1-of-N encoding非常简单,非常容易理解,但是问题是:

    • 缺少字与字之间的关联性 (当然你可以相信 NN 很强大,它会自己想办法)
    • 占用内存大:总共有多少个字,向量就有多少维,但是其中很多都是0,只有1个是1.
      比如:200000(data)*30(length)*20000(vocab size) *4(Byte) = 4.8 ∗ 1 0 11 4.8*10^{11}4.8∗1011 = 480 GB

    Bag of Words (BOW)

    BOW 的概念就是将句子里的文字变成一个袋子装着这些词,BOW不考虑文法以及词的顺序。

    比如,有两句句子:

    1. John likes to watch movies. Mary likes movies too.
    2. John also likes to watch football games.

    有一个字典:[ “John”, “likes”, “to”, “watch”, “movies”, “also”, “football”, “games”, “Mary”, “too” ]

    在 BOW 的表示方法下,第一句句子 “John likes to watch movies. Mary likes movies too.” 在该字典中,每个单词的出现次数为:

    • John:1次
    • likes:2次
    • to:1次
    • watch:1次
    • movies:2次
    • also:0次
    • football:0次
    • games:0次
    • Mary:1次
    • too:1次

    因此,“John likes to watch movies. Mary likes movies too.”的表示向量即为:[1, 2, 1, 1, 2, 0, 0, 0, 1, 1],第二句句子同理,最终两句句子的表示向量如下:

    1. John likes to watch movies. Mary likes movies too. -> [1, 2, 1, 1, 2, 0, 0, 0, 1, 1]
    2. John also likes to watch football games.           -> [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]

    之后,把句子的BOW输入DNN,得到预测值,与标签进行对比。
    在这里插入图片描述

    word embedding

    词嵌入(word embedding),也叫词的向量化(word to vector),即把单词变成向量(vector)。训练词嵌入的方法有两种:

      • 可以用一些方法 (比如 skip-gram, CBOW) 预训练(pretrain)出 word embedding ,在本次RNN作业中只能用已有.txt中的数据进行预训练。

      • 可以把它作为模型的一部分(词嵌入层),与模型的其他部分一起训练
        在这里插入图片描述

  • 相关阅读:
    模板的一些概念和技巧
    [转] Linux TCP/IP网络小课堂:net-tools与iproute2大比较
    [转] boost库的Singleton的实现以及static成员的初始化问题
    static对象的高级用法
    const中的一些tricky的地方
    delphi软件启动的顺序解密。
    属性名、变量名与 内部关键字 重名 加&
    delphi Inc函数和Dec函数的用法
    Centos 关闭防火墙
    IntelliJ IDEA 启动方法
  • 原文地址:https://www.cnblogs.com/Haozi-D17/p/13644428.html
Copyright © 2011-2022 走看看