自然语言处理(一):基于统计的方法表示单词

2023-09-15 15:57:09

1. 共现矩阵

将一句话的上下文大小窗口设置为1,用向量来表示单词频数,如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将每个单词的频数向量求出,得到如下表格,即共现矩阵
在这里插入图片描述
我们可以用余弦相似度(cosine similarity)来计算单词向量的相似性:
similarity ⁡ ( x , y ) = x ⋅ y ∥ x ∥ ∥ y ∥ = x 1 y 1 + ⋯ + x n y n x 1 2 + ⋯ + x n 2 y 1 2 + ⋯ + y n 2 \operatorname{similarity}(\boldsymbol{x}, \boldsymbol{y})=\frac{\boldsymbol{x} \cdot \boldsymbol{y}}{\|\boldsymbol{x}\|\|\boldsymbol{y}\|}=\frac{x_{1} y_{1}+\cdots+x_{n} y_{n}}{\sqrt{x_{1}^{2}+\cdots+x_{n}^{2}} \sqrt{y_{1}^{2}+\cdots+y_{n}^{2}}} similarity(x,y)=x∥∥yxy=x12++xn2 y12++yn2 x1y1++xnyn

有时会出现分母为0的情况,在具体代码实现的时候,我们可以加上一个微小值,如1e-8

def cos_similarity(x, y, eps=1e-8):
	nx = x / (np.sqrt(np.sum(x ** 2)) + eps)
	ny = y / (np.sqrt(np.sum(y ** 2)) + eps)
 	return np.dot(nx, ny)

2. 点互信息

在语料库中可能会看到很多“…the car…”这样的短语。实际上,与 the相比,drive和 car 的相关性更强。为了避免这种情况,可以引入PMI

PMI ⁡ ( x , y ) = log ⁡ 2 P ( x , y ) P ( x ) P ( y ) = log ⁡ 2 C ( x , y ) N C ( x ) N C ( y ) N = log ⁡ 2 C ( x , y ) ⋅ N C ( x ) C ( y ) \operatorname{PMI}(x, y)=\log _{2} \frac{P(x, y)}{P(x) P(y)}=\log _{2} \frac{\frac{\boldsymbol{C}(x, y)}{N}}{\frac{\boldsymbol{C}(x)}{N} \frac{\boldsymbol{C}(y)}{N}}=\log _{2} \frac{\boldsymbol{C}(x, y) \cdot N}{\boldsymbol{C}(x) \boldsymbol{C}(y)} PMI(x,y)=log2P(x)P(y)P(x,y)=log2NC(x)NC(y)NC(x,y)=log2C(x)C(y)C(x,y)N

P(x) 表示 x 发生的概率,P(y) 表示 y 发生的概率,P(x, y) 表示 x
和 y 同时发生的概率。PMI 的值越高,表明相关性越强。

这里假设语料库的单词数量(N)为 10 000,the 出现 100 次,car 出现 20 次,drive 出现 10 次,the 和 car 共现 10 次,car 和 drive 共现 5 次。

P M I ( " t h e " , " c a r " ) = l o g 2 10 ⋅ 10000 1000 ⋅ 20 ≈ 2.32 PMI("the","car")=log_2\frac{10\cdot 10000}{1000 \cdot 20}\approx 2.32 PMI("the","car")=log210002010100002.32
P M I ( " c a r " , " d r i v e " ) = l o g 2 5 ⋅ 10000 20 ⋅ 10 ≈ 7.79 PMI("car","drive")=log_2\frac{5\cdot 10000}{20 \cdot 10}\approx 7.79 PMI("car","drive")=log220105100007.79

得出的PMI值,后者比前者要高,这是我们所需要的结果

3. 降维(奇异值分解)

奇异值分解(Singular Value Decomposition,SVD)。SVD 将任意矩阵分解为 3 个矩阵的乘积,如下式所示:

X = U S V T X=USV^T X=USVT

上面的例子只考虑了一句话中少量单词的共现矩阵,如果我们使用一个真正的语料库,那么这个矩阵将变得十分庞大,这是一个很大的稀疏矩阵,我们需要对其进行降维,这里用到奇异值分解。
在numpy中可以用

U, S, V = np.linalg.svg()

在这里插入图片描述
在这里插入图片描述
我们只需要取矩阵U的前两个元素即可将其降维到二维向量。

更多推荐

低代码技术推动能源行业数字化转型,服务商模式带来转型新商机

