有很多改进版的word2vec,但是目前还是word2vec最流行,但是Glove也有很多在提及,笔者在自己实验的时候,发现Glove也还是有很多优点以及可以深入研究对比的地方的,所以对其进行了一定的学习。

部分学习内容来源于小象学院,由寒小阳老师授课《深度学习二期课程》


高级词向量三部曲:

1、NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)

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

3、NLP︱高级词向量表达(三)——WordRank(简述)

4、其他NLP词表示方法paper:从符号到分布式表示NLP中词各种表示方法综述


一、理论简述

1、word2vec

word2vec:与一般的共现计数不同,word2vec主要来预测单词周边的单词,在嵌入空间里相似度的维度可以用向量的减法来进行类别测试。

弊端:

  • 1、对每个local context window单独训练,没有利用包含在global co-corrence矩阵中的统计信息
  • 2、多义词处理乏力,因为使用了唯一词向量

2、GloVe

GloVe和word2vec的思路相似(论文链接

但是充分考虑了词的共现情况,比率远比原始概率更能区分词的含义。

GloVe综合了LSA、CBOW的优点,训练更快、对于大规模语料算法的扩展性也很好、在小语料或者小向量上性能表现也很好。

.

.


二、测评

本节主要来自于52NLP的文章:斯坦福大学深度学习与自然语言处理第三讲:高级的词向量表示

.

.

1、词向量测评方法

一直以来,如何测评词向量还是一件比较头疼的事情。

主要方法分为两种:内部测评(词类比)与外部测评(命名实体识别(NER))。

词类比。通过评测模型在一些语义或语法类比问题上的余弦相似度距离的表现来评测词向量

当然,在测评时候,会去除一些来自于搜索的输入词、干扰词、常用停用词等,让测评结果更加显著

  • 内部类比方式一:不同的城市可能存在相同的名字

类比数据来源:https://code.google.com/p/word2vec/source/browse/trunk/questions-words.txt

  • 内部类比方式二:形容词比较级

以下语法和语义例子来源于:https://code.google.com/p/word2vec/source/browse/trunk/questions-words.txt

  • 内部类比三:时态

词向量类比:以下语法和语义例子来源于:https://code.google.com/p/word2vec/source/browse/trunk/questions-words.txt

  • 内部类比四:人名?
  • 外部测评:命名实体识别(NER):找到人名,地名和机构名

    .

    .

2、测评结果

一些测评方式可参考:Paper2:[Improving Word Representations via Global Context

and Multiple Word

Prototypes]

  • (1)内部测评

类比评测和超参数:

相关性评测结果:

  • (2)外部测评

命名实体识别(NER):找到人名,地名和机构名

.

.

3、利用词向量解决歧义问题

也许你寄希望于一个词向量能捕获所有的语义信息(例如run即是动车也是名词),但是什么样的词向量都不能很好地进行凸显。

这篇论文有一些利用词向量的办法:Improving Word Representations Via Global Context And Multiple Word Prototypes(Huang et al. 2012)

解决思路:对词窗口进行聚类,并对每个单词词保留聚类标签,例如bank1, bank2等

.

.

.


三、Glove实现&R&python

1、Glove训练参数

本节主要来自于52NLP的文章:斯坦福大学深度学习与自然语言处理第三讲:高级的词向量表示

  • 最佳的向量维度:300左右,之后变化比较轻微
  • 对于GloVe向量来说最佳的窗口长度是8
  • 训练迭代次数。对于GloVe来说确实有助于

  • 更多的数据有助于帮助提高训练精度

.

2、用R&python实现

python:python-glove(参考博客:glove入门实战

R:text2vec(参考博客:重磅︱R+NLP:text2vec包——New 文本分析生态系统 No.1(一,简介)


.

.

四、相关应用

1、glove+LSTM:命名实体识别

用(Keras)实现,glove词向量来源: http://nlp.stanford.edu/data/glove.6B.zip

一开始输入的是7类golve词向量。The model is an LSTM over a convolutional layer which itself trains over a sequence of seven glove embedding vectors (three previous words, word for the current label, three following words).

最后是softmax层进行分类。The last layer is a softmax over all output classes.

CV categorical accuracy and weighted F1 is about 98.2%. To assess the test set performance we are ensembling the model outputs from each CV fold and average over the predictions.

来源于github:https://github.com/thomasjungblut/ner-sequencelearning

.

2、PAPER:词向量的擦除进行情感分类、错误稽查

Understanding Neural Networks Through Representation Erasure(arXiv: 1612.08220)

提出了一种通用的方法分析和解释了神经网络模型的决策——这种方法通过擦除输入表示的某些部分,比如将输入词向量的某些维、隐藏层的一些神经元或者输入的一些词。我们提出了几种方法来分析这种擦除的影响,比如比较擦除前后模型的评估结果的差异,以及使用强化学习来选择要删除的最小输入词集合,使用于分类的神经网络模型的分类结果发生改变。

在对多个 NLP 任务(包括语言特征分类、句子情感分析、文档级别的 sentiment aspect prediction)的综合分析中,我们发现我们提出的方法不仅能提供神经网络模型决策的清晰解释,而且可以用来进行错误分析。

**分析揭示了 Word2Vec 和 Glove 产生的词向量之间存在一些明显的差异,同时也表明训练语料中的词频对产生的词的表达有很大的影响;

在句子级别的情感分析上的实验表明情感词对情感分类结果影响显著,有意思的是还能找出来一些使模型误分类的词;**

在文档级别的 aspect prediction 实验则清晰地揭示出文档中哪部分文本和特定的 aspect 是强关联的。同时这些实验都表明,双向 LSTM 的表达能力比经典 LSTM 强,经典 RNN 则最弱。

NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)的更多相关文章

  1. NLP︱高级词向量表达(三)——WordRank(简述)

    如果说FastText的词向量在表达句子时候很在行的话,GloVe在多义词方面表现出色,那么wordRank在相似词寻找方面表现地不错. 其是通过Robust Ranking来进行词向量定义. 相关p ...

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

    FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,不过这个项目其实是有两部分组成的,一部分是这篇文章介绍的 fastText 文本分类(paper: ...

  3. NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)

    自然语言处理的第一步就是获取词向量,获取词向量的方法总体可以分为两种两种,一个是基于统计方法的,一种是基于语言模型的. 1 Glove - 基于统计方法 Glove是一个典型的基于统计的获取词向量的方 ...

  4. NLP之词向量

    1.对词用独热编码进行表示的缺点 向量的维度会随着句子中词的类型的增大而增大,最后可能会造成维度灾难2.任意两个词之间都是孤立的,仅仅将词符号化,不包含任何语义信息,根本无法表示出在语义层面上词与词之 ...

  5. 深度学习之NLP获取词向量

    1.代码 def clean_text(text, remove_stopwords=False): """ 数据清洗 """ text = ...

  6. NLP︱词向量经验总结(功能作用、高维可视化、R语言实现、大规模语料、延伸拓展)

    R语言由于效率问题,实现自然语言处理的分析会受到一定的影响,如何提高效率以及提升词向量的精度是在当前软件环境下,比较需要解决的问题. 笔者认为还存在的问题有: 1.如何在R语言环境下,大规模语料提高运 ...

  7. NLP学习(1)---Glove模型---词向量模型

    一.简介: 1.概念:glove是一种无监督的Word representation方法. Count-based模型,如GloVe,本质上是对共现矩阵进行降维.首先,构建一个词汇的共现矩阵,每一行是 ...

  8. 文本情感分析(二):基于word2vec、glove和fasttext词向量的文本表示

    上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用 ...

  9. DeepNLP的核心关键/NLP词的表示方法类型/NLP语言模型 /词的分布式表示/word embedding/word2vec

    DeepNLP的核心关键/NLP语言模型 /word embedding/word2vec Indexing: 〇.序 一.DeepNLP的核心关键:语言表示(Representation) 二.NL ...

随机推荐

  1. win10下端口被占用解决办法

    调试socket通信的时候,如果程序未正常结束,重新启动会报端口被占用的错误. 一 查找被占用的端口 解决办法如下:按win+R输入cmd打开控制台,输入 netstat -ano|findstr 8 ...

  2. transfer-webpack-plugin最简使用示例

    转移文件的插件 加载插件 $ npm install transfer-webpack-plugin --save-dev API new CopyWebpackPlugin(patterns: Ar ...

  3. python数据类型之元组、字典、集合

    python数据类型元组.字典.集合 元组 python的元组与列表类似,不同的是元组是不可变的数据类型.元组使用小括号,列表使用方括号.当元组里只有一个元素是必须要加逗号: >>> ...

  4. wpf阻止键盘快捷键alt+space,alt+F4

    /// <summary>        /// 阻止 alt+f4和alt+space 按键        /// </summary>        /// <par ...

  5. 不要用for循环去遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  6. Cannot read property 'component' of undefined 即vue-router 0.x转化为2.x

    原文链接:http://blog.csdn.net/m0_37754657/article/details/71269988 由于vue版本为1.0,没有一些vue-router指令:因而需要vue- ...

  7. vue项目基本流程

    一.做项目基本流程: 1.规划组件结构 Nav.vue Header.vue Home.vue..... 2.编写对应路由 vue-router 3.具体些每个组件功能 一些公共的文件jquery,j ...

  8. Retrofit 实践

    Retrofit是一套RESTful架构的Android(Java)客户端实现,基于注解,提供JSON to POJO(Plain Ordinary Java Object,简单Java对象),POJ ...

  9. Vue打包后出现一些map文件

    Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1,运行  cnpm run build  开始 ...

  10. springIOC、AOP的一些注解

    springIOC.AOP的一些注解(使用这些注解之前要导入spring框架的一些依赖):    1.注入IOC容器        @Compontent:使用注解的方式添加到ioc容器需要在配置文件 ...