Wykorzystanie sztucznych sieci neuronowych do klasyfikacji tekstu?

0

Witam serdecznie. Jestem na 3 roku studiów (kierunek Informatyka), więc zbliża się moment napisania i oddania pracy dyplomowej. Pracuje od prawie 2 lat jako programista C# .NET w branży zajmującej się monitorowaniem i analizy ofert w E-Commerce. To tak kilka słów o mnie dlaczego to wybrałem.
Moim pomysłem na taką pracę dyplomową jest wykorzystanie sieci neuronowych w celu identyfikacji atrybutów wystawianych produktów w sklepach. Od razu wspomnę, że rozwiązaniem na ten problem są proste wyrażenia regularne, ale zaraz pokażę przykład.
Weżmy na tapetę na przykład jakąś oponę. Opony zapisuję się w następujący sposób: [Szerokość]/[Profil] R[Średnica] [Indeks nośności] [Indeks prędkości], np. 205/55 R16 91V

Można zauważyć pewien wzorzec i jak wspomniałem dobrym sposobem są wyrażenia regularne, ale zdarzają się przypadki gdzie rozmiary takiej opony są zapisane w całkiem inny sposób, np.:

  • 265 / 40 / R19 / 102Y
  • 265 / 40 / ZR19 / 102(Y)
  • 225/45 R18 95Y

Wzorzec mniej więcej jest zachowany czyli kolejność wpisanych atrybutów jest zgodna więc wyrażenia regularne do tego momentu jeszcze działają. Jednak w momencie, gdy w modelu opony również są 3 cyfry to wszystko przesuwa się o 1 jednostkę w lewo i już są dane błędnie sklasyfikowane. Są tez przypadki że nie ma podanej jednej wartości, albo nie są podane pokolei (91V 205/55/16).
Do nauczenia takiej sieci mam ogrom danych wejściowych tak więc to nie jest problem. Problem pojawia się w momencie gdy myślę o tym czy jest to w ogóle do napisania. Jakie rodzaje sieci neuronowych są w stanie pracować z tekstem - jak to wygląda? Jak nauczyć sieć gdy w momencie podania jakiegoś tekstu do sieci wypluje mi kilka sklasyfikowanych atrybutów?
Człowiek po jednym przykładzie jest w stanie nauczyć się rozpoznawania konkretnych wartości z tekstu, wystarczyło, że podałem wzorzec zapisywania rozmiaru opon. Przykład:

265 / 40 / R19 / 102Y => 265(szerokość); 40(profil) ; 19(średnica) ; 102 (indeks nośności) ; V(indeks prędkości).

Oczywiście taka sieć nie była by tylko to klasyfikowania opon, ale do wszelkich produktów.

Czy jest możliwość napisania takiej sieci pod taki problem, czy jest sens pisania takiej pracy inżynierskiej (chciałbym to móc wykorzystać w aktualnej pracy przy aktualnych projektach).

Czytałem kiedyś o tym sporo i znalazłem kilka metod:

  • Euclidean, Manhattan i Cosine Distance
  • Jaccard similarity
  • Bag of word
  • TF-IDF
  • SVM
  • Naive Bayes Classifier

Jednak czy to są w ogóle sieci? Czy tylko elementy z których taka sieć powinna korzystać przy pracy z tekstem. Dlatego piszę ten wątek bo może ktoś miał podobny problem do mojego i jest w stanie cokolwiek powiedzieć.

Dziękuję za wszelkie informacje. Pozdrawiam

1
  1. Sieć neuronowa to sie do tego nadaje jak pięść do nosa. W ogóle NN nadają się do niewielu rzeczy w praktyce ;)
  2. Ale w zasadzie co ty chcesz klasyfikować? Bo póki co zasugerować jak regexami wyciągnąć parametry. Ty chcesz zarobić jakieś AI do ekstrakcji informacji? Obawiam sie że nijak nie da sie tego zrobić, szczególnie że chciałbyś:

