漳州网站建设网站运营,wordpress添加音乐,去掉wordpress顶部,购物网站建设比较好的文章目录 项目背景数据清洗导包导入数据切分评论及标签Word2Vec构造w2v 数据切分模型训练查看结果 同类型项目 项目背景
项目的目的#xff0c;是为了对情感评论数据集进行预测打标。在训练之前#xff0c;需要对数据进行数据清洗环节#xff0c;前面已对数据进行清洗… 文章目录 项目背景数据清洗导包导入数据切分评论及标签Word2Vec构造w2v 数据切分模型训练查看结果 同类型项目 项目背景
项目的目的是为了对情感评论数据集进行预测打标。在训练之前需要对数据进行数据清洗环节前面已对数据进行清洗详情可移步至NLP_情感分类_数据清洗
下面对已清洗的数据集用机器学习方案w2v进行处理
数据清洗
导包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from tqdm import tqdm
import pickle
import numpy as np
import gc
#import swifter
from sklearn.neural_network import MLPClassifier
import os
from sklearn.metrics import accuracy_score,f1_score,recall_score,precision_score
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
from lightgbm import LGBMClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn import svm导入数据
df pd.read_csv(data/sentiment_analysis_clean.csv)
df df.dropna()切分评论及标签
X_tfidf df[text]
y_tfidf df[label]Word2Vec
可参考NLP_词的向量表示Word2Vec 和 Embedding
Word2Vec是一个用于生成词向量word vectors的模型它由谷歌在2013年开发。Word2Vec模型通过神经网络将词语转换为数值向量这些向量捕捉了词语的语义信息使得语义上相似的词在向量空间中的距离也相近。
Word2Vec主要有两种训练模型 CBOWContinuous Bag of Words这是一个预测单词的工具给定一个单词前后文的单词预测当前单词。CBOW模型不考虑单词在句子中的顺序。 Skip-Gram与CBOW相反Skip-Gram模型给定一个单词预测它前后文的单词。Skip-Gram通常比CBOW能更好地捕捉词语之间的关系但是计算量更大。
Word2Vec模型的训练包括以下步骤 初始化随机初始化词向量和上下文向量。 训练通过大量文本数据训练模型使用梯度下降等优化算法不断更新词向量以减少预测单词的误差。 优化通过不断迭代优化词向量使得语义相似的词在向量空间中更接近。
训练完成后Word2Vec可以用于各种自然语言处理任务如词义消歧、句子相似度计算、机器翻译等。词向量可以作为输入特征用于训练其他深度学习模型。
Word2Vec的词向量可以捕捉到一些语义规律例如
国王 - 男人 女人 女王巴黎 - 法国 英国 伦敦
这些规律表明Word2Vec能够理解和表达词语之间的相对关系。
Word2Vec模型的优点包括
能够捕捉词语的语义信息。生成的词向量可以用于多种下游任务。模型相对简单训练效率高。
缺点包括
无法捕捉词语的语法信息。无法处理一词多义的情况。需要大量的文本数据进行训练。
Word2Vec是词嵌入word embedding领域的一个重要里程碑它启发了后续许多其他词嵌入模型的发展如GloVeGlobal Vectors for Word Representation和FastText。
Word2Vec模型在训练时有多个参数可以设置以下是一些常见的参数及其意义 vector_size (或 size)这是生成的词向量的维度。较小的维度可能无法捕捉足够的细节而较大的维度可能会增加计算成本并且导致过拟合。常见的维度设置有100、200、300等。 window (或 windowSize)上下文窗口的大小即在当前单词的前后考虑多少个单词。较大的窗口可以捕捉更远的依赖关系但也可能包含更多噪声。 min_count忽略出现次数低于此值的单词。这可以用来过滤掉一些出现频率非常低的单词以提高训练效率。 negative (或 negativeSize)在训练中使用负采样的词汇数量。负采样是一种优化技术用于提高模型的训练效率。 iter (或 epochs)训练数据集的迭代次数。较大的迭代次数可以提高模型的性能但也需要更多的计算资源。 batch_size每次模型更新时处理的单词数量。较大的批量大小可以提高内存的使用效率但也可能影响模型的收敛速度。 alpha学习率。较高的学习率可以加快训练速度但可能导致模型无法收敛。 min_alpha学习率的下限。在训练过程中学习率会逐渐减小到这个值。 sg训练模式0 表示使用CBOW模型1 表示使用Skip-Gram模型。 hs (或 hierarchicalSampling)如果设置为1则使用分层采样。分层采样是一种考虑单词频率的采样方法对高频词进行下采样以提高模型对低频词的学习效率。 negative_sampling如果设置为1则使用负采样。负采样是一种优化技术通过只采样一部分负例来提高训练效率。 cbow_mean当使用CBOW模型时如果设置为1则对上下文的词向量取平均而不是单独考虑每个词。 hashfx如果设置为1则使用固定的hash函数来初始化词向量。 epoch训练周期的数量。 threads训练过程中使用的线程数。 total_words训练过程中处理的总单词数。 model保存模型的文件名。 input训练数据的输入文件。
这些参数可以根据具体的应用场景和计算资源进行调整以达到最佳的训练效果。
构造w2v
from gensim.models import Word2Vec
word2vec_model Word2Vec(X_tfidf, vector_size16, sg1, window5, seed2020, workers24, min_count1, epochs1) words list(word2vec_model.wv.index_to_key)
vector_size word2vec_model.wv.vector_size
word_vectors np.zeros((len(words), vector_size))
for i, word in enumerate(words):word_vectors[i, :] word2vec_model.wv[word]# 构建文档向量
def text_to_vec(text):words_in_text text.split() # 假设文本是通过空格分词的text_vec np.zeros(vector_size)word_count 0for word in words_in_text:if word in word2vec_model.wv:text_vec word2vec_model.wv[word]word_count 1if word_count 0:text_vec / word_countreturn text_vec# 将所有文本数据转化为向量
text_vectors np.array([text_to_vec(text) for text in X_tfidf])数据切分
from sklearn.model_selection import train_test_split, StratifiedKFold
# 这里指定了random_state是为了保证每次切分数据集的结果都是一样的
Xidf_train, Xidf_test, yidf_train, yidf_test train_test_split(text_vectors, y_tfidf,test_size0.2,random_state2024)del df,array_TFIDF
gc.collect()模型训练
def train_model(model, X_train, X_test, y_train, y_test):dic {lr:Logistic Regression,nb:Naive Bayes,svm:Support Vector Machine,dt:Decision Tree,rf:Random Forest,lgb:LightGBM}train_acc, test_acc [], []if model lr:clf LogisticRegression(C0.01, solverliblinear)elif model nb:clf MultinomialNB(alpha100)elif model svm:clf svm.LinearSVC(C0.01)elif model dt:clf DecisionTreeClassifier(max_depth100, min_samples_split 2)elif model rf:clf RandomForestClassifier(max_depth100,min_samples_split5)elif model lgb:clf LGBMClassifier(learning_rate1.0)else:print(Model doesn\t exist)clf.fit(X_train, y_train)# predict using train datatrain_pred clf.predict(X_train)train_acc accuracy_score(y_train, train_pred)# predict using test datatest_pred clf.predict(X_test)test_acc accuracy_score(y_test, test_pred) print()print(Model: , dic[model])print(Training accuracy: {}.format(train_acc))print(Test accuracy: {}.format(test_acc))print()return {model_name:dic[model],Train Accuracy:train_acc,Test Accuracy:test_acc}查看结果
metric_df pd.DataFrame(columns[model_name,Train Accuracy,Test Accuracy])
for model in [lr, nb, svm, dt, rf, lgb]:metric train_model(model ,Xidf_train, Xidf_test, yidf_train, yidf_test)# 将metric转换成一个DataFramemetric_df pd.concat([metric_df, pd.DataFrame([metric])], ignore_indexTrue)metric_df同类型项目
阿里云-零基础入门NLP【基于机器学习的文本分类】
阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】 也可以参考进行学习 学习的参考资料 B站