词向量

作者: 无善无恶 | 来源:发表于2018-04-23 11:02 被阅读121次

词向量大法

从文本语料得到词向量的话,大概来讲有如下几个步骤:分词,统计词频,构建huffman树,输入文本训练词向量

第一步是分词。英文要好一些,单词之间有空格分隔,但是需要进行词干提取和词形还原预处理。中文的话,分词就要麻烦的多。我但是用的是jieba来进行分词的。

第二步骤,统计词频。首先统计出每个单词出现的次数,然后需要去掉停用词,非常高频的词和非常低频的词。去掉高频词是因为没有特殊性,去掉低频词是因为没有普适性。

第三步,构建huffman树。所有的非叶节点存储有一个参数向量,所有的叶节点分别代表了词典中的一个词。参数向量初始值为0。构建完huffman树之后,将对应的huffman码分配给每个单词。此外,还需要随机初始化每个单词的词向量。

第四步,训练,也就是提到的比较多的CBOW和skip-gram模型了。word2vec采用的语言模型是n-gram模型+词袋模型(我不知道这样表述严不严谨),也就是说假设一个单词只与周围若干个单词有关且不考虑单词间的顺序关系。

word2vec

使用one-hot词向量并不是一个好选择。一个主要的原因是,one-hot词向量无法表达不同词之间的相似度。例如,任何一对词的one-hot向量的余弦相似度都为0。

2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax)。值得一提的是,word2vec词向量可以较好地表达不同词之间的相似和类比关系。

  • 架构:skip-gram(慢、对罕见字有利)vs CBOW(快)

  • 训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利)

  • 欠采样频繁词:可以提高结果的准确性和速度(适用范围1e-3到1e-5)

  • 文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近

word2vec

Hierarchical Softmax是一种对输出层进行优化的策略,输出层从原始模型的利用softmax计算概率值改为了利用Huffman树计算概率值。

以词表中的全部词作为叶子节点,词频作为节点的权,构建Huffman树,作为输出。Huffman树是二叉树,在叶子节点及叶子节点的权给定的情况下,该树的带权路径长度最短(一个节点的带权路径长度指根节点到该节点的路径长度乘以该节点的权,树的带权路径长度指全部叶子节点的带权路径长度之和)。直观上可以看出,叶子节点的权越大,则该叶子节点就应该离根节点越近。因此对于模型来说就是,词频越高的词,距离根节点就越近。

从根节点出发,到达指定叶子节点的路径是唯一的。Hierarchical Softmax正是利用这条路径来计算指定词的概率,而非用softmax来计算。

计算单个词语概率值的计算过程被拆解为一系列的概率计算,这样可以避免对所有词语进行标准化计算。

cs224n自然语言处理与深度学习简介

在实践中,对于不频繁的单词,分层的softmax效果更好,而负采样对于频繁单词和较低维度向量表现更好。

在负采样中,对于给定的词w,如何生成它的负采样集合NEG(w)呢?已知一个词w,它的上下文是context(w),那么词w就是一个正例,其他词就是一个负例。但是负例样本太多了,我们怎么去选取呢?在语料库C中,各个词出现的频率是不一样的,我们采样的时候要求高频词选中的概率较大,而低频词选中的概率较小。这就是一个带权采样的问题。设词典D中的每一个词w对应线段的一个长度:

任何采样算法都应该保证频次越高的样本越容易被采样出来。基本的思路是对于长度为1的线段,根据词语的词频将其公平地分配给每个词语:

这个幂实际上是一种“平滑”策略,能够让低频词多一些出场机会,高频词贡献一些出场机会,劫富济贫。

负采样:增大正样本概率的同时降低负样本概率。本质是预测总体类别的一个子集

层次softmax:词频越高的词,距离根节点就越近。本质是把 N 分类问题变成 log(N)次二分类

漫谈词向量之基于Softmax与Sampling的方法

DL4NLP——词表示模型(三)word2vec(CBOW/Skip-gram)的加速:Hierarchical Softmax与Negative Sampling

fasttext

CBOW的输入是目标单词的上下文,fastText的输入是多个单词及其n-gram特征,这些特征用来表示单个文档;CBOW的输入单词被onehot编码过,fastText的输入特征是被embedding过;CBOW的输出是目标词汇,fastText的输出是文档对应的类标。

fastText在输入时,将单词的字符级别的n-gram向量作为额外的特征;在输出时,fastText采用了分层Softmax,大大降低了模型训练时间。

于是fastText的核心思想就是:将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。这中间涉及到两个技巧:字符级n-gram特征的引入以及分层Softmax分类。

NLP︱高级词向量表达(二)——FastText(简述、学习笔记)

fastText 源码分析

超快的 fastText

相关文章

  • 利用gensim使用腾讯开源的预训练好的词向量

    腾讯开源词向量下载地址 导入词向量 未知词短语向量补齐: 样例: 输出为: 分词,词向量编码,去除标点符号(中英文...

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

    1. 什么是词向量?   简而言之,词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。词向...

  • TensorFlow实现Word2Vec并进行代码详解

    1.代码部分 2. 词向量图词向量空间表示

  • 预训练好的词向量资源

    词向量是用来表示词的向量,通常也被认为是词的特征向量。现在已经成为自然语言处理的基础技术。词向量的好坏,会直接影响...

  • 词向量

    词向量大法 从文本语料得到词向量的话,大概来讲有如下几个步骤:分词,统计词频,构建huffman树,输入文本训练词...

  • 词向量

    1.更别致的词向量模型:Simpler GloVe - Part 2 2.

  • 词向量

    目前词向量主要用的技术 word2vec fasttext glove 1 one-host编码 one-hot编...

  • 词向量

    自然语言处理问题中,一般以词作为基本单元,例如我们想要分析 "我来自北语" 这句话的情感,一般的做法是先将这句话进...

  • 技术-聊天机器人-word2vec学习笔记

    词向量(http://www.shareditor.com/blogshow/?blogId=99) 词向量:是这...

  • 词向量Word2vec

    下面是记录一下,学习词向量的笔记(根据自己的风格) 一、词向量 假设现在词向量长度length=3,一个词对应on...

网友评论

      本文标题:词向量

      本文链接:https://www.haomeiwen.com/subject/lumklftx.html