当前位置:   article > 正文

NLP基础_词嵌入word embedding模型合集(框架理解版)

NLP基础_词嵌入word embedding模型合集(框架理解版)

        在分词之后,对于文本类型的特征属性,需要进行文本数据转换,也就是需要将文本数据转 换为数值型数据。因为神经网络的本质还是数学运算。所以我们第一步是将分词转化为数字符号进行表示。

                                                                                                        注:本篇只是简单讲解并不深入

基础方式如下:

        序号化、

        哑编码(One-Hot)、

        词袋法(BOW/TF) TF-IDF(Term frequency-inverse document frequency)

        主题模型

                LSA

                LDA等

word embedding部分:

        Word2Vec

        Char2Vec

        Doc2Vec

        FastText、cw2vec

基础方式请见:nlp中将文本数字化的方法-CSDN博客

紧接上文

5.word embedding

        词嵌入,又称word embedding,是一种将词汇表中的词或短语映射为固定长度向量的技术。

词嵌入并不特指某个具体的算法,跟上面2种方式相比,这种方法有几个明显的优势:

  1. 他可以将文本通过一个低维向量来表达,不像 one-hot 那么长。
  2. 语意相似的词在向量空间上也会比较相近。
  3. 通用性很强,可以用在不同的任务中。

Word2Vec:

       词嵌入( word embedding) 的一种, 是将人类文字符号转化为数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec,就是词嵌入( word embedding) 的一种。

CBOW

用一个词语作为输入,来预测它周围的上下文

Skip-gram

用一个词语作为输入,来预测它周围的上下文

Word2Vec优化:Hierarchical softmax(霍夫曼树,HS)和Negative sampling(负样本 采样)

        Hierarchical softmax相当于将最后的神经网络替换为了霍夫曼树。

        负采样相当于简化了softmax运算中的分母,让其计算量减小。

 Word2Vec详情请参考:

Word2vec详解(附Gensim代码)-CSDN博客

Char2vec

        和Word2Vec不一样,不进行分词, 直接将字符转换为字向量,后续的模型基于字向量进行模型的构建。 相比于Word2Vec来讲,Char2Vec直接应用于字符集,对拼写更加宽容。 现阶段NLP中应用非常多的一种向量方式。

        但是由于Char2vec不进行分词 的特性,导致其会丢失许多词语信息。所以在char向量化之后会进行卷积操作(没错就是图像里的那个卷积)。

        Char2vec 模型中进行卷积操作的主要原因是为了捕捉字符级别的特征和模式。在 Char2vec 模型中,输入的是字符级别的文本数据,而不是词语或短语。通过使用卷积操作,模型可以有效地识别字符序列中的局部模式和特征,例如字符的组合、重复和变化,从而更好地理解输入文本。

        具体来说,卷积操作可以帮助模型学习到不同大小的字符窗口(n-gram)之间的关系,并且通过池化操作(如最大池化)可以提取关键的特征信息。这样的设计能够使 Char2vec 模型在学习字符级别的表示时更加高效,并且能够捕获到字符之间的语义和结构信息。

        因此,通过引入卷积操作,Char2vec 模型可以更好地理解字符级别的文本数据,从而为后续的特征提取和表示学习提供更丰富的信息,有助于提升模型的表现和性能。

网络结构示意

找了半天好像只有这一篇介绍Char2vec:https://blog.csdn.net/weixin_34348174/article/details/91364718

资料太少我把论文也放这吧:https://arxiv.org/abs/1508.06615

各位大佬想学习细节还请自己查阅

Doc2Vec

        Doc2Vec 是 Tomas Mikolov 在 Word2Vec 的基础上提出的一种模型,用于学习固定长度的文档(或者段落)的向量表示

        Doc2Vec 模型最初被发明的目的是为了解决词嵌入模型(如 Word2Vec)在处理整个文档语境时所面临的挑战。Word2Vec 可以有效地学习词语级别的分布式表示,但是当需要处理整个文档时,传统的词袋模型或 TF-IDF 等方法可能无法很好地捕捉文档的语义信息。

        因此,Doc2Vec 的提出旨在让机器能够学习到文档级别的固定长度向量表示,从而能够更好地捕捉文档的语义信息和上下文关联。这种文档级别的向量表示对于文档分类、情感分析、推荐系统等任务非常有用。

       总的来说,Doc2Vec 的发明旨在扩展词嵌入模型的应用范围,使其能够处理整个文档的语境信息,从而提高自然语言处理任务的效果和性能。

        Doc2Vec 模型有两个主要变种:PV-DM (Distributed Memory) 和 PV-DBOW (Distributed Bag of Words)。

  1. PV-DM 模型:PV-DM 模型在训练时除了考虑上下文词汇信息外,还会引入一个额外的特征向量来表示整个文档,从而学习文档的向量表示。在预测单词时,会同时利用上下文词汇和文档向量。(改进版CBOW)

  2. PV-DBOW 模型:PV-DBOW 模型在训练时只考虑上下文词汇信息,不关心文档的内容。此时,文档向量会被随机初始化,并且不会在训练过程中更新,仅用于表示整个文档。在预测单词时,只利用上下文词汇。(改进版Skip-gram)

下面是对PV-DM模型的一个简单描述:

        

        如图所示,如果将橙色部分去掉就是一个cbow模型。而橙色部分代表的则是文档的向量。当我们对这个模型进行训练时,我们先采用以及训练完成的word2vec,也就是下图的部分:

                                    

        在进行窗口滑动(CBOW部分有讲解)时新增文档本身向量(就是上图中的橙色块)加入输入中(注意这里的三个w和on参数都是被冻结的)

        这时我们的输入是        D  W  W  W                     输出           一个新的向量n

        这时与我们原来的             W  W  W                     输出           on(向量形式)

