fasttext 预训练句子相似度

Posted

技术标签:

【中文标题】fasttext 预训练句子相似度【英文标题】:fasttext pre trained sentences similarity 【发布时间】:2020-03-29 16:54:50 【问题描述】:

我想使用 fasttext 预训练模型来计算相似度 一组句子之间的一个句子。 谁能帮我? 最好的方法是什么?

我通过训练一个 tfidf 模型来计算句子之间的相似度。写这样的代码。 是否可以更改它并使用 fasttext 预训练模型?例如使用向量来训练一个 tfidf 模型?

def generate_tfidf_model(sentences):
    print("generating TfIdf model")
    texts = [[sentence for sentence in doc.split()] for doc in sentences]
    dictionary = gensim.corpora.Dictionary(texts)    
    feature_cnt = len(dictionary.token2id)
    mycorpus = [dictionary.doc2bow(doc, allow_update=True) for doc in texts]
    tfidf_model = gensim.models.TfidfModel(mycorpus)
    index = gensim.similarities.SparseMatrixSimilarity(tfidf_model[mycorpus]
                                                        , num_features = feature_cnt)
    return tfidf_model, index, dictionary

def query_search(query, tfidf_model, index, dictionary):
    query = normal_stemmer_sentence(query)
    query_vector = dictionary.doc2bow(query.split())
    similarity = index[tfidf_model[query_vector]]
    return similarity

【问题讨论】:

【参考方案1】:

如果你可以使用词嵌入,我认为计算 TfIdf 是不必要的。

一个简单但有效的方法包括:

    使用针对您的语言的预训练词嵌入计算代表您的两个字符串的两个向量(例如 FastText - get_sentence_vector https://fasttext.cc/docs/en/python-module.html#model-object)

    计算两个向量之间的余弦相似度(1:相等的字符串;0:真的 不同的字符串;阅读https://masongallo.github.io/machine/learning,/python/2016/07/29/cosine-similarity.html)。

【讨论】:

谢谢,我使用 Word Mover 的距离相似度来使用它。一些代码如github.com/Gagan-K-Shetty/Word-movers-similarity-/blob/master/…

以上是关于fasttext 预训练句子相似度的主要内容,如果未能解决你的问题,请参考以下文章

论文泛读85基于上下文的句子相似度

Wordvec_句子相似度

如何测量预训练模型(例如 vgg、resnet...)提取的图像特征之间的语义相似度?

给定单词相似度推断句子相似度

原创:Siamese LSTM解决句子相似度(理论篇)

Java之词义相似度计算(语义识别词语情感趋势词林相似度拼音相似度概念相似度字面相似度)