来自预训练的word2vec向量的上下文词嵌入



我想创建包含上下文的词嵌入因此,单词Jaguar[动物]的向量将不同于单词Jaguar[汽车品牌]

如你所知,word2vec只给出给定单词的一种表示,我想采用已经预训练的嵌入并使用上下文来丰富它们。到目前为止,我已经尝试了一种简单的方法,即取单词和类别单词的平均向量,例如:

现在我想尝试创建和训练一个神经网络,它可以接收整个句子,例如

  1. 捷豹F-PACE是一款出色的SUV跑车。
  2. 在猫科动物中,只有老虎和狮子比美洲虎大。

然后它将承担文本分类的任务(我有一个包含几个类别的数据集,如动物,汽车等),但结果将是单词jaguar的新表示,但在不同的上下文中,因此是两种不同的嵌入。

有谁知道我怎么才能创建这样一个网络吗?我不掩饰我是一个初学者,不知道如何去做。

如果您已经能够在word2vec外部执行语义消歧,那么您可以更改单词标记以反映您的外部判断。例如,将令牌'jaguar'的某些外观更改为'jaguar*car',其他外观更改为'jaguar*animal'。继续进行正常的word2vec训练将得到两个不同的标记两个不同的词向量。

如果你希望训练自己发现这些,正如~Erwan在评论中提到的,这似乎是一个开放的研究问题,没有一个标准的或现成的解决方案,初学者可以随意使用。

我曾经看到过一篇论文(大约在原始word2vec论文的时间,但现在找不到链接),它试图通过首先进行传统的多义词遗忘训练来以word2vec兼容的方式做到这一点。然后,对于单词X的每次出现,通过在一定数量的位置内的邻居的单词向量的某种组合对其周围的上下文建模。(这本身非常类似于在word2vec的CBOW模式中准备上下文向量。)对所有上下文的集合执行一些聚类,以得到一些交替感觉的概念——每个感觉与一个集群相关联。然后,在原始语料库的后续传递中,将单词标记替换为那些也反映其附近上下文集群的单词标记。(例如:'jaguar'可能被'jaguar*1''jaguar*2'等取代,这是基于上下文所建议的离散聚类。)然后,重复(或继续)word2vec训练以获得特定意义的单词向量。当然,问题在于如何定义上下文的细节,如何推断集群,以及棘手的边缘情况(可能文本的作者自己正在部署多种感官)。

在word2vec模型中建模或推断一词多义的其他一些有趣的努力:

  • "词义的线性代数结构";
  • "一种学习多义词嵌入的简单方法">

但是在上面,我还没有看到这些技术以一种很容易插入到另一个项目的形式被广泛实现/采用。

最新更新