I’m trying to implement the Custom Component Sentiment Analyzer following the below blog:
but landed up in a Key Error:
Please find the error traceback:
Traceback (most recent call last):
File “nlu_model.py”, line 31, in
train_nlu(‘./data/nlu.md’, ‘nlu_config.yml’, ‘./models’)
File “nlu_model.py”, line 19, in train_nlu
run_evaluation(data_path, model_directory)
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 767, in run_evaluation
report_folder)
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 399, in evaluate_entities
tokens, extractors)
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 579, in align_all_entity_predictions
extractors))
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 558, in align_entity_predictions
extracted = determine_token_labels(t, entities, extractor)
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 526, in determine_token_labels
candidates = find_intersecting_entites(token, entities)
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 483, in find_intersecting_entites
if is_token_within_entity(token, e):
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 438, in is_token_within_entity
return determine_intersection(token, entity) == len(token.text)
File “/home/nitin/anaconda3/envs/botenv/lib/python3.6/site-packages/rasa_nlu/evaluate.py”, line 452, in determine_intersection
pos_entity = set(range(entity[“start”], entity[“end”]))
KeyError: ‘start’
@Juste
I also have a similar error after following that blog. The custom sentiment component that I added works fine when use the created modes for prediction however when I use the 'test" method I get this error:
File "train.py", line 103, in <module>
test_result = test(jsonPath + "test/", persistPath)
File "/home/jamie/Documents/standalone/venv/lib/python3.7/site-packages/rasa_nlu/test.py", line 779, in run_evaluation
report_folder)
File "/home/jamie/Documents/standalone/venv/lib/python3.7/site-packages/rasa_nlu/test.py", line 397, in evaluate_entities
tokens, extractors)
File "/home/jamie/Documents/standalone/venv/lib/python3.7/site-packages/rasa_nlu/test.py", line 581, in align_all_entity_predictions
extractors))
File "/home/jamie/Documents/standalone/venv/lib/python3.7/site-packages/rasa_nlu/test.py", line 554, in align_entity_predictions
entities_by_extractors[p["extractor"]].append(p)
KeyError: 'sentiment_extractor'
This error happens just after the testing is apparently 100% complete according to the debug progress bar.
Is this error occurring because my test data doesn’t have any mention of the sentiment entities that it is looking for?
Hi Jamie, curious to know if you managed to get output using rasa test? I’ve built a custom component and convert it to rasa output as per the tutorial. Using rasa shell i get the output i am looking for on a per message basis. However I want to look at the output by scoring a larger set, but rasa test breaks since my training&test data do not have entities that can be compared to the model output. Wanted to ask if you managed to solve your issue and can perhaps share some ideas? Thanks
In my case it was happening because MSRTExtractor is inheriting from Component. I’m creating a pull request as we speak as it should inherit from EntityExtractor.
This fixes the issue in my specific case.
In summary, when Rasa would check all the extractors, it would look for MSRTExtractor and wouldn’t find it in the the pipeline’s extractors because it was registered as a Component.