【问题标题】:How to change the format of training data for custom NER model retraining using SpaCy?如何使用 SpaCy 更改自定义 NER 模型再训练的训练数据格式?
【发布时间】:2021-04-08 17:23:23
【问题描述】:

我正在解决这个问题,其中文本数据位于文档文件中,而生成的 5 个标签位于 csv 文件中。所以要训练 spaCy NER 模型,我们必须标记 dtaa 类似的东西:

TRAIN_DATA = [
    ("Who is Shaka Khan?", {"entities": [(7, 17, "PERSON")]}),
    ("I like London and Berlin.", {"entities": [(7, 13, "LOC"), (18, 24, "LOC")]}),
]

但我的数据在 csv 文件中,例如:

我写了一个函数,它将在文本中搜索col query 的第一次出现并添加长度。比如:

train_data = []
for i,index in enumerate(df.index.tolist()):
    row_data = df.iloc[i,:].values.tolist()
    entities = {"entities":[]}
    for file in dir_files:
        if file.split('.')[0] == row_data[0]:
            text = preprocess(textract.process("./Training_data/"+file))
            
            for j,entry in enumerate(row_data[1:]):
                
                if not pd.isna(entry):
                    if isinstance(entry,str): # takes care of null values
                        entities['entities'].append((text.find(str(entry).strip()),len(str(entry)),ent_names[j]))

结果是

{'entities': [(-1, 7, 'Aggrement Value'),
  (-1, 10, 'Aggrement Start Date'),
  (-1, 10, 'Aggrement End Date'),
  (-1, 4, 'Renewal Notice (Days)'),
  (124, 22, 'Party One'),
  (540, 45, 'Party Two')]}

STRING 给了我不错的结果,但我在日期方面有一个很大的问题,因为格式是 12.08.2018,价格是格式 6000.00。我无法直接比较,所以我必须更改价格str(int(price)) 然后匹配。它会起作用,但日期永远不会采用 CSV 中给出的格式。它类似于1stDAY OF SEPTEMBER 2018 TWO THOUSAND EIGHTEEN。我应该如何以格式标记那个?

我尝试使用 Spacy's 内置 NER 以便我可以弄清楚,但它并没有给我很好的结果。

nlp = spacy.load('en_core_web_sm')
doc = nlp(preprocess(text))
displacy.render(nlp(doc.text),style='ent',jupyter=True)

它给了我类似的东西:

我如何标记我的数据,因为如果没有正确标记日期,这一切都是徒劳的,因为无论如何它都不会学会获取日期。 有没有Regular expression RE 或者我看到NLTK POS based Queries to extract NER 给了我们类似的东西:

【问题讨论】:

  • 显示您的输入文本,以当前方法描述您的问题,并显示所需的输出。
  • @Deshwal:如果您觉得我的回答有用,能否将问题标记为已回答?

标签: python regex nlp nltk spacy


【解决方案1】:

如果我正确理解您的问题,您需要可靠地解析大部分以全文形式给出的日期。

要标准化此类日期,您可以尝试使用 dateutilmayapendulumarrow 库之一。您可以找到here

如果您的问题也是在文本中标记日期,它会更加细微,如果 SpaCy / NLTK 不适合您的目的,您将不得不训练这样的模型。理论上你也可以实现一些正则表达式,但这很容易出错并且需要几个月才能完成。 AFAIK,没有可用的可靠实现。

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 2021-07-30
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2023-02-17
    相关资源
    最近更新 更多