从法语文本中检测人名/实体名称的最佳方法

Best way to detect person name / entity name from French text

我正在尝试从法语文本中检测人名或 company/institute 姓名。我尝试了以下方法,结果一点也不好。

import spacy

# or any of the other two models fr_core_news_sm, fr_core_news_lg
nlp = spacy.load("fr_core_news_md")  

text ="""Tous les vents,
Balayent les mots de coeur
Moi, j'suis comme le vent:
L'esprit à mille à l'heure,
Je juge sans doute trop vite
C'est ok, tant pis
C'est juste là, je m'agite
Je grandis, l'amour aussi
C'est au gré du vent
Que j'aime vagabonder,
Moi, je suis comme le vent
J'embrasse toute une armée
De rêves et de bleuets,
Me plonger dedans
Je sais ce que je sais 
Rapport de: Andre STE-GERMAINE,
"""

doc_fr = nlp_fr(text_fr)

嗯,标记了

  1. “Balayent as PERSON 不应该,
  2. Rapport de: Andre STE-GERMAINE','MISC' 应该是 PERSON

我不确定 NLTK 是否可以提供帮助。

是否有其他更好的工具来帮助完成这项任务?

谢谢。

您选择的模型是根据可能不代表您自己的数据集的选定数据进行训练的。您可以通过提供更多带注释的数据来微调模型以创建更好的重叠。

重新格式化文本数据也应该提高模型的性能,因为提供的文本有点难以被 Spacy 模型理解。句子被分解成片段而不是完整的可读文本,单词被大写,即使它们不应该大写。

我不会说法语,但对您的文本进行了一些重新格式化,似乎已经获得了更好的结果。

import spacy
nlp = spacy.load("fr_core_news_md")
text ="""Tous les vents, balayent les mots de coeur.
Moi, j'suis comme le vent: L'esprit à mille à l'heure, je juge sans doute trop vite.
C'est ok, tant pis.
C'est juste là, je m'agite.
Je grandis, l'amour aussi.
C'est au gré du vent.
Que j'aime vagabonder, moi, je suis comme le vent.
J'embrasse toute une armée de rêves et de bleuets,
Me plonger dedans je sais ce que je sais.
Rapport de: Andre STE-GERMAINE,
"""
doc = nlp(text)
for ent in doc.ents:
    print(ent.text, '-',ent.label_)

这导致:

Andre STE - PER

我在对此 post 的评论中解释了为什么这个人没有被完全标记,但让我们在这里再做一次。本文的最后一句话并不是 Spacy NER 可以准确执行的句子,因为它不是经过训练的真实句子。名字也是全大写,这对于任何人的姓氏来说都是不正常的,这也更加混淆了算法。

总而言之,为其提供经过训练的数据,重新格式化文本,这将显着提高性能。