Я использую noun_chunks в spacy и np_extractor в textblob, чтобы найти все фразы в некоторых статьях. Их некоторые технические термины проанализированы неправильно. пример: «ANOVA также называется дисперсионным анализом», и результат показывает, что именные фразы - это «ANOVA», «анализ», «дисперсия», но я думаю, что правильными именными фразами являются «ANOVA», «дисперсионный анализ». У меня уже есть список фраз, содержащий некоторые технические фразы, и я думаю, что это может помочь в разборе. Как я могу использовать этот список для переобучения или улучшения экстрактора именных словосочетаний?
Как добавить некоторые именные фразы, которые я уже знал, выполняя noun_chunks в spacy (или np_extractor в textblob)?
Ответы (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
основаны на тегах части речи и разборе зависимостей. Вы можете проверить код того, как они вычисляются на английском языке здесь. Хотя вы могли теоретически улучшить фрагменты существительных, точно настроив тегировщик и синтаксический анализатор, этот подход кажется излишним и гораздо более умозрительным для вашего варианта использования. Если у вас уже есть список фраз, вы можете сопоставить его напрямую.