Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用word2vec嵌入句子_Python_Gensim_Word2vec_Embedding - Fatal编程技术网

Python 使用word2vec嵌入句子

Python 使用word2vec嵌入句子,python,gensim,word2vec,embedding,Python,Gensim,Word2vec,Embedding,我想比较一下不同句子中提到的同一个词之间的差异,例如旅游。 我想做的是: 以提及旅游一词的句子作为纯文本; 在每个句子中,将“旅行”替换为“旅行”。 根据这些句子训练word2vec模型。 计算行程1、行程2和其他重新标注的行程之间的距离 所以每个句子的行程都有自己的向量,用于比较。 我知道word2vec需要的不仅仅是几个句子来训练可靠的向量。官方页面推荐的数据集包括数十亿个单词,但我的数据中没有这样的数字,我有数千个单词 我试着用以下几句话来测试模型: Sentences H

我想比较一下不同句子中提到的同一个词之间的差异,例如旅游。 我想做的是:

以提及旅游一词的句子作为纯文本; 在每个句子中,将“旅行”替换为“旅行”。 根据这些句子训练word2vec模型。 计算行程1、行程2和其他重新标注的行程之间的距离 所以每个句子的行程都有自己的向量,用于比较。 我知道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)
然而,我不知道如何将结果可视化,以查看它们的相似性并获得一些有用的见解。 欢迎提供任何帮助和建议


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

有趣的是,在word2vec模型中,您可以使用向量的T-SNE嵌入,并将维度降低到3,并使用任何绘图库(如matplotlib或dash)将其可视化。我还发现这些工具在可视化单词嵌入时很有用:


学习不同上下文中单词的不同单词嵌入是ELMO的前提,但是需要大量的训练集来训练它。幸运的是,如果您的应用程序不是很具体,您可以使用预先训练好的模型。

有趣的是,使用word2vec模型,您可以使用向量的T-SNE嵌入,并将维度降低到3,并使用任何绘图库(如matplotlib或dash)将其可视化。我还发现这些工具在可视化单词嵌入时很有用:


学习不同上下文中单词的不同单词嵌入是ELMO的前提,但是需要大量的训练集来训练它。幸运的是,如果您的应用程序不是很具体,您可以使用预先训练好的模型。

请注意,word2vec并不是一种固有的句子建模方法,而是一种单词建模方法。因此,没有一种单一的、官方的方式使用word2vec来表示句子

一种快速而粗糙的方法是通过将所有单词向量平均在一起,为一个句子或其他多单词文本创建一个向量。它速度快,总比什么都没有好,在一些简单的、广泛的主题任务上做得还不错,但它不能很好地捕捉文本的全部含义,特别是任何依赖于语法、多义词或复杂上下文提示的含义

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

其他算法实际上为较长的文本创建向量。与word2vec密切相关的一个浅层算法是“段落向量”,在Gensim中作为Doc2Vec类提供。但它仍然不是很复杂,仍然不懂语法。一些更深层次的网络文本模型,如BERT、ELMo和其他可能是可能的

Word2vec及相关算法非常需要数据:它们所有的优点都来自于同一个单词的许多不同用法示例之间的拔河。因此,如果你有一个玩具大小的数据集,你将无法得到一组具有有用的相互关系的向量

但是,更大数据集中的稀有词也不会得到好的向量。在训练中,丢弃出现在某个最小计数频率以下的单词是很典型的,就好像它们根本不存在一样——因为它们的向量不仅会很差,仅仅来自一个或几个特殊的样本使用,而且因为总共有许多这样的代表性不足的单词,保留它们也会使其他单词向量更差。它们是噪音

因此,您提出的以单个旅行实例替换单个外观标记的想法很可能会产生有趣的结果。将min_计数降低到1将得到每个变体的向量-但它们的质量比其他单词向量差得多,随机性更高,与其他单词相比,它们接受的训练注意力相对较少,每个人都完全受他们周围的几个词的影响,而不是所有周围环境的影响,这些都有助于对统一的旅游代币进行有用的定位

