借助余弦相似度辅助背单词

2023-11-06 05:30

本文主要是介绍借助余弦相似度辅助背单词,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 0 背景
      • 1 余弦相似度
        • 1.1 欧几里得距离
        • 1.2 余弦相似度计算公式
        • 1.3 图例理解
        • 1.4 简单示意
      • 2 word2vec
        • 2.1 经典示意图
        • 2.2 方案选择
        • 2.3 了解更多
      • 3 vocabulary
        • 3.1 收集物料
        • 3.2 清洗数据
        • 3.3 训练模型
        • 3.4 模型应用
        • 3.5 后期规划
      • 4 总结

0 背景

无他,唯背单词而已。

1 余弦相似度

提到余弦相似度,不得不先说下欧几里得距离,这两个容易搞混淆。

1.1 欧几里得距离

欧几里得距离与余弦相似度

距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。如果保持A点的位置不变,B点朝原方向远离坐标轴原点,那么这个时候余弦相似度cosθ是保持不变的,因为夹角不变,而A、B两点的距离显然在发生改变,这就是欧氏距离和余弦相似度的不同之处。
参考自 余弦相似度与欧几里得距离1

1.2 余弦相似度计算公式

计算公式
Wikipedia 官方解读2

1.3 图例理解

二维特征的余弦相似度示意图
二维特征的余弦相似度结果

1.4 简单示意
# coding: utf8
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import math
"""
arr1 = [[1, 2]]
arr2 = [[4, 5]]
"""arr1 = np.arange(2).reshape(1, 2)
arr1[0] = [100 * 1 / math.sqrt(5), 100 * 2 / math.sqrt(5)]
arr2 = np.arange(2).reshape(1, 2)
arr2[0] = [100 * 4 / math.sqrt(41), 100 * 5 / math.sqrt(41)]
print(arr1)
print(arr2)ret = cosine_similarity(arr1, arr2)
print(ret)"""
[[44 89]]
[[62 78]]
[[0.97751451]]
"""

在 sklearn 中,有如下代码

def cosine_similarity(X, Y=None, dense_output=True):"""Compute cosine similarity between samples in X and Y.Cosine similarity, or the cosine kernel, computes similarity as thenormalized dot product of X and Y:K(X, Y) = <X, Y> / (||X||*||Y||)On L2-normalized data, this function is equivalent to linear_kernel.Read more in the :ref:`User Guide <cosine_similarity>`.Parameters----------X : {ndarray, sparse matrix} of shape (n_samples_X, n_features)Input data.Y : {ndarray, sparse matrix} of shape (n_samples_Y, n_features), \default=NoneInput data. If ``None``, the output will be the pairwisesimilarities between all samples in ``X``.dense_output : bool, default=TrueWhether to return dense output even when the input is sparse. If``False``, the output is sparse if both input arrays are sparse... versionadded:: 0.17parameter ``dense_output`` for dense output.Returns-------kernel matrix : ndarray of shape (n_samples_X, n_samples_Y)"""# to avoid recursive importX, Y = check_pairwise_arrays(X, Y)X_normalized = normalize(X, copy=True)if X is Y:Y_normalized = X_normalizedelse:Y_normalized = normalize(Y, copy=True)K = safe_sparse_dot(X_normalized, Y_normalized.T,dense_output=dense_output)return K

2 word2vec

关于 word2vec 的定义就不过多描述了,我对于 word2vec 的认知也不是很深,但是给我的第一印象就是,它能用来背单词。

2.1 经典示意图

word2vec 经典案例

The resulting vector from “king-man+woman” doesn’t exactly equal “queen”, but “queen” is the closest word to it from the 400,000 word embeddings we have in this collection.

2.2 方案选择

不管是中文和英文,都是有一定的语义相关性的。可能我提到张三,你就能想到李四。提到狮子就能想到老虎一样。而 word2vec 恰恰是能将此特性通过词向量的形式进行具象化的一种技术手段。因此,在语义相关的众多候选单词中,通过 word2vec 的牵引,往往能起到“举一反三”的功效,不仅背单词的效率更高了,速度也会有提升。

2.3 了解更多

想了解更多关于 word2vec 的内容,可以点击下面两篇文章,个人感觉降得很好。
神级解读3
word2Vec 是如何得到词向量的4

3 vocabulary

写了这么多,都是铺垫,下面进入正题,怎么样把它应用到“背单词”这个应用上,才是本次需求的目的。

3.1 收集物料

物料的选取,从根本上决定了后期模型的准确度。
哈利波特英文文档
我这里选取的不是很好,需求的目的是背单词,但是哈利波特更多的是稍偏情景化的内容,因此不太适合用来做目标物料。

相对来讲,较为合适的就是维基百科英语 46 级雅思等内容相关的文本。这样的内容天生就是适合的。收集物料的过程很繁琐,需要针对性的写一些爬虫脚本,我这里目前还不需要做到如此精准,就先用哈利波特英文剧本代替了。

3.2 清洗数据

清洗数据是为了下一步训练模型使用,收集到的物料全部粘连在一起了。而训练模型时用的是行分隔模式,因此需要先将文本转换为行式结构

sentences = word2vec.LineSentence("haripoter.txt")
3.3 训练模型

