版权声明:博主原创文章,转载请注明来源,谢谢合作!!
https://blog.csdn.net/hl791026701/article/details/84351289

Word embeddings

词语和句子的嵌入已经成为了任何基于深度学习的自然语言处理系统必备的组成部分,它们将词语和句子编码成稠密的定长向量,从而大大地提升通过神经网络处理文本数据的能力。当前主要的研究趋势是追求一种通用的嵌入技术:在大型语料库中预训练的嵌入,它能够被添加到各种各样下游的任务模型中(情感分析、分类、翻译等),从而通过引入一些从大型数据集中学习到的通用单词或句子的表征来自动地提升它们的性能。在过去的五年中,人们提出了大量可行的词嵌入方法。目前最常用的模型是 word2vec 和 GloVe,它们都是基于分布假设(在相同的上下文中出现的单词往往具有相似的含义)的无监督学习方法。
尽管此后有一些研究通过引入语义或者句法的监督信息来增强这些无监督方法,但是纯粹的无监督学习方法在 2017 年到 2018 年得到了令人关注的提升的是「FastText」(word2vec 的一种拓展)。

  • lecture slides
  • 搜集的一些视频: course intro, lecture, seminar
  • Stanford CS224N的讲座视频 - intro, embeddings (english)

词向量空间分布

embedding_space_walk

三种常见的词向量表达方法

  • On hierarchical & sampled softmax estimation for word2vec page
  • GloVe project page
  • FastText project repo
  • Semantic change over time - oberved through word embeddings - arxiv

word2vec

Word2vec就是用来将一个个的词变成词向量的工具。 包含两种结构,一种是skip-gram结构,一种是cbow结构,skip-gram结构是利用中间词预测邻近词,cbow模型是利用上下文词预测中间词 :

  1. CBOW(Continuous Bag-of-Words Model)是一种根据上下文的词语预测当前词语的出现概率的模型,其图示如上图左。CBOW是已知上下文,估算当前词语的语言模型;而Skip-gram只是逆转了CBOW的因果关系而已,即已知当前词语,预测上下文,其图示如上图右,最后在输出层加上Hierarchical Softmax(层次Softmax)和Negative Sampling(负采样)两个降低复杂度的近似方法。
  2. Hierarchical Softmax使用的办法其实是借助了分类的概念。假设我们是把所有的词都作为输出,那么“足球”、“篮球”都是混在一起的。而Hierarchical Softmax则是把这些词按照类别进行区分的,二叉树上的每一个节点可以看作是一个使用哈夫曼编码构造的二分类器。在算法的实现中,模型会赋予这些抽象的中间节点一个合适的向量,真正的词会共用这些向量。这种近似的处理会显著带来性能上的提升同时又不会丢失很大的准确性。
  3. Negative Sampling也是用二分类近似多分类,区别在于它会采样一些负例,调整模型参数使得可以区分正例和负例。换一个角度来看,就是Negative Sampling有点懒,它不想把分母中的所有词都算一次,就稍微选几个算算。
  4. 如果感兴趣具体的推到和原理可以看这里 :word2vec原理推导与代码分析 , word2vec、glove和 fasttext 的比较

Glove

GloVe和word2vec的思路相似 但是充分考虑了词的共现情况,以及其他一些trick来进行传统矩阵分解运算进而得到word vectors,比率远比原始概率更能区分词的含义。
GloVe 算法包含以下步骤:

  1. 使用词共现矩阵收集词共现信息。每个 Xij 元素代表词汇 i 出现在词汇 j上下文的概率。一般我们需要扫描一遍我们的语料库:对于每一个字段,我们查看在这个字段之前或者之后,使用 window_size 定义的一定范围内的上下文。一个词距离这个字段越远,我们给予这个词的权重越低。一般使用这个公式:
  2. 对于每一组词对,

    这里 wi 向量代表主词,wj 代表上下文词的向量。bi, bj 是主词和上下文词的常数偏倚。
  3. 定义损失函数

    这里 f 是帮助我们避免只学习到常见词到一个权重函数。GloVe 到作者选择如下到函数:

    上面说到,GloVe每个词涉及到两个词向量,一个词语本身的向量wi,一个词的context向量w~i。最初这样设计,将word和context的向量分开,不用一套,是为了在更新参数的时候能够简单地套用SGD。
    但是呢,我们可以看到,公式本身是对称的,context和word其实并没有什么区别。
    那么两个向量应该是一样语义空间中的差不多的词向量,context word vector这个副产品自然不能落下,GloVe经过一番试验,最终发现,两个向量加起来最后起到的效果最好。

GloVe 使用

GloVe已经在github开源,源码以及binary可以在GloVe Github找到。
GloVe的代码写的比较糙,每一步是独立的程序,因此要按照以下步骤进行:

  1. 运行./vocab_count 进行词频统计
  2. 运行./cooccur 进行共现统计
  3. 运行./shuffle 进行打散
  4. 运行./glove 进行训练词向量

