簡體   English   中英

這個 for 循環如何在 Spacy 的自定義 NER 訓練代碼中工作?

[英]How does this for loop work in Spacy's custom NER training code?

我正在編寫代碼來訓練 Spacy 的 NER 引擎中的自定義實體。 我一直在理解在線教程中的一小部分代碼。 是教程的鏈接 以下是代碼,我無法理解注釋# add labels下的兩個 for 循環。 我是 python 的新手。

import spacy
################### Train Spacy NER.###########
def train_spacy():
    TRAIN_DATA = convert_dataturks_to_spacy("dataturks_downloaded.json");
    nlp = spacy.blank('en')  # create blank Language class
    # create the built-in pipeline components and add them to the pipeline
    # nlp.create_pipe works for built-ins that are registered with spaCy
    if 'ner' not in nlp.pipe_names:
        ner = nlp.create_pipe('ner')
        nlp.add_pipe(ner, last=True)

    # add labels
    for _, annotations in TRAIN_DATA:
        for ent in annotations.get('entities'):
            ner.add_label(ent[2])

顯然,這個 for 循環正在向 NER 添加自定義標簽。 我的問題是;

  1. 什么是“注釋”,它的數據類型是什么? (我用谷歌搜索了“spacy annotation”,但找不到答案)
  2. 為什么'in'左側有兩個變量,('_'和'annotation')
  3. ent[2] 返回什么? pos 2 是什么?

您的問題大多可以通過了解 function convert_dataturks_to_spacy來回答。 代碼與您正在遵循的教程位於同一存儲庫中。

  1. function 返回一個元組列表,其中每個元組由(text, {"entities": entities}) annotations是每個元組的第二個元素。
  2. 從 output 分配多個變量稱為元組解包。 基本上,for循環是說對於訓練數據中的每個元組,將元組的第一個元素分配給_ ,將第二個元素分配給annotations ,然后做一些事情。 在 python 中, _經常用作一次性變量,即代碼中其他地方未使用但存在於數據中的變量。
  3. ent[2]是被標記實體的 label。 查看代碼,dataturks 中的實體是具有 3 個元素的元組 - 字符串中的開頭 position、字符串中的結尾 position 和 label。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM