1

我正在尝试构建一个假新闻分类器,我在这个领域很新。我有一个名为“title_1_en”的列,其中包含假新闻的标题和另一个名为“title_2_en”的列。有3个目标标签;如果“title_2_en”列中的新闻标题同意、不同意或与第一列中的标题无关,则为“同意”、“不同意”和“不相关”。

在将句子的单词转换为向量后,我尝试计算两个标题之间的基本余弦相似度。这导致了余弦相似度得分,但这需要大量改进,因为根本没有考虑同义词和语义关系。

def L2(vector):
    norm_value = np.linalg.norm(vector)
    return norm_value

def Cosine(fr1, fr2):
    cos = np.dot(fr1, fr2)/(L2(fr1)*L2(fr2))
    return cos
4

1 回答 1

1

这里最重要的是如何将两个句子转换为向量。有多种方法可以做到这一点,最天真的方法是:

  • 将每个单词转换为向量——这可以使用标准的预训练向量来完成,例如 word2vec 或 GloVe。
  • 现在每个句子都只是一袋词向量。这需要转换为单个向量,即将一个完整的句子文本映射到一个向量。也有很多方法可以做到这一点。首先,只需取句子中向量包的平均值。
  • 计算两个句子向量之间的余弦相似度。

Spacy 的相似性 是一个很好的起点,它采用了平均技术。从文档:

默认情况下,spaCy 使用平均向量算法,如果可用,则使用预训练的向量(例如 en_core_web_lg 模型)。如果不是,则使用由标注器、解析器和实体识别器生成的 doc.tensor 属性。这就是 en_core_web_sm 模型提供相似之处的方式。通常基于 .tensor 的相似性会更具结构性,而词向量相似性会更具话题性。您还可以自定义 .similarity() 方法,以提供您自己的相似度函数,可以使用监督技术对其进行训练。

于 2019-04-19T11:29:36.463 回答