【大模型】wiki中文语料的word2vec模型构建

在自然语言处理(NLP)任务中,词向量(Word Embedding)是一个非常重要的概念。通过将词语映射到一个高维空间中,我们能够以向量的形式表达出词语之间的语义关系。Word2Vec作为一种流行的词向量学习方法,在很多NLP任务中得到了广泛的应用。本文将介绍如何使用中文Wikipedia语料构建一个高质量的Word2Vec模型。

一、Word2Vec简介

Word2Vec模型由Google的Tomas Mikolov等人在2013年提出,其目标是通过无监督学习方法将词语映射到一个连续的向量空间,使得相似语义的词语在向量空间中的距离较近。Word2Vec主要有两种常见的模型结构:

  1. CBOW(Continuous Bag of Words):通过上下文预测当前词语,适用于处理较为常见的单词。
  2. Skip-gram:通过当前词语预测上下文,适用于处理较为稀有的单词。

这两种方法的核心思想是:如果两个词在文本中经常出现在相似的上下文中,那么它们的向量表示应该彼此接近。基于这一思想,Word2Vec可以捕捉到语义上相似词汇的关系。

word2vec是google开源的一款用于词向量计算的工具。可以这样理解word2vec,它是一个计算词向量的工具,也是一种语言算法模型。它的原理大致就是通过背后的CBow和skip-gram模型进行相应的计算,然后得出词向量。

Word2vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,它被大量地用在自然语言处理(NLP)中。Word2Vec是一种将文本中的词进行嵌入(Embedding)的方法,而所谓嵌入,就是将各个词使用一个定长的向量来表示,Embedding其实就是一个映射,将单词从原先所属的空间映射到新的多维空间中,也就是把原先词所在空间嵌入到一个新的空间中去。一个形象的例子是颜色的表示,假设我们有赤、橙、黄、绿、青、蓝、紫七种颜色,如果我们想要表示这七种颜色,简单的办法就是独热法(one-hot),即用一个7维向量表示,比如赤可以表示为[1, 0, 0, 0, 0,0,0],橙可以表示为[0, 1, 0, 0, 0, 0,0],其他类似。这种方法在比较常用,但是一个潜在的问题是,如果颜色较多,比如几千种颜色,那就需要几千维向量,显然数量越多,维度越大,而向量中的0也越多,导致维度灾难同时向量稀疏浪费存储空间。其实颜色还有一种表示方法,即RGB表示法,即不管有多少种颜色,都可以用红(R)、绿(G)、蓝(B)三种颜色进行表示。比如红色的RGB表示为:[255, 0, 0], 绿色的RGB表示为[0, 255, 0], 蓝色的RGB表示为[0, 0, 255], 深蓝色的RGB表示为[0, 0, 139], 黑色的RGB表示为[0, 0, 0]。显然,颜色的RGB表示方法更简洁。Word2vec词嵌入向量也是这种原理,就是把独热法高维稀疏向量(比如10000维)转换成低维的嵌入向量(比如100维)。word2vec工具主要包含两个模型:连续词袋模型(continuous bag of words,简称CBOW)和跳字模型(skip-gram),word2vec词向量可以较好地表达不同词之间的相似和类比关系。通俗的讲,那么它是如何帮助我们做自然语言处理呢?

二、构建Word2Vec模型的步骤

2.1 数据预处理

构建Word2Vec模型的第一步是准备语料。我们选择使用中文Wikipedia语料,这是一份高质量的开放文本数据,包含了大量的中文信息。

2.1.1 下载中文Wikipedia语料

可以通过 wikiextractor 工具从Wikipedia网站下载并提取中文Wikipedia的文本数据:

git clone https://github.com/attardi/wikiextractor.git
cd wikiextractor
python WikiExtractor.py --json /path/to/zhwiki-latest-pages-articles.xml.bz2

这里的 zhwiki-latest-pages-articles.xml.bz2 文件是中文Wikipedia的压缩数据。WikiExtractor.py 工具将从该文件中提取出纯文本,存储为多个JSON格式的文件。

2.1.2 清洗文本数据

Wikipedia语料通常包含很多无用的字符,比如标点符号、表情符号等,因此需要对数据进行清洗。我们可以使用Python的正则表达式库(re)来去除这些不必要的字符:

