[翻译6.2下] Word Vector Embeddings

本篇是 Word Vector Embeddings的实现部分。

该章节位于Tensroflow For Machine Inteligence这本书的自然语言处理部分。

在第六章的翻译中把6.2 分为了上下两部分,上半部分相当于前言,先半部分是实现。


第六章的world Vector Embeddings结构

6.2.1Preparing the Wikipedia Corpus

在准备去详细介绍skip-gram模型之前,需要先准备数据集---在本案中使用英文维基百科数据集。默认的数据集含所有页面的完整修订历史记录,当前页面版本的文本大约有100GB,但已经有足够了。这次的练习也使用其他的语言可以用,您可以在Wikimedia下载网站上查看可用转储的概述:https://dumps.wikimedia.org/backup-index.html.




为了可以将获取的数据中转化成正确的格式,这里需要有两部操作。正如你之前在本书中看到的,数据收集和数据的清洗都是必须且重要的任务。最终,我们要遍历维基百科页面,将他们表示为one-hot编码词。采用一下步骤:

1.         下载数据集,提取页面和单词。

2.          统计单词形成最常用单词的vocabulary

3.          使用vocabulary对提取的页面编码。


在主存上对整个文集(维基数据集)修改做起来不太容易,所以我们必须使用数据流(data stream)一行一行的读取文件,并把中间(intermediate)结果写入到磁盘上。如果这样照做,我们在这些步骤之间就有检查点,如果有什么出现崩溃的话,不必从头开始。我们使用以下类来处理维基百科。在Init()上对文件是否存在进行检查。



实现init()

注意,我们还不得不去实现Wclass的两个重要函数。第一个是_read_pages() 会下载Wikipedia数据库,并从该数据库中解压出XML文件,然后迭代页面并提取纯文本以摆脱任何格式。为了读取压缩文件,我们需要bz2模块提供的open()方法,它的工作方式与其标准的等效工具类似,但是即使在流式传输文件时也需要处理压缩和解压缩。我们节约存储空间,我们会对中间结果压缩。用于提取单词的正则表达式仅捕获连续字母的序列和个别出现的某些特殊字符。


我们需要一个用于one-hot 编码的vocabulary. 然后我们可以用词汇表中的intex来对每个单词进行编码。为了移除拼写错误的和未知的单词,vocabulary中只包含vocabulary-1个最常用的单词以及一个 符号用于替代vocabulary中不存在的单词。这个符号也会在word-vector中给出,以后我们可以用它来代表未曾见过的单词。

由于我们提取到的是纯文本,并为单词定义了编码,我们可以现场形成以训练实例。(one the fly应该是俚语,大意是随后,现场)这样的做法很棒,因为存储示例需要大量的存储空间。由于大部分时间都会花在训练上,所以这对性能影响不大。我们也希望将所得到的样本分批分组,以便更有效地进行训练。由于分类器并不需要太多的内存,我们可以使用很大的批次。


那么我们如何形成训练实例呢?请记住,skip-gram模型预测的是当前单词的上下文单词。在遍历文本的时候,将当前单词作为数据将它周围的单词作为target,用这种方式创建训练样本。假设上下文距离是R=5, 我们可以对每个单词产生10个训练样本,左右五个单词作为目标。然而,有人可能会认为近邻比远邻更重要的语义语境。因此,我们通过随机选择一个上下文大小来创建较少的带有远端语境的训练样例,对于每个单词来说,上下文的大小在[1,D=10]中随机产生。



3

6.2.2 Model structure

现在,Wikipedia 数据集已经准备好了,开始定义模型来计算word embeddings.


word embeddings.类

每个单词开始由一个随机向量表示。从单词的中间表示中,分类器将尝试预测其上下文单词之一的当前表示。然后,我们将传播错误来调整输入词的权重和表示。因此,使用tf.Variabale表达表示。如下图


使用tf.Variabale表达表示

使用MomentumOptimizer并不是太好,但这种优化器的优势是可以很快的收敛。这使得它在庞大的维基百科语料库上表现的很好,Skip-gram背后的思想是可以在更聪明的算法上使用更多的数据。


使用MomentumOptimizer

我们模型中现在唯一缺少的就是分类器了。这是skip-gram模型成功的关键,下面我们会介绍这个分类器如何工作。


6.2.3 Noise Contrastive Classifier

对于skip-gram模型来说,可以使用很多种代价函数(cost function), 但是noise-constrastive estimation loss代价函数被认为是效果最好的。理想情况下(ideallly),我们不仅要让预测接近目标,而且还要远离当前单词不是目标的单词。虽然都可以很好地模拟为softmax分类器,但我们不希望每次都计算和训练字母表中所有单词的输出。总是使用一些新的随机向量作为负面的例子的方法,也被称为对比的样本。虽然需要几十个类,平均到softmax分类器需要经过足够的训练迭代。为此,Tensorflow 提供了一个较为方便的函数tf.nn.nce_loss函数。


Noise Contrastive Classifier 实现

  6.2.4 Training the model

如今已经准备好数据库,也定义好了模型。还剩一些代码需要把所有的东西连在一起。训练过后,我们将最后的embeddings存储到另一个文件中。下面的示例是在普通CPU下,使用Wikipedia的子集训练需要5个小时左右。如果要使用全集,只需要将URL切换成https://dumps.wikimedia.org/enwiki/20160501/enwiki-20160501-pages-meta-current.xml.bz2即可。

正如你所看到的,我们会使用一个AttrDict类。它相当于一个python的dict, 只不过我们在访问关键字(key)的时候,可以得到其属性(attributes)。更多细节,请参阅代码结构和实用程序一章(the chapter Code Structure and Utilities )。


trainging model

经过大约5个小时的训练以后,我们将把学习的embeddings作为一个Numpy数组存储。当我们在以后的章节中想要使用这个embeddings的时候就没有必要在计算了。直接拿来使用就行。在网上有预先训练的词语嵌入(pre-trained word embeddings),我们稍后会在需要时给出这些embeddings。


2018年1月2日。


下周:

第三节  6.3 Sequence Classification

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,446评论 25 707
  • 这个系列的第六个主题,主要谈一些搜索引擎相关的常见技术。 1995年是搜索引擎商业公司发展的重要起点,《浅谈推荐系...
    我偏笑_NSNirvana阅读 6,597评论 3 24
  • 个人知识管理是帮助个人整合自己的信息资源,提升学习与工作效率,提高个人竞争力的一种管理方法。作为一名当代大学生...
    既然青春留不住_520阅读 438评论 0 0
  • 当时天都要塌下来的feel,如今好像也没什么大不了,其实过了那个桥,又怎会害怕那鸿沟。在此十分感谢你,也许没有你,...
    公子月辰阅读 205评论 0 0