【问题标题】:Using Gensim Fasttext model with LSTM nn in keras在 keras 中使用带有 LSTM nn 的 Gensim Fasttext 模型
【发布时间】:2020-10-25 20:06:56
【问题描述】:

我已经使用 Gensim 在非常短的句子(最多 10 个单词)的语料库上训练了 fasttext 模型。我知道我的测试集包括我的训练语料库中没有的单词,即我的语料库中的一些单词就像“Oxytocin”、“Lexitocin”、“Ematrophin”、“Betaxitocin”

给定测试集中的一个新词,fasttext 可以很好地使用字符级别 n-gram 生成一个与训练集中其他相似词具有高余弦相似度的向量

如何将 fasttext 模型合并到 LSTM keras 网络中,而不会将 fasttext 模型丢失为词汇中的向量列表?因为那样的话,即使 fasttext 做得很好,我也不会处理任何 OOV。

有什么想法吗?

【问题讨论】:

    标签: tensorflow keras nlp gensim word-embedding


    【解决方案1】:

    这里是在 LSTM Keras 网络中合并 fasttext 模型的过程

    # define dummy data and precproces them
    
    docs = ['Well done',
            'Good work',
            'Great effort',
            'nice work',
            'Excellent',
            'Weak',
            'Poor effort',
            'not good',
            'poor work',
            'Could have done better']
    
    docs = [d.lower().split() for d in docs]
    
    # train fasttext from gensim api
    
    ft = FastText(size=10, window=2, min_count=1, seed=33)
    ft.build_vocab(docs)
    ft.train(docs, total_examples=ft.corpus_count, epochs=10)
    
    # prepare text for keras neural network
    
    max_len = 8
    
    tokenizer = tf.keras.preprocessing.text.Tokenizer(lower=True)
    tokenizer.fit_on_texts(docs)
    
    sequence_docs = tokenizer.texts_to_sequences(docs)
    sequence_docs = tf.keras.preprocessing.sequence.pad_sequences(sequence_docs, maxlen=max_len)
    
    # extract fasttext learned embedding and put them in a numpy array
    
    embedding_matrix_ft = np.random.random((len(tokenizer.word_index) + 1, ft.vector_size))
    
    pas = 0
    for word,i in tokenizer.word_index.items():
        
        try:
            embedding_matrix_ft[i] = ft.wv[word]
        except:
            pas+=1
    
    # define a keras model and load the pretrained fasttext weights matrix
    
    inp = Input(shape=(max_len,))
    emb = Embedding(len(tokenizer.word_index) + 1, ft.vector_size, 
                    weights=[embedding_matrix_ft], trainable=False)(inp)
    x = LSTM(32)(emb)
    out = Dense(1)(x)
    
    model = Model(inp, out)
    
    model.predict(sequence_docs)
    

    如何处理看不见的文字

    unseen_docs = ['asdcs work','good nxsqa zajxa']
    unseen_docs = [d.lower().split() for d in unseen_docs]
    
    sequence_unseen_docs = tokenizer.texts_to_sequences(unseen_docs)
    sequence_unseen_docs = tf.keras.preprocessing.sequence.pad_sequences(sequence_unseen_docs, maxlen=max_len)
    
    model.predict(sequence_unseen_docs)
    

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 2018-10-14
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多