这里借助 gensim 库进行模型的训练与构建,方便快捷。


from gensim.models import word2vecsentences = word2vec.LineSentence("haripoter.txt")
model = word2vec.Word2Vec(sentences,sg=0,# size=100,# window=2,# negative=3,# sample=0,# hs=1,# workers=4,size=250,
)model.save("haripoter.model")
3.4 模型应用
from gensim.models import word2vecmodel = word2vec.Word2Vec.load("haripoter.model")
print(model.most_similar("kitchen", topn=3))"""
[('hall', 0.9646997451782227), ('corridor,', 0.9580787420272827), ('hole', 0.9575302600860596)]
"""

将此模型应用到单词抽取阶段,来代替现有的随机抽取算法,定能起到画龙点睛的功效。
现有抽取方式

半成品背单词应用 https://github.com/guoruibiao/vocabulary
半成品模型应用

3.5 后期规划

1 爬取更多物料,构筑更精准的模型
2 针对错误单词的“组词成句”需求跟进,在我看来,这也是一个 NLP 的热点。

4 总结

本文主要从一个数学公式(余弦相似度)说起,再到 word2vec 算法,再应用到具体的工具中(物料不全,暂未使用)。整体思路还是蛮清晰的,后续其实可以投入精力去好好优化下,时间有限,就写到这里了。

参考链接:


  1. https://blog.csdn.net/robbyo/article/details/43588357 ↩︎

  2. https://en.wikipedia.org/wiki/Cosine_similarity ↩︎

  3. https://jalammar.github.io/illustrated-word2vec/ ↩︎

  4. https://www.zhihu.com/question/44832436 ↩︎

这篇关于借助余弦相似度辅助背单词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/354712

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

文章目录 1、工厂模式概述1)特点:2)主要角色:3)工作流程:4)优点5)缺点6)适用场景 2、简单工厂模式(静态工厂模式)1) 在简单工厂模式中,有三个主要角色:2) 简单工厂模式的优点包括:3) 简单工厂模式也有一些限制和考虑因素:4) 简单工厂模式适用场景:5) 简单工厂UML类图:6) 代码示例: 3、工厂方法模式1) 在工厂方法模式中,有4个主要角色:2) 工厂方法模式的工作流程

AI辅助编程里的 Atom Group 的概念和使用

背景 在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。 举个例子,我经常需要在 auto-coder中需要添加命令行参数,通常是这样的: /coding 添加一个新的命令行参数 --chat_model 默认值为空 实际上这个需求涉及到以下文件列表: /Users/allwefantasy/projects/auto-coder/src/autocoder/auto

线性代数 第六讲 特征值和特征向量_相似对角化_实对称矩阵_重点题型总结详细解析

文章目录 1.特征值和特征向量1.1 特征值和特征向量的定义1.2 特征值和特征向量的求法1.3 特征值特征向量的主要结论 2.相似2.1 相似的定义2.2 相似的性质2.3 相似的结论 3.相似对角化4.实对称矩阵4.1 实对称矩阵的基本性质4.2 施密特正交化 5.重难点题型总结5.1 判断矩阵能否相似对角化5.2 已知两个矩阵相似,求某个矩阵中的未知参数5.3 相似时,求可逆矩阵P,使

强调重点元素、弱化辅助元素、去掉无关元素,工控HMI还能好不了

HMI设计,尤其工控领域的HMI设计,千万不要走极端,把界面搞得花哨,或者所谓的美观,切记实现功能才是第一位的。 在人机界面(HMI)设计中,强调重点元素、弱化辅助元素、去掉无关元素是非常重要的,可以提高用户体验和界面的可用性。 1. 强调重点元素: 通过颜色、大小、对比度等方式来突出显示重要的元素,例如使用醒目的颜色、加粗的字体或者特殊的图标来吸引用户的注意力。 2. 弱化辅助元

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界框的敏感性以增加正样本数量上,并且需要设置一些固定的超参数。然而,更多的正样本并不一定会带来更好的检测结果,事实上,过多的正样本

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS

第143天:内网安全-权限维持自启动映像劫持粘滞键辅助屏保后门WinLogon

案例一: 权限维持-域环境&单机版-自启动 自启动路径加载 路径地址 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\##英文C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\开始菜单\程序\启动\ #

uAI - AI Assistant 人工智能辅助助手插件

uAI助手支持GPT 3.5 Turbo、GPT 3.5 Turbo16K、GPT 4-8k和GPT 4 Turbo-128k 什么是uAI助理? uAI Assistant是Unity游戏引擎的强大扩展,它使用GPT AI帮助游戏开发人员轻松创建专业代码和引人入胜的游戏内容。 你需要一个OpenAI密钥才能使用uAI助手!阅读我们的文档以获取更多说明。 得益于OpenAI最新的GPT模型,价

如何借助AI快速筛选和整理文献?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 在撰写毕业论文时,文献综述是必不可少的部分。它不仅为你的研究提供理论背景,还展示了你对研究领域的深入理解。然而,文献综述的撰写过程常常让学生感到头疼,尤其是面对海量文献时,如何有效筛选、整理和撰写是一大难题。 本文将为大家介绍如何利用AI工具帮助你轻松高效地完成文献综述的写作。我们将详细讲解如何快速