情感分析
如何把文字转化为向量
如何把将文本向量化时如何保持句子原有的语义.
文本向量化的流程
graph TD 文本 --jieba--> 分词 --Word2Vec--> 生成词向量 --Gensim-->特征向量矩阵 --> 网络模型
jieba
- 分词器,就是把一句话中的词提取出来
word2vec梯度参数
常用参数 model = Word2Vec(size=vocab_dim, min_count=n_exposures, window=window_size, workers=cpu_count, iter=n_iterations) sentence:语料句子,必须是一个可迭代的对象 min_counts:指定了需要训练的词语最小出现次数,小于该值的词将被忽略 max_vocab_size:最大词汇数,防止内存溢出 size:词向量维度 alpha:训练的初始学习率,随着训练的进行,学习率会线性减少 min_alpha:最小学习率 window:滑动窗口大小 sg:训练模型(0:CBOW;1:skip-gram) hs:word2vec两个解法的选择了,如果是0, 则是Negative Sampling,是1的话并且负采样个数negative大于0, 则是Hierarchical Softmax。默认是0即Negative Sampling。 iter:迭代次数 #加载词表 model.build_vocab(combined) # input: list #训练 model.train(combined,total_examples=model.corpus_count,epochs=n_iterations) #保存词向量模型到pkl中 model.save(r'D:BaiduNetdiskDownloadkearsImgSentimentAnalysis-mastermodel_testWord2vec_model.pkl')
gensim
-
Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。
-
它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法
gensim_dict = Dictionary() #由doc2bow变为词袋,输出的格式为 gensim_dict.doc2bow(model.wv.vocab.keys(), allow_update=True) # 字典转换为以词为k w2indx = {v: k+1 for k, v in gensim_dict.items()} #向量 w2vec = {word: model[word] for word in w2indx.keys()}
网络结构
model = Sequential() # or Graph or whatever # 词向量转化为密集矩阵 # 可以通过weights参数指定初始的weights参数 因为Embedding层是不可导的 梯度东流至此回,所以把embedding放在中间层是没有意义的,emebedding只能作为第一层 注意weights到embeddings的绑定过程很复杂,weights是一个列表,根据上面得到的向量来的 for word, index in index_dict.items(): embedding_weights[index, :] = word_vectors[word] model.add(Embedding(output_dim=vocab_dim, input_dim=n_symbols, mask_zero=True, weights=[embedding_weights], input_length=input_length)) # Adding Input Length # RNN model.add(LSTM(50, activation='tanh')) model.add(Dropout(0.5))
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)