Эмоциональная оценка предложений с использованием Spacy - PullRequest
1 голос
/ 01 августа 2020

У меня есть серия из более чем 100 000 предложений, и я хочу оценить их эмоциональность.

Я новичок в мире НЛП, но именно так мне удалось начать (адаптация из spacy 101 )

import spacy
from spacy.matcher import Matcher

matcher = Matcher(nlp.vocab)

def set_sentiment(matcher, doc, i, matches):
    doc.sentiment += 0.1

myemotionalwordlist = ['you','superb','great','free']

sentence0 = 'You are a superb great free person'
sentence1 = 'You are a great person'
sentence2 = 'Rocks are made o minerals'

sentences = [sentence0,sentence1,sentence2]

pattern2 = [[{"ORTH": emotionalword, "OP": "+"}] for emotionalword in myemotionalwordlist]
matcher.add("Emotional", set_sentiment, *pattern2)  # Match one or more emotional word

for sentence in sentences:
    doc = nlp(sentence)
    matches = matcher(doc)

    for match_id, start, end in matches:
        string_id = nlp.vocab.strings[match_id]
        span = doc[start:end]
    print("Sentiment", doc.sentiment)

myemotionalwordlist - это список из примерно 200 слов, который я построил вручную.

Мои вопросы:

(1-a) Подсчет количества эмоциональных слов - не лучший подход. У кого-нибудь есть предложения, как лучше это сделать? 1015 * (2) Как лучше всего решить эту проблему? Я подумываю добавить все предложения в кадр данных pandas, а затем применить функцию сопоставления к каждому из них

Заранее спасибо!

1 Ответ

1 голос
/ 02 августа 2020

Будет два основных подхода:

  • тот, который вы начали, который представляет собой список эмоциональных слов, и подсчет того, как часто они появляются
  • с примерами какие предложения вы считаете эмоциональными, а какие - неэмоциональными для модели машинного обучения, и позвольте ей работать над этим.

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

любые предложения о том, как я могу извлечь эмоциональные слова из слова dnet?

Взгляните на sentiwor dnet, который добавляет меру положительности, негатива или нейтралитета к каждому слову dnet вход. Для «эмоционального» вы можете выделить только те, которые имеют положительный или отрицательный результат, например, 0,5. (Следите за некоммерческой лицензией.)

Второй подход, вероятно, будет работать лучше , если вы можете передать ему достаточно обучающих данных, но «достаточно» иногда может быть слишком много . Другими недостатками являются модели, которым часто требуется гораздо больше вычислительной мощности и памяти (серьезная проблема, если вам нужно быть в автономном режиме или работать на мобильном устройстве), и что они представляют собой черный ящик.

Я думаю, что подход 2020 года было бы начать с предварительно обученной модели BERT (чем больше, тем лучше, см. недавний документ GPT-3 ), а затем настроить ее с помощью образца ваших 100 000 предложений, которые вы вручную аннотированный. Оцените его на другом образце и аннотируйте больше обучающих данных для тех, которые ошиблись. Продолжайте делать это, пока не добьетесь желаемого уровня точности.

(Spacy, кстати, поддерживает оба подхода. То, что я назвал точной настройкой выше, также называется обучением передачи. См. https://spacy.io/usage/training#transfer -learning Также поиск в Google для "анализа пространных настроений" найдет довольно много руководств.)

...