分享到:
您的位置: 首页 > 正文

教程 | 用数据玩点花样!如何构建skim-gram模型来训练和可视化词向量

2018/1/13 13:42:55 来源:机器之心 [ ]

选自Medium

作者:Priya Dwivedi

参与:柯一雄、路雪、蒋思源

本文介绍了如何在 TensorFlow 中实现 skim-gram 模型,并用 TensorBoard 进行可视化。原文http://www.qi-wen.com/

GitHub 地址:https://github.com/priya-dwivedi/Deep-Learning/blob/master/word2vec_skipgram/Skip-Grams-Solution.ipynb

本教程将展示如何在 TensorFlow 中实现 skim-gram 模型,以便为你正在处理的任意文本生成词向量,然后用 TensorBoard 进行可视化。我发现这个练习 1)有助于理解 skim-gram 模型是的工作原理;2)在 CNN 或 RNN 中使用词向量之前,先熟悉词向量捕获文本的关系。

我在 text8 数据集上训练了一个 skim-gram 模型,该数据集是英文维基百科文章的集合。我用 TensorBoard 来可视化这些嵌入。TensorBoard 允许使用 PCA 选择 3 主轴来投影数据,进而看到整个文字云。超级酷!你可以输入任何单词,它会显示相邻的单词。你也可以隔离最靠近它的 101 个点。推荐http://www.qi-wen.com/

看看下面的片段。

完整代码:https://github.com/priya-dwivedi/Deep-Learning/blob/master/word2vec_skipgram/Skip-Grams-Solution.ipynb

为了可视化训练过程,我还持续跟踪一组随机单词在模型中最靠近的预测单词。在第一次迭代中,最接近的预测单词看起来非常随机。这很合理,因为所有词向量都是随机初始化的。

训练结束时,该模型已经能更好地找到单词之间的关系。

Word2Vec 和 Skip-Gram 模型

创建词向量是基于大型文本语料库,为每个单词创建向量的过程,且语料库中语境相似的单词所对应的向量在向量空间中非常接近。

这些词向量可以很好地捕捉单词之间的上下文关系(例如,黑色、白色和红色的示例向量会紧密地结合在一起),而且使用这些向量(而不是单词本身)来完成文本分类或新文本生成等自然语言处理(NPL)任务,会得到更好的结果。推荐qi-wen.com

有两个主要的模型来生成这些词向量——连续词袋(CBOW)和 Skip-Gram 模型。CBOW 模型试图根据给定语境词预测中心词,而 skip-gram 模型试图根据给定中心词预测语境词。我们可以看一个简化的例子:

CBOW: The cat ate _____. Fill in the blank, in this case, it's「food」.

CBOW:这只猫吃了________。(句子填充)本例中,应该填「食物」。

Skip-gram: ___ ___ ___ food. Complete the word's context. In this case, it's「The cat ate」

Skip-gram:_______________食物。(句子填充)本例中,可以填「这只猫吃了」

如果你对这两种方法的详细对比感兴趣,请参见此链接:https://iksinc.wordpress.com/tag/continuous-bag-of-words-cbow/。

大量论文发现,skip-gram 模型能产生更好的词向量,所以我将重点放在实现这个模型上。网站http://www.qi-wen.com/

在 Tensorflow 中实现 Skip-Gram 模型

这里我只列出构建模型的主要步骤。详情请查看我的 GitHub repo。

1. 数据预处理

首先清理数据,删除标点、数字,并将文本分割成单个单词。比起单词,程序能更好地处理整数,因此我们创建一个「词汇转整数」字典,将每个单词映射到一个整数上。代码如下:

2. 子采样

经常出现的单词,如「the」、「of」和「for」,并没有给附近的单词提供太多的语境。如果丢弃一些,我们就可以消除数据中的的部分噪声,实现更快的训练和更好的表示。这个过程被 Mikolov 称为子采样(subsampling)。原文http://www.qi-wen.com/

3. 创建输入和目标

