Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Имена распознаются как ORG #9

Open
Silverlay opened this issue Apr 5, 2019 · 9 comments
Open

Имена распознаются как ORG #9

Silverlay opened this issue Apr 5, 2019 · 9 comments

Comments

@Silverlay
Copy link

Добрый день,

По какой-то причине имена, отчества определяются как ORG, вместо PERS. Например в

`import spacy

text = "Елена Владимировна, покажите мне монету, которую нашел Александр!"

if name == 'main':
nlp = spacy.load('ru2')
nlp.add_pipe(nlp.create_pipe('sentencizer'), first=True)
doc = nlp(text)

for e in doc.ents:
    print(e, e.label_)`

Результат:

Елена Владимировна ORG Александр ORG

Как это можно победить? В словарях pymorphy2 указаны как PERS

@buriy
Copy link
Owner

buriy commented Apr 5, 2019

Ну, модель NER в ru2 вообще не тренирована... Вы ловите рандомные значения необученной нейросети.
P.S. Если вдруг найдёте большой датасет NER на русском, дайте мне знать, потому что на маленьком датасете будет конечно получше этого работать, но тоже фигня получится.

@rominf
Copy link

rominf commented Apr 6, 2019

ner_rus отсюда: http://docs.deeppavlov.ai/en/master/components/ner.html не то, что надо?

@Silverlay
Copy link
Author

В каком формате нужен датасет и сколько там должно быть элементов в идеале?

@buriy
Copy link
Owner

buriy commented Apr 6, 2019

Если брать имеющиеся русские датасеты, как у Deep Pavlov, то будет высокая точность только на тех данных, что содержатся в датасетах, поскольку обобщение на ненатренированных специально эмбеддингах не очень хорошее. У решения со словарями имён, гео-названий и организаций точность будет сравнимой ( т.е. решение с PhraseMatcher из Spacy, которому просто дают словарь из всех известных организаций -- кстати, можете попробовать ).

У меня есть идеи, как процесс улучшения качества автоматизировать без специализированного датасета, примерно это будет выглядеть так:

  1. сделаю модель для spacy 2.1
  2. использую обычные известные 3 датасета ( Gareev corpus, FactRuEval 2016, Persons-1000), на которых тренировали DeepPavlov NER, в т.ч. для проверки качества в дальнейшем.
  3. использую дообучение на эмбеддингах и словаре от opencorpora / pymorphy2 (там есть имена, пометки гео, название, аббревиатуры).
  4. использую гео-датасет ( https://www.geonames.org )
  5. использую датасет от https://www.kaggle.com/c/text-normalization-challenge-russian-language для других классов (MONEY, DATE, TIME, всякие разные другие).
  6. нагенерю контр-примеры для hard negative mining.
    Если есть желающие помочь -- могу вас огранизовать, чтобы вы помогли мне это всё сделать, потому что у меня пока что со временем очень тяжело.
    Так что если есть большие словари NER по интересующим вас темам с лицензией, разрешающей использование в коммерческих проектах без полного раскрытия исходников и всех обновлений (MIT, BSD, Apachе, часть видов Creative Commons..., но не GPL ) , то добавляйте ссылки на них сюда в комментариях. Ну а тем более, если вдруг знаете про русский датасет, который крупнее перечисленных выше.

@buriy
Copy link
Owner

buriy commented Apr 6, 2019

@Silverlay да, можете попробовать решение от Deep Pavlov по ссылке выше, напишите, пожалуйста, насколько вам оно подошло.

@Silverlay
Copy link
Author

Я готов помочь. У меня есть часа два в день, которые можно провести с пользой для общего дела. Весь вопрос только в том, что делать? :) я в ML, как обезьяна в CS GO

@Silverlay
Copy link
Author

@Silverlay да, можете попробовать решение от Deep Pavlov по ссылке выше, напишите, пожалуйста, насколько вам оно подошло.

Я его смотрел до вашей модели, оно работает - бесспорно, но выглядит черезвычайно монструозно и порог входа по сравнению со spacy гораздо выше.

@buriy
Copy link
Owner

buriy commented Apr 7, 2019

@Silverlay там с ML всё уже подготовлено -- даже ничего настраивать не надо, надо только данные в нужном формате ему скормить командой spacy train. (Версию будем использовать 2.1)
А для этого данные нужно подготовить.
Вот тут есть описание нескольких вариантов конверсии:
explosion/spaCy#1966 (comment)
Имеющиеся 3 датасета нам нужно привести в JSONL формат для обучения.
Ну а остальные данные будем в виде текстовых списков слов и фраз собирать.
Данные из pymorphy2 я переведу сам, сделав разметку произвольного текста.

@buriy
Copy link
Owner

buriy commented Jul 30, 2019

Итак, сузим до более конкретных задач.
Итерация 1:

  • Подготовить версию для spacy 2.1
  • Загрузить датасет(ы) из nerus и kaggle_ru и преобразовать их в формат spacy
  • Натренировать spacy с полученным трейнсетом.
  • Побенчмаркать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants