Python 3.x 空间实体链接-字向量

Python 3.x 空间实体链接-字向量,python-3.x,spacy,entity-linking,Python 3.x,Spacy,Entity Linking,我对单词向量是如何工作的非常困惑,特别是关于spacy的实体链接() 将实体添加到知识库时,其中一个参数是实体向量。你是怎么得到这个的?我已经试过了 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_vect

我对单词向量是如何工作的非常困惑,特别是关于spacy的实体链接()

将实体添加到知识库时,其中一个参数是实体向量。你是怎么得到这个的?我已经试过了

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**)

**代码给了我长度为96的向量,这就是我用于
实体向量长度的向量,尽管在示例中他们使用了3。我只是想知道我的方法是否可行,但我对此感到困惑。

我们必须更好地记录这一点,但让我试着解释一下:知识库存储预训练的实体向量。这些向量是实体描述的浓缩版本。虽然这样的描述可以是一个或多个单词(不同的长度),但其向量应该始终具有固定的大小。长度为3是不现实的,64或96更合理。如果我们有,每个实体描述都映射到96D空间,这样我们就可以在更下游的神经网络中使用这些描述

如您链接的中所示,您可以使用创建多词描述到96D向量的映射,并且可以调整嵌入的长度。更大的嵌入意味着您可以捕获更多的信息,但也需要更多的存储

在创建知识库时,为实体描述创建这些嵌入向量是作为脱机步骤完成的。然后,当您实际想要训练一个神经网络来进行实体链接时,该网络的大小将取决于您为描述嵌入选择的大小

直观地说,“实体嵌入”是实体描述中所有单词的词向量的一种平均、浓缩版本


另外,我不知道您是否看到过这一点,但如果您正在寻找一种更现实的运行实体链接的方法,您可以查看处理Wikipedia和Wikidata的脚本。

谢谢!但如果我没有对维基数据做任何事情呢?例如,我只想从csv中读取实体作为知识库中的实体,然后给它们别名。我能够创建一个知识库,并使用“nlp(n).vector”表示“entity\u vector”,其中nlp='en\u core\u web\u sm',n是一个实体的名称。这看起来合理吗?哦,那是一个完全不同的故事。当前EL模型的基本假设是,实体的描述在语义上与使用实体的句子/上下文相似。简单的回答是:您需要描述(以及它们各自的嵌入)当前EL algo才能工作。您可以从Wikidata或其他地方获取这些描述。好的,因此需要这些描述,实体_向量是描述的向量表示,而不是实际实体,对吗?谢谢!最后一个问题-在wikipedia_pretrain_kb.py文件中,它有多行,例如“entity_defs_path=loc_entity_defs if loc_entity_defs else output_dir/entity_defs_path”…这给了我一个错误,告诉我不能将字符串除以字符串。这到底应该做什么?啊,“/”语法来自pathlib,我发现这是一个非常直观的库,可以以独立于平台的方式定义路径。脚本被设置为期望路径变量,并将对其进行解析,但如果您只是复制粘贴其中的一部分,则可能需要执行类似于
p=Path('yourlocation')
的操作,然后您可以将字符串连接到它,结果对象也将是
Path