函数说明:

1. from gensim.model import word2vec  构建模型 word2vec(corpus_token, size=feature_size, min_count=min_count, window=window, sample=sample)

参数说明:corpus_token已经进行切分的列表数据,数据格式是list of list , size表示的是特征向量的维度,即映射的维度, min_count表示最小的计数词,如果小于这个数的词,将不进行统计, window表示滑动窗口,表示滑动窗口的大小,用于构造训练集和测试集, sample表示对出现次数频繁的词进行一个随机下采样

2. model.wv['sky']  表示输出sky这个词的特征映射结果

3.model.wv.index2words  输出经过映射后的特征名,输出经过映射词的名字

这里简要的说明一下个人的理解

CBOW是word2vec的一种基础模型,他是通过选取一个词前后c个词进行训练

训练数据:一个词的前后2c个词做为训练

标签:当前这个词作为标签值

最后的输出结果是前一个隐含层的输出,即特征的个数,这个的特征是4即存在4个维度值

如果对4个特征做降维,降成2维,我们可以发现词义相似的词会被放在相近的位置上

word2vec使用每一个特征向量词的平均用最为最终的特征表示

word2vec主要是构建了霍夫曼树用来取代softmax最后一个神经元的参数跟新

操作过程:

第一步:

首先使用最大似然估计 ∑p = yi*pi + (1-yi) * pi

然后对其根绝∑p/dtheta 进行求导操作, 获得梯度的方向。

第二步:

建立一颗霍夫曼树:每个叶子节点的个数是Xw = 1/2c∑xi  表示这个词左右两边c个词进行加和,xi表示初始值的one-hot编码

通过梯度上升法:来更新thetaj 和 Xw

thetaj = thetaj + a * g * Xw   # a表示步长, g表示每个参数的梯度方向, Xw表示当前的值

Xw = 0 + g * thetaj      # g表示每个参数的梯度方向, thetaj表示当前的梯度值

由于左子树的权重值大于右子树,左边的是sigmoid大于0.5的,右边是sigmoid小于0.5的

因此我们很容易找出sigmoid值最大的那个树(感觉有点点不是很理解,这么做的目的)

代码:

第一步:DataFrame化数据

第二步:进行分词和去除停用词,使用' '.join连接列表

第三步:np.vectorize 向量化函数和调用函数进行停用词的去除

第四步:构建gensim.models import word2vec 构造单个词的特征向量,使用model.wv['sky']

第五步:对第三步的字符串进行切分,将切分后的数据送入到word2vec建立模型,使用model.wv.index2word打印出当前的特征名,使用循环找出每个列表中词的特征向量,最后对每个列表中的词做一个特征向量的平均,作为列表的特征向量

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re corpus = ['The sky is blue and beautiful.',
'Love this blue and beautiful sky!',
'The quick brown fox jumps over the lazy dog.',
'The brown fox is quick and the blue dog is lazy!',
'The sky is very blue and the sky is very beautiful today',
'The dog is lazy but the brown fox is quick!'
] labels = ['weather', 'weather', 'animals', 'animals', 'weather', 'animals'] # 第一步:进行DataFrame化操作 corpus = np.array(corpus)
corpus_df = pd.DataFrame({'Document': corpus, 'category': labels}) # 第二步:进行分词和停用词的去除
import nltk stopwords = nltk.corpus.stopwords.words('english')
wps = nltk.WordPunctTokenizer()
def Normalize_corpus(doc): tokens = re.findall(r'[a-zA-Z0-9]+', doc.lower())
doc = [token for token in tokens if token not in stopwords]
doc = ' '.join(doc)
return doc # 第三步:向量化函数,调用函数进行分词和停用词的去除
Normalize_corpus = np.vectorize(Normalize_corpus)
corpus_array = Normalize_corpus(corpus) # 第四步:对单个词计算word2vec特征向量
from gensim.models import word2vec
corpus_token = [wps.tokenize(corpus) for corpus in corpus_array]
print(corpus_token)
# 特征的维度
feature_size = 10
# 最小的统计个数,小于这个数就不进行统计
min_count = 1
# 滑动窗口
window = 10
# 对出现次数频繁的词进行随机下采样操作
sample = 1e-3
model = word2vec.Word2Vec(corpus_token, size=feature_size, min_count=min_count, window=window, sample=sample)
print(model.wv.index2word) # 第五步:对每一个corpus做平均的word2vec特征向量
def word2vec_corpus(corpuses, num_size=10): corpus_tokens = [wps.tokenize(corpus) for corpus in corpuses]
model = word2vec.Word2Vec(corpus_tokens, size=num_size, min_count=min_count, window=window, sample=sample)
vocabulary = model.wv.index2word
score_list = []
for corpus_token in corpus_tokens:
count_time = 0
score_array = np.zeros([10])
for word in corpus_token:
if word in vocabulary:
count_time += 1
score_array += model.wv[word]
score_array = score_array / count_time
score_list.append(list(score_array)) return score_list print(np.shape(word2vec_corpus(corpus_array, num_size=10)))