Oczywiście taka sieć nie była by tylko to klasyfikowania opon, ale do wszelkich produktów.

:D
3.

Euclidean, Manhattan i Cosine Distance
Jaccard similarity
Bag of word
TF-IDF
SVM
Naive Bayes Classifier

To są wszystko metody zwiazane z przetwarzaniem języka naturalnego / text miningiem, ale z sieciami nic wspólnego nie mają a i do twojego problemu nijak się nie nadają. TF-IDF może ci wyciągnąć słowa kluczowe z tekstu a Jaccard / consine similarity mogą ci powiedzieć jak podobne do siebie są dwa teksty. BoW to tylko sposób wektorowej reprezentacji tekstu, a Naive Bayes Classifier to jest klasyfikator jak sama nazwa wskazuje. Na podstawie parametrów mógłby ci powiedzieć na przykład do jakiego samochodu pasują dane opony albo kto jest ich producentem ;]

Jak nauczyć sieć gdy w momencie podania jakiegoś tekstu do sieci wypluje mi kilka sklasyfikowanych atrybutów?

Odnosze wrażenie że ty nie bardzo rozumiesz co to jest klasyfikacja. Klasyfikacja to jest przypisanie klasy na podstawie atrybutów.

0

Dlatego zadałem pytanie czy SNN to w ogóle ten rodzaj rozwiązania takiego problemu. Te wszystkie metody które wypisałem to właśnie czytając o text miningu tak jak wspomniałeś. I tak, źle zrobiłem wypisując te wszystkie punkty bo wiem, że TF_IDF i Bag of word korzysta się w metodach. Generalnie z tego korzystają inne metody. Co do klasyfikacji i tego cytatu: można słowo "sklasyfikowanych" usunąć :D nie pasuje tam. Jednak chodzi mi o sam motyw problemu i czy da radę takie coś napisać, co wykorzystać.

0

Jeżeli analizujesz jakieś oferty sprzedażowe to możesz wykorzystać metody data mining'u jak klasyfikacja to zbuduj sobie bazę klientów i na podstawie takich danych ich konkretnych cech możesz dokonać klasyfikacji - grupę klientów którzy kupili coś tam albo nie . Można też wykorzystać analizę skupień i pogrupować klientów np: bardzo dochodowi, słabo dochodowi etc. Można stworzyć reguły asocjacyjne np. klient kupując opony kupił również płyn do mycia felg. To tylko proste nawet nieco naiwne przykłady pod jakie możesz podpiąć swoją pracę z pracą dyplomową. Wg mnie jest tu całkiem szerokie pole do popisu. Jednakże musisz uzyskać jakąś podstawę bo póki co to tak jakbyś napisał "potrzebuję skosić trawnik, który czołg kupić ?".

0

Analizuje oferty mniej więcej w taki sposób jak działa Ceneo. Czyli szukając na Ceneo jakiś produktów bardzo często pojawiają się w proponowanych takie same produkty, tyle że z innych sklepów. Aby znać takie produkty "proponowane" musiałbym skądś wiedzieć czy dany produkt jest taki sam lub bardzo podobny. Jednym sposobem jest to co pisałem czyli spróbowanie wynaleźć i zapisać dla jakiegoś produktu konkretne cechy, takie jak producent, model czy jakieś szerokości, rozmiary itd. Wtedy mając dwa produkty z tymi samymi cechami jesteśmy w stanie znaleźć produkty podobne tak jak działa Ceneo. Da się gdzieś tu wykorzystać takie metody SSN lub text mining po nazwach produktów? Może ktoś się spotkał z takim problemem i jest w stanie mi trochę pomóc? To co pisałeś bardziej pasuje pod jakiegoś Sales managera albo price manager, który na podstawie rózżnych statystyk jest w stanie powiedzieć bardzo dużo. Między innymi to co wymieniłeś.

0

