我正在尝试建立一个假新闻分类器,我在这个领域很新。我有一个专栏“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
这里最重要的是你如何将两个句子转换成向量。有多种方法可以做到这一点,最天真的方式是:
Spacy's similarity是一个开始平均技术的好地方。来自文档:
默认情况下,spaCy使用平均向量算法,使用预先训练的向量(如果可用)(例如en_core_web_lg模型)。如果不是,则使用doc.tensor属性,该属性由标记器,解析器和实体识别器生成。这就是en_core_web_sm模型提供相似之处的方式。通常,基于.tensor的相似性将更具结构性,而单词矢量相似性将更具局部性。您还可以自定义.similarity()方法,以提供您自己的相似度函数,该函数可以使用监督技术进行训练。