Bag-of-words模型,BOW模型(词袋模型)假定对于一个文档,忽略它的单词顺序和语法、句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个词汇的出现都是独立的,不依赖于其它词汇是否出现。也就是说,文档中任意一个位置出现的任何单词,都不受该文档语意影响而独立选择的。
基于词袋模型的文本离散化表示存在着数据稀疏、向量维度过高、字词之间的关系无法度量的问题,适用于浅层的机器学习模型,不适用于深度学习模型。
Word2vec使用大量未注释的纯文本,word2vec自动学习到词汇之间的关系,输出是向量,每个词汇一个向量,具有显着的线性语义关系,由此我们可以做诸如vec(“king”) - vec(“man”)+ vec(“woman”)= ~vec(“queen”)之类的加减运算,或vec(“蒙特利尔加拿大人队”) - vec(“蒙特利尔”)+ vec(“多伦多”)等于“多伦多枫叶队”的向量。
在中文文本数据里常常会涉及一些外文词汇,尤其是科技领域包含有大量的英文词汇,这时就需要对英文文本数据进行规范化处理了,主要是小写化、词干提取和词形还原。
小写化:lower()就可以转换
词干提取:Porter Stemming算法进行词干分析
词形还原:WordNet词法数据库进行词式化(词形还原就是去掉单词的词缀,提取单词的主干部分,通常提取后的词汇会是字典中的单词,不同于词干提取(stemming),提取后的单词不一定会出现在词汇中。)
Word2Vec接受几个影响训练速度和质量的参数,理解它们的大致原理对于训练出一个符合业务需要的Word2Vec模型是至关重要的。
word2Vec输入是词汇,输出是词向量
min_count:用于修剪内部字典(Prune the Internal Dictionary),设置记录词汇出现的最低次数,默认值为5
size:是gensim Word2Vec将词汇映射到的N维空间的维度数量(N),默认size是100,较大的size值需要更多的训练数据,但可以产生更好(更准确)的模型。 合理的size数值介于在几十到几百之间。 如果你拥有的数据较少,那就把维度值设置小一点,这将在一定程度上减少模型的过拟合,尽量提高模型的表现效果。
workers:workers是一个用于训练并行化的参数,可以加快训练速度,默认值3
iter:是模型训练时在整个训练语料库上的迭代次数,假如参与训练的文本量较少,就需要把这个参数调大一些。
sg:是模型训练所采用的的算法类型,默认值为0
1 代表 skip-gram,该模型从上下文语境(context)对目标词汇(target word)的预测中学习到其词向量的表达
0 代表 CBOW,该模型从目标词汇(target word)对上下文语境(context)的预测中学习到其词向量的表达
window:控制窗口,它指当前词和预测词之间的最大距离,默认值为5,如果设得较小,那么模型学习到的是词汇间的组合性关系(词性相异),比如“苹果”和“好红”,“主席”和“伟大”,后者对前者是一种修饰关系;如果设置得较大,会学习到词汇之间的聚合性关系(词性相同),比如“伟大”和“注明”、“可爱”和“卡哇伊”。
假如语料够多,笔者一般会设置得大一些,8~10,因为词汇间的聚合关系能很好的捕捉到词汇之间的相似性关系,能很好的解决词袋表示中多词一义的问题,发现词汇/语句之间的潜在语义相关性。
model = gensim.models.Word2Vec( sentences, size = 50, sg=1, min_count= 3, window = 8, iter = 20 )
Word2Vec有一种更为高级的用法,即在线训练,也就是说,当有了新的数据,就可以直接在原来已经训练好的模型上接着训练,而不用从头再来,后续可以不断加入新的语句(经过文本预处理)来提升模型的表现效果。
model.build_vocab(more_sentences, update=True) #注意该方法中的参数update,默认为False,增量更新模型时,需要设置为True model.train(more_sentences, total_examples=model.corpus_count, epochs=model.epochs)
文本先用jieba进行分词,再对词进行规范化处理,再用word2rec进行词向量转化。
标签:词汇,word2vec,训练,模型,词袋,vec,文本,向量 From: https://www.cnblogs.com/pass-ion/p/17650743.html