“新能源企业通过数字化转型不仅可以提高企业的运营效率和市场竞争力,还可以创新商业模式、提高能源生产效率和可持续性、优化资源配置并适应市场需求。选择百数的服务商模式,不仅可以解决我们想实现数字化转型的需求,还让我们多了一个开展新业务的机会,多了一个打开新能源行业市场的机会。”——跨境贸易商会会长、浙江浦江云晶科技有限公司

Netty(二)NIO-入门

Netty入门1.概述1.1NettyNetty是一个异步的,基于事件驱动的网络应用框架,用于快速开发可维护,高性能的网络服务器和客户端Cassandra,Spark,Hadoop,RocketMQ,ElasticSearch,gRPC,Dubbo,Spring5.x,Zookeeper都是基于netty开发。1.2N

npm常用命令系统介绍

npm常用命令系统介绍npmhelpnpminitpackage.json文件package.json文件属性说明默认package.json文件--参数[-yes|-y]设置package.json中字段的默认值package-lock.json文件npm[config|c]设置源npm[install|i]可选参数

【最新面试问题记录持续更新,java,kotlin,android,flutter】

最近找工作,复习了下java相关的知识。发现已经对很多概念模糊了。记录一下。部分是往年面试题重新整理,部分是自己面试遇到的问题。持续更新中~目录java相关1.面向对象设计原则2.面向对象的特征是什么3.重载和重写4.基本数据类型5.装箱和拆箱6.final有什么作用7.String是基本类型吗,可以被继承吗8.Str

vuepress+gitee免费搭建个人博客(无保留版)

文章目录最终效果,一睹为快!一、工具选型二、什么是VuePress三、准备工作3.1node安装3.2Git安装3.3Gitee账号注册四、搭建步骤4.1初始化VuePress4.2安装VuePress4.3初始化目录4.4编写文章五、部署到Gitee5.1创建仓库5.2个人空间地址设置4.3推送本地博客项目到Gite

linux如何查看各个文件夹大小

本文将介绍两种方法来查看Linux系统中文件夹的大小。方法一:使用du命令du命令是Linux系统中用于估算文件和目录容量的工具。通过du命令,可以查看文件夹的大小并按照目录层次结构进行排序。要查看文件夹的大小,可以按照以下语法使用du命令:du[选项][目录]其中,选项可以根据需要进行调整。一些常用的选项包括:-h:

使用JavaScript实现无限滚动的方法

前言在网页设计中,无限滚动是一种常见的交互方式,用户可持续地加载更多内容而无需刷新页面,提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果,使网页能够自动加载更多数据,减轻用户加载新页的负担,为用户提供更好的访问体验。原理理解无限滚动的原理无限滚动的原理是当用户滚动到页面底部时,自动加载更多内容。这

计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题,在CV领域,图片旋转验证码的角度计算模型被广泛应用于解决旋转图片矫正问题,有效解决机器识别图片验证码的问题。旋转图片验证码常用于验证用户身份,但由于图片可能被以不同角度旋转,识别难度比较大。本文提出了

HTML+CSS+JavaScript 大学生网页设计制作作业实例代码 200套静态响应式前端网页模板(全网最全,建议收藏)

目录1.介绍2.这样的响应式页面这里有200套不同风格的1.介绍资源链接📚web前端期末大作业(200套)集合Web前端期末大作业通常是一个综合性的项目,旨在检验学生在HTML、CSS和JavaScript等前端技术方面的能力和理解。以下是一些可能的Web前端期末大作业的示例和介绍:网页类型举例📘响应式网站开发:学

【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统

EolinkApikit有三种客户端,可以依据自己的情况选择。三种客户端的数据是共用的,因此可以随时切换不同的客户端。我们推荐使用新推出的ApikitPC客户端,PC端拥有线上产品所有的功能,并且针对本地测试、自动化测试以及使用体验等方面进行了强化,可以提供最佳的使用感受。建议对本地测试有需求的用户使用PC端,可满足更

全球公链进展| Metis 将成为完全去中心化的 L 2 网络;Circle在NEAR和Noble上推出原生 USDC

一周速览过去一周,明星项目动态如下:Gethv1.13.1修补程序已发布,修复区块生产等问题Metis计划年内成为完全去中心化的Layer2网络Sui主网已升级至V1.9.1版本Circle在NEAR和Noble上推出原生USDCPolygon发布关于2.0升级和POL代币迁移的三项提案CosmosHub已完成「Gai

热文推荐