skip-gram 模型的输入是每个单词(编码为整数),而目标是围绕该窗口的单词。Mikolov 等人发现,如果这个窗口的大小是可变的,同时更接近中心词的单词被采样次数较多时,性能会更好。

「由于距离更远的词通常不如距离更近的词与目标单词的关系那么紧密,我们从远距离的词中采样较少的单词作为训练样本,以降低其权重……如果选择窗口大小= 5,那么我们将为每一个训练词随机选择一个 1 和窗口大小 5 之间的数字 R,然后将目标单词在句子中的前后 R 个单词纳入训练,作为正确的标签。」

4. 构建模型

下图展示了我们将要构建网络的一般结构(图片来源:http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/)。

我们把一个输入词如「ants」(蚂蚁)表示为独热向量。这个向量有 10000 个分量(每个分量都对应于词汇表中的一个单词),我们将单词「ants」对应的分量设为「1」,所有其他分量都为 0。网络的输出也是一个单向量(也包含 10000 个分量)。奇闻网

训练结束时,隐藏层将会有经过训练的词向量。隐藏层的大小相当于向量中的维数。在上面的例子中,每个单词都有一个长度为 300 的向量。

你可能已经注意到,skip-gram 神经网络包含大量的权重……在我们的例子中有 300 个特征和包含 10000 个单词的词汇表,也就是说在隐藏层和输出层都有 3 百万个权重数!在大型数据集上进行这样的训练令人望而却步,因此 word2vec 的作者引入了一些调整来使训练变得可行。详情请查看:http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/;Github 代码:https://github.com/priya-dwivedi/Deep-Learning/blob/master/word2vec_skipgram/Skip-Grams-Solution.ipynb。

5. 用 TensorBoard 进行可视化

使用 TensorBoard 中的「嵌入投影机」可视化嵌入。要实现这个功能,你需要完成以下步骤:

  • 在检查点目录的训练结束时保存你的模型

  • 创建一个 metadata.tsv 文件包含每个整数转换回单词的映射关系,这样 TensorBoard 就会显示单词而不是整数。将这个 tsv 文件保存在同一个检查点目录中

  • 运行这段代码:

  • 打开 TensorBoard,将其指向检查点目录

大功告成!

原文链接:https://towardsdatascience.com/training-and-visualising-word-vectors-2f946c6430f8

