Как использовать neuralcoref в Spacy
Я пытался использовать библиотеку neuralcoref
: Ультрасовременное разрешение кореференции на основе нейронных сетей и spaCy. Я использую Ubuntu 16.04, Python 3.7.3 в conda 1.9.7 и Spacy 2.2.4.
Мой код (из https://spacy.io/universe/project/neuralcoref):
import spacy
import neuralcoref
nlp = spacy.load('en_core_web_sm')
neuralcoref.add_to_pipe(nlp)
doc1 = nlp('My sister has a dog. She loves him.')
print(doc1._.coref_clusters)
doc2 = nlp('Angela lives in Boston. She is quite happy in that city.')
for ent in doc2.ents:
print(ent._.coref_cluster)
У меня есть эта ошибка
/home/daniel/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: spacy.morphology.Morphology size changed, may indicate binary incompatibility. Expected 104 from C header, got 112 from PyObject
return f(*args, **kwds)
/home/daniel/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: spacy.vocab.Vocab size changed, may indicate binary incompatibility. Expected 96 from C header, got 104 from PyObject
return f(*args, **kwds)
/home/daniel/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: spacy.tokens.span.Span size changed, may indicate binary incompatibility. Expected 72 from C header, got 80 from PyObject
return f(*args, **kwds)
Я попытался понизить версию Spacy до 2.1.0, как было предложено по этой ссылке:
conda config --append channels conda-forge
conda install spacy=2.1.0
Однако я не могу
PackagesNotFoundError: The following packages are not available from current channels:
- spacy=2.1.0
Current channels:
- https://conda.anaconda.org/conda-forge/linux-64
- https://conda.anaconda.org/conda-forge/noarch
- https://repo.anaconda.com/pkgs/main/linux-64
- https://repo.anaconda.com/pkgs/main/noarch
- https://repo.anaconda.com/pkgs/r/linux-64
- https://repo.anaconda.com/pkgs/r/noarch
To search for alternate channels that may provide the conda package you're
looking for, navigate to
https://anaconda.org
and use the search bar at the top of the page.
Как я могу решить эту проблему без перехода на более раннюю версию? Есть ли новая обновленная версия neuralcoref?
5 ответов
За neuralcoref
для работы нужно использовать версию spaCy 2.1.0
и версия Python 3.7
. Это единственная комбинация, с которой neuralcored работает в Ubuntu 16.04 и Mac.
- Установите python 3.7 на свой компьютер, см. Здесь
- Убедитесь, что выбранная версия python - 3.7.
- Создайте папку своего проекта
- Создайте виртуальную среду python в данной папке проекта, например,
python -m venv ./venv
, - Установите spaCy 2.1.0 вот так
python -m pip install spacy==2.1.0
. - Установить neuralcoref
python -m pip install neuralcoref
Надеюсь это поможет.
После выполнения приведенного выше кода я получаю следующий результат:
[My sister: [My sister, She], a dog: [a dog, him]]
Angela: [Angela, She]
Boston: [Boston, that city]
Делайте именно то, что сказал Ракиб. Я использовал Google Colab, поэтому пропустите 1), если используете Google Colab. Добавьте следующие команды:
1) Создайте новую среду, используя: (измените myenv на имя, которое вы хотите присвоить среде)
conda create --name myenv
Выберите эту среду:
conda info --envs
conda activate myenv
2) Затем установите python 3.7 в этой среде
Установите версию Python
!apt-get установить python3.7
3) установить spacy и neuralcoref с поддерживаемой версией.
!pip install spacy==2.1.0
!pip install neuralcoref
!pip install https://github.com/explosion/spacy-models/releases//download/en_core_web_lg-2.1.0/en_core_web_lg-2.1.0.tar.gz
import pandas as pd
import re
import spacy
import neuralcoref
import en_core_web_lg
nlp = en_core_web_lg.load()
neuralcoref.add_to_pipe(nlp)
Перейти на просторную 2
pip uninstall -y neuralcoref
pip install --no-cache-dir neuralcoref --no-binary neuralcoref
pip install -U spacy==2.3.7
python -m spacy download en
перезапустите ядро, если вы используете jupyter.
а также .....
import logging;
logging.basicConfig(level=logging.INFO)
import neuralcoref
Обновить
pip install -U spacy==2.3.7
pip install neuralcoref
python -m spacy download en
Это не прямой ответ на вопрос, но если вы хотите использовать neuroCoref, другой вариант — использовать оригинальную версию, написанную на Java. В библиотеке stanza есть клиент coreNLP, который может обращаться к оригинальным моделям coreNLP. Это не требует от вас использования (устаревшей версии) Spacy.
Вероятно, запоздалый ответ, сегодня копался в Интернете по той же проблеме.
В конце 2022 года Spacy выпустила Neuralcoref в качестве компонента конвейера. Для этого вам необходимо установить spacy-experimental.
Следующие ссылки могут быть полезны:
- https://explosion.ai/blog/coref
- https://spacy.io/api/coref
- https://www.youtube.com/watch?v=fio3BejnRsM
- https://www.youtube.com/watch?v=TRvAOdrLo6k
Первые две ссылки приведут вас к конкретным техническим деталям. Последние два видеоролика на YouTube помогут вам использовать модель по принципу «подключи и работай».