自然语言处理(词嵌入和词向量的使用)

news2024/11/25 11:14:41

一、实验目的

1.了解词嵌入和词向量的基本概念及其在自然语言处理中的应用。

2.掌握使用One-Hot编码和Word2Vec模型构建词向量的方法。

3.掌握Doc2Vec模型构建文档向量的方法以及如何计算文档向量之间的相似度。

二、实验内容

(1)使用One-Hot编码构建词向量。

(2)使用Word2Vec构建词向量。

(3)使用Doc2Vec模型构建文档向量并计算向量间的相似度。

三、实验原理、方法和手段

(1)One-Hot编码

One-Hot编码是一种将词汇转换为向量的方法,每个词汇对应一个独特的向量,向量中只有一个元素为1,其余元素为0。其优点是简单直观,但存在维度高、无法表达词汇之间语义关系等缺点。

(2)Word2Vec

Word Embedding通过将词汇映射到低维连续向量空间中,能够捕捉词汇之间的语义关系。Word2Vec通过Skip-gram或CBOW模型进行训练,能够有效表示词汇的上下文信息。与One-Hot编码相比,Word2Vec能够更好地捕捉词汇间的语义相似性,并且维度较低。

(3)Doc2Vec

Doc2Vec是Word2Vec的扩展,旨在生成整个文档的向量表示。它通过引入文档向量,结合词向量共同训练,从而捕捉文档的整体语义信息。Doc2Vec适用于文本分类、相似度计算等任务。

(4)余弦相似度

余弦相似度是一种衡量两个向量在向量空间中夹角大小的指标,其值范围在-1到1之间。值越接近1,表示两个向量越相似;值越接近-1,表示两个向量越不相似;值为0表示两者正交,无相似性。

 

四、代码

 One-Hot

from sklearn.preprocessing import OneHotEncoder
import numpy as np
# 示例词汇表
vocab = ["今天", "天气", "很好", "我们", "去", "公园"]
# 构建One-Hot编码器
encoder = OneHotEncoder(sparse=False)
vocab_array = np.array(vocab).reshape(-1, 1)
encoder.fit(vocab_array)
# 编码示例
word = "天气"
one_hot = encoder.transform([[word]])
print(f"One-Hot编码为'{word}': {one_hot}")

Word2Vec

 from gensim.models import Word2Vec
import jieba
# 示例文本
sentences = [
    "今天 天气 很好",
    "我们 去 公园",
    "公园 很美",
    "天气 适合 散步"
]
# 分词处理
tokenized_sentences = [list(jieba.cut(sentence)) for sentence in sentences]
# 训练Word2Vec模型
model = Word2Vec(sentences=tokenized_sentences, vector_size=100, window=5, min_count=1, workers=4)
# 获取词向量
vector = model.wv["天气"]
print(f"Word2Vec词向量为'天气': {vector}")

Doc2Vec

from gensim.models import Doc2Vec
from gensim.models.doc2vec import TaggedDocument
import jieba
import numpy as np
# 示例文本
documents = [
    "今天 天气 很好 我们 去 公园",
    "公园 很美 天气 适合 散步",
    "今天 我们 去 运动",
    "运动 让人 感觉 很好"
]
# 分词处理并标记
tagged_data=[TaggedDocument(words=list(jieba.cut(doc)), tags=[f'DOC_{i}']) for i, doc in enumerate(documents)]
# 训练Doc2Vec模型
model = Doc2Vec(vector_size=100, window=5, min_count=1, workers=4, epochs=100)
model.build_vocab(tagged_data)
model.train(tagged_data, total_examples=model.corpus_count, epochs=model.epochs)
# 定义自定义相似度函数
def cosine_similarity(vec1, vec2):
    dot_product = np.dot(vec1, vec2)
    norm_vec1 = np.linalg.norm(vec1)
    norm_vec2 = np.linalg.norm(vec2)
    if norm_vec1 == 0 or norm_vec2 == 0:
        return 0.0
    return dot_product / (norm_vec1 * norm_vec2)
# 获取文档向量
doc0 = model.dv['DOC_0']
doc1 = model.dv['DOC_1']
doc2 = model.dv['DOC_2']
doc3 = model.dv['DOC_3']
# 计算相似度
similarity_0_1 = cosine_similarity(doc0, doc1)
similarity_0_2 = cosine_similarity(doc0, doc2)
similarity_0_3 = cosine_similarity(doc0, doc3)
print(f"DOC_0和DOC_1的相似度为: {similarity_0_1:.4f}")
print(f"DOC_0和DOC_2的相似度为: {similarity_0_2:.4f}")
print(f"DOC_0和DOC_3的相似度为: {similarity_0_3:.4f}")

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

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