部分的特征数据:我们可以看出维度为(6, 10)上述的特征是6个,每个特征的维度为10

机器学习入门-文本特征-word2vec词向量模型 1.word2vec(进行word2vec映射编码)2.model.wv['sky']输出这个词的向量映射 3.model.wv.index2vec(输出经过映射的词名称)的更多相关文章

  1. 机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)

    函数说明 1.LDA(n_topics, max_iters, random_state)  用于构建LDA主题模型,将文本分成不同的主题 参数说明:n_topics 表示分为多少个主题, max_i ...

  2. 机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)

    函数说明: 1. re.sub(r'[^a-zA-Z0-9\s]', repl='', sting=string)  用于进行字符串的替换,这里我们用来去除标点符号 参数说明:r'[^a-zA-Z0- ...

  3. 机器学习入门-贝叶斯构造LDA主题模型,构造word2vec 1.gensim.corpora.Dictionary(构造映射字典) 2.dictionary.doc2vec(做映射) 3.gensim.model.ldamodel.LdaModel(构建主题模型)4lda.print_topics(打印主题).

    1.dictionary = gensim.corpora.Dictionary(clean_content)  对输入的列表做一个数字映射字典, 2. corpus = [dictionary,do ...

  4. 机器学习入门-文本数据-构造Ngram词袋模型 1.CountVectorizer(ngram_range) 构建Ngram词袋模型

    函数说明: 1 CountVectorizer(ngram_range=(2, 2)) 进行字符串的前后组合,构造出新的词袋标签 参数说明:ngram_range=(2, 2) 表示选用2个词进行前后 ...

  5. 机器学习入门-文本数据-构造Tf-idf词袋模型(词频和逆文档频率) 1.TfidfVectorizer(构造tf-idf词袋模型)

    TF-idf模型:TF表示的是词频:即这个词在一篇文档中出现的频率 idf表示的是逆文档频率, 即log(文档的个数/1+出现该词的文档个数)  可以看出出现该词的文档个数越小,表示这个词越稀有,在这 ...

  6. 机器学习入门09 - 特征组合 (Feature Crosses)

    原文链接:https://developers.google.com/machine-learning/crash-course/feature-crosses/ 特征组合是指两个或多个特征相乘形成的 ...

  7. 机器学习入门-数值特征-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) 4.pd.get_dummies(直接对特征进行one-hot编码)

    1.LabelEncoder() # 用于构建数字编码 2 .map(dict_map)  根据dict_map字典进行数字编码的映射 3.OnehotEncoder()  # 进行one-hot编码 ...

  8. DL4NLP——词表示模型(三)word2vec(CBOW/Skip-gram)的加速:Hierarchical Softmax与Negative Sampling

    上篇博文提到,原始的CBOW / Skip-gram模型虽然去掉了NPLM中的隐藏层从而减少了耗时,但由于输出层仍然是softmax(),所以实际上依然“impractical”.所以接下来就介绍一下 ...

  9. 机器学习入门-数值特征-对数据进行log变化

    对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布 因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布 进行log变化,就是对数据使用n ...

随机推荐

  1. YAML配置,spring boot 配置文件

    1 概念YAML是一种人们可以轻松阅读的数据序列化格式,并且它非常适合对动态编程语言中使用的数据类型进行编码.YAML是YAML Ain't Markup Language简写,和GNU(" ...

  2. 廖雪峰Java1-3流程控制-4switch多重选择

    switch语句 根据switch(表达式)跳转到匹配的case结果,继续执行case结果: 的后续语句,遇到break结束执行,没有匹配条件,执行default语句. int i = 3 switc ...

  3. 保持url唯一性 解决多个网站首页问题

    原文地址:http://www.seowhy.com/bbs/thread-2694339-1-1.html 在网站SEO优化过程中,经常会遇到这样或者那样的常见技术型问题,达闻现将此类常见技术问题总 ...

  4. centos7安装Jenkins及其卸载

    首先安装好Java(Java_home) 查看Java版本 # java -version 如果没安装,依照以下我的另一篇博客进行安装 https://www.cnblogs.com/djlsunsh ...

  5. C# Socket的Send问题,阻塞线程

    Socket sc = comm.connectSocket(ip, port, ReceiveMsg_fromPc); comm.sendSocketMsg16(sc,cmd); sc.Close( ...

  6. arp协议分析&python编程实现arp欺骗抓图片

    arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...

  7. STL常用容器使用方法

    在程序头部使用#include<stack>来引入STL的stack容器,然后使用stack<int> s语句来声明一个管理整型数据的容器s.stack常用成员函数:push( ...

  8. servlet和jsp概述

    1.servlet的作用 B/S系统:浏览器/服务器(Servlet的服务模式) Servlet是运行在web服务器或应用服务器上的java程序,它是一个中间层,负责连接来自web浏览器或其它HTTP ...

  9. javaScrip字符串(String)相关

    -----------------------------------------此页只记录前端关于String的东西----------------------------------------- ...

  10. C++删除容器数据

    // free the contents of the list; erase the list inline void ListDelete (list <void *> *pList) ...