JAVA:Word2Vec的使用

news2024/10/7 12:17:42

1、简介

Word2Vec是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。

Word2vec输出的词向量一般为50维或100维,这种向量被表示成这个样子[0.11212,0.116545,0.878789,0.5644659,……]。这种词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析、计算文档相似度计算等等。

word2vec官网地址看这里:https://code.google.com/p/word2vec/

word2vec java版本的一个实现:GitHub - NLPchina/Word2VEC_java: word2vec java版本的一个实现

2、训练

2.1 寻找语料 

要做NLP,第一步肯定是根据自己情况准备语料库。笔者准备的是关于交通相关的,通过爬虫爬取的公开语料,大约17W+条(938MB):

 2.2 语料预处理

第一步:分词

笔者采用的是ANSJ分词,相关调用见开源中文分词Ansj的简单使用-CSDN博客

第二步:过滤

过滤掉一些常用的停用词、标点符号等。

第三步:保存

词语间用空格隔开,一篇语料占据一行。

 预处理代码:

public static void executeWord2VecTxt(String trainPath,String resultPath) {
		try {
			BufferedReader br = IOUtil.getReader(trainPath, IOUtil.UTF8);
			FileOutputStream fos = new FileOutputStream(resultPath);
			String line;
			int j = 0;
			while ((line = br.readLine()) != null) {
				System.out.println("文章ID:" + j);
				JSONObject json = JSONObject.parseObject(line);
				String text = json.getString("text");
				List<Term> terms= ToAnalysis.parse(title) ;
                //分词过滤,自己实现
				StopWord.cleanerPAS(listWods);
				StopWord.filter(listWods);
				StringBuilder sb = new StringBuilder() ;
                for (Term term : terms) {
                    sb.append(term.getName()) ;
                    sb.append(" ");
                }
				fos.write(sb.toString().getBytes()); ;
				fos.write("\n".getBytes());
				j++;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 2.3 训练模型

可以直接选择默认设置进行训练,也可以自己进行参数调整,常见参数如下:

  • layerSize表示词向量维数:默认200,一般取100-300左右,经验是不超过1000
  • window 上下文窗口大小,cbow一般都是5,如果是Skip-Gram的话,最好是10
  • sample 表示采样参数,是一个经验忽视掉频率过高的词的参数,一般为1e-3,最小一般为1e-5
  • alpha设置学习速率,默认的为0.025
  • cbow false表示不使用cbow模型,默认为Skip-Gram模型

 训练代码:

        Learn learn = new Learn();
        learn.learnFile(new File("E:\\home\\data\\word2VecTrainTxt.txt"));
        learn.saveModel(new File("E:\\home\\data\\javaModel.vec"));

  训练过程日志输出:

alpha:0.025    Progress: 0%
alpha:0.024997122711267163    Progress: 0%

....
alpha:7.495035335541856E-6    Progress: 99%
alpha:4.677829846444493E-6    Progress: 99%
Vocab size: 636198
Words in train file: 89459217
sucess train over!
4224675

Process finished with exit code 0

2.4 word2vec调用

初始化:

        Word2VEC vec = new Word2VEC();
        vec.loadJavaModel("E:\\home\\data\\javaModel.vec");

 找近义词:

        System.out.println(vec.distance("地铁"));

 结果日志输出:

[1号线    0.8300631,
2号线    0.8268978,
5号线    0.7992573,
11号线    0.79095393,
6号线    0.7803578,
10号线    0.77783144,
4号线    0.77761006,
8号线    0.7738936,
7号线    0.75981987,
3号线    0.7417199,
12号线    0.73901767,
260座    0.7323471,
13号线    0.72736794,
14号线    0.72281486,
18号线    0.7186287,
北延|    0.71449405,
9号线    0.71415234,
三叉街    0.71413624,
潘水站    0.71285397,
水澄桥    0.70943874,
候潮门    0.70908654,
龙阳路    0.7077574,
口出    0.6974327,
金吉路站    0.6950388,
换乘    0.69367176,
方湾街    0.6933061,
惠昌路    0.6904804,
广兰路站    0.69042003,
红霞方    0.68959075,
金小郢    0.68952847,
莲花北    0.68823016,
唐宫西    0.68511003,
虹桥火车站    0.6848812,
地铁站    0.6843677,
陶然桥    0.68419755,
狮子坪    0.683676,
达静安    0.6815519,
15号线    0.6787948,
昌岗    0.6781647]

 计算余弦相似度:

        System.out.println("7号线:地铁" + "\t" + Distance.cosin(vec.getWordVector("7号线"), vec.getWordVector("地铁")));
		System.out.println("7号线:公寓" + "\t" + Distance.cosin(vec.getWordVector("7号线"), vec.getWordVector("公寓")));
		System.out.println("地铁:公寓" + "\t" + Distance.cosin(vec.getWordVector("地铁"), vec.getWordVector("公寓")));

 结果日志输出:

7号线:地铁    0.75982
7号线:公寓    0.17022026
地铁:公寓    0.083744526

3、应用

Word2vec 有很多应用场景,可以用它来生成特征,输入到各种算法模型中,例如:自动摘要、语音识别、自动问答、音乐视频推荐系统等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络之体系结构

上节内容&#xff1a;数据通信原理 1.计算机网络体系结构 体系结构: 研究系统中各组成成分及其关系的一门学科。 计算机网络体系结构: 定义和描述一组用于计算机及其通信设施之间互连的标准和规范的集合&#xff0c;遵循这组规范可以很方便地实现计算机设备之间的通信。 相互…

uni-app 自定义支付密码键盘

1.新建最贱 payKeyboard .vue <template><view class"page-total" v-show"isShow"><view class"key-list"><view class"list" v-for"(item,index) in keyList" :class"{special:item.keyCode190…

零知识证明基础:数字签名

1、绪论 数字签名(Digital Signature)&#xff0c;也称电子签名&#xff0c;是指附加在某一电子文档中的一组特定的符号或代码。它利用密码技术对该电子文档进行关信息提取并进行认证形成&#xff0c;用于标识签发者的身份以及签发者对电子文档的认可&#xff0c;并能被接收者…

统信系统实战(2):安装redis

在系统中未发现redis,需要安装。 网上资料上说需要去redis官网下载,但是发现不管是github账号还是自己注册的sso账号,都各种提示有问题。 继续找资料,发现可以直接通过下载链接下载,指令如下: wget http://download.redis.io/releases/redis-6.0.6.tar.gz 成功下载,…

Charles网络抓包工具安装和web抓包(一)

目录 概述 抓包工具对比 安装 下载 web抓包配置 按键说明 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#…

国外问卷调查,让你远离酷暑的赚钱新方式

大家好&#xff0c;我是汇舟问卷&#xff0c;一家专注于国外问卷调查领域的互联网企业。随着夏季的到来&#xff0c;高温酷暑无疑给许多人的日常工作带来了极大的不便与挑战。 在这样的季节里&#xff0c;我们都在寻求一种既能实现经济收益又能避免高温炙烤的工作模式。 在此…

GPU设置

GPU降温测试 前提 同一个训练程序&#xff0c;使用8块GPU&#xff0c;GPU使用率基本全程>90%&#xff0c;GPU为1080 Ti 限制最高功率效果 不限制最高功率(默认最高功率250W)&#xff1a;最高温度85&#xff0c;大多时间在75-85之间 将最高功率限制为150W&#xff1a;最高…

优维“统一开放平台”:开放、开发、集成、客制化

基于丰富完善的产品体系&#xff0c;优维重磅推出了统一开放平台。这款由优维自主设计与研发&#xff0c;集数据开发、能力开放、能力集成、客制化为一体的统一开放平台&#xff0c;具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块&#xff0c;可为…

后端加前端Echarts画图示例全流程(折线图,饼图,柱状图)

本文将带领读者通过一个完整的Echarts画图示例项目&#xff0c;演示如何结合后端技术&#xff08;使用Spring Boot框架&#xff09;和前端技术&#xff08;使用Vue.js或React框架&#xff09;来实现数据可视化。我们将实现折线图、饼图和柱状图三种常见的数据展示方式&#xff…

昇思25天学习打卡营第10天|FCN图像语义分割

一、简介&#xff1a; 本篇博客是昇思大模型打卡营应用实践部分的第一次分享&#xff0c;主题是计算机视觉&#xff08;CV&#xff09;领域的FCN图像语义分割&#xff0c;接下来几天还会陆续分享其他CV领域的知识&#xff08;doge&#xff09;。 全卷积网络&#xff08;Fully…

css做旋转星球可举一反三

<!DOCTYPE html> <html lang"en"><head> <meta charset"UTF-8" /> <title>旋转的星球</title> <style type"text/css">.box {/*position: relative;*/position: absolute;width: 139px;height: 139p…

Total Uninstall安装及卸载软件

Total Uninstall 的独特之处在于通过其安装的软件可以完整监控到新增或更改的注册表、文件、服务&#xff0c;可一键卸载。但常规的“360软件管家”无法做到以上内容。 借助该机制可用来无限刷新软件试用许可。 1.Total Uninstall 安装第三方软件 点击图中的“安装”&#xf…

vue2中vuedraggable设置部分元素不可拖拽,不可移动

文章目录 前言1、版本2、vuedraggable页面的具体使用3.核心(1) move官网说明(2) 注意点&#xff1a;(3) onDraggableMove方法 总结 前言 需求&#xff1a;左边是复选框&#xff0c;右边是选中的数据&#xff0c;编辑传入的数据不可拖拽&#xff0c;不可移动&#xff08;其实还…

【算法】数组-基础知识与应用

一.基础理论 数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标对应的数据。 数组下标都是从0开始的。数组内存空间的地址是连续的 因为数组在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添元素的时候&#xff0c…

jieba--《红楼梦》章节分卷并计算TF-IDF值(超详细)

目录 大致步骤&#xff1a; 任务1&#xff1a; 将红楼梦 根据卷名 分隔成 卷文件 红楼梦txt&#xff1a; 红楼梦卷头&#xff1a; 红楼梦章节分卷&#xff1a; 任务2&#xff1a;对每个卷进行分词&#xff0c;并删除包含停用词的内容 1.遍历所有卷的内容&#xff0c;并添…

没有思考过 Embedding,不足以谈 AI

在当今的人工智能&#xff08;AI&#xff09;领域&#xff0c;Embedding 是一个不可或缺的概念。如果你没有深入理解过 Embedding&#xff0c;那么就无法真正掌握 AI 的精髓。接下来&#xff0c;我们将深入探讨 Embedding 的基本概念。 1. Embedding的基本概念 1.1 什么是 Emb…

ffmpeg使用mjpeg把yuvj420p编码为jpg图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 1. 通过*.jpg推测时&#xff0c;out_fmt为image2&#xff0c;打开*.jpg文件时&#xff0c;in_fmt为image2 但是out_fmt为image2时&#xff…

冶金工业5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

冶金工业5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。传统生产方式难以满足现代冶金工业的发展需求&#xff0c;数字化转型成为必然趋势。通过引入5G、工业物联网和数字孪生等先进技术&#xff0c;冶金工业可以实现生产过程智能化、高效化和绿色化&#…

【Echarts】散点图 制作 气泡 类型图表

目录 需求主要代码效果展示注 需求 需参照设计图画出对应图表 主要代码 /**** 数据 ****/ this.dataList [...Array(8).keys()].map((item) > {return {ywlxmc: 业务类型 (item 1),sl: item > 4 ? 50 : 70} })/**** 气泡样式 ****/ const styleList [{offset: [56…

谷粒商城实战(045集群学习-elasticsearch(ES)集群)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第368p-第p369的内容 文章目录 简介集群健康分片新增节点水平扩容问题和解决集群结构测试集群信息 简介 不管用户发给哪个节点&#xff0c;都可以…