nlp学习5

文本表示:从one-hot到word2vec

##1.词袋模型:离散、高维、稀疏
词袋模型(Bag of Words,简称BoW),即将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的,把每一个单词都进行统计,同时计算每个单词出现的次数。也就是说,词袋模型不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词的权重,而权重与词在文本中出现的频率有关。
  词袋模型的三部曲:分词(tokenizing),统计修订词特征值(counting)与标准化(normalizing)。
直接用scikit-learn的CountVectorizer类来完成,这个类可以帮我们完成文本的词频统计与向量化。

from sklearn.feature_extraction.text import CountVectorizer
corpus = ['This is the first document.',
      'This is the second second document.',
      'And the third one.',
      'Is this the first document?']
  # 实例化分词对象
vectorizer = CountVectorizer(min_df=1)
  # 将文本进行词袋处理
X = vectorizer.fit_transform(corpus)
  # 获取对应的特征名称
print(vectorizer.get_feature_names())
  # 词袋化
corpus_X = X.toarray()

2.word2vec的结构

word2vec可以理解成一种神经网络语言模型,有两种重要模型,CBOW和skip-gram模型,两个模型都包含输入层,投影层和输出层,前者是上下文预测中间的词语,后者是知道当前的词预测上下文。
参考:https://zhuanlan.zhihu.com/p/50285707
利用gensim实现步骤如下:
第一步:获得数据,建立语料库
第二步:分词
第三步:训练
第四步:查看效果
例:下面使用gensim词向量训练

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
import pickle 
import os
import pandas as pd
import numpy as np
# sg ({0, 1}, optional) – Training algorithm: 1 for skip-gram; otherwise CBOW.
# hs ({0, 1}, optional) – If 1, hierarchical softmax will be used for model training. If 0, and negative is non-zero, negative sampling will be used.
# 将语料导入进入训练
model_cb_neg = Word2Vec(LineSentence('./word2vec.txt'),min_count=1,size=200,iter=20,seed=666,sg=0,hs=0)
model_cb_hier = Word2Vec(LineSentence('./word2vec.txt'),min_count=1,size=200,iter=20,seed=666,sg=0,hs=1)
model_sp_neg = Word2Vec(LineSentence('./word2vec.txt'),min_count=1,size=200,iter=20,seed=666,sg=1,hs=0)
model_sp_hier = Word2Vec(LineSentence('./word2vec.txt'),min_count=1,size=200,iter=20,seed=666,sg=1,hs=1)
#将单词和对应词向量构建向量字典
# model = Word2Vec.load('word2vec')
w2v_cb_neg = dict(zip(model_cb_neg.wv.vocab.keys(), [model_cb_neg[each] for each in model_cb_neg.wv.vocab.keys()]))
w2v_cb_hier = dict(zip(model_cb_hier.wv.vocab.keys(), [model_cb_hier[each] for each in model_cb_hier.wv.vocab.keys()]))
w2v_sp_neg = dict(zip(model_sp_neg.wv.vocab, [model_sp_neg[each] for each in model_sp_neg.wv.vocab.keys()]))
w2v_sp_hier = dict(zip(model_sp_hier.wv.vocab, [model_sp_hier[each] for each in model_sp_hier.wv.vocab.keys()]))

参考:word2vec原理推导与代码分析-码农场 http://www.hankcs.com/nlp/word2vec.html

3.word2vec 中的数学原理

参考word2vec 中的数学原理详解(一)目录和前言 - peghoty - 优快云博客 https://blog.youkuaiyun.com/itplus/article/details/37969519

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值