函数说明:

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. Python error: Microsoft Visual C++ 9.0 is required 解决方案

    换了新电脑,在使用python2.7 pip 安装ipython时,报错了 error: Microsoft Visual C++ 9.0 is required. Get it from http: ...

  2. 廖雪峰Java6IO编程-1IO基础-1IO简介

    1.IO简介 IO是指Input/Output,即输入和输出: Input指从外部读取数据到内存,例如从磁盘读取,从网络读取. * 为什么要把数据读到内存才能处理这些数据呢? * 因为代码是在内存中运 ...

  3. UnicodeString基本操作(Ring3)

    // Unicode_String_Ring3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "Unicode ...

  4. 事件之父View和子view的点击事件的执行过程

    Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN-& ...

  5. Jmeter(三十)Jmeter Question 之 循环+事务的妙用

    先提一个小问题,也是当时在对Jmeter还是懵懂之时,亲身碰到过的一个问题. 真实的业务场景---“登录一次,提交订单N次”,当然该处是两个接口. 提现接口是需要判断用户是否在线,换句话说,服务器需要 ...

  6. 0002 - Spring MVC 拦截器源码简析:拦截器加载与执行

    1.概述 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权限验证.记录请求信息的日 ...

  7. CRM 2016 升级CRM365之注意事项

    https://docs.microsoft.com/zh-cn/previous-versions/dynamicscrm-2016/deployment-administrators-guide/ ...

  8. POJ K-th Number

    [题解] 数据结构采用线段树.通过将数组的每一段归并排序来建树.将数组排序来实现离散化. 时间复杂度分析:建树的过程就是归并排序,其时间复杂度为O(nlog(n)).查询时:二分查找第k小元素的复杂度 ...

  9. window安装mysql教程

    1.下载mysql安装包到指定文件: 比如如图我把下载的mysql zip的内容解压到这个文件里面,具体文件内容如下: my.ini 需要自己创建,里面的内容如下: [mysqld] #basedir ...

  10. MySQL 中的三中循环 while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...