当前位置: 首页 > web >正文

从文本到向量:揭秘词向量转换的奥秘与实践

从文本到向量:揭秘词向量转换的奥秘与实践

在自然语言处理(NLP)的世界里,计算机处理的是数字和向量,而人类交流使用的是文本语言。如何让计算机理解文本语义并进行分析处理呢?词向量转换便是其中的关键一环。本文将结合实际代码案例,带大家深入了解词向量转换的原理、流程及应用。

一、为什么需要词向量转换?

文本数据对于人类来说是直观且富有意义的,但计算机并不能直接理解“苹果”“快乐”这些词语的含义。为了让计算机能够处理文本,我们需要将文本中的词语、句子转化为计算机能够理解的数值形式,即向量。通过词向量转换,每个词语都可以用一个多维向量来表示,向量中的数值反映了词语的语义信息,这样计算机就可以基于这些向量进行各种分析任务,如文本分类、情感分析、机器翻译等。

二、数据读取与预处理

在进行词向量转换之前,我们首先需要读取和预处理文本数据。在代码中,我们使用pandas库读取了存储在本地的差评和优质评价文本文件。

import pandas as pd
cp_content = pd.read_table(r".\差评.txt",encoding='gbk')
yzpj_content = pd.read_table(r".\优质评价.txt",encoding='gbk')

这里使用read_table函数将文本文件读取为DataFrame格式,方便后续对数据进行处理。同时,根据文件的实际编码格式指定encoding参数,确保数据能够正确读取。

三、使用jieba分词

中文文本不同于英文,词语之间没有天然的分隔符,因此需要进行分词操作。jieba是一个强大的中文分词工具,在代码中我们使用它对差评和优质评价进行分词处理。

import jieba
#对差评分词
cp_segments = []
contents = cp_content.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results) > 1:cp_segments.append(results)cp_fc_results = pd.DataFrame({'content':cp_segments})
cp_fc_results.to_excel('cp_fc_results.xlsx',index=False)#对优质评价分词
yzpj_segments = []
contents = yzpj_content.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results) > 1:yzpj_segments.append(results)yzpj_fc_results = pd.DataFrame({'content': yzpj_segments})
yzpj_fc_results.to_excel('yzpj_fc_results.xlsx',index=False)

通过jieba.lcut方法,将每个文本内容切分成词语列表,然后将分词结果存储到新的DataFrame中并保存为Excel文件。在这个过程中,我们还过滤掉了分词后结果长度小于等于1的情况,因为这类结果可能没有实际意义。

四、移除停用词

在文本中,存在一些如“的”“了”“是”等对语义表达贡献较小的词语,这些词语被称为停用词。为了减少数据噪声,提高后续分析的准确性,我们需要移除这些停用词。

#导入停用词库
stopwords = pd.read_csv(r"C:\CODE\机器学习\TF-IDF算法\红楼梦\StopwordsCN.txt",encoding='utf8',engine='python',index_col=False)
#定义除去停用词函数
def drop_stopwords(contents, stopwords):segments_clean = []for content in contents:line_clean = []for word in content:if word in stopwords:continueline_clean.append(word)segments_clean.append(line_clean)return segments_clean
#调用除去停用词函数
contents = cp_fc_results.content.values.tolist()
stopwords = stopwords.stopword.values.tolist()
cp_fc_contents_clean_s = drop_stopwords(contents, stopwords)contents = yzpj_fc_results.content.values.tolist()
yzpj_fc_contents_clean_s = drop_stopwords(contents, stopwords)

首先,我们从本地文件中读取停用词列表,然后定义drop_stopwords函数,该函数遍历每个词语列表,将不在停用词列表中的词语保留下来,最后分别对差评和优质评价的分词结果进行停用词移除操作。

五、词向量转换与朴素贝叶斯分类

(一)数据标签添加与合并

为了进行文本分类任务,我们需要给每个数据添加标签,1代表差评,0代表优质评价,然后将两者合并。

cp_train = pd.DataFrame({'segments_clean':cp_fc_contents_clean_s, 'label':1})
yzpj_train = pd.DataFrame({'segments_clean':yzpj_fc_contents_clean_s, 'label':0})
pj_train = pd.concat([cp_train, yzpj_train])
pj_train.to_excel('pj_train.xlsx',index = False)

(二)数据切分

