JAVA:Word2Vec的使用

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.rhkb.cn/news/363218.html

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

相关文章

Maven deploy上传远程私服失败

Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project 你的项目: Cannot deploy artifacts when Maven is in offline mode 解决方案&#xff1a; 1.IDEA把这个钩子去掉 2. settings.xml里把 <offline>标…

聊聊啥项目适合做自动化测试

作为测试从业者&#xff0c;你是否遇到过这样的场景&#xff0c;某天公司大Boss找你谈话。 老板&#xff1a;小李&#xff0c;最近工作辛苦了 小李&#xff1a;常感谢您的认可&#xff0c;这不仅是对我个人的鼓励&#xff0c;更是对我们整个团队努力的认可。我们的成果离不开每…

填完高考志愿后,每天必须要做的三件事!

填完志愿后是等录取通知书吗&#xff1f;错&#xff0c;大错特错&#xff0c;今天老师特别提醒大家&#xff0c;每天要做的3件事非常重要&#xff0c;一定要点赞收藏起来。 第一&#xff0c;每天早上9点登录你们省教育考试院的官网&#xff0c;凭个人的账号和密码查看招生考试…

PTA—C语言期末复习(选择题)

1. 按照标识符的要求&#xff0c;&#xff08;A&#xff09;不能组成标识符。 A.连接符 B.下划线 C.大小写字母 D.数字字符 在大多数编程语言中&#xff0c;标识符通常由字母&#xff08;包括大写和小写&#xff09;、数字和下划线组成&#xff0c;但不能以数字开头&#xff0c…

[数据集][目标检测]棉花叶子害虫检测数据集VOC+YOLO格式595张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;595 标注数量(xml文件个数)&#xff1a;595 标注数量(txt文件个数)&#xff1a;595 标注类别…

预制聚氨酯保温管:高效节能管道保温

在现代能源输送领域&#xff0c;预制聚氨酯保温管正凭借其出色的性能&#xff0c;成为保障能源高效传输的关键角色。 预制聚氨酯保温管&#xff0c;顾名思义&#xff0c;其核心在于聚氨酯保温层。这一独特的设计赋予了它卓越的保温性能。聚氨酯材料具有极低的导热系数&#xff…

2024上海MWC 参展预告 | 未来先行,解锁数字化新纪元!

一、展会介绍——2024世界移动通信大会 2024年世界移动通信大会上海(MWC上海)将于6月26日至28日在上海新国际博览中心举行。 本届大会以“未来先行(Future First)”为主题聚焦“超越5G”、“数智制“人工智能经济’造”三大热点话题。届时将在包括超级品牌馆(Super Hall)在内…

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

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

JS(JavaScript)事件处理(事件绑定)趣味案例

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

天翼云服务器80、443等特殊端口无法访问原因记录

之前阿里云、腾讯云的服务器上&#xff0c;想要用域名访问项目简单配置就好了&#xff0c;这次甲方直接买的翼云的服务器&#xff0c;配置了半天&#xff0c;防火墙端口80、443端口开放了&#xff0c;控制台安全组也添加了&#xff0c;就是不能用域名或IP直接访问&#xff0c;配…

软考《信息系统运行管理员》-1.4 常见的信息系统

1.4 常见的信息系统 常见的信息系统综述 财务系统 财务信息系统会计信息系统 办公自动化系统业务处理系统生产管理系统ERP系统客户关系管理系统人力资源系统 会计信息系统 主要任务是保证记账的正确性。 订单处理子系统库存子系统会计应收/应支系统总账子系统 财务信息系…

Swoole v6 能否让 PHP 再次伟大?

现状 传统的 PHP-FPM 也是多进程模型的的运行方式&#xff0c;但每个进程只能处理完当前请求&#xff0c;才能接收下一个请求。而且对于 PHP 脚本来说&#xff0c;只是接收请求和响应请求&#xff0c;并不参与网络通信。对数据库资源的操作&#xff0c;也是一次请求一次有效&am…

机器人控制系列教程之URDF文件语法介绍

前两期推文&#xff1a;机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2)&#xff0c;我们主要从数学的角度介绍了机器人的动力学建模的方式&#xff0c;随着机器人技术的不断发展&#xff0c;机器人建模成为了机器人系统设计中的一项关键任务。URDF&…

如何使用飞书快捷指令无感记账,ios版

总结 很多人无法长期坚持记账&#xff0c;主要是每次消费需要打开手机软件&#xff0c;一系列繁琐的操作&#xff0c;导致过程中可能就忘了。 今天给大家带来飞书自动记账。 演示视频 点击查看&#xff1a;https://www.douyin.com/video/7312857946382241063 安装 下载快捷…

C++编译时引入json/nlohmann文件报错

报错信息: In file included from /home/chenlang/catkin_ws/src/leanrning_communication/src/mysql/../utils/data.h:14:0,from /home/chenlang/catkin_ws/src/leanrning_communication/src/mysql/MyRobotDb.h:32,from /home/chenlang/catkin_ws/src/leanrning_communicatio…

从一到无穷大 #29 ByteGraph的计算,内存,存储三级分离方案是否可以通用化为多模数据库

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言ByteGraph现有架构阿里云Lindorm腾讯YottaDB多模型化修改点ByteGraph论文中的优化…

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

真正的IDEA在线版有多好用

前言 在上一篇文章使用过TitanIDE的VS Code在线版以后&#xff0c;尝到了不少甜头&#xff0c;紧接着又去使用了他的在线版IntelliJ IDEA&#xff0c;同样非常惊艳&#xff0c;不需要任何时间去适应这款云原生开发工具,事不宜迟&#xff0c;马上开整 这才是真正的VS Code在线版…

自制全网最便宜的雷达感应灯光画,成本只需5元

自制全网最便宜的雷达感应灯光画&#xff0c;成本5元 ​ 成本组成&#xff1a;带热释电的人体感应灯&#xff08;0.5元&#xff09;雷达感应模块&#xff08;3.5元&#xff09;首饰盒&#xff08;0.45元&#xff09;微喷油画布&#xff08;1元&#xff09;5.45元 ​ 说一下做灯…

未来科技中的RTK接收机应用探索

RTK实时差分定位技术&#xff08;RTK&#xff0c;Real-Time Kinematic&#xff09;&#xff0c;作为高精度定位技术的一种重要手段&#xff0c;已经在地理测绘、测量工程、航空航天等领域取得了广泛应用。随着科技的不断发展&#xff0c;RTK导航接收机的应用领域也日益拓宽。首…