简单的应用

  1. glove+LSTM: 命名实体识别
  • 用(Keras)实现,glove词向量来源: http://nlp.stanford.edu/data/glove.6B.zip- 用(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).
  • CV分类准确度和加权F1约为98.2%。 为了评估测试集的性能,我们将每个CV折叠的模型输出和预测的平均值进行整合。
    来源于github:https://github.com/thomasjungblut/ner-sequencelearning

FastText

FastText, 一种技术, 也是 An NLP library by Facebook.
它由两部分组成: word representation learning 与 text classification.
fastText简单来说就是将句子中的每个词先通过一个lookup层映射成词向量,然后对词向量取平均作为真个句子的句子向量,然后直接用线性分类器进行分类,从而实现文本分类,不同于其他的文本分类方法的地方在于,这个fastText完全是线性的,没有非线性隐藏层,得到的结果和有非线性层的网络差不多,这说明对句子结构比较简单的文本分类任务来说,线性的网络结构完全可以胜任,而线性结构相比于非线性结构的优势在于结构简单,训练的更快。
这是对于句子结构简单的文本来说,但是这种方法显然没有考虑词序信息,对于那些对词序很敏感的句子分类任务来说(比如情感分类)fastText就不如有隐藏层等非线性结构的网络效果好,比如线面这几个句子是对词序很敏感的类型:
‘The movie is not very good , but i still like it . ’
‘The movie is very good , but i still do not like it .’
‘I do not like it , but the movie is still very good .’
这几个句子的词序差不多,用到的词也差不多,但是表达的意思是完全相反的,如果直接把词向量取平均,显然得到的平均词向量也是相差不到,在经过线性分类器分类很容易把这两个不同的类别分到同一类里,所以fastText很难学出词序对句子语义的影响,对复杂任务还是需要用复杂网络学习任务的语义表达。

原理

FastText优势

适合大型数据+高效的训练速度:能够训练模型“在使用标准多核CPU的情况下10分钟内处理超过10亿个词汇”,特别是与深度模型对比,fastText能将训练时间由数天缩短到几秒钟。使用一个标准多核 CPU,得到了在10分钟内训练完超过10亿词汇量模型的结果。此外, fastText还能在五分钟内将50万个句子分成超过30万个类别。

Fasttext使用

  1. 安装
 pip install fasttext
  1. 文本分类
    输出数据格式: 样本 + 样本标签 :

ex:

outline = outline.encode("utf-8") + "\t__label__" + e + "\n"

ex :姚 明 喜 欢 打 篮 球 __label__1

classifier = fasttext.supervised('data.train.txt', 'model', label_prefix='__label__')
  1. 测试模型和使用模型分类
#加载模型
classifier = fasttext.load_model("fasttext.model.bin",label_prefix = "__label__")
# 测试模型 其中 fasttext_test.txt 就是测试数据,格式和 fasttext_train.txt 一样
result = classifier.test("fasttext_test.txt")
result = classifier.predict([line])
  1. 生成词向量
    输入数据格式和上面一样
model = fasttext.skipgram("all.train.txt", "model",dim = 300)

这其中还有一些其他的配置参数可以选择,具体的参数可以查看参考文献。
训练完成之后,会产生模型文件bin和词向量文件vec,词向量文件里面第一行是字典的长度和维度,下面是具体的词向量。
参考:
文本分类(六):使用fastText对文本进行分类–小插曲
使用fasttext完成文本处理及文本预测

相关论文

  • Distributed Representations of Words and Phrases and their Compositionality Mikolov et al., 2013 [arxiv]

  • Efficient Estimation of Word Representations in Vector Space Mikolov et al., 2013 [arxiv]

  • Distributed Representations of Sentences and Documents Quoc Le et al., 2014 [arxiv]

  • GloVe: Global Vectors for Word Representation Pennington et al., 2014 [article]

Multilingual Embeddings. Unsupervised MT.

  • Enriching word vectors with subword information Bojanowski et al., 2016 [arxiv]

  • Exploiting similarities between languages for machine translation Mikolov et al., 2013 [arxiv]

  • Improving vector space word representations using multilingual correlation Faruqui and Dyer, EACL 2014 [pdf]

  • Learning principled bilingual mappings of word embeddings while preserving monolingual invariance Artetxe et al., EMNLP 2016 [pdf]

  • Offline bilingual word vectors, orthogonal transformations and the inverted softmax [arxiv]
    Smith et al., ICLR 2017

  • Word Translation Without Parallel Data Conneau et al., 2018 [arxiv]