使用sklearn库中的train_test_split函数将数据切分为训练集和测试集,包括训练集特征、测试集特征、训练集标签和测试集标签。

from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = \
train_test_split(pj_train['segments_clean'].values,pj_train['label'].values, random_state = 0)

(三)词向量转换

这里我们使用CountVectorizer来将文本转换为词向量。CountVectorizer会统计每个词语在文本中出现的次数,从而构建词向量矩阵。

words = []
for line_index in range(len(x_train)):words.append(' '.join(x_train[line_index]))from sklearn.feature_extraction.text import CountVectorizervec = CountVectorizer(max_features=4000, lowercase=False, ngram_range=(1,3))
vec.fit(words)

我们首先将训练集的词语列表合并为字符串形式,然后实例化CountVectorizer对象,设置max_features表示选取出现频率最高的4000个词语,lowercase=False表示不将文本转换为小写,ngram_range=(1,3)表示考虑1 - 3个连续词语的组合。最后使用fit方法对数据进行拟合,学习词语的词汇表。

(四)朴素贝叶斯分类

使用MultinomialNB(多项式朴素贝叶斯)分类器进行文本分类。

from sklearn.naive_bayes import MultinomialNB,ComplementNB
classifier = MultinomialNB(alpha = 0.1)
classifier.fit(vec.transform(words), y_train)train_pr = classifier.predict(vec.transform(words))from sklearn import metrics
print(metrics.classification_report(y_train, train_pr))test_words = []
for line_index in range(len(x_test)):test_words.append(' '.join(x_test[line_index]))test_pr = classifier.predict(vec.transform(test_words))
print(metrics.classification_report(y_test, test_pr))

首先实例化MultinomialNB分类器并设置alpha参数,然后使用fit方法对训练数据进行训练。接着对训练集和测试集分别进行预测,并使用classification_report函数评估分类结果,输出精确率、召回率、F1值等指标。

运行结果如下 在这里插入图片描述
在这里插入图片描述
词向量转换是自然语言处理中不可或缺的基础环节,它为后续的各种文本分析任务奠定了坚实的基础。通过本文的介绍和代码实践,相信大家对词向量转换有了更清晰的认识。在实际应用中,我们还可以尝试不同的词向量转换方法(如TF-IDF、Word2Vec等)和优化策略,以获得更好的处理效果。

http://www.xdnf.cn/news/3501.html

相关文章:

  • C++负载均衡远程调用学习之QPS性能测试
  • 溯因推理思维——AI与思维模型【92】
  • AimRT从入门到精通 - 03Channel发布者和订阅者
  • 18. LangChain分布式任务调度:大规模应用的性能优化
  • 【git】获取特定分支和所有分支
  • 【东枫科技】AMD / Xilinx Alveo™ V80计算加速器卡
  • 文章五《卷积神经网络(CNN)与图像处理》
  • Java大师成长计划之第10天:锁与原子操作
  • AimRT从入门到精通 - 04RPC客户端和服务器
  • 沥青路面裂缝的目标检测与图像分类任务
  • 【Hive入门】Hive性能调优:小文件问题与动态分区合并策略详解
  • React pros比较机制
  • 模拟开发授权平台
  • 【嵌入式Linux】基于ARM-Linux的zero2平台的智慧楼宇管理系统项目
  • 中小企业MES系统数据库设计
  • Spring MVC @RequestHeader 注解怎么用?
  • VMware提供的三种网络连接模式
  • Android WebView加载h5打开麦克风与摄像头的权限问题
  • Haskell Drracket OCaml Prolog 逻辑式编程函数式编程代写代做
  • 从 Eclipse Papyrus / XText 转向.NET —— SCADE MBD技术的演化
  • aab转apk
  • DeepSeek玄学指令大全
  • 【电脑维修】MERCURY水星无线网卡导致 Windows 网络适配器无法连接的一种情况
  • T575729 正经数组
  • IDA pro接入千问大模型
  • Java关键字解析
  • 【dify—7】文本生成应用实战——学员周报生成
  • 「Mac畅玩AIGC与多模态12」开发篇08 - 使用自定义汇率查询插件开发智能体应用
  • 数字智慧方案6146丨智慧学院智能化项目规划设计方案(45页PPT)(文末有下载方式)
  • QT6 源(66)篇三:阅读与注释类 QAbstractSpinBox ,这是螺旋框的基类,附上源码