标签: word-embedding

确保gensim针对相同数据的不同运行生成相同的Word2Vec模型

LDA模型中,每次我在同一个语料库上进行训练时,都会生成不同的主题,通过设置np.random.seed(0),LDA模型将始终以完全相同的方式进行初始化和训练。

来自的Word2Vec模型是否相同gensim?通过将随机种子设置为常数,在同一数据集上运行的不同样本会产生相同的模型吗?

但是奇怪的是,它已经在不同情况下为我提供了相同的矢量。

>>> from nltk.corpus import brown
>>> from gensim.models import Word2Vec
>>> sentences = brown.sents()[:100]
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.04985042,  0.02882229, -0.03625415, -0.03165979,  0.06049283,
        0.01207791,  0.04722737,  0.01984878, -0.03026265,  0.04485954], dtype=float32)
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.04985042,  0.02882229, -0.03625415, -0.03165979,  0.06049283,
        0.01207791,  0.04722737,  0.01984878, -0.03026265,  0.04485954], dtype=float32)
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.02596745,  0.01475067, …
Run Code Online (Sandbox Code Playgroud)

python random gensim word2vec word-embedding

6
推荐指数
3
解决办法
3421
查看次数

微调Word嵌入如何工作?

我一直在阅读一些带有深度学习论文的NLP,并发现微调似乎是一个简单但却令人困惑的概念.这里提出了同样的问题,但仍然不太清楚.

Y. Kim,"用于句子分类的卷积神经网络"KS Tai,R.Socher,以及CD Manning,"改进树的语义表示"等论文所述,将预训练的单词嵌入微调到特定于任务的单词嵌入.- 结构化的长期短期记忆网络,"只是简单地提一下,没有详细说明.

我的问题是:

使用word2vec或Glove生成的Word嵌入作为预训练的单词向量用作(X)下游任务的输入要素,如解析或情感分析,这意味着那些输入向量插入到某个特定任务的新神经网络模型中,同时训练这个新模型,不知何故我们可以获得更新的特定于任务的单词嵌入.

但据我所知,在训练过程中,反向传播的作用是更新(W)模型的权重,它不会改变输入特征(X),那么原始单词嵌入的精确程度如何?这些微调的载体来自哪里?

machine-learning deep-learning word-embedding

6
推荐指数
1
解决办法
3122
查看次数

word2vec - 什么是最好的?添加,连接或平均单词向量?

我正在研究一种复发语言模型.要学习可用于初始化我的语言模型的单词嵌入,我使用的是gensim的word2vec模型.训练之后,word2vec模型为词汇表中的每个单词保存两个向量:单词嵌入(输入/隐藏矩阵的行)和上下文嵌入(隐藏/输出矩阵的列).

作为概括这个帖子有这两个嵌入矢量组合至少三种常用的方法:

  1. 总结每个单词的上下文和单词向量
  2. 求和和求平均值
  3. 连接上下文和单词向量

但是,我找不到关于最佳策略的适当论文或报告.所以我的问题是:

  1. 是否对向量求和,平均或连接有共同的解决方案吗?
  2. 或者最好的方法完全取决于相关任务?如果是这样,什么策略最适合单词级语言模型?
  3. 为什么要结合载体?为什么不对每个单词使用"原始"单词嵌入,即包含在输入和隐藏神经元之间的权重矩阵中的单词嵌入.

相关(但未答复)的问题:

python gensim word2vec language-model word-embedding

6
推荐指数
1
解决办法
7634
查看次数

使用 spaCy 将词向量映射到最相似/最接近的词

我正在使用 spaCy 作为主题建模解决方案的一部分,并且我需要将派生词向量映射到词向量词汇表中的“最接近”或“最相似”词。

我看到 gensim 有一个函数 (WordEmbeddingsKeyedVectors.similar_by_vector) 来计算这个,但我想知道 spaCy 是否有这样的东西来将向量映射到其词汇表 (nlp.vocab) 中的单词?

nlp word2vec spacy word-embedding

6
推荐指数
3
解决办法
3456
查看次数

如何使用BERT找到最接近向量的单词

我正在尝试使用 BERT 获取给定词嵌入的文本表示(或最接近的词)。基本上我试图获得与 gensim 类似的功能:

>>> your_word_vector = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
>>> model.most_similar(positive=[your_word_vector], topn=1))
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经能够使用bert-as-service生成上下文词嵌入,但无法弄清楚如何获得与此嵌入最接近的词。我使用了预训练的 bert 模型(uncased_L-12_H-768_A-12)并且没有做任何微调。

nlp word-embedding bert-language-model

6
推荐指数
2
解决办法
4995
查看次数

PyTorch:将词向量加载到字段词汇表与嵌入层中

我从 Keras 转到 PyTorch。我想使用 GloVe 向量创建一个 PyTorch 嵌入层(大小为 的矩阵V x D,其中V是词汇单词索引,D是嵌入向量维度),但对所需的步骤感到困惑。

在 Keras 中,您可以通过让 Embedding 层构造函数采用参数来加载 GloVe 向量weights

# Keras code.
embedding_layer = Embedding(..., weights=[embedding_matrix])
Run Code Online (Sandbox Code Playgroud)

在查看 PyTorch 和 TorchText 库时,我发现嵌入应该加载两次,一次在 a 中Field,然后在一个Embedding层中再次加载。这是我找到的示例代码:

# PyTorch code.

