00:00
大家好,今天跟大家讲一下word to actor的实现。啊,大家有兴趣的话,可以下载这篇论文一。嗯。于是生向文虽就是你做N的话,就是你须要一能就跟喝一,你现在是必要。嗯,好,然后关于呃这篇论文,其实我这里也有写。啊,嗯。嗯。哦,这里。就是比较详细的阐述了的两种,一个时代一些,呃,近似训练法,就是优化方法吧。
01:01
啊,这个是比较,就是比较复杂,比较全面,用的数据集很复杂很也是一个很大的数据集,然后。呃,过程也是很。很仔细的啊,今天我实现的这个是一个,呃,乞丐版,就是比较简单,而且数据也比较小。嗯,好,那我就呃开始写吧。呃呃,再再强调一遍,就是如果你不了解,你要先去看懂。就然后再来看我的代码实现。嗯。
02:29
嗯,它怎么没有代码提示了。哦,那我就直接copy一下吧。嗯,然后是内心。诶,现在怎么都没有提示。
03:02
啊,我打字。啊,经常容易打错,请大家谅解一下,嗯,然后我先把语料弄过来,就是非常小的一个数据集。自己随便乱写的。嗯。然后的话,先把这些数据集。转成list,把这些词都取出来,然后放到一个list里面去。那么这个。就会生成比如说Jack。Black。Dog,然后他就会把这些所有的词都呃一个一个放到列表里面去,就这样子,嗯之后呃去一下虫,构建一个就是词汇的语料库。
04:00
Set就可以驱虫,把这个list放进去。那他就驱虫了,驱虫之后呢,我。构建一个单词到索引的映射。之后获取一下这个呃,词汇语料,语料库的。呃,有多少个单词?OK,这样的话就数据就准备完了。嗯,准备好数据了,我看一下啊。嗯,准备好数据之后呢,是这样的,呃,如果你已经了解了wordor的话,它其实实际上就是。
05:02
我给定一个中心词。啊,比方说现在我我这个,诶。比方说现在我有这么一个文本,就是Jack like dog,然后Jack like cat,然后一直往下,然后我就要需要把这些啊都换成索引好,换成索引之后就是下面这就是下面这呃一个list,然后呢,我要比方说我我我的那个呃。窗口大小是二,那就是说我现在首先第一我以这个作为中心词,它是中心词,然后窗口为二,就是说我选取左边长度为两二单位的词,以及右边长度为二单位的词,那么呃,它作为中心词,然后以零和一作为背景词,这两个零和一直作为背景词,然后呃。就是他们共同出现的一个概率要最大。然后就是继续往下作为中心词。
06:02
他左边两个单位,右边两个单位。它的概率最大,然后它在作为中心词,左边两个单位,右边两个单位就是这样一次方向啊,那么我首先我先要定义一些模型的一些参数。好,嗯,首先C就是二吧,就是窗口大小。BY。嗯。还有一个隐藏层神经元个数。不对,就是或者是那个。就是你一个词要用多少维的向量去编码。比方说两维度,因为我这些,呃,我语料特别少,我的数据特别少,所以我就只用一个两一个单词,我用一个两维的向量去编码就可以了。Word。
07:00
Inviting the dimension。它的维度。嗯,大概这么多吧。好,现在呃参数已经准备好,那我就要去构建中心词以及呃词的list。OK,嗯,首先。我定一个列表。
08:02
这叫skips,然后呃,我去便利一下。这个。词汇。啊,应该便利一下这个list。编辑一下这个例子。嗯嗯。那是这样。我从C开始。然便利到它减去C。这样的,因为我一开始要取的词啊。就是比方说他现在是以这样的一个顺序排列的。那我一开始如果取件的话,它左边是没有背景词的,所以就不行,我取这但是我的呃。
09:04
我的窗口是二,但是它左边只有一个背景词也不行,所以我一开始就要设置为这里,这一开始是中性词,这样的话它就左边就足足够的位置,呃去作为背景词,同样的比方说这个就已经是最后一个词了。那么我就。不能选到这里。比方说我选到这了,那么它右边也没有足够的景色,所以我应该选到这儿就停下来啊,这样的话它右边还有足够的景色,所以就是啊range从C到。它的长度减去C这个范围。啊,就是中心词,中心词是什么呢?就是。嗯。首先呃去,嗯。这里运用IDX吧。
10:03
首先我要用。查字典,找出它的索引。Okay。呃,我想想。对,然后嗯。去找背景词。背景词的话,我就用一个。Contest。Next首先是左边。左边的背景词以及右边的背景词,那我先找左边的背景,左边的背景词就是说从range。嗯。Atx。减C。到IDX不包括ID,然后加上list ix加一到IDX加C。
11:06
再加一。之后呢,Contest?赵振宇。Word图DX。嗯,我想这里应该是个。For I in,那这里就写I。OK。那么这样的话,每一次便利就可以得到一个center和一个contest。呃,得到了之后呢,我要把它们组合起来。是这样子的,就是说你看啊,比方说一开始我找到中心词是这个,然后背景词是这两个,那么它中心词就是这个,那么它对应的背景词就是零一和零一,那我要怎么组合呢?我要把。
12:03
二它是中性词吗?那么它有哪个背景词呢?有零。组合啊,一匹配,然后这个和这个匹配,然后这个这个匹配这个再这个匹配,这个这个匹配,然后呢,当下一个中心词的时候,比方说变成这个中心词了,那么它就要和这个匹配一次,这个再匹配一次,这个再匹配一次。这个再匹配就是这样子,那么它就应该构建出这样的一个向量。二呃,就是下面这个。就是它会构建出二零,然后212021,然后到零了,就是0102,然后零一,然后还有个零三,这样子就依次往下全部匹配起来。那么嗯。嗯,我想那么一开始的话。就是。
13:03
哦,我先,嗯。我遍历一下这个contest。About the sca gras their。首先一开始的位置是。然后是W。对,应该就。想想center是中心词的索引。然后嗯,W的话是循环的,对是的。啊。嗯。IDX。哦,这个X哦,我这里应该写上的是。
14:00
是这个。对,那么这后面的话。啊。也要这样。然后看一下这个它的长度是,它是多少度。啊,168OK。那么这个就构建完了。啊,不知道这里我有没有讲清楚。哦,为什么要这样做?呃,如果大家看过论文的话,应该就就会明白了。啊之后呢,我得到这个之后啊,我的输入是什么呢?我的输入是一个one hot。是这样子的啊,首先我得到一个这样的一个呃,预预处理的一个数据,然后我的input就是我的X是什么呢。首先我前面全部都是中心词对吧?啊是这样子的,因为它有两种方法,一种是就是用中心词。
15:06
生成背景词的概率,还有一种是用背景词生成中心词的概率。这对于第一种来说,用中心词生成背景词的概率,那么我送入,送入的X就是我的中心词,所以啊,但是它送的是个one hot,它的one。长度是多少呢?长度是你整个。词点的长度,就是你的整个词构建的词有多多少个词,那我的呃,就是vocaular size就是我这里定义的vocabular。那什么位置唯一呢?就是你所在的这个位置为一吗?就是很普通的one hot。好,那我就。写下。哦,我传进来的是skip gras。Input data。
16:00
嗯。AB吧,这个A是什么呢?A就是这个。B就是这个。嗯。然后。首先我要生成一个对角矩阵,对吧,我要我要用。派点I这个函数,它传入这个int类型的数,比方说传入五的话,那么它就会生成一个五行的对角矩阵,这个矩阵啊,对角线上是一,其他地方都是零,首先我用N派减派这个函数。里面的传入,那我生成多少行呢?啊,多少行其实也就是多少列对吧,因为它它是一个呃方阵有多少行就多少列,呃多少列呢,我前面说过,它的列是我cabular下怎么大小的这size。然后我要。我得到这个矩阵以后,我要取出里面的第几行呢?我要取出的是。
17:00
他所比方说这里是二的话,那么就是。啊,这是下边,下边是零,这是一,这是二,那么二位置上应该是一,所以我要取出的就是第二行,那就是在这个数值当中当中的。第一个,呃,向量里面的第一个值。那其实就是A对吧。好,那么它得,它得到的就是一个向量,我要把这个向量呃碰到input data里面去一呃,慢慢慢慢往下叠加。那么output呢就很简单了,Output就直接把B添加进去就可以了,B。他就是把B。一个个添加进来,呃,就是y out data就是YY是不需要one hot的,就输入是one hot,输出是类别啊,输出是类别,它是不需要玩hot的。
18:01
OK,然后return。好,那么我就构建data size,然后定义data。嗯。
19:08
嗯,大就是白赛。吓跑人数。OK,那就是这样,然后嗯,之后就定义模型就可以了,模型完了就训练,后面就很简单了。Class were。这是不是中文的逗号啊?
20:03
首先这个X它的输入的。A ship是by side。然后vocabulary size大小的,这是。首先这是整完整的一个数据集,X就是这个东西,我要从里面取出一个mini,然后就是这个东西取出来mini就是它,然后它呢。它的行肯定是,呃呃是白size,他们它的列就是从这里面取出来嘛,就是我开ular size这么大的,这个应该很好理解。OK,然后我定义呃,数据首先。self.w。等于。嗯,我跟它匹配,呃,尺寸匹配,所以说这里是我bular size,然后输出的话是M,因为我是一个编码称MV的向量,每个词编码为MV的向量。
21:15
这里就V。啊,这个尺寸等会再写。先在这里乘一下。开麦。X乘以self.w那么它输出的是一个size乘以一个M的一个呃向量啊呃。然后嗯,Output。就是to mm。Hidden纯ce.v。
22:03
那他输出的应该是什么样的一个,呃,尺寸呢,它的尺寸肯定是size,呃。那么第二个维度应该什么呢?应该是。嗯。就是,呃,应该是vocabulary size这么大。为什么呢?比方说呃,我现在这个成了之后就是黑它的尺寸。是这个是size。然后啊,这里是M的。对吧。哎呀,这写的有点丑。这是ma的,那么我的out应该是什么?Out肯定也是,这边也是摆。但他这有多少列呢?其实我在最后也就是一个分类问题对吧,所以我这一共有多少类呢?我一共有呃,我词典里面有多少词我就有多少类,所以这这里也是我cab size。
23:03
Aside。对吧,所以这个就很好理解,那么就是。所以它的第一个尺寸应该是M,然后第二个值应该是what。啊,我看看应该没问题了。Our return onput。看有没有问题。快。嗯。嗯。
24:17
哦,这里少了来。哎,然后训练就可以了,嗯。啊。训练2000个I four I X y in。行。嗯,首先要把它们全部移到上面去。
25:03
之后,Predict就等于model X。嗯。计算一下loss。WHY?正好打印一下。嗯。STEM。
26:06
苦恼。Device。这里没有印象。嗯,应该没有什么问题,让它运行就可以了。啊,我先在这里把后面的代码copy过来,后面其实就就有这个画图的函数,这个不是重点。就直接超换就可以了。
27:15
好。这样的话就训练完了啊,画个图看一下。哦,不好意思,要倒。呃,因为我是一个两维的,呃,每个词用的是一个两维的向量,其实我刚好就可以把第一维度的第一个维度作为X,然后第二维度作为Y,这样画出来可以看一下,如果更高维的话就不好看了,嗯,是这样的,可以看到比方说。啊,当然了,因为这个数据集比较小嘛,而且呃,写的一个也是一个很简单简略,呃简陋的一个版本,所以说结果大概也就这样子吧,可以看一下,当然这个过程就是这么个过程。
28:12
嗯,大概就这样子吧。然后呃,如果我这里我在视频里面没有讲讲到的地方,或者是讲仔细的地方,我在这篇文章当中提到了,大家可以去看一下。如果说不懂的话,可以在这里看一下,然后有问题的话可以评论啊这篇,呃,这个代码是我是从这个代码上修改的。看一下他,呃,我做的还是比较大的改动,因为它里面有一些首先他没有用的那种data load的方式去读取,呃,去获取数据啊,我用的是data load,这样的话,因为我想大家以后如果数据集比较大,这样的话可以比较方便扩展。而且他还用了这种就是呃to的一个老的特性,现在已经不用了。
29:08
OK,那么嗯,大概就这样子吧。啊。好,那就大概这么多,谢谢大家,谢谢观看。
我来说两句