philvec / sentimentPL

Trained PyTorch models for polish language sentiment prediction based on allegro/herbert and CLARIN-PL datasets
GNU General Public License v3.0
11 stars 1 forks source link

tekst zawierający emotikony powoduje błąd #2

Open pka69 opened 2 years ago

pka69 commented 2 years ago

Emotikony niosą ze sobą duży ładunek sentymentu. Analizowałem większą ilość postów z Instagrama. Idealnie byłoby, gdyby były brane pod uwagę, albo przynajmniej ignorowane zamiast wyrzucać błąd. Pozdrawiam

philvec commented 2 years ago

@pka69 czy możesz podać przykład tekstu, który powoduje błąd? na przykład taki tekst wykonuje się normalnie:

emoji_text = 'tak dużo emotikonów, ( ◑‿◑)ɔ┏ 🍟 -- 🍔 ┑٩ (^◡^ ) ooo, jak wspaniale' 
print(model(emoji_text).item())
0.09174229949712753

Process finished with exit code 0
pka69 commented 2 years ago

to jest fragmento kodu: sentiment_model = SentimentPLModel(from_pretrained='latest') print(posts_dt.post_content[2]) sentiment_model(posts_dt.post_content[2])

to jest analizowany post:

4⭐/6⭐

Olga i Ola. Dwie kobiety, które łączy to, że w przeszłości zostały porzucone przez swoich facetów bez słowa wyjaśnienia. Nie potrafiły zrozumieć, co tak naprawdę się stało, ani tym bardziej dlaczego tak się stało, że związki, w których pokładały tak wielkie nadzieje, po prostu się rozpadły. W końcu o pierwszej miłości się nie zapomina ;) Pytania i wątpliwości trawiły je przez wiele lat, co nie wpłynęło zbyt dobrze na ich psychikę, ani późniejsze relacje z mężczyznami. Ciężko było im zbudować trwały związek, w obawie, że któregoś dnia historia się powtórzy. Po kilku latach każda z nich jakoś starała się ułożyć to swoje życie. I kiedy już wydawało się, że jako tako stąpają twardo po ziemi, ich byli ukochani ponownie stają im na drodze. Jak wiele zmieni to w ich poukladanym życiu? Dowiecie się tego już z książki ;)

Warstwa psychologiczna była tu naprawdę dobrze rozpisana, czytało mi się to z dużym zaciekawieniem i w większej części z przyjemnością. Bliższa stała mi się Ola. Zaskoczyć może to, że czytając tę książkę, czytamy... tak jakby dwie książki!😅 Dlaczego? Bo Olga pisze tu swoją własną książkę, w której główną bohaterką jest wspomniana wcześniej Ola. I tak oto historie obu pań przeplatają się ze sobą. Powieść w powieści - ciekawy zabieg, prawda?🤔 Przyznam, że nie spotkałam się wcześniej z taką formą, ale sprawdziła się świetnie.

Czy sama książka jakoś szczególnie mnie zaskoczyła? Raczej nie ;) Powieść obyczajowa jakich wiele. Jeśli lubicie słodko-gorzkie historie miłosne, stare tajemnice i ten lekki dreszcz niepokoju o dalsze losy bohaterów, to pewnie wam się spodoba. Jeśli szukacie czegoś całkiem nowego, może być różnie. Warto samemu się przekonać. Jak na debiut, jest naprawdę w porządku. Trzymam kciuki za dalszy rozwój😊 . .

bookstagrampl #katarzynakalista #ostatnirozdział #obyczajówka #powieśćobyczajowa #wydawnictwoczarnaowca #ksiazkanadzis #książkoholikpoluje #książka #igczyta #igbooks #teamkawa #kawaastra #astra_coffee_and_tea #goodvibes #jesienneczytanie #jesienneklimaty #czytamjesienią #czytajpl #czytanie #czytamwszędzie #welovebooks #acornerofmyhome #słoneczniki #booksandflowers #sunflowers #zawszeczytam #onmyshelf #bookie #recenzjaksiazki

a to błąd, który wyskakuje:


IndexError Traceback (most recent call last) /tmp/ipykernel_2699/1057426095.py in 27 sentiment_model = SentimentPLModel(from_pretrained='latest') 28 print(posts_dt.post_content[2]) ---> 29 sentiment_model(posts_dt.post_content[2]) 30 ~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, *kwargs) 1100 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks 1101 or _global_forward_hooks or _global_forward_pre_hooks): -> 1102 return forward_call(input, **kwargs) 1103 # Do not call functions when jit is used 1104 full_backward_hooks, non_full_backward_hooks = [], []

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/sentimentpl/models.py in forward(self, x, tune_embedding) 46 if not tune_embedding: 47 stack.enter_context(torch.no_grad()) ---> 48 embeddings = self.embed_model(**encoded)['pooler_output'].float() 49 50 return self.fc(embeddings)

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, *kwargs) 1118 input = bw_hook.setup_input_hook(input) 1119 -> 1120 result = forward_call(input, *kwargs) 1121 if _global_forward_hooks or self._forward_hooks: 1122 for hook in (_global_forward_hooks.values(), *self._forward_hooks.values()):

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py in forward(self, input_ids, attention_mask, token_type_ids, position_ids, head_mask, inputs_embeds, encoder_hidden_states, encoder_attention_mask, past_key_values, use_cache, output_attentions, output_hidden_states, return_dict) 841 head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) 842 --> 843 embedding_output = self.embeddings( 844 input_ids=input_ids, 845 position_ids=position_ids,

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, *kwargs) 1100 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks 1101 or _global_forward_hooks or _global_forward_pre_hooks): -> 1102 return forward_call(input, **kwargs) 1103 # Do not call functions when jit is used 1104 full_backward_hooks, non_full_backward_hooks = [], []

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py in forward(self, input_ids, token_type_ids, position_ids, inputs_embeds, past_key_values_length) 134 embeddings = inputs_embeds + token_type_embeddings 135 if self.position_embedding_type == "absolute": --> 136 position_embeddings = self.position_embeddings(position_ids) 137 embeddings += position_embeddings 138 embeddings = self.LayerNorm(embeddings)

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, *kwargs) 1100 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks 1101 or _global_forward_hooks or _global_forward_pre_hooks): -> 1102 return forward_call(input, **kwargs) 1103 # Do not call functions when jit is used 1104 full_backward_hooks, non_full_backward_hooks = [], []

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/torch/nn/modules/sparse.py in forward(self, input) 156 157 def forward(self, input: Tensor) -> Tensor: --> 158 return F.embedding( 159 input, self.weight, self.padding_idx, self.max_norm, 160 self.norm_type, self.scale_grad_by_freq, self.sparse)

~/Dokumenty/Python/Courses/SDA/Zadania/ML - nlp/env/lib/python3.8/site-packages/torch/nn/functional.py in embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse) 2042 # remove once script supports set_grad_enabled 2043 _no_grad_embeddingrenorm(weight, input, max_norm, norm_type) -> 2044 return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse) 2045 2046

IndexError: index out of range in self

JaremaPiekutowski commented 7 months ago

Uszczegółowiając: problemem nie są emotikony, a hasztagi - po usunięciu znaku "#" z tekstu komenda działa.