import redef clean_text(text):# 去除非中文字符text = re.sub(r'[^\u4e00-\u9fa5]', ' ', text)# 去除多余的空格text = re.sub(r'\s+', ' ', text).strip()return text

此外,还可以进行其他的处理,比如分词。由于中文是没有空格分隔的语言,需要使用分词工具进行分词处理。常用的中文分词工具包括 jiebaTHULAC,这里我们使用 jieba 分词。

2.1.3 使用jieba进行分词
import jiebadef segment_text(text):return " ".join(jieba.cut(text))# 示例
text = "Word2Vec模型通过无监督学习方法将词语映射到一个连续的向量空间"
segmented_text = segment_text(text)
print(segmented_text)

2.2 构建Word2Vec模型

2.2.1 选择Word2Vec模型类型

在构建Word2Vec模型时,我们可以选择 CBOWSkip-gram 模型。在处理大规模语料时,通常选择 Skip-gram 模型,因为它能够较好地处理低频词。

2.2.2 使用Gensim构建Word2Vec模型

Gensim是一个高效的Python库,专门用于主题建模和词向量学习。我们可以使用 Gensim 来构建Word2Vec模型:

from gensim.models import Word2Vec# 假设我们已经准备好了分词后的文本数据,每行一篇文章
sentences = [line.strip().split() for line in open('processed_wiki.txt')]# 构建Word2Vec模型
model = Word2Vec(sentences, vector_size=300, window=5, min_count=5, workers=4, sg=1)

在这个例子中,我们将每行文本按空格分割,作为一个句子的输入。Word2Vec模型的参数说明:

  • vector_size=300:词向量的维度。
  • window=5:上下文窗口大小,即当前词和上下文词语的最大距离。
  • min_count=5:词频阈值,低于该频次的词语将被忽略。
  • workers=4:并行计算的线程数。
  • sg=1:选择Skip-gram模型,若设为0则为CBOW模型。
2.2.3 保存与加载模型

构建完模型后,我们可以将其保存到本地,并在需要时加载使用:

# 保存模型
model.save("word2vec_wiki.model")# 加载模型
model = Word2Vec.load("word2vec_wiki.model")

2.3 评估与应用

2.3.1 评估模型

Word2Vec模型的一个常见评估方法是通过相似度计算,判断模型是否能够捕捉到词语之间的语义关系:

# 查找与"机器学习"最相似的词
similar_words = model.wv.most_similar("机器学习", topn=10)
print(similar_words)
2.3.2 应用示例

Word2Vec模型可以广泛应用于以下任务:

  • 词义相似度计算:通过计算两个词向量的余弦相似度,判断它们的语义相似度。
  • 词类聚类:基于词向量的距离对词语进行聚类,挖掘词汇的潜在类别。
  • 文本分类与推荐系统:将词向量作为特征,进行文本分类或构建推荐系统。

例如,我们可以使用训练好的Word2Vec模型来进行词义相似度计算:

similarity = model.wv.similarity("机器学习", "深度学习")
print(f"机器学习与深度学习的相似度: {similarity}")

三、优化与扩展

3.1 增加语料量

Word2Vec模型的质量与语料的规模有着直接的关系。为了提高模型的效果,可以通过增加语料量来提升词向量的质量。除了中文Wikipedia外,可以考虑将更多公开的中文文本数据(如新闻、小说、技术文档等)加入训练语料。

3.2 调整模型超参数

Word2Vec模型的超参数对最终效果有很大的影响。常见的超参数包括:

  • vector_size:词向量的维度,通常选择100到300之间的值。
  • window:上下文窗口大小,控制模型捕捉上下文信息的范围。
  • min_count:词频阈值,控制模型的词汇表大小。
  • sg:模型类型,决定使用CBOW还是Skip-gram。

通过实验调优这些超参数,可以获得更优的模型效果。

3.3 使用GPU加速

如果语料较大,训练Word2Vec模型可能需要较长时间。可以考虑使用GPU加速训练过程,例如使用 TensorFlowPyTorch 等深度学习框架进行自定义模型训练。

3.4 结合其他模型

