Как добавить некоторые именные фразы, которые я уже знал, выполняя noun_chunks в spacy (или np_extractor в textblob)?

Я использую noun_chunks в spacy и np_extractor в textblob, чтобы найти все фразы в некоторых статьях. Их некоторые технические термины проанализированы неправильно. пример: «ANOVA также называется дисперсионным анализом», и результат показывает, что именные фразы - это «ANOVA», «анализ», «дисперсия», но я думаю, что правильными именными фразами являются «ANOVA», «дисперсионный анализ». У меня уже есть список фраз, содержащий некоторые технические фразы, и я думаю, что это может помочь в разборе. Как я могу использовать этот список для переобучения или улучшения экстрактора именных словосочетаний?


person Kevin    schedule 21.03.2019    source источник


Ответы (1)


Похоже, это хороший пример использования сопоставления на основе правил. Это особенно эффективно в таком сценарии, как ваш, когда вы можете комбинировать статистические модели (например, фрагменты существительных, основанные на тегах частей речи и зависимостях) с вашими собственными правилами, чтобы охватить оставшиеся конкретные случаи.

Вот простой пример:

import spacy
from spacy.matcher import PhraseMatcher

nlp = spacy.load("en_core_web_sm")
matcher = PhraseMatcher(nlp.vocab)
# This is just an example – see the docs for how to do this more elegantly
matcher.add("PHRASES", None, nlp("ANOVA"), nlp("analysis of variance"))

doc = nlp("A text about analysis of variance or ANOVA")
matches = matcher(doc)
for match_id, start, end in matches:
    matched_span = doc[start:end]
    print(matched_span.text)
# analysis of variance
# ANOVA

Индексы совпадений start и end позволяют создать диапазон, поэтому в итоге вы получите объекты Span, точно такие же, как те, которые возвращает doc.noun_chunks. Если вы хотите решить эту проблему еще более элегантно, вы также можете добавить настраиваемый атрибут например doc._.custom_noun_chunks, который запускает сопоставитель на Doc и возвращает совпадающие диапазоны или даже совпадающие диапазоны плюс исходные фрагменты существительных.

Кстати, doc.noun_chunks основаны на тегах части речи и разборе зависимостей. Вы можете проверить код того, как они вычисляются на английском языке здесь. Хотя вы могли теоретически улучшить фрагменты существительных, точно настроив тегировщик и синтаксический анализатор, этот подход кажется излишним и гораздо более умозрительным для вашего варианта использования. Если у вас уже есть список фраз, вы можете сопоставить его напрямую.

person Ines Montani    schedule 21.03.2019
comment
спасибо за Ваш ответ! У меня есть еще один вопрос: есть ли какая-либо функция для оценки точности тех существительных, которые генерируются этой моделью? - person Kevin; 25.03.2019
comment
Если модель не уверена в точности существительного, я хочу отказаться от этого существительного. Я хочу зарезервировать только те существительные, с которыми модель уверена. - person Kevin; 25.03.2019