序列模型和注意力机制

Submitted by donghonglin on Thu, 05/03/2018 - 10:59

1. 基础模型

sequence to sequence 模型:

sequence to sequence 模型最为常见的就是机器翻译,假如这里我们要将法语翻译成英文:

1

对于机器翻译的序列对序列模型,如果我们拥有大量的句子语料,则可以得到一个很有效的机器翻译模型。模型的前部分使用一个编码网络来对输入的法语句子进行编码,后半部分则使用一个解码网络来生成对应的英文翻译。网络结构如下图所示:

2

序列模型 --- NLP和词嵌入

Submitted by donghonglin on Thu, 05/03/2018 - 09:30

1. 词汇表征

在前面学习的内容中,我们表征词汇是直接使用英文单词来进行表征的,但是对于计算机来说,是无法直接认识单词的。为了让计算机能够能更好地理解我们的语言,建立更好的语言模型,我们需要将词汇进行表征。下面是几种不同的词汇表征方式:

one-hot 表征:

在前面的一节课程中,已经使用过了one-hot表征的方式对模型字典中的单词进行表征,对应单词的位置用1表示,其余位置用0表示,如下图所示:

1

one-hot表征的缺点:这种方法将每个词孤立起来,使得模型对相关词的泛化能力不强。每个词向量之间的距离都一样,乘积均为0,所以无法获取词与词之间的相似性和关联性。

特征表征:词嵌入

用不同的特征来对各个词汇进行表征,相对与不同的特征,不同的单词均有不同的值。如下例所示:

微信亿级用户异常检测框架的设计与实践

Submitted by donghonglin on Sat, 04/28/2018 - 14:02
如何在大规模数据下检测异常用户一直是学术界和工业界研究的重点,而在微信安全的实际生态中,一方面,黑产作恶手段多变,为了捕捉黑产多变的恶意模式,若采用有监督的方法模型可能需要频繁更新,维护成本较高;另一方面,通过对恶意帐号进行分析,我们发现恶意用户往往呈现一定的“聚集性”特征,因此这里需要更多地依赖无监督或半监督的手段对恶意用户进行检测。然而,微信每日活跃帐号数基本在亿级别,如何在有限的计算资源下从亿级别帐号中找出可疑帐号给聚类方案的设计带来了不小的挑战,而本文则是为了解决这一问题的一个小小的尝试。

异常检测之SOS算法和

Submitted by donghonglin on Sat, 04/28/2018 - 13:25

SOS算法全称stochastic outlier selection algorithm. 该算法的作者是jeroen janssens. SOS算法是一种无监督的异常检测算法.

算法的输入:

特征矩阵(feature martrix)或者相异度矩阵(dissimilarity matrix)

算法的输出:

一个异常概率值向量(每个点对应一个).

直觉上,当一个点和其它所有点的关联度(affinity)都很小的时候,它就是一个异常点。

我们看下面这个数据集:

1

异常检测(anomaly detection)

Submitted by donghonglin on Sat, 04/28/2018 - 11:04
异常检测在工业上有非常广泛的应用场景: 金融业:从海量数据中找到“欺诈案例”,如信用卡反诈骗,识别虚假信贷 网络安全:从流量数据中找到“侵入者”,识别新的网络入侵模式 在线零售:从交易数据中发现“恶意买家”,比如恶意刷评等 生物基因:从生物数据中检测“病变”或“突变”

论计算机加密算法的原理与实践

Submitted by donghonglin on Fri, 04/27/2018 - 16:06

签名算法

签名算法不是领工资的时候把自己的名字写到“签名”一栏里。这里的签名是对消息内容做个计算,得到一个特征码,用这个特征码作为签名。

搞个签名有啥用?

我们来看发生在教室里的一个真实故事。

小明(性别:男)对女神小红仰慕已久,终于在上课的时候鼓足勇气在数学书背面写了几句话,举起来希望女神能看见。无奈女神坐得离他比较远

于是小明委托死党老王(老王坐在小明和女神中间位置)复制一下自己的消息,这样小明就表白成功了:

1

然而老王有个特点就是特别不靠谱,加上眼神不好,结果把“xiao ming”抄成了“xiao ning”,让女神误以为是班长小宁对自己表白了:

Word2Vec介绍:训练Skip-gram模型的python实现

Submitted by donghonglin on Fri, 04/27/2018 - 14:32

1. 获取数据

首先获取训练集“Stanford V1.0”和使用Glove模型训练好的词向量矩阵。

我们使用shell命令获取以上文档,脚本如下:

DATASETS_DIR="utils/datasets"
mkdir -p $DATASETS_DIR

cd $DATASETS_DIR

# Get Stanford Sentiment Treebank
if hash wget 2>/dev/null; then
  wget http://nlp.stanford.edu/~socherr/stanfordSentimentTreebank.zip
else
  curl -L http://nlp.stanford.edu/~socherr/stanfordSentimentTreebank.zip -o stanfordSentimentTreebank.zip
fi
unzip stanfordSentimentTreebank.zip
rm stanfordSentimentTreebank.zip

浅显易懂的word2vec总结

Submitted by donghonglin on Fri, 04/27/2018 - 11:43

1.什么是Word2vec

举个简单例子,判断一个词的词性,是动词还是名词。用机器学习的思路,我们有一系列样本(x,y),这里 x 是词语,y 是它们的词性,我们要构建 f(x)->y 的映射,但这里的数学模型 f(比如神经网络、SVM)只接受数值型输入,而 NLP 里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec,就是词嵌入( word embedding) 的一种。

在 NLP 中,把 x 看做一个句子里的一个词语,y 是这个词语的上下文词语,那么这里的 f,便是 NLP 中经常出现的『语言模型』(language model),这个模型的目的,就是判断 (x,y) 这个样本,是否符合自然语言的法则,更通俗点说就是:词语x和词语y放在一起,是不是人话。

Word2vec 正是来源于这个思想,但它的最终目的,不是要把 f 训练得多么完美,而是只关心模型训练完后的副产物——模型参数(这里特指神经网络的权重),并将这些参数,作为输入 x 的某种向量化的表示,这个向量便叫做——词向量

Tags

竞技游戏的匹配系统如何做到双方实力相近

Submitted by donghonglin on Tue, 04/24/2018 - 15:54

其实现在竞技游戏的实时匹配算法已经很成熟了,大到 DotA 2,小到 Clash Royale,基本都是在用一个叫 ELO(因为作者叫 Arpad Elo)的算法。

这个算法来源于 1960 年,美国国际象棋协会采纳使用的,最初的目的呢就是用来提升象棋比赛中匹配的合理性。

那么怎么样的匹配才能被认为是合理的呢?首先我们有如下几条假设:

  • 某个玩家,在某一分段区间内的波动属于正常现象。

  • 在某一分段区间内的玩家,水平大致相同,胜出的期望也大致相同。

优化方向(合理性):