for*_*man 5 python-3.x spacy entity-linking
我对词向量的工作原理感到非常困惑,特别是关于 spacy 的实体链接(https://spacy.io/usage/training#entity-linker)。
将实体添加到知识库时,参数之一是entity_vector。你怎么得到这个?我试过做
nlp = spacy.load('en_core_web_sm')
kb = KnowledgeBase(vocab = nlp.vocab, entity_vector_length = 96)
for n in m_yentities:
kb.add_entity(entity = n, freq = ___, entity_vector = **nlp(n).vector**)
Run Code Online (Sandbox Code Playgroud)
** 代码给了我长度为 96 的向量,所以这就是我使用的entity_vector_length,尽管在示例中他们使用 3。我只是想知道我的方法是否可以,但我对此感到有点困惑。
我们必须更好地记录这一点,但让我尝试解释一下:知识库存储预训练的实体向量。这些向量是实体描述的浓缩版本。虽然这样的描述可以是一个或多个单词(长度不同),但其向量应始终具有固定大小。长度为 3 是不现实的,像 64 或 96 这样的长度更有意义。如果我们有了这个,每个实体描述都会映射到 96D 空间中,这样我们就可以在更下游的神经网络中使用这些描述。
如您链接的示例所示,您可以使用EntityEncoder创建多词描述到 96D 向量的映射,并且您可以调整嵌入的长度。更大的嵌入意味着您可以捕获更多信息,但也需要更多存储空间。
为实体描述创建这些嵌入向量是在创建知识库时作为离线步骤完成的。然后,当您实际上想要训练神经网络来进行实体链接时,该网络的大小将取决于您为描述嵌入选择的大小。
直观上,“实体嵌入”是实体描述中所有单词的单词向量的一种平均压缩版本。
另外,我不知道您是否见过这个,但是如果您正在寻找一种更现实的方式来运行实体链接,您可以在此处查看用于处理维基百科和维基数据的脚本。