Как установить атрибут чувств на Span? - PullRequest
2 голосов
/ 03 марта 2020

Я пытаюсь привести пример с Keras из простой документации , но вместо того, чтобы подсчитывать оценку чувств в Doc, как это

for sent, label in zip(sentences, ys):
  sent.doc.sentiment += label - 0.5

Я хотел бы сохранить счет на уровне предложения вот так

for sent, label in zip(sentences, ys):
  sent.sentiment = float(label)

Этот код дает мне эту ошибку

AttributeError: attribute 'sentiment' of 'spacy.tokens.span.Span' objects is not writable

Есть ли установщик для вызова вместо этого? Я пытался set_sentiment безуспешно. Я что-то пропустил? Это ошибка?

1 Ответ

1 голос
/ 03 марта 2020

Вы можете найти реализацию Span.sentiment здесь . Вы можете видеть, что он действительно недоступен для записи, потому что он либо ищет значение в self.doc.user_span_hooks, либо принимает среднее значение token.sentiment для токенов в этом диапазоне.

[EDITED BELOW]

Чувство Token не зависит от контекста. Он использует информацию, представленную в базовом Lexeme. Это означает, что любое слово, такое как «любовь», будет иметь одинаковое значение в любом предложении / контексте.

Таким образом, вы можете сделать две вещи: либо написать в соответствии с лексемами, например, так:

vocab["love"].sentiment = 3.0

Или реализовать пользовательский хук, который позволяет вам определять любую функцию, которую вы хотите. Вы можете сделать это на уровне span (doc.user_span_hooks) или token (doc.user_token_hooks):

doc.user_span_hooks["sentiment"] = lambda span: 10.0
...