函数说明:

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. 《Java并发编程实战》笔记-取消与关闭

    1,中断是实现取消的最合理方式.2,对中断操作的正确理解是:它并不会真正地中断一个正在运行的线程,而只是发出中断请求,然后由线程在下一个合适的时刻中断自己.3,区分任务和线程对中断的反应是很重要的4, ...

  2. python-selenium并发执行测试用例(方法一 各模块每一条并发执行)

    总执行代码: # coding=utf-8import unittest,os,timeimport HTMLTestRunnerimport threadingimport syssys.path. ...

  3. go中redis使用小结

    最近做了个关于redis的项目,那么就整理下遇到和未遇到的问题 1.redis的简介安装 2.redis的数据结构 3.Redis基本使用 4.Redis的并发 5.Redis的落地 一.redis的 ...

  4. Recyclerview 实现上拉加载更多

    LinearLayoutManager layoutManager; layoutManager = new LinearLayoutManager(getActivity()); layoutMan ...

  5. if判断、while循环、for循环

    一. if判断 基本结构: if 执行语句1 print(代码块1); print(代码块2); # 满足执行语句1时,执行代码块1和代码块2,否则只执行代码块2. if 执行语句1 print(代码 ...

  6. OpenJuege 兔子与星空

    总时间限制:  1000ms 内存限制:  10000kB 描述 很久很久以前,森林里住着一群兔子.兔子们无聊的时候就喜欢研究星座.如图所示,天空中已经有了n颗星星,其中有些星星有边相连.兔子们希望删 ...

  7. http协议中的一些小常识

    http协议这部分的知识很重要,在面试的时候也会经常问起来. 先来看一看什么是http协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一 ...

  8. Python列表生成式和生成器

    [1]列表生成器:列表生成式就是一个用来生成列表的特定语法形式的表达式. 1.基础语句结构:[exp for iter_var in iterable例如:a=[f(x) for x in range ...

  9. html中header,footer分别固定在顶部和底部

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>page01</title> 5 <styl ...

  10. Flightphp了解一下

    Flight是什么? Flight是一个快速,简易,可扩展的PHP框架.Flight能使你快速和轻松地创建RESTful Web应用. require 'flight/Flight.php'; Fli ...