python-3.x - spacy 实体链接 - 词向量
问题描述
我对词向量的工作方式感到非常困惑,特别是关于 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**)
** 代码给了我长度为 96 的向量,所以这就是我使用的entity_vector_length
,尽管在示例中他们使用 3。我只是想知道我的方法是否可以,但我对此有点困惑。
解决方案
我们必须更好地记录这一点,但让我尝试解释一下:知识库存储预训练的实体向量。这些向量是实体描述的浓缩版本。虽然这样的描述可以是一个或多个单词(长度可变),但它的向量应该始终具有固定大小。长度为 3 是不现实的,像 64 或 96 这样的长度更有意义。如果我们有,每个实体描述都映射到 96D 空间中,这样我们就可以在更下游的神经网络中使用这些描述。
如您链接的示例所示,您可以使用EntityEncoder创建多词描述到 96D 向量的映射,并且您可以使用嵌入的长度。更大的嵌入意味着您可以捕获更多信息,但也需要更多存储空间。
为实体描述创建这些嵌入向量是在创建知识库时作为离线步骤完成的。然后,当您真正想要训练神经网络进行实体链接时,该网络的大小将取决于您为描述嵌入选择的大小。
直观地说,“实体嵌入”是实体描述中所有词的词向量的一种平均、浓缩版本。
另外,我不知道您是否看过这个,但如果您正在寻找一种更现实的方式来运行实体链接,您可以在此处查看用于处理 Wikipedia 和 Wikidata 的脚本。
推荐阅读
- laravel - 上传图片在本地主机上完美运行,在实时站点上不起作用(谷歌应用引擎和 laravel)
- python - 具有动态估计测量方差的卡尔曼滤波器
- java - 使用 PrintWriter 和 File 获取文件未找到异常
- reactjs - 如何将 React 应用程序集成到现有的 asp.net 核心应用程序中?
- c++ - 是否有一种代码密集度较低的方法来使用非默认构造函数初始化数组?
- firemonkey - 有没有办法使用 Delphi 10.3 FMX TCalendar(或类似组件)选择/突出显示日期范围/系列?
- node.js - 使用 Node、SocketIO 和 Redis 将用户添加到连接到不同服务器的房间
- python - Errors: Module 'pygame' has no 'init' member, and others
- vue.js - Vue.js 自动完成
- python - 地面实况拟合比对噪声数据的交叉验证拟合更差?