To jest zupełnie inna bajka bo ceneo bierze info o produktach ze źródeł ustrukturalizowanych (jak np. sklepy). Tam masz jasny format danych i możesz to parsować choćby regexami, a często udostępniane też jest odpowiednie API. Jedyne do czego sie tu przydaje ML to proponowanie podobnych poduktów.

0

Jak to w końcu jest Shalom. Znalazłem na stacku taką informacje pewnego użytkownika.

We have established that traditional ANNs are not really suitable for analyzing text. The underlying explanation for why this is so is based around the idea that ANNs operate on inputs that are generally a continuous range of values and the nearness of two values for an input means some sort of nearness in their meaning. Words do not have this idea of nearness and so, there's no real numerical encoding for words that can make sense as input to an ANN.

On the other hand, a solution that might work is to use a more traditional semantic analysis which could, perhaps produce sentiment ranges for a list of topics and then those topics and their sentiment values could possibly be used as input for an ANN.

Tradycyjne sieci neuronowe może i nie są stworzone do analizy tekstu, ale jakieś mądre znormalizowanie tekstu do wartości spowoduje to że jesteśmy w stanie wrzucić je jako wejście sieci neuronowej.

0

No ale to jest wtedy znowu ZUPEŁNIE co innego. Jasne że jak sobie policzysz np. sentyment dla zbioru tekstów to masz wartość liczbową i możesz na jej podstawie klasyfikować coś! Analogicznie jak zrobisz topic modeling na zbiorze tekstów i potem z ewaluacji modelu wyjdzie ci w jakim stopniu dany tekst realizuje różne tematy to możesz te wartości liczbowe wrzucić do sieci neuronowej która będzie to jeszcze dalej w jakiś sposób przerabiać.

Ale to nie ma absolutnie nic wspólnego z tym o czym pisałeś. Ani topic modeling ani liczenie sentymentu nijak sie ma do mądre znormalizowanie tekstu do wartości . To już jest samo w sobie zastosowaniem uczenia maszynowego/sztucznej inteligencji do analizy tekstu!

Mam wrażenie że ty w ogóle nie rozumiesz o czym czytasz.

  1. Analiza sentymentu to szacowanie jak pozytywne/negatywne są teksty. Mógłbyś w ten sposób analizować komentarze na onecie albo twittera i oceniać które są pozytywne a które negatywne.
  2. Topic modeling / analiza semantyczna pozwalają określić "tematykę" tekstu. Więc mógłbyś przeskanować wszystkie ogłoszenia na allegro i np. automatycznie pogrupować je na odnoszące się do samochodów, komputerów itd.
0

Wydaje mi się że rozumiem w czym problem, ale nie wiem jak pomóc ;)

Też się zastanawiałem, jak niektóre produkty w ceneo, skapiec, nokaut i innych mają zupełnie różne opisy - jak można stwierdzić czy produkty w różnych sklepach to dokładnie te same produkty ?

Przykładowo kamery foto: W prawie każdym sklepie w temacie są opisane w różny sposób i wielokrotnie jest tak, ze ciężko jest sprawdzić czy sklep sprzedaję kamerę np. Nikon D5500 czy torbę, filtr, baterie, zasilacz,...<lub 200 innych akcesoriów do tego modelu> do Nikona D5500. Można oczywiście porównać cenę, jak się różni więcej niż np. 20% to "raczej" są to różne produkty, itd. Ale to średni pomysł :) Poza tym po opisach produktu, też jest bardzo ciężko rozpoznać (jedne mają full opis inne wręcz szczątkowy lub wcale). Sprawę jeszcze komplikują dodatki, "gratisy" czy sprzedaż w różnych wersjach, wariantach.

Wiem, ze ceneo, skapiec, nokaut też sobie do końca z tym problemem nie radzą, bo często sprzęt elektroniczny jest źle pogrupowany, nie mówiąc już o sprzęcie mniej popularnym (jak np. procesory serwerowe, szafy RACk, itp.).

1 użytkowników online, w tym zalogowanych: 0, gości: 1