Life in a Nutshell

Learning to Rank入门

下面主要是阅读刘铁岩老师的《Learning to Rank for Information Retrieval》的一些 学习笔记。Learning to Ranking指的是根据训练数据用机器学习模型来解决排序问题。很 多IR问题都可以看成是排序问题,例如文档检索、协同过滤、关键词抽取、定义查找,本 文主要以文档检索为例子来描述Learning to Rank。

传统IR模型

传统的IR模型可以分成两类,一类是query-dependent,另一类是query-independent。

query-dependent指的是检索的时候考虑query和doc之间的关心,衡量这个关系的不同方法 产生了不同的模型, 考虑doc和query的相关性:

  1. Boolean model: 对doc中的term做倒排,然后query是一个boolean表达式,对取回来的 文档集合做交集并集等等
  2. Vector space model: 把doc和query都表示在一个统一的欧拉空间(每个term一个维度 ),每一个维度的值一般可以是TF-IDF ...

CS224d笔记5——递归神经网络(Recusive Neural Network, RNN)

这部分介绍递归神经网络(RNN), 递归神经网络通过在一个结构上递归地应用同一组参数来预测任意输入的结构, 或者通过遍历输入的拓扑结构产生一个标量输出来创建网络。 上篇文章介绍的循环神经网络可以看成时间上的递归, 可以看成是结构递归的一种简化版递归神经网络。

RNN适用于有嵌套层次和内在递归结构的任务。目前RNNNLP领域的应用主要有句法分析和 句子表示。假设一个句子的含义是由句子中词的含义和词的组合方式决定的 ,word2vec已经一定程度上说明可以用向量来表示词的含义,词的组合规则从句法的角度 来看可以理解成句法树,我们可以通过遍历句法树来构建RNN(递归的时候使用同一组参数 )来生成句子的表示。这样生成句子、短语的表示考虑了词的顺序、词的组合和词的含义。 其实我们可以利用RNN来同时学习句子的句法结构和句子的向量表示。

RNN用于结构预测的时候需要用到一个max-margin目标函数,暂时没有看懂这个目标函数。 所以本文仅介绍在有一个句法树的前提下来生成句子表示的过程,同时结合一个简单的情感 分析任务来解释RNN的前向传播和反向传播过程。

单层RNN建模情感分析

现在用一个简单的RNN来建模情感分析任务,学习句子的表示。假设我们现在已经有了句子 的句子分析树和词表示,如下图所示 ...

CS224d笔记4续——RNN隐藏层计算之GRU和LSTM

本篇文章主要介绍两种RNN的隐藏层信息计算方法GRU(Gated Recurrent Units)和 LSTM(Long-Short-Term-Memories),这两种隐藏层的计算方法通过引入门(Gate) 的机制来解决RNN的梯度消失问题,从而学习到长距离依赖。

这里说的隐藏层计算方法指的是如何计算下个时刻的隐藏层信息,标准RNN中计算 方法是:

$$h_t=f(W^{(hh)}h_{t-1}+W^{(hx)}x_t)$$

LSTMGRU可以理解为计算\(h_t\)的另一种方法。

LSTM

这篇文章详细 地解释了LSTM各个门的物理含义, 以及LSTM计算隐藏层的方法,这里简要的进行总结, 下图是LSTM网络的示意图 ...

CS224d笔记4——语言模型和循环神经网络(Recurrent Neural Network, RNN)

这部分首先介绍语言模型,通过分析传统语言模型的问题引入循环神经网络(Recurrent Neural Network, RNN)以及 RNN的扩展(双向RNN,深度RNN),最后为了改善RNN对长距依存信息的捕获引入GRU(Gated Recurrent Units)和 LSTM(Long-Short-Term-Memories)。

语言模型

这里将介绍传统的n-gram语言模型,然后简单介绍神经概率语言模型,最后总结两者的问题所在引出循环神经网络。

语言模型通常用来衡量一个单词序列出现的概率。假设词序列为\(\{w_1,\ldots,w_T\}\), 那么把这个序列出现的概率记为\(P(w_1,\ldots,w_T)\),计算词序列的概率在机器翻译中有着重要用途, 机器翻译需要给各个候选的词序列打分,这个分数可以用这个概率来衡量。 \(P(w_1,\ldots,w_T)\)的计算可以用链式法则展开:

$$P(w_1,\ldots,w_T)=\Pi_ ...

CS224d笔记3——神经网络

这部分首先介绍神经元,接着介绍只有一个隐藏层的神经网络,这个神经网络要解决的 问题和上一篇文章类似,这里对窗口分类任务进一步 简化,我们只需要判断中心词是否为地点。利用这个简单的神经网络说明前向传播和 后向误差传播算法,然后推出通用的后向误差传播算法。最后介绍一些神经网络在工程 实现中的一些技巧。

神经元

