2

我正在尝试遵循此处的示例:https ://github.com/explosion/spaCy/tree/master/bin/wiki_entity_linking 。但我只是对训练数据中的内容感到困惑。都是维基百科的吗?假设我只需要一些实体的训练数据。例如,E1、E2 和 E3。该示例是否允许我仅指定几个我想消除歧义的实体?

4

1 回答 1

3

[更新] 请注意,此代码库已移至https://github.com/explosion/projects/tree/master/nel-wikipedia (spaCy v2)

如果您按照https://github.com/explosion/spaCy/tree/master/bin/wiki_entity_linking中提供的方式运行脚本,它们确实会从 Wikipedia 创建一个训练数据集,您可以使用它来训练通用模型。

如果你想训练一个更有限的模型,当然你可以输入你自己的训练集。可以在此处找到一个玩具示例:https ://github.com/explosion/spaCy/blob/master/examples/training/train_entity_linker.py ,您可以在其中推断训练数据的格式:

def sample_train_data():
    train_data = []

    # Q2146908 (Russ Cochran): American golfer
    # Q7381115 (Russ Cochran): publisher

    text_1 = "Russ Cochran his reprints include EC Comics."
    dict_1 = {(0, 12): {"Q7381115": 1.0, "Q2146908": 0.0}}
    train_data.append((text_1, {"links": dict_1}))

    text_2 = "Russ Cochran has been publishing comic art."
    dict_2 = {(0, 12): {"Q7381115": 1.0, "Q2146908": 0.0}}
    train_data.append((text_2, {"links": dict_2}))

    text_3 = "Russ Cochran captured his first major title with his son as caddie."
    dict_3 = {(0, 12): {"Q7381115": 0.0, "Q2146908": 1.0}}
    train_data.append((text_3, {"links": dict_3}))

    text_4 = "Russ Cochran was a member of University of Kentucky's golf team."
    dict_4 = {(0, 12): {"Q7381115": 0.0, "Q2146908": 1.0}}
    train_data.append((text_4, {"links": dict_4}))

    return train_data

此示例train_entity_linker.py向您展示了模型如何学习区分“Russ Cochran”高尔夫球手 ( Q2146908) 与发布者 ( Q7381115) 的歧义。请注意,这只是一个玩具示例:一个实际的应用程序需要一个更大的知识库和准确的先验频率(正如您可以通过运行 Wikipedia/Wikidata 脚本获得的那样),当然您需要更多的句子和词汇种类来期望机器学习模型,用于拾取适当的线索并有效地泛化到看不见的文本。

于 2020-02-06T15:36:33.127 回答