本文为机器之心编译,转载请联系本公众号获得授权。

  • 再见,中国移动!

    “小姐,我这边是中国移动,现在对老用户推出免费办理宽带业务……”对不起,我只想要流量套餐。“小姐,我这边是中国移动,为了回馈老用户,送给您每个月2G的流量套餐服务,为期一年……”我已经办理了一年的流量叠加包套餐,办理前怎么不送?近日,中国移动又上架了保号业务,不过已经从8元套餐升为了18元套餐,算是对放开用户办理保号业务的限制妥协。套路太多,最终还是没留住人心。“携号转网才是硬道理。”有网友感慨,最近,此话题再次被提起,工信部此前发布相关文件,明确指出,2020年底前,三大运营商必须在全国范围内

  • 为什么中国做不出《旅行青蛙》这样的游戏?

    我不配拥有这么专心努力的青蛙。“我突然感觉到自己的世界原来很小,小到在这座四通八达、五脏俱全的城市里,留给我的只有简陋的公寓、工业化风的办公楼,还有连接它们的长长的坡道。”在Taptap的《旅行青蛙》(日语《旅かえる》)游戏评论中,网友@萌小黑的玩后感引来数千人点赞。自去年年底“佛系”的概念走红后,最近,这款名为《旅行青蛙》的佛系游戏又刷爆朋友圈。在游戏中,只有庭院和房子两个场景,玩家除了收割三叶草、为青蛙准备便当外,几乎不需要花费任何时间和金钱,与青蛙唯一的交流也只来自它出门旅行寄回来的照片。

  • 乐视开盘,无悬念跌停

    【猎云网(微信:ilieyun)】1月24日报道乐视网股票自去年4月17日开始起停牌,收盘价为30.68元/股,经过10转10的送转后,股价调整为15.33元。此前乐视股价被三次下调,而中邮基金对旗下基金持有的乐视网股票估值进行调整时,至每股3.91元。如果按3.91元的估值计算,乐视网复盘后要下跌近75%,约相当于13个跌停。数据显示,乐视网最新股东户数为18.59万户,按照基金给出的4元以下的目标价,人均损失将高达24万元。乐视网的股票不仅散户持有,不少机构投资者也持有甚至重仓,像中邮战略新

  • 家乐福发布“家乐福2022”转型计划

    1月23日晚间,家乐福在官网发布“家乐福2022”转型计划,将集团发展目标定位为世界粮食转型的领导者。而在该集团发布的转型计划中,精简团队、涉足便利店、发力生鲜和自有品牌成为行业关注的焦点。根据家乐福发布的内容显示,未来5年中,家乐福法国总部计划采取自愿离职方式进行裁员,裁员规模在2400人,拟节省20亿欧元的成本。在业务创新方面,家乐福表示,集团计划将在未来5年内开设2000家便利店,目标是成为食品电商领域的领导者,进一步发挥品牌的力量。在数字化改造上,家乐福将投入28亿欧元。在食品电商业务方

  • 阿拉斯加湾发生7.9级大地震:万幸未引发灾难性海啸

    昨晚,美国阿拉斯加湾科迪亚克岛东南部海域发生了7.9级大地震,突响的警报迫使人们在半夜奔逃至高地。万幸的是,本次大地震没有带来像“2011东日本9级大地震”那样的灾难性海啸,因为浪高还不到1英尺(0.3米)。当地时间凌晨4点后,有关部门正式撤销了本次海啸预警。通常情况下,海上强震会给沿岸地区带来破坏性的海啸,2011年的时候,126英尺(38.4米)的滔天巨浪吞噬了近2万人的生命。

  • 张小龙为什么推崇去中心化?

    编者按:本文转载自公众号keso怎么看(微信ID:kesoview),转载已获得作者授权。1月15日,在广州举行的微信公开课上,张小龙说,微信会坚持做一个去中心化的平台:“去中心化与其说是平台的策略,还不如说是一个观念,这个观念代表着我们去看待这个世界的方式。”三年前,在首次微信公开课PRO版的致辞中,张小龙就说过,微信希望建立一个去中心化的系统,一个生态系统,一个动态的系统。张小龙是这么说的,微信也确实是这么做的。微信从来没有推荐过一个公众号,从来没有搞过小程序排行榜。这在中国,还真的挺难得的

  • 增强员工节约成本意识,白酒名企劲牌举办成本能源知识竞赛

    节约,是中华民族的传统美德。而对于企业来说,成本管控也是很重要的事情。劲牌,是白酒行业的知名企业,也会把成本管控作为工作重点。培养员工节约成本的意识,为白酒、保健酒等产品增加效益起到推动作用。近日,酿造二车间第一届成本能源知识竞赛活动如期开展,由各班组组建的6支代表队统一身着工装整齐坐在答题席上,早班下班人员积极前来加油助威,车间主任及厂成本主管也全程参与到活动中,氛围异常热烈。此次活动由车间现场管理主导开展。据了解,此次活动的目的是为进一步提高员工成本管控意识,促使员工在生产过程中更好的运用成

  • 新商业NEO100 | 平安讯科戎国强:“通信+金融”的模式使用户的行为产生商业价值

    平安讯科董事长戎国强在众多商业WiFi创新企业中可以算是个”另类“。年近60的他每天的工作状态却依旧像年轻时一样忙碌。为了节省时间,经常选择清晨和夜晚的航班往返上海和深圳两地。“深圳飞上海6点起飞,落地了还能和同事开个会。上海飞深圳一般在晚上7点以后,不耽误白天的工作时间”。这种对时间把握的精准度是戎国强秉持着“一路奔跑”价值观的体现。在他的内心深处,需要做判断的事情在了解情况后就得立即处理。否则,“就会放心不下”。同样的,在商业WiFi变现道路探索上,他也从未停止“奔跑”。戎国强曾担任集团信息