由此我们已知目标向量on和当前向量n,因为我们的PV-DM模型目标是预测当前单词,而预测结果为 正确/错误 所以损失函数采用交叉熵

        现在已知w和损失函数我们就可以进行梯度下降更新参数了。

        最后滑动窗口,重复以上步骤。

FastText

        FastText是一个文本分类(输出标签)和词向量训练工具/网络结构,最大的特点就是模型简单,只有一层隐层和输出层;

        结构基本的CBOW类似,主要区别在于: CBOW中输出的是词向量,FastText输出的是类别label;

        CBOW中输入是当前窗口除中心词之外的所有词,而FastText输入的是文章中的所有词;

                                                    FastText和CBOW的结构对比

subwords特性

        在自然语言处理中,subwords(子词)指的是单词中可以被切分为更小单位的部分。通常情况下,subwords可以包括字符、字符序列或者其他更小的语言单元,比如字母、字母组合、前缀和后缀等。

        比如单词”hello” ,长度至少为3的 character-level的ngram的'hel' , 'ell' , 'llo' , 'hell' , 'ello'以及'hello' ,每个 ngram都可以使用一个dense的向量zg表示,故最终一个单词可以表示为:

        

        在FastText中使用subwords的主要原因是为了处理稀有单词(rare words)和未登录词(out-of-vocabulary words)。当我们遇到训练数据中从未见过的单词时,传统的词嵌入模型(比如Word2Vec和GloVe)会无法为这些单词学习到有效的表示,因为它们只能处理已知的完整单词。

使用subwords的好处包括:

  1. 处理稀有单词:通常训练数据中会存在一些稀有单词,这些单词可能出现的频率很低,导致传统的词嵌入模型无法为其学习到有效的表示。通过将单词分解为子词(subwords),FastText可以利用这些子词的信息来表示整个单词,从而更好地处理稀有单词。

  2. 处理未登录词:在自然语言处理任务中,我们经常会遇到一些未登录词,即训练集中从未出现过的单词。FastText能够通过使用子词信息来对未登录词进行表示,从而提供一定程度的泛化能力。

  3. 更好的词嵌入表示:使用subwords能够使得词嵌入模型更好地捕捉词汇之间的语义关系,因为单词的表示可以基于多个子词的组合。

        总的来说,FastText中使用subwords有助于提高模型对稀有单词和未登录词的处理能力,同时也可以提升词嵌入的泛化能力和表达能力

        由于中文的拆分效果不好(一般中文词语都是2字意义不大),所以一般不做FastText拆分。而是通常会直接使用词向量模型(如Word2Vec、GloVe等)来学习中文词的表示,而不需要像处理英文文本那样先进行子词划分再进行训练。

增加N-gram的特征

        fastText有个比较突出的问题——就是丢失了词顺序的信息,因为隐层是通过简单的求和取平均得到的。为了弥补这个不足,fastText增加了N-gram的特征

        当在 FastText 中增加 N-gram 特征时,实际上是在文本表示中引入了更多的局部信息。N-gram 是文本中连续的 N 个词或字符组成的序列,在 FastText 中一般是基于字符级别的 N-gram。通过考虑更长的 N-gram,模型可以更好地捕捉到文本中的局部结构和语义信息,从而提升模型在文本分类、文本表示等任务中的性能。

        这篇写的简单易懂想了解请移步:https://blog.csdn.net/weixin_43876357/article/details/113774856

cw2vec

        cw2vec(Learning Chinese Word Embeddings with Stroke n-gram Information)

        思想:类似FastText的思想,利用中文汉字的笔画信息,使用N-Gram的的方 式来提取中文汉字对应的高阶特征信息。

         

        CW2Vec 是一种用于学习单词(Character-Word)级别的向量表示的模型,它结合了字符级别和词级别的信息。与传统的 Word2Vec 模型专注于学习词语级别的向量表示不同,CW2Vec 旨在利用字符级别的信息来增强词语的表示能力。(就像是中文版的subwords只不过变为了笔画/偏旁)

CW2Vec 模型的训练过程包括以下几个步骤:

  1. 字符表示转换:将每个字符映射成对应的向量表示,类似于 Char2Vec 模型中的操作。

  2. 单词表示学习:在 CW2Vec 中,每个单词被看作是字符序列的组合。模型将学习如何根据字符级别的信息来构建单词的向量表示,同时也考虑到了词语本身的语义信息和上下文关联。

  3. 模型结构:CW2Vec 可以采用类似于 RNN、CNN 或 Transformer 等结构来学习单词的向量表示。这些模型可以有效地捕获字符级别和词语级别的信息,从而生成单词的固定长度向量表示。

  4. 目标预测:模型的目标是根据输入的字符序列来预测当前单词的向量表示,通过上下文字符来预测当前单词的向量表示。损失函数一般采用交叉熵等衡量预测结果的准确性。

  5. 参数更新:利用梯度下降等优化算法,根据损失函数对模型参数进行更新,以提升模型的预测准确性。

总的来说,CW2Vec 模型将字符级别的信息与词语级别的信息相结合,能够更全面地学习单词的向量表示,从而提高自然语言处理任务的效果和性能。

一些其他的模型(只是列出想了解请自己查阅):

一些模型的表现

wordsim-240/wordsim-296:词相似度数据集

3CosAdd/3CosMul:词对比任务数据集

Glove:2014年斯坦福发表的词向量生成方式

CWE:2015清华大学中文汉字词向量生成方式

GWE:2017年台湾大学在CWE的基础上汉字词向量生成方式

JWE:2017年香港科技大学基于CBOW的汉字词向量生成方式

本人水平有限,如有错误请多多指正,谢谢!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/358503
推荐阅读
相关标签
  

闽ICP备14008679号