Word2Vec虽然能有效捕捉词汇的语义信息,但它无法处理上下文的深层次含义。可以考虑结合 BERT 等预训练语言模型,进一步提升模型在复杂语境下的表现。

四、总结

通过使用中文Wikipedia语料构建Word2Vec模型,我们能够为许多NLP任务提供基础的词向量支持。本文介绍了构建Word2Vec模型的详细步骤,包括数据预处理、模型训练与评估。通过调整超参数、增加语料量和使用GPU加速等手段,我们可以进一步优化模型表现。此外,Word2Vec作为一种传统的词嵌入方法,仍然是理解和构建自然语言处理系统的重要工具。

参考资料

wiki中文语料的word2vec模型构建 - 1直在路上1 - 博客园

https://zhuanlan.zhihu.com/p/616515135

词向量模型word2vec详解 – 胡超博客

图解Word2vec,秒懂词向量Word2vec的本质_论文_细节_词语

深入掌握 text2vec-large-chinese:安装与使用指南-CSDN博客

https://huggingface.co/shibing624/text2vec-base-chinese

https://github.com/AimeeLee77/wiki_zh_word2vec

https://github.com/shibing624/text2vec/

HF-Mirror

shibing624/text2vec-base-chinese at main

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501056.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机中的时统卡功能和性能调优

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

GXUOJ-算法-补题:22级《算法设计与分析》第一次课堂练习

2.最大子数组和 问题描述 代码解答 #include<bits/stdc.h> using namespace std; const int N1005; int sum,n,a[N]; int res-1;int result(){for(int i0;i<n;i){if(sum<0) suma[i];else{suma[i];resmax(res,sum);}}return res; } int main(){cin>>n;for(i…

信息学奥赛一本通:1311:【例2.5】求逆序对

1311&#xff1a;【例2.5】求逆序对 时间限制: 1000 ms 内存限制: 65536 KB提交数:74572 通过数: 17809 【题目描述】 给定一个序列a1,a2,…,an&#xff0c;如果存在i<j并且ai>aj&#xff0c;那么我们称之为逆序对&#xff0c;求逆序对的数目。 【输入】 第一…

免登录游客卡密发放系统PHP网站源码

源码介绍&#xff1a; 这是一个简单易用的卡密验证系统&#xff0c;主要功能包括&#xff1a; 卡密管理和验证&#xff0c;多模板支持&#xff0c;响应式设计&#xff0c;验证码保护&#xff0c;防刷机制&#xff0c;简洁的用户界面&#xff0c; 支持自定义模板&#xff0c;移…

关于 PPPOE技术的详细解释

PPPoE&#xff08;以太网点对点协议&#xff09;是一种网络协议&#xff0c;它通过光纤将点对点协议&#xff08;PPP&#xff09;封装以实现宽带接入点。PPPoE主要用于ADSL和光纤等宽带接入技术中&#xff0c;它允许多个用户共享同一个交换机连接&#xff0c;同时为每个用户提供…

C# 服务应用研究

文章目录 创建Windows Service项目选中serviceInstaller1组件&#xff0c;查看属性生成和发布服务安装服务卸载服务重新再安装服务停止服务再次卸载服务调试服务 创建Windows Service项目 选中serviceInstaller1组件&#xff0c;查看属性 生成和发布服务 安装服务 卸载服务 重新…

MySQL中distinct和group by去重的区别

MySQL中distinct和group by去重的区别 在MySQL中&#xff0c;我们经常需要对查询结果进行去重&#xff0c;而DISTINCT和GROUP BY是实现这一功能的两种常见方法。虽然它们在很多情况下可以互换使用&#xff0c;但它们之间还是存在一些差异的。接下来&#xff0c;我们将通过创建测…

三维场景重建3D高斯点渲染复现

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 三维场景重建概述MVSNetNerf3D gaussian-splatting 效果演示3D gaussian-splatting原理高斯分布的数学基础渲染过程优化与加速 3D Gaussian-sp…

小波滤波器处理一维信号-附Matlab源代码

⭕⭕ 目 录 ⭕⭕ 一、引言二、多分辨率分析原理2.1 概念解析2.2 尺度函数和小波函数的关系2.3 滤波器本质2.4 二维正交多分辨率分析 三、一维信号小波滤波器处理实例四、Matlab程序获取与验证 一、引言 Fourier变换无法同时描述和定位信号在时间和频率上的突变部分。小波变换的…

