【NLP面试QA】词向量

目录

  • 文本表示哪些方法?
  • one-hot存在的问题
  • SoW & BoW
  • tf-idf
  • PMI
  • 统计语言模型(N-gram模型)
  • 神经网络语言模型(NNLM)
  • word2vec
    • word2vec 与 NNLM 的区别
    • CBoW
    • Skip-gram
    • 层次softmax
    • 负采样
    • word2vec的其他细节
  • GloVe
  • word2vec 和 fastText 对比有什么区别?

文本表示哪些方法?

  • 基于one-hot、tf-idf等的bag-of-words;
  • 基于词向量的固定表征:word2vec、fastText、glove
  • 基于词向量的动态表征:elmo、GPT、bert

one-hot存在的问题

  • one-hot表征无法反应词与词之间的相关性问题,即语义鸿沟
  • one-hot在大词表的情况下将造成维度灾难的问题

SoW & BoW

  • 词集模型(Set of Words, SoW)中,如果向量维度位置对应的词出现在文本中,则该处值为1,否则为0。
  • 词袋模型(Bag of Words, BoW)还考虑其出现次数,即每个文本向量在其对应词处取值为该词在文本中出现次数,未出现则为0。
  • 仅用词频来衡量该词的重要性是存在问题的,因此可以用词的 tf-idf 来对词频进行修正。

tf-idf

  • tf 表示词频(Term Frequency),即词条在文档 \(i\) 中出现的频率

\[tf = \frac{n_i}{n}
\]

  • idf 为逆向文件频率(Inverse Document Frequency),表示出现某个关键词的文档在所有文档中比例的倒数的对数(该指标用于降低常用词的重要性)。其平滑公式为:

\[idf = lg\ \frac{|D|}{|D(x)|+1}
\]

tf-idf:

\[tf \times idf
\]

PMI

点互信息表示两个词的相关性,需要统计两个词的频率以及两个词的共现频率,如果两个词相互独立,\(p(w_1, w_2) = p(w_1) * p(w_2)\),\(pmi = 0\),否则 \(p(w_1, w_2) > p(w_1) * p(w_2)\) ,\(pmi > 0\)

统计语言模型(N-gram模型)

  • 统计语言模型是计算文本出现概率的概率模型,其可以利用贝叶斯公式链式分解为一系列单词的条件概率乘积的形式,但是上文通常是很长的,因此我们引入了 N-gram 模型,即仅考虑每个单词之前的N个词来计算当前词的条件概率

\[P(S)=P(w_1, w_2, ..., w_T)=\prod_{t=1}^Tp(w_t|w_1, w_2, ..., w_{t-1})
\]

\[p(w_t|w_1, w_2, ..., w_{t-1}) \approx p(w_t|w_{t-n+1}, ..., w_{t-1})
\]

神经网络语言模型(NNLM)

  • 神经语言模型就是利用神经网络来计算统计语言模型中的各个条件概率参数,优化目标最大对数似然
  • 神经网络语言模型(Neural Network Language Model)为一个简单的全连接神经网络模型,输入为上下文的 one-hot 向量,神经网络参数即为需要训练的词向量,输出为所有词的条件概率,再对所有词取一个 softmax 分数,损失函数为交叉熵。
  • 问题在于每次预测都需要对所有词计算一遍概率,计算量太大

word2vec

word2vec 与 NNLM 的区别
  • word2vec 与 NNLM 的本质均是语言模型,词向量是他们的副产物。但 word2vec 更专注于词向量的生成,因此采用了多种优化方法来提高计算效率。word2vec 的模型更小速度更快。
  • 查表得到词向量之后,NNLM 将词向量拼接,而 word2vec 是将其相加
  • NNLM 队拼接得到的向量通过一个 tanh 为激活函数的全连接层,而 word2vec 将全连接层省略了。
  • NNLM对整个词表做 softmax,计算量非常大,而 word2vec 采用了两种近似手段减少计算量。
