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.mzph.cn/news/864411.shtml

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

相关文章

windows USB设备驱动开发-双角色驱动

在USB的通讯协议中&#xff0c;规定发起连接的一方为主机(Host)&#xff0c;接受连接的一方为设备&#xff0c;这可以用U盘插入电脑举个例子&#xff0c;当U盘插入电脑后&#xff0c;电脑这边主动发起查询和枚举&#xff0c;U盘被动响应查询和数据存取。 USB 双角色驱动程序堆…

使用Qt designer辅助开发pyqt应用,如何将自定义组件添加到designer中

背景&#xff1a; 我想要实现列表项的拖拽功能&#xff0c;于是自定义类 MyListWidget 通过Qt designer生成的代码&#xff0c;使用的是原始类型 QListWidget 我需要手动修改 Ui_xxx.py文件&#xff1a; 1.导入MyListWidget 2.将QListWidget替换为MyListWidget #Ui_xxx.pyf…

Generating Diverse Structure for Image Inpainting With Hierarchical VQ-VAE

Jialun Peng1 Dong Liu1* Songcen Xu2 Houqiang Li1 1 University of Science and Technology of China 2 Noahs Ark Lab, Huawei Technologies Co., Ltd.pjlmail.ustc.edu.cn, {dongeliu, lihq}ustc.edu.cn, xusongcenhuawei.com 原文提供代码链接&#xff1a; GitHub - UST…

3款免费宝藏电脑软件,每一个都非常实用

LICEcap LICEcap是一款简洁易用的动画屏幕录制软件&#xff0c;主要功能是将屏幕录像的内容直接保存为高质量&#xff08;每帧颜色数量可超过256&#xff09;GIF动态图片格式。该软件安装包轻量级&#xff0c;不到500KB&#xff0c;运行后会以窗口的方式显示在桌面上&#xff…

分布式存储和分布式计算两个哪个更适合作为工作深入方向发展?

有朋友问&#xff0c;分布式存储比如hdfs&#xff0c;ceph&#xff0c;minio&#xff0c;tidb&#xff0c;glusterfs&#xff1b;分布式计算比如Hadoop&#xff0c;spark&#xff0c;flink&#xff1b;它们在实际工作中咋样&#xff1f;具体开发工作是啥&#xff1f;哪个更有发…

财务RPA与数字化转型——财务RPA如何促进企业的数字化转型

在数字化时代&#xff0c;企业面临着推动创新、提高效率的巨大挑战。RPA财务机器人作为智慧财务不可或缺的新动能&#xff0c;不仅能够优化财务流程&#xff0c;还能够在整个企业中引领数字化变革。本文金智维将深入探讨财务RPA如何成为企业数字化转型的战略利器&#xff0c;为…

【哈哈大一上学的全忘了,重开!!】STM32从零入门物联网开发

本笔记资料来源 &#xff1a;STM32物联网入门30步&#xff1d;单片机物联网入门教程 WIFI连接阿里云物联网CubeMXHAL库蓝牙ESP8266杜洋主讲_哔哩哔哩_bilibili IOT&#xff1a;Internet of things 学习目标&#xff1a; 1.掌握洋桃IoT开发板的各功能以及驱动与基本应用 2.掌…

docker 部署jitsi meet

1. 部署环境&#xff1a; 1.1 vm 虚拟机 安装的 centos 7 1.2 centos7安装docker 和 docker-compose 2.docker命令 官网部署文档地址&#xff1a;&#xff08;文档地址有可能失效&#xff09; Self-Hosting Guide - Docker | Jitsi Meet 2.1Download and extract the late…

1-3.文本数据建模流程范例

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…

基于隐马尔可夫模型的股票预测【HMM】

基于机器学习方法的股票预测系列文章目录 一、基于强化学习DQN的股票预测【股票交易】 二、基于CNN的股票预测方法【卷积神经网络】 三、基于隐马尔可夫模型的股票预测【HMM】 文章目录 基于机器学习方法的股票预测系列文章目录一、HMM模型简介&#xff08;1&#xff09;前向后…

全球首款搭载Google Gemini和GPT-4o的智能眼镜发布

智能眼镜仍然是一个尚未完全成熟的未来概念&#xff0c;但生成式人工智能的到来显著提升了这些设备的能力。Meta 的 Ray-Ban 智能眼镜被许多人视为当今最好的选择之一&#xff0c;而现在 Solos AirGo Vision 正在为其带来竞争&#xff0c;这款眼镜还集成了 Google Gemini 支持。…

生命在于学习——Python人工智能原理(3.1.1)

Python部分结束了&#xff0c;开始概率论部分 一、概率基本知识 1.1 事件与概率 1.1.1 事件的运算与关系 &#xff08;一&#xff09;基本概念 定义1 随机试验 如果一个试验满足如下条件&#xff1a; 在试验前不能断定其将发生什么结果&#xff0c;但可明确指出或说明试验…

浅聊JavaScript中的栈(stack)

前言 这篇文章结合leetcode题目讲解一下栈这种结构 第20题&#xff1a;20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 第LCR-147题LCR 147. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 栈&#xff08;stack&#xff09; 在讲解题目之前&#xff0c;我们先来…

HTTPS是什么?原理是什么?用公钥加密为什么不能用公钥解密?

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是HTTP的安全版本&#xff0c;它通过在HTTP协议之上加入SSL/TLS协议来实现数据加密传输&#xff0c;确保数据在客户端和服务器之间的传输过程中不会被窃取或篡改。 HTTPS 的工作原理 客户端发起HTTPS请求&…

primetime中cell和net的OCV

文章目录 前言一、Cell OCV1. POCV coefficient file2. POCV Slew-Load Table in Liberty Variation Format&#xff08;LVF lib&#xff09; 二、Net OCV三、如何check OCV是否已加上&#xff1f;总结 前言 在生产中&#xff0c;外界环境的各种变化&#xff0c;比如PVT&#…

C语言之线程的学习

线程属于某一个进程 共同点&#xff1a;都能并发 线程共享变量&#xff0c;进程不共享。 多线程任务中&#xff0c;其中某一个线程调用了exit了&#xff0c;其他线程会跟着一起退出 如果是特定的线程就调用pthread_exit 失败返回的是错误号 下面也是

代码随想录-Day44

322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数…

科普文:一文搞懂jvm原理(三)执行引擎

概叙 科普文&#xff1a;一文搞懂jvm(一)jvm概叙-CSDN博客 科普文&#xff1a;一文搞懂jvm原理(二)类加载器-CSDN博客 前面我们介绍了jvm&#xff0c;jvm主要包括两个子系统和两个组件&#xff1a; Class loader(类装载器) 子系统&#xff0c;Execution engine(执行引擎) 子系…

16_C语言编程基础

目录 C语言入门 程序段和代码段 C语言入门实例 英文分号(;) 注释 标识符 保留字 C中的空格 C数据类型 基本类型 sizeof获取存储字节 void类型 变量 C数组 C枚举 C中的左值(lvalue)和右值(rvalue) C常量 变量存储类型 C常用关键字(保留字) 宏定义#define co…

生成式AI:未来商业的变革者

在2023年&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;的浪潮席卷了全球&#xff0c;成为科技领域最炙手可热的话题之一。它不仅改变了我们与机器的互动方式&#xff0c;更在商业创新和生产力提升方面发挥了巨大的作用。本文将深入探讨2024年生成式AI的应用模式、趋…