赞
踩
在分词之后,对于文本类型的特征属性,需要进行文本数据转换,也就是需要将文本数据转 换为数值型数据。因为神经网络的本质还是数学运算。所以我们第一步是将分词转化为数字符号进行表示。
注:本篇只是简单讲解并不深入
基础方式如下:
序号化、
哑编码(One-Hot)、
词袋法(BOW/TF) TF-IDF(Term frequency-inverse document frequency)
主题模型
LSA
LDA等
word embedding部分:
Word2Vec
Char2Vec
Doc2Vec
FastText、cw2vec
基础方式请见:nlp中将文本数字化的方法-CSDN博客
紧接上文
词嵌入,又称word embedding,是一种将词汇表中的词或短语映射为固定长度向量的技术。
词嵌入并不特指某个具体的算法,跟上面2种方式相比,这种方法有几个明显的优势:
- 他可以将文本通过一个低维向量来表达,不像 one-hot 那么长。
- 语意相似的词在向量空间上也会比较相近。
- 通用性很强,可以用在不同的任务中。
Word2Vec:
词嵌入( word embedding) 的一种, 是将人类文字符号转化为数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec,就是词嵌入( word embedding) 的一种。
CBOW
用一个词语作为输入,来预测它周围的上下文
Skip-gram
用一个词语作为输入,来预测它周围的上下文
Word2Vec优化:Hierarchical softmax(霍夫曼树,HS)和Negative sampling(负样本 采样)
Hierarchical softmax相当于将最后的神经网络替换为了霍夫曼树。
负采样相当于简化了softmax运算中的分母,让其计算量减小。
Word2Vec详情请参考:
和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 是 Tomas Mikolov 在 Word2Vec 的基础上提出的一种模型,用于学习固定长度的文档(或者段落)的向量表示。
Doc2Vec 模型最初被发明的目的是为了解决词嵌入模型(如 Word2Vec)在处理整个文档语境时所面临的挑战。Word2Vec 可以有效地学习词语级别的分布式表示,但是当需要处理整个文档时,传统的词袋模型或 TF-IDF 等方法可能无法很好地捕捉文档的语义信息。
因此,Doc2Vec 的提出旨在让机器能够学习到文档级别的固定长度向量表示,从而能够更好地捕捉文档的语义信息和上下文关联。这种文档级别的向量表示对于文档分类、情感分析、推荐系统等任务非常有用。
总的来说,Doc2Vec 的发明旨在扩展词嵌入模型的应用范围,使其能够处理整个文档的语境信息,从而提高自然语言处理任务的效果和性能。
Doc2Vec 模型有两个主要变种:PV-DM (Distributed Memory) 和 PV-DBOW (Distributed Bag of Words)。
PV-DM 模型:PV-DM 模型在训练时除了考虑上下文词汇信息外,还会引入一个额外的特征向量来表示整个文档,从而学习文档的向量表示。在预测单词时,会同时利用上下文词汇和文档向量。(改进版CBOW)
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是一个文本分类(输出标签)和词向量训练工具/网络结构,最大的特点就是模型简单,只有一层隐层和输出层;
结构基本的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的好处包括:
处理稀有单词:通常训练数据中会存在一些稀有单词,这些单词可能出现的频率很低,导致传统的词嵌入模型无法为其学习到有效的表示。通过将单词分解为子词(subwords),FastText可以利用这些子词的信息来表示整个单词,从而更好地处理稀有单词。
处理未登录词:在自然语言处理任务中,我们经常会遇到一些未登录词,即训练集中从未出现过的单词。FastText能够通过使用子词信息来对未登录词进行表示,从而提供一定程度的泛化能力。
更好的词嵌入表示:使用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(Learning Chinese Word Embeddings with Stroke n-gram Information)
思想:类似FastText的思想,利用中文汉字的笔画信息,使用N-Gram的的方 式来提取中文汉字对应的高阶特征信息。
CW2Vec 是一种用于学习单词(Character-Word)级别的向量表示的模型,它结合了字符级别和词级别的信息。与传统的 Word2Vec 模型专注于学习词语级别的向量表示不同,CW2Vec 旨在利用字符级别的信息来增强词语的表示能力。(就像是中文版的subwords只不过变为了笔画/偏旁)
CW2Vec 模型的训练过程包括以下几个步骤:
字符表示转换:将每个字符映射成对应的向量表示,类似于 Char2Vec 模型中的操作。
单词表示学习:在 CW2Vec 中,每个单词被看作是字符序列的组合。模型将学习如何根据字符级别的信息来构建单词的向量表示,同时也考虑到了词语本身的语义信息和上下文关联。
模型结构:CW2Vec 可以采用类似于 RNN、CNN 或 Transformer 等结构来学习单词的向量表示。这些模型可以有效地捕获字符级别和词语级别的信息,从而生成单词的固定长度向量表示。
目标预测:模型的目标是根据输入的字符序列来预测当前单词的向量表示,通过上下文字符来预测当前单词的向量表示。损失函数一般采用交叉熵等衡量预测结果的准确性。
参数更新:利用梯度下降等优化算法,根据损失函数对模型参数进行更新,以提升模型的预测准确性。
总的来说,CW2Vec 模型将字符级别的信息与词语级别的信息相结合,能够更全面地学习单词的向量表示,从而提高自然语言处理任务的效果和性能。
一些模型的表现
wordsim-240/wordsim-296:词相似度数据集
3CosAdd/3CosMul:词对比任务数据集
Glove:2014年斯坦福发表的词向量生成方式
CWE:2015清华大学中文汉字词向量生成方式
GWE:2017年台湾大学在CWE的基础上汉字词向量生成方式
JWE:2017年香港科技大学基于CBOW的汉字词向量生成方式
本人水平有限,如有错误请多多指正,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。