没有合适的资源?快使用搜索试试~ 我知道了~
首页深入理解word2vec.pdf
资源详情
资源评论
资源推荐

引言
欢迎来到我的 word2vec 电子书。无论你是正在学习机器学习先进理论的学
生、或者是正在探索新技术和新想法的研究员、又或是有着构建新产品和新功
能的远大理想的工程师,我希望本书能帮助你对算法有更深入的理解,让你能
够更快实现自己的目标以及更好的产出。
以下是本书的内容概要:
第 1 章:词向量及其应用
l 本章将会回答两个问题:“什么是词向量?”,“它们如何有用?”。我会解释
词向量是如何衡量两个词语的意思的相似度,以及词向量在大量实际应用中
的价值。如果你已经很熟悉词向量的动机和应用,可以跳过这部分内容。
第 2 章:Skip-gram 模型架构
l 在了解了词向量的价值之后,本章会从概念和实现两个方面讲述 word2vec
是如何对词的意思进行学习、编码。
第 3 章:采样
l 第二章描述的架构虽然概念很好,但是实现起来的代价太大了。Negative
Sampling 是对训练过程的微调,大大提高了速度的同时又能生成质量更高
的结果。
第 4 章:模型的变化
l 为了完整性起见,本章描述了 Continuous-Bag-of-Words (CBOW)模型,
(可以作为 Skip-gram 的替代技术,在 word2vec 原论文中也有提到),以
及 Hierarchical Softmax (Negative Sampling 的一种替代技术) 。
第 5 章:常见问题
l 该部分问答了几个关于 word2vec 的常见问题(还有一些常见的误解)。
第 6 章:资源
l 该部分列出了有助于进一步深入的资源:
1. 原论文和代码实现
2. 解释数学公式的几篇文章
3. word2vec 几个代码实现的简要调查
示例代码
l 大部分章节都配有简单的 python 示例代码。每一章的最后都附有相应代码
的小结。
¡ 我们的代码以 Jupyter Notebook 方式提供(能够很好地将代码和解

释说明融合在一起)
¡ 如果你只是想阅读代码,或者将代码拷贝到自己的 python 环境中,我
们还提供每个 Notebook 只读的 HTML 版本。
反馈
l 我想听到你们的反馈!如果你有问题、发现了错误、对新内容的建议、或者
任何其他反馈,请在这里留言。

1. 词向量及其应用
1.1 什么是词向量?
如果你已经很熟悉词向量的概念、动机和应用,可以跳至下一章。
我们先从词向量的抽象意义开始,然后再深入到细节中。
词向量,也被称为“词嵌入”,是以这样的方式表示词语:(1)对词语意思
进行编码,(2)能计算任意一对词之间的相似度得分。相似度得分就是一个
介于 0 和 1.0 之间的小数,分数越高代表越相似。
论文的作者在发表文章的同时,一并发布了一个预先在 Google 新闻数据集上
训练好的模型。该模型中包含有 300 万个词语(包括多字词,如
“Elon_Musk”或“computer_science“)。如果我拿单词“crouch”和
“book”的词向量,我可以做一些计算(马上会提到)来比较这两个向量,计
算出的得分为 0.12,它们不相似。如果我对“crouch”和“sofa”也这么做,
计算的分数为 0.83,反映出这两个词是同义词。
能够用这样的方式比较两个单词,说明也可以这样对整个词汇表进行比较,从
而识别出最相似的词语。举个例子,Google 模型中和“crouch”最相似的三
个单词是“sofa”, “recliner”和“couches”。
如果 word2vec 只是一个能够寻找同义词的词库,那也没多大用处。但其实它
还能识别出有关联的话题,比如,”Abraham_Lincoln”和
“Gettysburg_Address”的相似度为 0.6。
不仅如此,单词模型还可以在指定的文本集上训练,从而只学习词语在该文本
中的意义。例如,众所周知,Enron 喜欢用《星球大战》中的代号来命名他们
的一些“off-the-books”项目。利用 Enron 电子邮件语料库训练出的一个单
词模型发现“jedi”居然和“off-the-books”很相似!
单词模型可以在各种与文本打交道的应用中发挥作用。举个例子,如果你正在
从一大堆文件中搜索术语“房屋贷款”,而你的搜索工具又推荐了几个相似的
术语,如“抵押贷款“、“担保人”、“首付款”,那就很有用了。

又或者你训练出的模型能够判别“adios”和“goodbye”是同一个意思?利
用这些特性搭建的单词模型已经在自动翻译文本(机器翻译) 发挥出了作用。
1.2 特征向量,相似度得分
词向量将词义编码来表示词语,向量就是一个分数数组。以下是 Google 新闻
模型中的“fast”的一个向量,其中有 300 个浮点数(这里只显示一小部
分):
<0.0575, -0.0049, 0.0474, ..., -0.0439>
你无法解释向量中的每个值的意义,而是应该把整个向量想象成高维空间中的一
个点。
我们已经熟悉了 2 维坐标和 3 维坐标,我们能够画出来,也能理解点与点距离
的意义:可以表示靠的很近的点对也可以是离的很远。
但是一个有着 300 维坐标的词向量,却…我们明显是画不出 300 维空间坐标的,
不过点之间距离的意义仍然是相通的。
两点之间的直线距离称为“欧氏”或“L2“距离,可以扩展到任意维度。以下
是两个任意维度的向量 a 和 b 之间的距离公式:
现在划重点:word2vec 给词汇表的每个单词都学习了一个向量,因此,近义
词靠的更近,而不同意思的词离的很远。也即,欧氏距离成为了衡量两个词向
量相似的标准。
不过等等,我们前面不是说过,词向量是用一个介于 0 到 1.0 的相似度得分来
进行比较的吗?欧氏距离是我们直观理解上的距离,并且也是一种可行的比较
词向量的“距离度量“,但是在实践中,“余弦相似度”却是更好的度量。

余弦相似度通过计算两个向量 a 和 b 的内积,再除以它们各自的模得到,值总
是介于 0 到 1.0 之间。
如果你想了解 Google 新闻模型的词表,以及模型是如何识别多字词和主题,
在 FAQ 中会有更多的细节介绍。
1.3 示例代码小结
在本章的 notebook,我们会玩一玩预训练的单词模型,看看其中的词表,再
试着做一些词向量常用的基本操作。
我们先从 python 的 gensim 库开始,gensim 实现了我们所需的基本功能,
如加载模型、访问词表以及寻找相似度。紧接着,我们就“进入内部”,自己
动手实现同样的操作,这样就能真正理解内部原理了。
剩余27页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0