使用 word2vec 嵌入句子

2024-01-06

我想比较不同句子中提到的相同单词的差异,例如“旅行”。 我想做的是:

  • 将提及“旅行”一词的句子视为纯文本;
  • 在每个句子中,将“旅行”替换为travel_sent_x。
  • 在这些句子上训练 word2vec 模型。
  • 计算 Travel_sent1、travel_sent2 和其他重新标记的“旅行”提及之间的距离 所以每个句子的“旅行”都有自己的向量,用于比较。

我知道 word2vec 需要的不仅仅是几个句子来训练可靠的向量。官方页面推荐的数据集包含数十亿个单词,但我的数据集中没有这样的数字(我有数千个单词)。

我试图用以下几句话来测试模型:

    Sentences
    Hawaii makes a move to boost domestic travel and support local tourism
    Honolulu makes a move to boost travel and support local tourism
    Hawaii wants tourists to return so much it's offering to pay for half of their travel expenses

我构建向量的方法是:

from gensim.models import Word2Vec

vocab = df['Sentences']))
model = Word2Vec(sentences=vocab, size=100, window=10, min_count=3, workers=4, sg=0)
df['Sentences'].apply(model.vectorize)

然而,我不知道如何可视化结果以查看它们的相似性并获得一些有用的见解。 欢迎任何帮助和建议。

更新:我将使用主成分分析算法来可视化 3 维空间中的嵌入。我知道如何处理每个单词,但我不知道如何处理句子。


请注意,word2vec 本质上并不是一种对句子进行建模的方法,而只是对单词进行建模。因此,没有单一的官方方法来使用 word2vec 来表示句子。

一次快速而粗略的方法是通过对所有词向量进行平均来为句子(或其他多词文本)创建一个向量。它速度快,总比没有好,并且可以完成一些简单的(广泛主题的)任务 - 但不能很好地捕捉文本的完整含义,特别是任何依赖于语法、一词多义的含义,或复杂的上下文提示。

尽管如此,您仍然可以使用它来获取每个短文本的固定大小的向量,并计算这些向量之间的成对相似度/距离,并将结果输入到降维算法中以用于可视化或其他目的。

其他算法实际上为较长的文本创建向量。与 word2vec 密切相关的浅层算法是“段落向量”,在 Gensim 中可用作为Doc2Vec班级。但它仍然不是很复杂,并且仍然不具备语法意识。许多更深层次的网络文本模型(例如 BERT、ELMo 等)可能是可行的。

Word2vec 及相关算法非常需要数据:它们的所有有益品质都源于同一个单词的许多不同用法示例之间的拉锯战。因此,如果您有一个玩具大小的数据集,您将不会获得一组具有有用相互关系的向量。

而且,较大数据集中的稀有单词不会获得良好的向量。在训练中,通常会丢弃出现在某些单词下面的单词,就好像它们根本不存在一样。min_count频率 - 因为它们的向量不仅会因为一个或几个特殊的样本使用而变得很差,而且因为总共有很多这样的代表性不足的单词,所以保留它们往往会使other词向量也更糟。它们是噪音。

所以,你提出的采取的想法个人的实例travel用单一外观标记替换它们很可能会产生有趣的结果。降低你的min_count到 1 将为您提供每个变体的向量 - 但它们的质量会比其他单词向量差得多(并且更加随机),与其他单词相比,它们受到的训练关注相对较少,并且每个变体都完全受到他们周围的几个单词(而不是所有周围上下文的整个范围)都有助于对统一的有用定位做出贡献travel token).

(你也许可以通过(1)保留句子的原始版本来稍微抵消这些问题,所以你仍然得到travel向量; (2) 多次重复你的标记损坏的句子,并重新排列它们以出现在整个语料库中,以在某种程度上模拟你的合成上下文的更真实的情况。但如果没有真正的多样性,此类单上下文向量的大多数问题仍将存在。)

另一种可能的比较方法travel_sent_A, travel_sent_B等将忽略确切的向量travel or travel_sent_X完全,而是为该单词周围的 N 个单词编译一个摘要向量。例如,如果您有 100 个该词的示例travel,创建 100 个向量,分别代表 N 个单词around旅行。这些向量可能会显示一些模糊的簇/邻域,特别是在单词具有非常不同的替代含义的情况下。 (一些研究采用 word2vec 来解决一词多义问题,使用这种context vector影响/选择替代词义的方法。)

您可能还会发现这项关于将单词建模为从话语的替代“原子”中提取的研究很有趣:词义的线性代数结构 http://www.offconvex.org/2016/07/10/embeddingspolysemy/

如果您有类似标题的短文本,并且只有词向量(没有进行更深入建模的数据或算法),您可能还需要研究“词移动器距离”计算来比较文本。它不是将单个文本简化为单个向量,而是将其建模为“词向量包”。然后,它将距离定义为将一个包转换为另一个包的成本。 (更多相似的单词比不太相似的单词更容易相互转换,因此非常相似的表达方式,仅替换了几个同义词,报告为非常接近。)

计算较长的文本可能会非常昂贵,但对于短语和小标题/推文/等可能效果很好。它可以在 Gensim 上使用KeyedVector类为wmdistance() https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.FastTextKeyedVectors.wmdistance。本文中的一个示例说明了它可能有助于发现相关性:使用 Word Mover’s Distance 导航餐厅评论中的主题 http://tech.opentable.com/2015/08/11/navigating-themes-in-restaurant-reviews-with-word-movers-distance/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 word2vec 嵌入句子 的相关文章

  • 如何在 Windows 64 上安装 NumPy?

    NumPy 安装程序在注册表中找不到 python 路径 无法安装 需要 Python 2 5 版本 但在注册表中未找到该版本 OK 我必须修改注册表吗 我已经修改了 PATH 以指向Python25安装目录 我可以检查一下您使用的是什么安
  • Python 3 os.urandom

    在哪里可以找到完整的教程或文档os urandom 我需要获得一个随机 int 来从 80 个字符的字符串中选择一个字符 如果你只需要一个随机整数 你可以使用random randint a b 来自随机模块 http docs pytho
  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • 删除 Django 1.7 中的应用程序(和关联的数据库表)

    是否可以使用 Django 1 7 迁移来完全删除 卸载应用程序及其所有跟踪 主要是其所有数据库表 如果没有 在 Django 1 7 中执行此操作的适当方法是什么 python manage py migrate
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • 在 matplotlib 中的极坐标图上移动径向刻度标签

    From matplotlib 示例 http matplotlib org examples pylab examples polar demo html import numpy as np import seaborn as sbs
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • 使用 python 绘制正值小提琴图

    我发现小提琴图信息丰富且有用 我使用 python 库 seaborn 然而 当应用于正值时 它们几乎总是在低端显示负值 我发现这确实具有误导性 尤其是在处理现实数据集时 在seaborn的官方文档中https seaborn pydata
  • 如何在 pandas 中使用 read_fwf 跳过空行?

    I use pandas read fwf http pandas pydata org pandas docs stable generated pandas read fwf htmlPython pandas 0 19 2 中的函数读
  • 返回表示每组内最大值的索引的一系列数字位置

    考虑一下这个系列 np random seed 3 1415 s pd Series np random rand 100 pd MultiIndex from product list ABDCE list abcde One Two T
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 在系统托盘中隐藏 tkinter 窗口 [重复]

    这个问题在这里已经有答案了 我正在制作一个程序来提醒我朋友的生日 这样我就不会忘记祝福他们 为此 我制作了两个 tkinter 窗口 1 First one is for entering name and birth date 2 Sec
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS

随机推荐