log4j2的Strategy、log4j2的DefaultRolloverStrategy、删除过期文件

文章目录 一、DefaultRolloverStrategy1.1、DefaultRolloverStrategy节点1.1.1、filePattern属性1.1.2、DefaultRolloverStrategy删除原理 1.2、Delete节点1.2.1、maxDepth属性 二、知识扩展2.1、DefaultRolloverStrategy与Delete会冲突吗&#xff1f;2.1.1、场景一&#xff1a…

vue v-for 数据增加页面不刷新

<div style"float:left;border:1px solid red;height:100px;width:600px;"><el-form-item label"多语言配置" style"width:700px;" prop"validTanleHead"><el-input style"width: 180px" placeholder"请…

Mac 版本向日葵退出登录账号

找遍整个软件&#xff0c;Mac 版本的向日葵甚至逆天到没有提供退出登录的功能… 随后我发现可以直接删除向日葵的配置文件达到退出登录的效果&#xff0c;具体操作如下&#xff1a; cd /etc # 确认存在 orayconfig.conf 文件 ls orayconfig.conf  # 删除 sudo rm -f oray…

双目视觉:reprojectImageTo3D函数

前言 reprojectImageTo3D 是 OpenCV 中用于从视差图生成三维点云的函数。它的原理是利用视差图和相机的校准参数&#xff0c;通过三角测量法&#xff0c;计算每个像素对应的三维坐标。以下内容根据源码分析所写&#xff0c;觉得可以的话&#xff0c;点赞收藏哈&#xff01;&am…

苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用

Redis入门 redis简介 它以键值对的形式存储数据在内存中,并且以极高的性能和灵活性而著称,通常用于缓存、消息代理以及持久化数据。 - 基于内存存储,读写性能高- 适合存储热点数据(热点商品、资讯、新闻)- 企业应用广泛Windows版下载地址:https://github.com/microsoft…

No.1十六届蓝桥杯备战|第一个C++程序|cin和cout|命名空间

第一个C程序 基础程序 使用DevC5.4.0 写一个C程序 在屏幕上打印hello world #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; } 运行这个C程序 F9->编译 F10->运行 F11->编译运行 mai…

springboot实战(19)(条件分页查询、PageHelper、MYBATIS动态SQL、mapper映射配置文件、自定义类封装分页查询数据集)

引言&#xff1a; 该类博客的学习是基于b站黑马视频springbootvue视频学习&#xff01;具体围绕项目——"大事件"进行实战学习。 目录 一、功能介绍&#xff08;需求&#xff09;。 1、文章列表功能基本介绍。 2、条件分页查询功能与注意。 3、前端页面效果。&#x…

LoRA微调系列笔记

系列文章目录 第一章&#xff1a;LoRA微调系列笔记 第二章&#xff1a;Llama系列关键知识总结 第三章&#xff1a;LLaVA模型讲解与总结 文章目录 系列文章目录LoRA&#xff1a;Low-Rank Adaptation of Large Language Models目的&#xff1a;依据&#xff1a;优势&#xff1a;…

Python - 游戏:飞机大战;数字华容道

Pygame是一个利用SDL库的写的游戏库&#xff0c;SDL呢&#xff0c;全名Simple DirectMedia Layer&#xff0c;是一位叫做Sam Lantinga的大牛写的 SDL是用C写的&#xff0c;不过它也可以使用C进行开发&#xff0c;当然还有很多其它的语言&#xff0c;Pygame就是Python中使用它的…

【JVM】总结篇-字节码篇

字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机&#xff1a;指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 &#xff0c;是物理机的软件实现。常用的虚拟机有VMWare&#xff0c;Visual Box&…

GitHub 及 GitHub Desktop 详细使用教程(通俗易懂)

目录 Δ前言 一、Github教程 1.什么是Github&#xff1f; 2.仓库和对仓库的操作&#xff1a; 2.1 Repository&#xff08;仓库&#xff09; 2.2 Fork&#xff08;派生&#xff09; 2.3 Star&#xff08;收藏&#xff09; 2.4 Watch&#xff08;追番&#xff09; 2.5 Issue&am…