你也许可以通过保留句子的原始版本来抵消这些问题,所以你仍然可以得到一个旅行向量;2多次重复你的标记性错误句子,并将它们混合在整个语料库中,以在某种程度上模拟synthet更真实的出现 语言语境。但如果没有真正的多样性,这种单一上下文向量的大部分问题将仍然存在

比较travel\u sent\u A、travel\u sent\u B等的另一种可能方法是完全忽略travel或travel\u sent\u X的确切向量,而是为单词周围的N个单词编译一个摘要向量。例如,如果有100个单词travel的示例,则创建100个向量,每个向量都是围绕travel的N个单词中的一个。这些向量可能会显示一些模糊的簇/邻域,尤其是在具有非常不同的交替含义的单词的情况下。一些研究采用word2vec来解释多义现象,使用这种上下文向量方法来影响/选择其他词义

你可能也会发现,这项关于将单词建模为从话语的交替“原子”中提取的研究很有趣:

如果您有类似于标题的短文本,并且只有单词向量,而没有数据或算法进行更深入的建模,那么您可能还需要查看单词移动器的距离计算,以便比较文本。它不是将单个文本简化为单个向量,而是将其建模为一包单词向量。然后,它将距离定义为将一个包转换为另一个包的成本。更多相似的单词比更少相似的单词更容易相互转换,因此非常相似的表达,只替换了几个同义词,就相当接近了


在长文本上计算可能会非常昂贵,但在短短语和小标题/推文集等方面可能会很好地工作。Gensim KeyedVector类中也提供了这种方法。这篇文章中有一个可能有助于发现的关联类型的例子:

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

一种快速而粗糙的方法是通过将所有单词向量平均在一起,为一个句子或其他多单词文本创建一个向量。它速度快,总比什么都没有好,在一些简单的、广泛的主题任务上做得还不错,但它不能很好地捕捉文本的全部含义,特别是任何依赖于语法、多义词或复杂上下文提示的含义

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

其他算法实际上为较长的文本创建向量。与word2vec密切相关的一个浅层算法是“段落向量”,在Gensim中作为Doc2Vec类提供。但它仍然不是很复杂,仍然不懂语法。一些更深层次的网络文本模型,如BERT、ELMo和其他可能是可能的

Word2vec及相关算法非常需要数据:它们所有的优点都来自于同一个单词的许多不同用法示例之间的拔河。因此,如果你有一个玩具大小的数据集,你将无法得到一组具有有用的相互关系的向量

但是,更大数据集中的稀有词也不会得到好的向量。在训练中,丢弃出现在某个最小计数频率以下的单词是很典型的,就好像它们根本不存在一样——因为它们的向量不仅会很差,仅仅来自一个或几个特殊的样本使用,而且因为总共有许多这样的代表性不足的单词,保留它们也会使其他单词向量更差。它们是噪音

因此,您提出的以单个旅行实例替换单个外观标记的想法很可能会产生有趣的结果。将min_计数降低到1将得到每个变体的向量-但它们的质量比其他单词向量差得多,随机性更高,与其他单词相比,它们接受的训练注意力相对较少,每个人都完全受他们周围的几个词的影响,而不是所有周围环境的影响,这些都有助于对统一的旅游代币进行有用的定位

你也许可以通过保留句子的原始版本来抵消这些问题,所以你仍然可以得到一个旅行向量;2多次重复你的标记性错误句子,并将它们混合在整个语料库中,以在某种程度上模拟合成上下文中更真实的出现。但如果没有真正的多样性,这种单一上下文向量的大部分问题将仍然存在

比较travel\u sent\u A、travel\u sent\u B等的另一种可能方法是完全忽略travel或travel\u sent\u X的确切向量,而是为单词周围的N个单词编译一个摘要向量。例如,如果有100个单词travel的示例,则创建100个向量,每个向量都是围绕travel的N个单词中的一个。这些向量可能会显示一些模糊的簇/邻域,尤其是在w 具有完全不同的交替含义的词。一些研究采用word2vec来解释多义现象,使用这种上下文向量方法来影响/选择其他词义