神经元是组成神经网络的基础单元,神经元通常接受\(n\)个输入产生一个输出,运算过程如下图: 神经元 神经元的参数包括一个\(n\)维的权重向量\(w\)和一个偏置\(b\)\(b\)为标量),偏置可以看成判断类别的先验, 神经元的输出为\(h{w,b}(x)=f(w^Tx + b)\)\(f\)被成为“激活函数”。本文默认使用的激活函数为sigmoid函数 (用符号\(\sigma\)表示):

$$f(z)=\sigma(z)=\frac ...

CS224d笔记2——Softmax分类和窗口分类

这部分内容主要总结Softmax分类,以及如何以交叉熵作为Softmax分类的损失度量标准来 训练Softmax的参数,最后将Softmax分类应用在一个简单的窗口分类任务上,窗口分类 指的是利用中心词向量以及中心词窗口范围内的向量拼接起来对中心词进行简单的分类 (例如把中心词按实体类型分成人名、地名、组织名、其他)。

Softmax分类

Softmax分类是Logistic回归的扩展版(Logistic回归用于二分类,Softmax分类用于类别 数量>2的分类任务),词向量\(x\)(假设词向量维度是\(d\))属于类别\(j\)的概率如下所示:

$$\hat{y}_j = p(y_j=1|x)=\frac{\exp(W_{j\cdot}x)}{\sum_{c=1}^C\exp(W_{c\cdot}x)}$$

其中\(W\in\mathbb{R ...

CS224d笔记1——word2vec

假期学习了斯坦福的CS224d课程,该课 程的主要内容是神经网络在自然语言处理领域的应用。 这里记录相关的学习笔记,大概分 成以下几个部分:word2vec,窗口分类,神经网络,循环神经网络,递归神经网络,卷积 神经网络。

为什么需要深度学习

传统的机器学习方法都是认为的设计特征或者表示,深度学习的目的是希望能够通过神经 网络让机器自动学习到有效的特征表示,这里所说的深度学习更偏向于关注各种类型的神 经网络。探索机器学习的原因主要有以下几方面:

  • 人工设计的特征常常定义过多,不完整并且需要花费大量的时间去设计和验证
  • 自动学习的特征容易自适应,并且可以很快的学习
  • 深度学习提供了一个弹性的,通用的学习框架用来表征自然的,视觉的和语言的信息。
  • 深度学习可以用来学习非监督的(来自于生文本)和有监督的(带有特别标记的文本, 例如正向和负向标记)
  • 在2006年深度学习技术开始在一些任务中表现出众,为什么现在才热起来?
    • 深度学习技术受益于越来越多的数据
    • 更快的机器与更多核CPU/GPU对深度学习的普及起了很大的促进作用
    • 新的模型,算法和idea层出不穷
  • 通过深度学习技术提升效果首先发生在语音识别和机器视觉领域,然后开始过渡到NLP领 域 ...

Pelican自定义Jinja过滤器

使用Pelican的时候发现需要在模板中使用Hash函数,但是Jinja并没有提供Hash 过滤器,需要自己实现一个Hash过滤器,这里以Hash过滤器为例子讲讲如何在 Pelican中使用自定义过滤器。

Hash函数功能实现

通过Python的标准库函数实现一个md5的哈希函数,函数的功能的是传入一个字符串 返回该字符串的md5串,实现如下:

# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute ...

Linux通过Pulse混合麦克风和音频输出

由于想在语音识别时候给麦克风加噪声,所以就在思考有没有办法通过混合麦克风输入和 电脑的音频输出混合起来实现加噪声的效果呢?经过Google找到以下的解决办法 ,这种方法依赖 PulseAudio

安装工具

首先需要安装 pavucontrol用来管理 Pulse。

emerge -a media-sound/pavucontrol

修改配置文件

修改配置文件/etc/pulse/default.pa,添加以下模块

load-module module-null-sink 
load-module module-loopback
load-module module-loopback

然后重启电脑或者重启Pulse服务器。

上面的步骤也可以不重启Pulse服务器,直接通过pacmd这个命令行工具配置Pulse服务 器,可以在这个命令行的交互工具中,执行以上三个命令。

通过pavucontrol配置音频混合

我们添加了两个loopback,这时候就可以在pavucontrol的Playback标签页下面看到 两个新的Loopback,需要把Show这个过滤器选择为All Streams,结果如下图所示: Playback 这两个Loopback一个是麦克风(Loopback from ...

最大熵

最大熵原理

最大熵原理指的是当我们在估计概率分布的时候,这个概率分布符合已知信息的约束并且 该分布是最均匀的。从熵的角度考虑就是要让这个分布符合约束并且熵最大。

The principle of maximum entropy states that, subject to precisely stated prior data (such as a proposition that expresses testable information), the probability distribution which best represents the current state of knowledge is the one with largest entropy.

现在考虑一个文本分类的例子,假设我们有4个类别的文本分别是:economics、 sports、politics和art。因为文本只能被分成4个类别,假设现在没有额外的信息 ...