I'm working on Sentiment Analysis, using HuggingFace to perform sentiment analysis on articles

 classifier = pipeline('sentiment-analysis', model="nlptown/bert-base-multilingual-uncased-sentiment")
 classifier(['We are very happy to show you the 🤗 Transformers library.',  "We hope you don't hate it."])

This returns

label: POSITIVE, with score: 0.9998

label: NEGATIVE, with score: 0.5309

Now I'm trying to understand how to keep track of a subject when performing the sentiment analysis.

Suppose I'm given a sentence like this.

StackExchange is a great website. It helps users answer questions. Hopefully, someone will help answer this question.

I would like to keep track of the subject when performing sentiment analysis. In the example above, in the 2nd sentence 'it' refers to 'StackExchange'. I would like to be able to do track a subject between sentences.

Now, I could try to manually try to parse this by finding the verb and trying to figure find the phrase that comes before it. However, it doesn't sound like a very safe or accurate way to find the subject.

Alternatively, I could train similar to a Named Entity Recognition. However, finding a dataset for this is very hard, and training it would be very time-consuming.

How can I keep track of an entity within an article?


What you're describing is known as coreference resolution. More specifically, this example is anaphora resolution. The short answer is that this is an open research question and there is no well-established solution.

You mentioned Hugging Face in your question. The neuralcoref module in spaCy is itself from Hugging Face (note the reflexive anaphor used for emphasis in this sentence). If you're not a spaCy kind of person, then there's also Stanford's CoreNLP in Java that has coreference resolution. A Python wrapper is also available.

I also wanted to address a couple other topics you mentioned. You are right in that they're all somewhat connected. But you need to scope down your goal/research question because what you're aiming to achieve is too difficult for a first task. Named entity recognition, constituency parsing, and sentiment analysis. Pick just one to focus on.

  • $\begingroup$ Thanks for your answer. I'm new to this field so this information is very useful for my research. I saw CoreNLP and was debating on using it. I think I'll need to make some hybrid solution, which uses CoreNLP to analyize the subject, and some savvy rules to maintain track of the subject $\endgroup$ – johnny 5 Feb 12 at 15:32
  • $\begingroup$ You're welcome! Part of the difficulty in getting start with NLP is understanding the correct terms to call things. One you know the right term you can often find useful answers. $\endgroup$ – CorruptedHeapScapeGoat Feb 12 at 19:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.