你可能也会发现,这项关于将单词建模为从话语的交替“原子”中提取的研究很有趣:

如果您有类似于标题的短文本,并且只有单词向量,而没有数据或算法进行更深入的建模,那么您可能还需要查看单词移动器的距离计算,以便比较文本。它不是将单个文本简化为单个向量,而是将其建模为一包单词向量。然后,它将距离定义为将一个包转换为另一个包的成本。更多相似的单词比更少相似的单词更容易相互转换,因此非常相似的表达,只替换了几个同义词,就相当接近了


在长文本上计算可能会非常昂贵,但在短短语和小标题/推文集等方面可能会很好地工作。Gensim KeyedVector类中也提供了这种方法。这篇文章中有一个可能有助于发现各种关联的例子:

如果你对比较句子感兴趣,Word2Vec不是最佳选择。结果表明,使用它来创建句子嵌入产生的结果不如专用的句子嵌入算法。如果您的数据集不是很大,则无法使用自己的数据创建新的嵌入空间。这迫使您对句子使用预先训练过的嵌入。幸运的是,现在这些已经足够了。我相信谷歌的通用句子编码器将最适合您的需要

一旦你得到了你的句子的向量表示,你可以走两条路:

创建一个成对比较矩阵,并将其可视化为热图。当你有一些关于句子有多接近的先验知识,并且你想检查你的假设时,这种表述是有用的。你甚至可以。 在向量表示上运行t-SNE。这将创建句子的二维投影,从而保持句子之间的相对距离。它比主成分分析更好地呈现数据。你可以很容易地找到某句话的邻居:
如果你对比较句子感兴趣,Word2Vec不是最好的选择,你可以从和中学到更多。结果表明,使用它来创建句子嵌入产生的结果不如专用的句子嵌入算法。如果您的数据集不是很大,则无法使用自己的数据创建新的嵌入空间。这迫使您对句子使用预先训练过的嵌入。幸运的是,现在这些已经足够了。我相信谷歌的通用句子编码器将最适合您的需要

一旦你得到了你的句子的向量表示,你可以走两条路:

创建一个成对比较矩阵,并将其可视化为热图。当你有一些关于句子有多接近的先验知识,并且你想检查你的假设时,这种表述是有用的。你甚至可以。 在向量表示上运行t-SNE。这将创建句子的二维投影,从而保持句子之间的相对距离。它比主成分分析更好地呈现数据。你可以很容易地找到某句话的邻居:
您可以从ATIF ADIB了解更多信息,并

谢谢。不幸的是,我的训练集不是很大。我有上百个句子,上千个单词,我想找到一个很好的方法来可视化它们之间的文本相似性。我的数据集中的句子与tweet非常相似,但实际上它们是一个新闻摘要,每个句子大约200个字符。我不知道是否会有一个好的预先培训的模型。然而,我的主要困难在于如何使用word2vec将句子可视化为数组。如果你的目标是可视化句子,你可以使用tf idf将与句子中的单词对应的单个单词向量组合起来,然后将它们可视化。谢谢ATIF ADIB。不幸的是,我的训练集不是很大。我有上百个句子,上千个单词,我想找到一个很好的方法来可视化它们之间的文本相似性。我的数据集中的句子与tweet非常相似,但实际上它们是一个新闻摘要,每个句子大约200个字符。我不知道是否会有一个好的预先培训的模型。然而,我的主要困难在于如何使用word2vec将句子可视化为数组。如果你的目标是可视化句子,你可以使用tf idf将与句子中的单词对应的单个单词向量组合起来,然后将它们可视化。你到底想实现什么还不是很清楚,其中word2vec的部分是什么。获得相似的句子或想象相似的单词?嗨,伊格里尼斯。我想想象一下类似的句子。相似性应该来自于word2vec或其他工具的使用,但最好是基于文本语义。你到底想做什么还不是很清楚
nt的实现,以及word2vec在其中的作用。获得相似的句子或想象相似的单词?嗨,伊格里尼斯。我想想象一下类似的句子。相似性应该来自word2vec或其他工具的使用,但最好基于文本语义