相关文章

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中,自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言,自动化测试尤为重要,它能有效捕捉代码中的潜在缺陷,提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test(GTe…

ubuntu16.04在ros使用USB摄像头-解决could not open /dev/video0问题

首先检查摄像头 lsusb 安装 uvc camera 功能包 sudo apt-get install ros-indigo-uvc-camera 安装 image 相关功能包 sudo apt-get install ros-kinetic-image-* sudo apt-get install ros-kinetic-rqt-image-view运行 uvc_camera 节点 首先输入roscore 然后另外开一个终端输入…

Linux:文件管理(二)——文件缓冲区

目录 一、缓冲区概念 二、缓冲区刷新机制 三、用缓冲区刷新解释下面现象。 一、缓冲区概念 缓冲区,本质就是一块内存区域。 设计缓冲区就是为了让本来要一次一次传的数据,都暂时传到缓冲区,让缓冲区刷新一次,这样只发生了一次传…

PH热榜 | 2024-11-24

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. AutoFlow Studio 标语:借助简化的AI质检,更快发布产品,更聪明地进行测试。 介绍&…

hubuctf-2024校赛-复现wp

web easyweb1 <?php error_reporting(0); highlight_file(__FILE__);$flag getenv("GZCTF_FLAG");if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("You are failed.");}if(intval($num)){echo $flag;} } 利…

飞书会话消息左右排列

飞书会话消息左右排列 1. 飞书登录后&#xff0c;点击头像&#xff0c;弹出菜单有个按钮设置 2. 3.

《图像形态学运算全解析:原理、语法及示例展示》

简介&#xff1a; 本文详细介绍了图像形态学中的多种运算&#xff0c;包括腐蚀、膨胀、开运算、闭运算、形态学梯度运算、礼帽运算以及黑帽运算。分别阐述了各运算的原理、语法格式&#xff0c;并通过 Python 代码结合具体示例图片&#xff08;如erode.JPG、dilate.JPG、close.…

链路聚合实验

1、聚合方式 &#xff08;1&#xff09;、lacp 静态链路聚合、 动态链路聚合&#xff08;开启lacp模式&#xff0c;常用&#xff09; &#xff08;2&#xff09;、手工负载分担 静态端口聚合&#xff08;两台交换机都按照下面的命令配置&#xff09; <H3C>sys System Vi…

电子电气架构 -- ASIL D安全实现策略

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

禁止Chrome的自动升级

一、需求分析 因为用Chromeselenium做了网页自动化填写任务&#xff0c;如果Google Chrome浏览器自动升级&#xff0c;就会导致chromedriver加载失败&#xff0c;自动化任务失效&#xff0c;因此需要禁止Chrome浏览器的自动升级。 二、当前环境 三、实际配置 运行注册表编辑…

C0034.在Ubuntu中安装的Qt路径

Qt安装路径查询 在终端输入qmake -v如上中/usr/lib/x86_64-linux-gnu就是Qt的安装目录&#xff1b;

C++从零到满绩——类和对象(中)

目录 1>>前言 2>>构造函数&#xff08;我称之为初始化函数&#xff09; 3>>析构函数&#xff08;我称之为销毁函数&#xff09; 4>>拷贝构造函数&#xff08;我称之为复制函数&#xff09; 5>>运算符重载 5.2>>赋值运算符重载 ​编辑…

oracle 12c查看执行过的sql及当前正在执行的sql

V$SQL 提供了已经执行过及正在执行的SQL语句的信息。 一 查看共享池中所有sql的统计信息 #统计共享池中某类sql执行次数&#xff0c;总体执行时长&#xff0c;平均执行时长等信息&#xff0c;并按总体执行时长降序排序 SELECT INST_ID,SQL_ID,SQL_TEXT,SQL_FULLTEXT,EXECUTI…

解锁PPTist的全新体验:Windows系统环境下本地部署与远程访问

文章目录 前言1. 本地安装PPTist2. PPTist 使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 在Windows系统环境中&#xff0c;如何本地部署开源在线演示文稿应用PPTist&#xff0c;并实现远程访问&#xff1f;本文将为您提供详细的部署和配置指南。 P…

C语言中的指针和字符串的赋值

前言&#xff1a;温习下以前学过的C语言知识&#xff0c;温故而知新。 实例说明 本文用一段实例代码阐述指针和字符串的联系。 #include <iostream> #include <cstring> int main() {using namespace std;char animal[20] "bear";const char * bird …

Linux高阶——1117—TCP客户端服务端

目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…

物体网格弹性变形---Unity中实现

在游戏引擎场景中的3D物体是由一定数量的点、面组成的&#xff0c;如下图&#xff1a; 要使这些物体变形就是改变3D物体每个顶点状态。 1.首先在Unity场景中增加一个球体&#xff0c;如下图 3D组件默认拥有MeshFilter、meshRenderer、Collider组件&#xff0c;分别用来获取Mes…

【ArcGISPro】根据yaml构建原始Pro的conda环境

使用场景 我们不小心把原始arcgispro-py3的conda环境破坏了,我们就可以使用以下方法进行修复 查找文件 在arcgis目录下找到yaml文件 如果没找到请复制以下内容到新的yaml文件 channels: - esri - defaults dependencies: - anyio=4.2.0=py311haa95532_0 - appdirs=1.4.4=p…

【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)

网垃圾分类网站的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着全球环境保护意识的提升&#xff0c;垃圾分类已成为一项紧迫且重要的任务。为了有效推动垃圾分类的实施&#xff0c;提升公众的环保意识和参与度&#xff0c;垃圾分类已…

【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 &#x1fab2;前言 在这篇博客中&#xff0c;我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求&#xff0c;…