机器学习笔记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中的数据进行预训练。

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

原文地址:https://www.cnblogs.com/Haozi-D17/p/13644428.html