Word embeddings-词向量相关推荐

  1. 2021-1-9 吴恩达-C5 序列模型-w2 自然语言处理与词嵌(课后编程1-Operations on word vectors 词向量运算-含UnicodeDecodeError解决)

    原文链接 如果打不开,也可以复制链接到https://nbviewer.jupyter.org中打开. 自然语言处理与词嵌 Operations on word vectors 词向量运算 1-余弦相 ...

  2. Task 4: Contextual Word Embeddings (附代码)(Stanford CS224N NLP with Deep Learning Winter 2019)

    Task 4: Contextual Word Embeddings 目录 Task 4: Contextual Word Embeddings 词向量的表示 一.Peters et al. (201 ...

  3. [阅读笔记]Dependency-Based Word Embeddings(基于依存的词向量) _Omer Levy and Yoav Goldberg

    [阅读笔记]Dependency-Based Word Embeddings(基于依存的词向量) _Omer Levy and Yoav Goldberg 文章目录 [阅读笔记]Dependency- ...

  4. 自然语言处理(5):词向量

    文章目录 1 概述 2 词向量工具 2.1 模型训练 2.2 增量训练 2.3 求词语相似度 2.4 求与词语相近的多个词语 3 词向量训练算法 4 词向量训练代码实现 5 总结 转载来源:https ...

  5. 自然语言处理5 -- 词向量

    文章目录 1 概述 2 词向量工具 2.1 模型训练 2.2 增量训练 2.3 求词语相似度 2.4 求与词语相近的多个词语 3 词向量训练算法 4 词向量训练代码实现 5 总结 转载来源:https ...

  6. 在Keras的Embedding层中使用预训练的word2vec词向量

    文章目录 1 准备工作 1.1 什么是词向量? 1.2 获取词向量 2 转化词向量为keras所需格式 2.1 获取所有词语word和词向量 2.2 构造"词语-词向量"字典 2. ...

  7. 基于词向量word2vec匹配的英文问答系统

    环境准备 python3.6 pandas --读取并处理csv文件 nltk --http://www.nltk.org/ 自然语言处理工具包,用于分词,词干提取,语料库 gensim -- 训练w ...

  8. Python Djang 搭建自动词性标注网站(基于Keras框架和维基百科中文预训练词向量Word2vec模型,分别实现由GRU、LSTM、RNN神经网络组成的词性标注模型)

    引言 本文基于Keras框架和维基百科中文预训练词向量Word2vec模型,分别实现由GRU.LSTM.RNN神经网络组成的词性标注模型,并且将模型封装,使用python Django web框架搭建 ...

  9. [NLP] 深入浅出 word2vec 词向量详解

    Word2vec 词向量 前置知识:需要理解基本的MLP 多层感知机(全连接神经网络) 和DL.数学相关基础知识 One-hot encoding 独热编码 刚开始,人们用one-hot编码来表示词, ...

  10. Word embeddings in 2017: Trends and future directions (2017年里的词嵌入:趋势和未来方向)

    Word embeddings in 2017: Trends and future directions 原文作者:anonymous 原文地址:http://ruder.io/word-embed ...

最新文章

  1. python解复杂方程_Python数据处理篇之Sympy系列(五)---解方程
  2. python图像插值
  3. 使用nginx+Apache负载均衡及动静分离
  4. css3蒙版运动,纯CSS3制作逼真的汽车运动动画
  5. MVC @RenderBody、@RenderSection、@RenderPage、@Html.RenderPartial、@Html.RenderAction
  6. 线程--线程池--委托--task---async/await
  7. 整数实例hdu2041(超级楼梯)
  8. 系统服务启动交互式程序(C++)
  9. 单例模式(含多线程处理)
  10. threadpool —— 基于 pthread 实现的简单线程池(code)
  11. OFFICE技术讲座:段落的行是如何布局不同对齐方式的
  12. 今天安利一个超牛叉的黑客入侵的特效网页,我第一次打开就被惊艳到了
  13. 软考计算机网络与最大流量,软考程序员考点计算机网络之性能
  14. 多个EXCEL文件合并成一个
  15. spring-cloud 出现 No instances available for xxx的问题
  16. 三极管工作原理_10分钟分析稳压三极管工作原理
  17. Android开发前景如何?2021年,Android开发者的前行方向
  18. 公告栏模板php代码,如何实现手机端公告栏显示
  19. 基于SOA的设备智能维护系统架构设计及实现
  20. 论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》

热门文章

  1. 设计模式之工厂模式(附代码示例)
  2. bzoj2946 [Poi2000]公共串(后缀数组 || 后缀自动机)
  3. 被 CSDN,伤透了心
  4. txt文本怎么去除重复项
  5. python 做行转列通过enbid对应多个cell一行显示
  6. vue 移动端实现上拉加载更多
  7. Jsp 案例:商品浏览记录
  8. 汉字转拼音和简拼工具类分享
  9. We‘re sorry but XXX doesn‘t work properly without JavaScript enabled. Please enable it to contin
  10. 解析迅捷产品的八大特点