CBoW

连续词带模型(Continues Bag-of-Words Model),通过上下文词预测中心词,梯度返回修正上下文每个词的词向量,速度更快

Skip-gram

Skip-gram 模型:通过中心词来预测上下文窗口中的词,根据上下文词的 loss 来修正中心词的词向量。因此 Skip-gram 的迭代次数要比 CBoW 更多,但学习到的词向量相对更准确

层次softmax
  • 层次 softmax 实际上就是一个 Huffman 树,根结点为整个词表,每个子节点为父节点的不相交的子集,所有叶节点为词,词频作为叶节点的权值,哈夫曼树的特征决定了高频词离根结点更近,而低频词离根结点更远。如此构造的思想就是将一个多分类问题转化为多个二分类问题,以简化计算量。
  • 连续词带模型的层次 softmax 是将查表得到的上下文向量,直接求和,然后输入到Huffman树中进行分类
  • Skip-gram的层次softmax直接将查表得到的中心词的词表征,然后输入到Huffman树中进行分类
负采样
  • 仅采样一部分负样本与正样本一起计算条件概率与目标函数。
  • 采样的方式实际上是一个带权采样的过程,采样频率由该词出现的频率决定
  • 若采样到正例则直接跳过
word2vec的其他细节
  • 在训练之前就舍去了出现频率低于阈值的低频词;
  • 在训练过程中,采用下采样的方式,以一定概率抛弃高频词
  • 对过长的句子采取强行截断
  • 窗口的范围并不是固定的,而是在每次取上下文中选取的[1, window]中的随机整数 c

GloVe

  • Glove 与 LSA(潜在语义分析)一样需要统计词共现矩阵,但 LSA 利用 SVD 的方式进行矩阵分解过于复杂。Glove 通过滑窗的方式来统计词共现信息
  • GloVe 与 word2vec:word2vec 是基于局部语料训练的,仅是一个预测模型,容易丢失词间的相关性特征。Glove 与 LSA 一样统计了词共现矩阵。统计词共现矩阵是希望将全局信息整合到模型代价函数当中去,使得训练出来的词向量包含一定的全局信息。
  • 代价函数为一个加权平方误差。第一项为词与词之间的余弦相似度,后面两项为词共现矩阵中可以得到的统计值,整体表示全局信息的一个误差值,而加权值定义了对于出现频率越高的词赋予越高的权重。glove可 以被看作是更换了目标函数并且考虑了全局信息的 word2vec。

\[J = \sum_{i,j}^{N}f(X_{i,j})(w_i^Tw_j + b_i + b_j - log(X_{i, j}))^2
\]

word2vec 和 fastText 对比有什么区别?

  • FastText 是一个文本分类模型,词向量是其训练文本分类模型的副产物。区别在于其训练的是词的子词向量,而每个词的词向量为该子词向量的叠加,使得一些低频词或未出现的单词能够从形态相近的单词中得到较好的词向量表示,从而在一定程度上能够解决 OOV 问题

原文地址:https://www.cnblogs.com/sandwichnlp/p/12631562.html

时间: 2024-11-05 19:04:54

【NLP面试QA】词向量的相关文章

【NLP面试QA】预训练模型

目录 自回归语言模型与自编码语言 Bert Bert 中的预训练任务 Masked Language Model Next Sentence Prediction Bert 的 Embedding BERT-wwm Roberta 与 Bert 的区别 ERNIE 与 Bert 的区别 XLNet 排列语言模型(Permutation Language Model,PLM) 双流注意力机制(Two-Stream Self-Attention) 部分预测(Partial Prediction) T

基线系统需要受到更多关注:基于词向量的简单模型

