主页

不可思议的 Word2Vec(下):用 Tensorflow 和 Keras 来实现 Word2Vec

汇总整理自《不可思议的Word2Vec》系列,作者苏剑林。部分内容有删改。 Tensorflow 版的 Word2Vec 不同的地方 本文的主要模型还是 CBOW 或者 Skip-Gram,但在 loss 设计上有所不同。本文还是使用了完整的 softmax 结构,而不是 huffmax softmax 或者负采样方案,但是在训练 softmax 时,使用了基于随机负采样的交叉熵作为 loss。这种 loss 与已有的 nce_loss 和 sampled_softmax_loss 都不一样,这里姑且命名为 random softmax loss。 另外,在 softmax 结构中,一般是 $\text{softmax}(Wx+b)$ 这样的形式,考虑到 $W$ 矩阵的形状事...

阅读更多

不可思议的 Word2Vec(中):提取关键词与词语相似度

汇总整理自《不可思议的Word2Vec》系列,作者苏剑林。部分内容有删改。 提取关键词 说到提取关键词,一般会想到 TF-IDF 和 TextRank,大家是否想过,Word2Vec 还可以用来提取关键词?而且,用 Word2Vec 提取关键词,已经初步含有了语义上的理解,而不仅仅是简单的统计了,而且还是无监督的! 什么是关键词? 诚然,TF-IDF 和 TextRank是两种提取关键词的很经典的算法,它们都有一定的合理性,但问题是,这两种算法虽然看上去简单,但并不容易想到。试想一下,没有学过信息相关理论的同学,估计怎么也难以理解为什么 IDF 要取一个对数?为什么不是其他函数?又有多少读者会破天荒地想到,用 PageRank 的思路,去判断一个词的重要性? 说到底,问题就...

阅读更多

不可思议的 Word2Vec(上):Word2Vec 的基本原理

汇总整理自《不可思议的Word2Vec》系列,作者苏剑林。部分内容有删改。 对于了解深度学习、自然语言处理 NLP 的读者来说,Word2Vec 可以说是家喻户晓的工具,尽管不是每一个人都用到了它,但应该大家都会听说过它——Google 出品的高效率的获取词向量的工具。 Word2Vec 的数学原理 Word2Vec 不可思议? 大多数人都是将 Word2Vec 作为获取词向量的工具,而关心模型本身的读者并不多。可能是因为模型过于简化了,所以大家觉得这样简化的模型肯定很不准确,但它的副产品词向量的质量反而还不错。没错,如果是作为语言模型来说,Word2Vec 实在是太粗糙了。但是抛开语言模型的思维约束,只看模型本身,我们就会发现,Word2Vec 的两个模型 —— CBOW ...

阅读更多

LSTM 网络原理:通过图解,一步一步“走过”LSTM

译自《Understanding LSTM Networks》,作者 colah。部分内容有删改。 循环神经网络 人类不是在每一个时刻重新开始思考的。当你阅读这篇文章时,你会根据你对以前的话语的理解来理解每个单词。你不可能把所有东西都扔掉,再从头开始思考。即你的思想具有持续性。 但是传统的神经网络就不能做到这一点,这似乎是一个很大的缺陷。例如,假设你想要判断一部电影中每个时间点发生的事件是什么类型。传统的神经网络是无法根据电影中前面出现的事件来推理后面出现的事件的。 循环神经网络解决了这个问题。它们是具有循环的网络,允许信息的持续存在。 在上图中,一组神经网络 $A$,输入一些 $x_t$,并且输出一个值 $h_t$。循环的结构允许信息从网络的一个步骤传递到下一个。 ...

阅读更多

在 Keras 模型中使用预训练的词向量

转载自《Using pre-trained word embeddings in a Keras model》,作者:Francois Chollet,部分内容有修改。 通过本教程,你可以掌握技能:使用预先训练的词向量和卷积神经网络解决一个文本分类问题。本文代码已上传到 Github。 什么是词向量? “词向量”(词嵌入)是将一类将词的语义映射到向量空间中去的自然语言处理技术。即将一个词用特定的向量来表示,向量之间的距离(例如,任意两个向量之间的 L2 范式距离或更常用的余弦距离)一定程度上表征了的词之间的语义关系。由这些向量形成的几何空间被称为一个嵌入空间。 例如,“椰子”和“北极熊”是语义上完全不同的词,所以它们的词向量在一个合理的嵌入空间的距离将会非常遥远。但“厨房”和...

阅读更多

Keras 快速上手指南(下):网络配置与数据预处理

在之前的教程中,我们介绍了 Keras 网络的模型与网络层,并且通过许多示例展示了网络的搭建方式。大家都注意到了,在构建网络的过程中,损失函数、优化器、激活函数等都是需要自定义的网络配置项,下面我们对这些网络配置进行详细的介绍。 损失函数 目标函数 objectives 目标函数,或称损失函数,是编译一个模型必须的两个参数之一: model.compile(loss='mean_squared_error', optimizer='sgd') 可以通过传递预定义目标函数名字指定目标函数,也可以传递一个 Theano/TensroFlow 的符号函数作为目标函数,该函数对每个数据点应该只返回一个标量值,并以下列两个参数为参数: y_true:真实的数据标签,Thean...

阅读更多

Keras 快速上手指南(中):模型与网络层

Keras 模型 Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况。 两类模型有一些方法是相同的: model.summary():打印出模型概况 model.get_config():返回包含模型配置信息的 Python 字典。模型也可以从它的 config 信息中重构回去 config = model.get_config() model = Model.from_config(config) model = Sequential.from_config(config) model.get_layer():依据层名或下标获得层对象 model.get...

阅读更多

Keras 快速上手指南(上):Keras 入门

什么是 Keras Keras 是基于 Theano 或 TensorFlow 的一个深度学习框架,它的设计参考了 Torch,用 Python 语言编写,是一个高度模块化的神经网络库,支持 GPU 和 CPU。 安装 Keras 使用 Keras 前还需要安装 Numpy、Scipy 等 Python 包,建议直接安装 Python 科学计算环境 Anaconda,一步到位。然后直接通过 pip install keras 安装 Keras 就可以了,非常的方便。 在 Theano 和 TensorFlow 间切换 Keras 的底层库使用 Theano 或 TensorFlow,这两个库也称为 Keras 的后端。无论是 Theano 还是 TensorFlow,都是一个...

阅读更多