Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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_Keras_Nlp_Word2vec - Fatal编程技术网

Python word2Vec和缩写

Python word2Vec和缩写,python,keras,nlp,word2vec,Python,Keras,Nlp,Word2vec,我正在进行文本分类任务,其中我的数据集包含许多缩写和专有名词。例如:米尔卡巧克力。酒吧 我的想法是使用双向LSTM模型和word2vec嵌入。 我的问题是如何给字典里没有的单词编码? 我通过将预先训练的向量与随机初始化的向量合并,部分解决了这个问题。以下是我的实现: import gensim from gensim.models import Word2Vec from gensim.utils import simple_preprocess from gensim.models.keye

我正在进行文本分类任务,其中我的数据集包含许多缩写和专有名词。例如:米尔卡巧克力。酒吧 我的想法是使用双向LSTM模型和word2vec嵌入。 我的问题是如何给字典里没有的单词编码? 我通过将预先训练的向量与随机初始化的向量合并,部分解决了这个问题。以下是我的实现:

import gensim
from gensim.models import Word2Vec
from gensim.utils import simple_preprocess

from gensim.models.keyedvectors import KeyedVectors

word_vectors = KeyedVectors.load_word2vec_format('ru.vec', binary=False, unicode_errors='ignore')

EMBEDDING_DIM=300
vocabulary_size=min(len(word_index)+1,num_words)
embedding_matrix = np.zeros((vocabulary_size, EMBEDDING_DIM))
for word, i in word_index.items():
    if i>=num_words:
        continue
    try:
        embedding_vector = word_vectors[word]
        embedding_matrix[i] = embedding_vector
    except KeyError:
        embedding_matrix[i]=np.random.normal(0,np.sqrt(0.25),EMBEDDING_DIM)

def LSTMModel(X,words_nb, embed_dim, num_classes):
    _input = Input(shape=(X.shape[1],))
    X = embedding_layer = Embedding(words_nb,
                            embed_dim,
                            weights=[embedding_matrix],
                            trainable=True)(_input)
   X = The_rest_of__the_LSTM_model()(X)
您认为,允许模型调整嵌入权重是一个好主意吗?
你能告诉我,我怎样给像choc这样的单词编码吗?显然,这个缩写代表巧克力

如果培训中没有足够大的语料库,调整word2vec嵌入通常不是一个好主意。为了澄清这一点,举一个例子,你的语料库有电视,但没有电视。即使他们可能有word2vec嵌入,在培训后,只有电视将被调整,而不是电视。所以你破坏了word2vec的信息

要解决此问题,您有3个选项:

您可以让上层的LSTM根据上下文来确定单词的含义。例如,我喜欢巧克力。LSTM可以确定它是一个对象。这一点可以通过以下例子加以证明。 简单的选项,预处理,在传递到模型之前尽可能规范化。拼写检查器通常能很好地捕获这些信息,而且速度非常快。 您可以使用字符编码和side word2vec。这在许多问答模型中都有应用,例如字符表示与word2vec合并,因此您可以获得一些与字符相关的信息。在这种情况下,巧克力可能类似于巧克力。
一种方法是添加一个函数,将缩写映射到最可能相关的现有向量,即:将choc向量初始化为w2v中的巧克力向量

word_in_your_embedding_matrix[:len(abbreviated_word)]
有两种可能的情况:

只有一个候选词以与缩写词相同的n个字母开头,然后,您可以使用该向量初始化缩写词嵌入。 有多个项目以与缩写相同的n个字母开头,您可以使用平均值作为yout初始化向量。
非常感谢,这是一个非常好的帖子。我应该对我的问题加上更详细的描述。我正在研究文本分类,其中目标向量的大小约为30k。你知道选择什么型号吗?