# Create a field for text and build a vocabulary with 'glove.6B.100d'
# pretrained embeddings.
TEXT = data.Field(tokenize = 'spacy', include_lengths = True)

TEXT.build_vocab(train_data, vectors='glove.6B.100d')


# Build …
Run Code Online (Sandbox Code Playgroud)

python machine-learning word-embedding pytorch

6
推荐指数
1
解决办法
5975
查看次数

最新的预训练多语言词嵌入

有没有最新的预训练多语言词嵌入(多种语言联合映射到同一个向量空间)?

我查看了以下内容,但它们不符合我的需求:

  1. FastText / MUSE ( https://fasttext.cc/docs/en/aligned-vectors.html ):这个似乎太旧了,并且词向量不使用子词/词片信息。
  2. LASER(https://github.com/yannvgn/laserembeddings):我现在正在使用这个,它使用子词信息(通过 BPE),但是,建议不要将其用于单词嵌入,因为它旨在嵌入句子(https://github.com/facebookresearch/LASER/issues/69)。
  3. BERT 多语言( https://huggingface.co/transformers/pretrained_models.html中的 bert-base-multilingual-uncased ):它是上下文化嵌入,可用于嵌入句子,并且似乎不擅长嵌入没有上下文的单词。

这是我试图解决的问题:

我有一个公司名称列表,可以是任何语言(主要是英语),并且我有一个英文关键字列表,用于衡量给定公司名称与关键字的接近程度。现在我有一个简单的关键字匹配解决方案,但我想使用预训练的嵌入来改进它。正如您在以下示例中看到的,存在几个挑战:

  1. 关键字和品牌名称不是用空格分隔的(现在我使用包“wordsegment”将单词拆分为子词),因此嵌入子词信息应该会有很大帮助
  2. 关键字列表并不广泛,公司名称可能采用不同的语言(这就是我想使用嵌入的原因,因为“足球”接近“足球”)

公司名称示例:“cheapfootball ltd.”、“wholesalefootball ltd.”、“footballer ltd.”、“soccershop ltd.”

关键词示例:“足球”

nlp word-embedding pre-trained-model fasttext bert-language-model

6
推荐指数
1
解决办法
6612
查看次数

BERT 文档嵌入

我正在尝试使用 BERT 进行文档嵌入。我使用的代码是两个来源的组合。我使用BERT Document Classification Tutorial with CodeBERT Word Embeddings Tutorial。下面是代码,我将每个文档的前 510 个令牌提供给 BERT 模型。最后,我将 K 均值聚类应用于这些嵌入,但每个聚类的成员完全无关。我想知道这怎么可能。也许我的代码有问题。如果您查看我的代码并判断它是否有问题,我将不胜感激。我使用 Google colab 来运行此代码。

# text_to_embedding function
import torch
from keras.preprocessing.sequence import pad_sequences

def text_to_embedding(tokenizer, model, in_text):
    '''
    Uses the provided BERT 'model' and 'tokenizer' to generate a vector
    representation of the input string, 'in_text'.

    Returns the vector stored as a numpy ndarray.
    '''

    # ===========================
    #   STEP 1: Tokenization
    # ===========================

    MAX_LEN = 510

    # 'encode' will:
    #  (1) …
Run Code Online (Sandbox Code Playgroud)

embedding python-3.x word-embedding bert-language-model

6
推荐指数
1
解决办法
3585
查看次数

使用 T5 的句子嵌入

我想使用最先进的 LM T5 来获取句子嵌入向量。我找到了这个存储库https://github.com/UKPLab/sentence-transformers 据我所知,在 BERT 中我应该将第一个标记作为 [CLS] 标记,它将是句子嵌入。在此存储库中,我在 T5 模型上看到相同的行为:

cls_tokens = output_tokens[:, 0, :]  # CLS token is first token
Run Code Online (Sandbox Code Playgroud)

这种行为正确吗?我从 T5 中获取了编码器并用它编码了两个短语:

"I live in the kindergarden"
"Yes, I live in the kindergarden"
Run Code Online (Sandbox Code Playgroud)

它们之间的余弦相似度仅为“0.2420”。

我只需要了解句子嵌入是如何工作的——我应该训练网络来寻找相似性以获得正确的结果吗?或者我的基础预训练语言模型就足够了?

python nlp word-embedding pytorch

6
推荐指数
1
解决办法
5178
查看次数

Word Mover Distance 和 Bert-Embedding 的文档相似度

我正在尝试使用基于Google 的 BERT 的词嵌入来计算两个任意文档的文档相似度(最近邻)。为了从 Bert 获得词嵌入,我使用bert-as-a-service。文档相似度应该基于 Word-Mover-Distance 和 python wmd-relax包。

我以前的尝试是从wmd-relaxgithub 存储库中的本教程开始的:https : //github.com/src-d/wmd-relax/blob/master/spacy_example.py

import numpy as np
import spacy
import requests
from wmd import WMD
from collections import Counter
from bert_serving.client import BertClient

# Wikipedia titles
titles = ["Germany", "Spain", "Google", "Apple"]

# Standard model from spacy
nlp = spacy.load("en_vectors_web_lg")

# Fetch wiki articles and prepare as specy document
documents_spacy = {}
print('Create spacy document')
for title in titles:
    print("... fetching", …
Run Code Online (Sandbox Code Playgroud)

python nlp similarity word-embedding

5
推荐指数
1
解决办法
3066
查看次数