一些算法

0,动态/时序推荐系统
(跨模态)语义匹配/检索
深度/强化学习
贝叶斯/统计学习
AutoML
1,很久以前,我用过TFIDF做过行业关键词提取。TFIDF仅仅从词的统计信息出发,而没有充分考虑词之间的语义信息。现在本文将介绍一种考虑了相邻词的语义关系、基于图排序的关键词提取算法TextRank。

2,fasttext和Word2vec
相似处:

    图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。
    都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。

不同处:

    模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是 分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用;
    模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;

两者本质的不同,体现在 h-softmax的使用:

    Wordvec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax
    也会生成一系列的向量,但最终都被抛弃,不会使用。
    fasttext则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)


3,词嵌入向量(WordEmbedding)是NLP里面一个重要的概念,我们可以利用WordEmbedding将一个单词转换成固定长度的向量表示,从而便于进行数学处理。本文将介绍WordEmbedding的使用方式,并讲解如何通过神经网络生成WordEmbedding。

4,使用数学模型处理文本语料的第一步就是把文本转换成数学表示
1,通过one-hot矩阵表示一个单词2,wordembedding


5,word2vec是一个简单的神经网络,有以下几个层组成:

    1个输入层
    1个隐藏层
    1个输出层

隐藏层的神经网络单元的数量,其实就是我们所说的embedding size,只有为什么,我们后面简单计算一下就知道。需要注意的是,我们的隐藏层后面不需要使用激活函数。
输出层,我们使用softmax操作,得到每一个预测结果的概率。

输入层

现在问题来了,刚刚我们说,输入层的输入是我们之前准备的数据对的数字表示,那么我们该如何用数字表示文本数据呢?
好像随便一种方式都可以用来表示我们的文本啊。
看上图,我们发现,它的输入使用的是one-hot编码。什么是ont-hot编码呢?如图所示,假设有n个词,则每一个词可以用一个n维的向量来表示,这个n维向量只有一个位置是1,其余位置都是0。
那么为什么要用这样的编码来表示呢?答案后面揭晓。


隐藏层

隐藏层的神经单元数量,代表着每一个词用向量表示的维度大小。假设我们的hidden_size取300,也就是我们的隐藏层有300个神经元,那么对于每一个词,我们的向量表示就是一个的向量。
有多少个词,就有多少个这样的向量!
所以对于输入层和隐藏层之间的权值矩阵,它的形状应该是[vocab_size, hidden_size]的矩阵,


输出层

那么我们的输出层,应该是什么样子的呢?从上面的图上可以看出来,输出层是一个[vocab_size]大小的向量,每一个值代表着输出一个词的概率。

 

6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666

Word Embedding

最后,我想简单阐述下我对Word Embedding的几点思考。不一定正确,也欢迎大家提出不同的意见。

Word embedding最早出现于Bengio在03年发表的开创性文章中[3]。通过嵌入一个线性的投影矩阵(projection matrix),将原始的one-hot向量映射为一个稠密的连续向量,并通过一个语言模型的任务去学习这个向量的权重。这一思想后来被广泛应用于包括word2vec在内的各种NLP模型中。

Word Embedding的训练方法大致可以分为两类:一类是无监督或弱监督的预训练;一类是端对端(end to end)的有监督训练。

无监督或弱监督的预训练word2vec和auto-encoder为代表。这一类模型的特点是,不需要大量的人工标记样本就可以得到质量还不错的Embedding向量。不过因为缺少了任务导向,可能和我们要解决的问题还有一定的距离。因此,我们往往会在得到预训练的Embedding向量后,用少量人工标注的样本去fine-tune整个模型。

相比之下,端对端的有监督模型在最近几年里越来越受到人们的关注。与无监督模型相比,端对端的模型在结构上往往更加复杂。同时,也因为有着明确的任务导向,端对端模型学习到的Embedding向量也往往更加准确。例如,通过一个Embedding层和若干个卷积层连接而成的深度神经网络以实现对句子的情感分类,可以学习到语义更丰富的词向量表达。

Word Embedding的另一个研究方向是在更高层次上对Sentence的Embedding向量进行建模。

我们知道,word是sentence的基本组成单位。一个最简单也是最直接得到sentence embedding的方法是将组成sentence的所有word的embedding向量全部加起来——类似于CBoW模型。

显然,这种简单粗暴的方法会丢失很多信息。

另一种方法借鉴了word2vec的思想——将sentence或是paragraph视为一个特殊的word,然后用CBoW模型或是Skip-gram进行训练[12]。这种方法的问题在于,对于一篇新文章,总是需要重新训练一个新的sentence2vec。此外,同word2vec一样,这个模型缺少有监督的训练导向。

个人感觉比较靠谱的是第三种方法——基于word embedding的端对端的训练。Sentence本质上是word的序列。因此,在word embedding的基础上,我们可以连接多个RNN模型或是卷积神经网络,对word embedding序列进行编码,从而得到sentence embedding。

这方面的工作已有很多。有机会,我会再写一篇关于sentence embedding的综述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值