最近阅读了<Baseline Needs More Love: On Simple Word-Embedding-Based Models and Associated Pooling Mechanisms>这篇论文[1],该工作来自杜克大学,发表在ACL 2018上.论文详细比较了直接在词向量上进行池化的简单模型和主流神经网络模型(例如CNN和RNN)在NLP多个任务上的效果.实验结果表明,在很多任务上简单的词向量模型和神经网络模型(CNN和LSTM)的效果相当,有些任务甚至简单模型更好.下

重磅︱R+NLP:text2vec包简介(GloVe词向量、LDA主题模型、各类距离计算等)

词向量的表示主流的有两种方式,一种当然是耳熟能详的google的word2vec,还有一类就是GloVe.那么前面一类有三个开源的包,后面这一类我倒是看到得不多,恰好是在我关注了许久的一个包里面有,它就是text2vec啦.该包提供了一个强大API接口,能够很好地处理文本信息. 本包是由C++写的,流处理器可以让内存得到更好的利用,一些地方是用RcppParallel包进行并行化加乘,同时兼容各个系统的服务器.如果没有并行的地方,大家也可以自己用foreach包来自己加速. ----------

NLP︱R语言实现word2vec(词向量)经验总结(消除歧义、词向量的可加性)

R语言由于效率问题,实现自然语言处理的分析会受到一定的影响,如何提高效率以及提升词向量的精度是在当前软件环境下,比较需要解决的问题. 笔者认为还存在的问题有: 1.如何在R语言环境下,大规模语料提高运行效率? 2.如何提高词向量的精度,或者说如何衡量词向量优劣程度? 3.词向量的功能性作用还有哪些值得开发? 4.关于语义中的歧义问题如何消除? 5.词向量从"词"往"短语"的跨越? 转载请注明出处以及作者(Matt),欢迎喜欢自然语言处理一起讨论~ ---------

word2vec词向量训练及中文文本相似度计算

本文是讲述如何使用word2vec的基础教程,文章比较基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python下载地址:http://radimrehurek.com/gensim/models/word2vec.html 1.简单介绍 参考:<Word2vec的核心架构及其应用 · 熊富林,邓怡豪,唐晓晟 · 北邮2015年> <Word2vec的工作原理及应用探究 · 周练 · 西安电子科技大学

词向量(WordVector)

Reference:http://licstar.net/archives/328 (比较综合的词向量研究现状分析) 起源:One-hot Representation.PCA 序:为什么NLP在模式识别里面比较难? Licstar的文章开头这么提到:语言(词.句子.篇章等)属于人类认知过程中产生的高层认知抽象实体,而语音和图像属于较为底层的原始输入信号. 语音.图像数据表达不需要特殊的编码,而且有天生的顺序性和关联性,近似的数字会被认为是近似特征.然而语言就麻烦了. 比如通俗的One-hot

词向量( Distributed Representation)工作原理是什么

原文:http://www.zhihu.com/question/21714667 4 个回答 83赞同反对,不会显示你的姓名 皮果提 刘鑫.莫教授要养猫.Starling Niohuru 等人赞同 要将自然语言交给机器学习中的算法来处理,通常需要首先将语言数学化,词向量就是用来将语言中的词进行数学化的一种方式. 一种最简单的词向量方式是 one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其他全为 0, 1 的位置对应

95、自然语言处理svd词向量

import numpy as np import matplotlib.pyplot as plt la = np.linalg words = ["I","like","enjoy","deep","learning","NLP","flying","."] X = np.array([[0,2,1,0,0,0,0,0], [2,0,0,1,0

如何产生好的词向量

如何产生好的词向量? 词向量.词嵌入(word vector,word embedding)也称分布式表示(distributed representation),想必任何一个做NLP的研究者都不陌生.如今词向量已经被广泛应用于各自NLP任务中,研究者们也提出了不少产生词向量的模型并开发成实用的工具供大家使用.在使用这些工具产生词向量时,不同的训练数据,参数,模型等都会对产生的词向量有所影响,那么如何产生好的词向量对于工程来说很重要.中科院自动化所的来斯惟博士对此进行了详细的研究.本篇博客也是我