如何找到两首歌歌词之间的余弦相似度?

问题描述 投票:0回答:1

我和我的朋友正在做一个关于歌曲推荐的 NLP 项目,我们最初的计划是根据随机输入的语料库(来自文献等)给出一个歌词最相似的推荐歌曲播放列表。 但是我们真的没有具体的想法如何实现它,所以现在我们正在努力寻找与随机歌词相似的歌词作为输入。

所以我们使用句子 BERT 模型(sbert)和余弦相似度来查找歌曲之间的相似度,但输出数字似乎有意义,足以找到最相似的歌词。 有没有其他方法可以改进这种方法?我们想使用 BERT 模型,所以请尽可能提出任何可以在 BERT 之上使用的建议,但是如果有任何其他模型应该用来代替 BERT,我也想知道! 请帮助我们..:'(

nlp stanford-nlp bert-language-model cosine-similarity nlp-question-answering
1个回答
0
投票

计算余弦相似度

您可以使用

util.cos_sim(embeddings1, embeddings2)
包中的
sentence-transformers
来计算两个嵌入的余弦相似度。

或者,您也可以将

scikit-learn
sklearn.metrics.pairwise.cosine_similarity(X, Y, dense_output=True)

一起使用

表示和模型的改进

由于您想要在 BERT 之上提供建议,因此您可以考虑 RoBERTa 以及 BERT 的 Wordpeice 分词器上的分词器字节对编码。将 roberta-base 模型视为 HuggingFace

transformers
包中的特征提取器。

from transformers import RobertaTokenizer, RobertaModel
tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
model = RobertaModel.from_pretrained('roberta-base')
text = "song lyrics in text."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)

分词器在语法和语义的各种文本粒度级别上工作。如果针对正确的任务和模型进行微调,每个都可以产生不同且更好的结果。

您可以考虑的其他一些分词器是: 字符级 BPE、字节级 BPE、WordPiece(BERT 使用此)、SentencePiece 和带有 LM 字符的 Unigram 分词器。

还可以考虑探索 HuggingFace 官方 Tokenizer Library 指南这里.

© www.soinside.com 2019 - 2024. All rights reserved.