Spacy 如何在跨度上设置情绪属性?

Spacy 如何在跨度上设置情绪属性?,spacy,Spacy,我正在尝试spacy的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) 我想把分数保持在句子的水平上 for sent, label in zip(sentences, ys): sent.doc.

我正在尝试spacy的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)
我想把分数保持在句子的水平上

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
有一个setter来代替吗?我试着设置情绪,但没有成功。
我错过什么了吗?这是一个bug吗?

您可以找到
Span.touction
的实现。您可以看到它确实是不可写的,因为它要么在
self.doc.user\u span\u hooks
中查找值,要么对该范围内的令牌取
token.touction
的平均值

[编辑如下]

但是,
标记的情绪并不依赖于上下文。它使用基础文档中存在的信息。这意味着任何单词,如“爱”,在任何句子/上下文中都具有相同的情感价值

因此,你可以做两件事:要么像这样根据词素的情绪来写:

vocab["love"].sentiment = 3.0
或者实现一个自定义钩子,允许您定义任何想要的函数。您可以在span(
doc.user\u span\u hooks
)或令牌(
doc.user\u token\u hooks
)级别执行此操作:


我对
Token
也有同样的问题:
AttributeError:attribute'thiotation'的'spacy.tokens.Token.Token'对象是不可写的
你是对的,我最初的答案不是完全正确的。我更新了它<代码>用户链接
工作。使用
user\u span\u hooks
而不是
扩展属性
有什么好处?我认为在这种情况下,差别很小,但是如果使用带有键“touction”的用户hooks,则具有
span.touction
token.touction
的额外优势。