Samouczenie się

0

Kolejny temat o botach, tym razem o samouczneniu się.
Wiec tak - piszę swojego bota juz od jakiegos czasu. Samouczenie się w formie zapamietywania textów wpisanych przez usera a następnie używania ich na oślep, a <font color="red">nóż</span> się uda, jest nieteges... Przpuśćmy że schamet bota wyglada następująco

             Odebranie danych wejściowych
                            |
                            |
                     Obróbka   /dzielenie na wyrazy itd...
                            |
                            |
                     Interpretacja
                            |
                            |
                     Generowanie danych wejściowych

Więc tak - Wiem mniej więcej jak zrobić żeby bot uczył się w miarę sensownie, i później używał tego czego sie nauczył też w miarę sensownie. Ale mam problem z tym że kiepsko mi idzie wymyslanie jak zrobić żeby bot uczył sie interpretować coraz to nowe wyrazy, czyli żeby nie powiększał tylko swojej bazy danych, która służy do generownia wypowiedzi i składania zdania, ale także uczył się "rozumienia" coraz to nowych wypowiedzi. Z góry dzięki.

PS proszę moderów o wstawienie tego tematu do działu, w którym powinien sie znajdować, bo mi jakoś nigdzie nie pasował, a poza tym nie jest na tyle gorący...

0

Też miałem z tym problemy przy moim bocie. Ja to zrobiłem na plikach INI. Dwie sekcje: "standard" oraz "Nauczone". W sekcji standard były odzywki przeze mnie wymyślone. W sekcji "nauczone" - wiadomo. Zatem:

  • odbiór danych wejściowych

  • obróbka tekstu (usuwanie ogonków oraz LowerCase)

  • sprawdzanie czy w sekcji [standard] istanieje odpowiedź - jeśli tak to odpowiedz i zakończ

  • sprawdzanie czy w sekcji [nauczone] istnieje odpowiedź - jeśli tak to odpowiedz i zakończ

  • jeśli żaden z powyższych warunków nie został spełniony, to:

    • otwórz plik ini
    • jako parametr wpisz ostatnią wypowiedź bota
    • jako wartość wpisz ostatnią wypowiedź usera

Można dodatkowo opatrzeć ostatni myślnik w warunek, np. jeżeli dane wejściowe są dłuższe niż ileś tam znaków, żeby się nie uczył bzdur.

Przykład: Bot ma wpisane:

[standard]
co=g**** wiadomo o co chodzi :)

Teraz ktoś napisze:

  • co?
    Bot odpowie:
  • g****
    Teraz ktoś napisze
  • zjedz je równo

To bot nauczy się tego jak odpowiedź na g****. Następnym razem, gdy ktoś wpisze g****, bot odpowie:

  • zjedz je równo.

:)

0

"Continual & Complete Intelligence:
The 2C Intelligence Approach"
Mogę podesłać. Ale AI (bo jakby nie patrzeć to coś takiego to już jest) to baaardzo trudne zagadnienie.

0

ja mialem robic swego bota do gg, ale nawet kurna sie nie dalo polaczyc z serwerem gg wiec zaniechalem robote: ale funkcje nauki robilem na zasadzie

sam poczatek: wlasne dozywki i szczegolowe interpretowanie tekstu: czyli mnostwo kodu, ktory sam pisalem zeby tylko odpowiedzial na pytania dobrze, umial odpowiadac na temat milosci :P, moich przyjaciol, medycynie [; oraz normalne takie to zapoznawcze czyli czesc kim jests jak leci jak sie czujesz i wiele wiele innych :U

Pozniej powstal problem nauki wiec zapamietywalem wyraz od klienta, przy uprzednim juz mialem 100% pewnosc zebot odpowie to co ja chcialem zeby odpowiedzial (mial na dodatek losowo wybierane odzywki pasujace jako odpowiedz - brane z tablic :X)

na pdostawie pdozielenia tekstu ktory dostal od klienta i swoj zapisywal go w rekordzie na odpowiedzi oraz przyjete itam ble ble, zrobielm edytor tych dziwact zeby go bardziej "uludzkowic" :D ale bylo minale i usunalem te debilstwo bo i tak pozytk uby z tego nie bylu :/

0

ja chcę zrobic to samouczenie sie bo mi się nie chce robić słowników. Mozna by też zrobić żeby bot wiedział np. Co to krzesło
Mozna by to zapisać binarnie (czy na tym sie siedzi, czy to się je, czy to lata itd..), wtedy by mu na pewno było ławtiej to zrozmieć. Jeszcze łatwiej by było zeby zrobić że (dłuuuuugie przemyslenia) miałby np. słowo hamburger, i wiedziałby ze to np. jest nieduze, a gdyby user dał texta:
-idę zjeść hamburgera
To bot by już wiedział że to się je. Tylko to wszytsko to by było uczenie się rzeczy, które on by później używał w generowaniu wypowiedzi a mi chodzi o to żeby rozwijać jego bazę danych, którą on porównuje wypowiedzi usera z bazą danych, przeszukuje kroi itd...

Też zastanawiałem się nas tym czy taki bot może byc świadomy. Po jakimś czasie doszedłem do wniosku że czemu nie??? <ort>przecieŻ </ort>człowiek jest jednostką działającą algorytmicznie, przyczynowo skutkowo, jest maszyną tylko że organiczną i bardziej złożoną. Pierwszy problem zaczyna sie juz przy samej definicji świadomości. U człowieka swiadomość to obiekt (lub zbiór obiektów) generujacych dane wyjściowe - czyli to co on zrobi. Dlaczgo u bota by nie zrobic tego samego. Można by to zdefiniować.'

Świadomośc jako system generujący odpowiedzi stosownie do interpretacji danych wejściowych oraz jego aktualnego stanu psychicznego. Czyli jako te procedury, które składaja zdanie.

0

a mi
chodzi o to żeby rozwijać jego bazę danych, którą on porównuje wypowiedzi
usera z bazą danych, przeszukuje kroi itd...

milego robienia, za 100 lat powiedz mi jak ci dziala bocik

0

Jak na razie mam prototyp, ale jeszcze nie ma zaimplementowanego uczenia się. A jak się juz tego będzie uczył, mam juz pomysł i kilka blokowych, to ci podeślę execa :)
Na pomysł uczenia się wpadłem jak przeczytałem post kapusty, to samo da się zrobić w drugą stronę- czli nie z bazy tylko do bazy

0

No wiec ja bym to zrobil tak:
Musisz wprowadzic znaczenia niektorych slow takich jak:
'jest', 'to' itd.
Nastepnie gdy bot bedzie sie uczyl, to zapamietuje slowa jak leci. Jesli napotka zdanie "Jablko to owoc" wowczas zapamieta w swojej bazie slowa jablko i owoc oraz polaczu je jako synonimy (a bedzie wiedzial o tym, ze trzeba je polaczyc, jesli zaprogramujesz mu obsluge slowa 'to').
No, reszty mozesz sie domyslic. Tylko, ze wyjatkow to jest tyle w tym wszystkim, ze i tak nie sadze, by bocik odpowiadal logicznie na chociazby polowe swych zdan. Bo jakbys np. obsluzyl takie cos:
"Nie jablko to owoc" Czy w tym przypadku bot powinien zapamietac, ze jablko nie jest owocem? A moze jest, bo w rozmowie ktos chcial zaprzeczyc, jakoby jablko bylo warzywem i chcial napisac: "Nie, jablko to owoc" (z przecinkiem) no ale przecinka zapomnial.
Tak wiec dam Ci dobra rade - odpusc sobie tak skomplikowany tryb nauki bota :)
A co do swiadomosci itp. to nie takie proste. Fakt ze czlowiek jest wlasnie tak skomplikowana maszyna uniemozliwia symulacje jego czesci na komputerze :)
A co do tego, zeby najpierw zrobic LowerCase, to oczywiscie oprocz tego dobrze by bylo usunac polskie litery, podwojne spacje i literowki, bledy ortograficzne itp.. itd...

0

Tak wiec dam Ci dobra rade - odpusc sobie tak skomplikowany tryb nauki bota
A co do swiadomosci itp. to nie takie proste. Fakt ze czlowiek jest wlasnie tak skomplikowana maszyna uniemozliwia symulacje jego czesci na komputerze
A co do tego, zeby najpierw zrobic LowerCase, to oczywiscie oprocz tego dobrze by bylo usunac polskie litery, podwojne spacje i literowki, bledy ortograficzne itp.. itd...

  1. Im wiecej osób da mi takie dobre rady, tym więcej sie będę nad tym meczył

  2. wg. mnie usuwanie polskich fontów jest bardzo złym pomysłem poniważ słowa taie jak jeżyk i język będą wyglądały tak samo

  3. Śiadomość to BARDZo względne i FILOZOFICZNE pojęcie

0

Im wiecej osób da mi takie dobre rady, tym więcej sie będę nad tym meczył

No coz, moze rzeczywiscie to nie byla dobra rada, ale lepiej zaczac najpierw od czegos malego, a potem rozbudowywac.

  1. wg. mnie usuwanie polskich fontów jest bardzo złym pomysłem poniważ słowa taie jak jeżyk i język będą wyglądały tak samo

Tylko ze bardzo wiele osob pisze bez polskich fontow. Pewnie nie raz sie zdarze, ze ktos napisze cos przekreci albo napisze niegramatycznie. Czlowiek po kontekscie pozna o co chodzi, ale jak chcesz nauczyc tego bota?
Przeciez sa nawet takie slowa jak "pierze". Jesli ktos powie "Z koldry wyleciało pierze", to pierze jest synonimem piór. A w zdaniu "Mama pierze skarpetki" pierze to juz inne slowo.

Mozesz jednak zrobic inaczej. Czyli nie pozbawiac z automatu liter ogonkow, a jesli ktos napisze "jezyk", to bot moze sie domysli, ze to nie jakies nowe slowo, ale blednie napisane slowo ktore juz zna (język, albo jeżyk). Gorzej jesli pierwszy rozmowca napisze jezyk i bot doda to slowo do swojego slownika. Potem ktos napisze "jezyk", a bot bedzie myslal, ze to "jezyk" jest slowem prawidlowym, a "język" jego blednym wpianiem.

0
  1. wg. mnie usuwanie polskich fontów jest bardzo złym pomysłem poniważ słowa taie jak jeżyk i język będą wyglądały tak samo

[-CD-]
Tylko ze bardzo wiele osob pisze bez polskich fontow. Pewnie nie raz sie zdarze, ze ktos napisze cos przekreci albo napisze niegramatycznie

No tylko że jeżeli się usunie ogonki to będzie jeszcze gorzej

0

Skoro już robisz sztuczną inteligencję gotową rozumieć tekst to nie problemem będzie dla Ciebie zrobienie programu, który rozpoznaje o jakie słowo chodziło na podstawie kontekstu zdania. Gorzej z rozumieniem kontekstu zdania jeśli będzie dużo literówek...

0

To może zrobić tak , że bot będzie się uczył tylko przy kilku sprawdzonych (nie robiących błędów) osobach, a gdy bedzie miał wystarczający zasób słów, wtedy dopiero będzie mógł porozmawiać z innymi.

0

Według dobrym pomysłem byłoby stworzenie botowi osobowości. Wtedy mógłbyś wszystkie frazy ponumerować, a następnie przepuszczać je przez sieć sztucznych neuronów albo algorytm genetyczny.

0

Aby możliwie najlepiej <ort>obsłurzyć </ort>błedy należałoby do DB twojego bota dodać jeszcze jedną rzecz :-)
bot powinien zliczać ile razy jakieś tam słowo zostało <ort>urzyte </ort>w jakimśtam znaczeniu. I podejrzewać błędy...
tzn: Należy przyjąć, że większość wypowiedzi jest formuowana prawidłowo. Jesli zrobimy takie <ort>załorzenie </ort>i do tego wprogramujemy w naszego bot'a na czym polegają najczęściej robione błędy (że ktoś może pomylić "a" z "ą" ; "ż" z "rz" lub z "z" ; ... itp) to bot jeśli dostanie n wypowiedzi:
"jabłko to owoc"
...
"jabłko to owoc"
(od rórznych osób) i kilka:
"jablko to owoc"
to "stwierdzi" że bardziej prawdopodobne jest, że "jabłko to owoc", a "jablko" to błędnie napisany wyraz "jabłko".

Dodatkowo można przygotować mechanizm tworzący "profil" rozmówcy. Chodzi o to żeby bot rozpoznawał jakie błędy są charakterystyczne dla tego z kim gada (np jeśli bot rozpozna, że ktoś <ort>w ogóle </ort>nie <ort>używa </ort>"ogonków" to powinien przestać sugerować się tym, że dostał "jabłko" czy "jablko" tylko zapisać np że w tym kontekscie jest 50% prawdopodobieństwa, że miałobyć "jablko", a 50% że "jabłko").

0

Po pierwsze nie boot bo boot to but z cholewą a bot, bo to od słowa robot. A efekt opisany przez mojego przedmówcę można osiągnąć właśnie w najlepszy sposób albo algorytmem genetycznym albo siecią neuronową.

0

Porozmawiajcie sobie z fido. www.fido.pl . Całkiem fajnie sie rozmawia. I zapytajcie sie, ile kosztuje taki bot (czyt. ile możecie zarobić na stworzeniu takiego)

0

Heh, ja z Fido juz kawal czasu przegadalem. Jest raczej taki sobie. Zapytaj go np. "Kto jest moim ojcem", to zacznie nawijac o swoim. Poza tym on jest robiony (prawdopodobnie) na zasadzie - wyszukaj jakies slowa i dopasuj jedno z przygotowanych poprzednio wypowiedzi.

a jesli chodzi o sieci neuronowe, to zeczywiscie to mogloby byc jakies rozwiazanie. Tylko nie wiem, czy taka siec nie bylaby troche za duza. Troche jednak slow w jezyku polskim mamy. Poza tym ja osobiscie nie za bardzo wiem jak moznaby skutecznie uzyc sieci to rozwiazania tego problemu. Moze przeszloby z przepuszczaniem poszczegolnych slow i na podstawie wyniku ich odpowiednie klasyfikowanie, sortowanie itp. ale z calymi zdaniami chyba nie pojdzie. Nie sadze, by dalo sie zrobic tak, ze puszczam na siec zdanie, a wynikiem jest odpowiedz, ale rzeczywiscie moznaby uzyc sieci zamiast wspomnianego rachunku prawdopodobienstwa. Tylko ze to wymagaloby niezwykle dlugiego uczenia :-/

0

Poza tym on jest robiony (prawdopodobnie) na zasadzie - wyszukaj jakies slowa i dopasuj jedno z przygotowanych poprzednio wypowiedzi.

Bardzo możliwe, ale pamięta także o kontekście rozmowy! Na przykład kiedy on powie, ze ma wielu ojców, to zapytaj go czy to homoseksualiści :P. Nie zareaguje tak samo kiedy pytanie będzie wyrwane z kontekstu.

0

Niedawno przeczytałem książkę "Sztuczna Inteligencja" Helionu i natrafiłem tam na coś co nazywa się sieci semantyczne. moze to będzie dobre rozwiązanie. Zrozumienie samych tych sieci jest dziecinnie proste ale problem zaczyna się przy napisaniu programu który je wykorzystuje.

0

ale z calymi zdaniami chyba nie pojdzie. Nie sadze, by dalo sie zrobic tak, ze puszczam na siec zdanie, a wynikiem jest odpowiedz

Te sieci obrazy rozpoznają a ty mowisz, ze ze zdaniami by sobie nie poradzily?

0

Tak, bo w rozpoznawaniu obrazow siec po prostu porownuje obrazy. Np. jesli siec ma rozpoznawac pismo odreczne, to po prostu gdy sie ja uczy pokazuje sie kazda litere i pisze jaki ma byc wynik. W calych zdaniach sytuacja jest bardziej skomplikowana, bo przeciez siec nie moze dostac wszystkich mozliwych odpowiedzi na wyjsciu!

0

Uczenie wlasnie <ort>oprzeć</ort> na obrazach... Tzn dac do pamieci kilka krzesel (obrazkow z krzeslami) i ort! ort! tych obrazkow doporowadzic do stanu gdzie bot bedzie wstanie wylowic krzeslo z tla. Potem w pamieci zostalo by stworzone wirtualne krzeslo i sprawdzenie jakie podstawowe prawia ort! dzialaja. (tzn dzieki 4 noga moze stac ort! sie, da sie je przesuwac itd...). Potem wyniki zostana zapisane (taka symulacja troche obciaza wiec by ort! tego robic caly czas ale ort! z wczesniejszych wynikow jezeli znowu bedzie chodzic o ort!). Ok to jak graficznie jest wstanie rozpoznwac kszesla to juz polowa sukcesu jak ktos wypowie krzeslo to bedzie wiedziec jaki ma ksztalt i jak ort!. Wazna ort! by bylo by ort! podstawowe ort! czlowieka (obrazowo) np jak ort! ort! czlowiek jak siedzacy na... [krzesle]. I teraz np bot zobaczyl ort! (<ort>mógłby</ort> samemu ort! internet) z czlowiekiem na ort!. Mialby dane o krzesle i o czlowieku(minimum danych tzn gdzie czlowiekowi sie co zgina i ort! ort! co sluzy). Teraz <ort>mógłby</ort> powiazac krzeslo z cialem czlowieka i np z odpoczynkiem. I ort! powiazac slowa ort! obrazami. Czyli ktos pwoeidzial ort! na krzesle. Wywowal by sie<ort> obras</ort> siadania i krzesla ort! (dodatkowo obraz clzowieka siedzacego na ort!).<ort> Niewdajac </ort>sie w ort! opierajac sie na podstawach <ort>anatomi </ort>czlowieka bot <ort>opracowal by </ort>co bylo pomiedzy 2 obrazami (stojacy clzowiek ort! ort! i siedzacy ort!). Taka metoda dzialania bot by nawet skapowaal zdanie Gdy ort! na krzesle ort! sie i wszystko <ort>wywrucilem;]</ort>

Calosc najlepiej zrobic w sieciach neuronowych ale po kilku<ort> prubach</ort> obcizajacych starszelknie system mozna by czesc sieci neuronowej zastapic odzielnym ukladem elektronicznym. Dzieki temu moglo by to w miare pl;yuwnie chodzic w zalozeniu 1 komp 1 bot;]]]]]

Ale zamotalem;]] Ale mam nadzieje ze zrozumieliscie ort! mi chodzilo;]ort!

//Czy ty jestes debilem?? - lofix

0

Cześć jak skończysz możesz mi to przesłać na [email protected]??
Ja próbowałem zrobić program do rozmowy z komputerem przez mikrofon i głośniki ale funkcja rozpoznawania głosu mi nie działała.
[browar]

0

Jeśli chodzi o tworzenie słownika, to można z góry wykorzystać słownik z jakiegoś programu do sprawdzania pisowni, i uznać "na bank", że są prawidłowe. Dopiero te niewystępujące w takim 100% poprawnym słowniku obrabiać, szukając wyrazów podobnych.

0

Jeśli chodzi o tworzenie słownika, to można z góry wykorzystać słownik z jakiegoś programu do sprawdzania pisowni, i uznać "na bank", że są prawidłowe. Dopiero te niewystępujące w takim 100% poprawnym słowniku obrabiać, szukając wyrazów podobnych.

MOzna też przeszukać cały dysk w poszukiwaniu e-booków, txteków i innych takich bajerków. I można też przeszukiwać sieć i analizować czy podane informacje są "poprawne", zwracając uwagę na przykład na ich powtarzalność ("jak trzecia osoba mówi ci ze masz ośle uszy to je masz " :))

0

W zasadzie mozna, ale slownik to nie wszystko, bo przeciez nie ma tam odmienionych slow, niektorych nazw wlasnych itp. itd. Za to jesli chodzi o przeszukiwanie netu, e-book'ow itd, to z kolei liczba słownistwa jest tam za duża. Problem w tym, że bot nie może znać wszystkich słów, nazw własnych, nazwisk, ale jednocześnie musi znać wiele słów potocznych itp. itd.

0

I dlatego napisałem, żeby najpierw korzystał ze słownika (przykładowo w słowniku Worda są odmieniane słowa), a potem, jak w słowniku nie będzie, to szukać gdzie indziej. Za to przeszukanie całego dysku i całego internetu trwałoby za długo, a odpowiedź, czy słowo jest gotowym przygotowanym słowniku to kwestia milisekund. Pozdrawiam! P.S. poza tym przeszukiwanie netu to też nie najlepszy pomysł - ile ludzi robi błędy na stronach, nie mówiąc o forach itp.

0

W zasadzie mozna, ale slownik to nie wszystko, bo przeciez nie ma tam odmienionych slow, niektorych nazw wlasnych itp. itd

Właśnie takie rzeczy to słownik. Odmieniane wyrazy, klasy wyrazów, cechy wspólne obiektów to właśnie jest jego słownik. Więc przeszukiwanie takich plików, w których można znaleźć właśnie odmiany wyrazów, opisy obiektów itd...

0

Bot ja bardzo dlugo nad tym myslalem (nawet <ort>probowlem </ort>napisac artykul na ten temat). Doszedlem do <ort>wnisoku </ort>ze najlepszym sposobem jest programowanie ort!.
Czyli dam na ort!
mamy <ort>objekt </ort>jem
od jem odchodz ciasto, pizza i hambureger.
komputer wie ze <ort>hambureger </ort><ort>sei </ort>je.

jak napisze jem ciasto odpisze mi cos z sensem.

Teraz <ort>delemat </ort>nauki.
To proste jesli napisze jem kanpke to komputer wie co to znaczy jem.
Wtedy zapyta co robi sie z kanapka i odpowiem , jem ja.
Nastepnie sie <ort>zpyta </ort>co to jest?
Odpowiem jedzenie. Program przeszuka baze danych aby <ort>zanlesc </ort>slowo jedzenie i bedzie wiedzial co to <ort>zanczy </ort>slowo kanapka.
Teraz juz <ort>rozmumie </ort>zdanie jem kanapke i odpowiednio je zinterpretuje.
Oczywiscie jest jedno ale. Musi <ort>itniec </ort><ort>podstaowa </ort>baza danych slow dzieki ktorym <ort>zrozummie </ort>inne nowe.
Mysle ze zrozumieliscie <ort>oco </ort>mi chodzi
Do zobaczenia!!
Sprobuje <ort>dokonczysc </ort>artykul o tym to <ort>zamiesz </ort>na stronie do sciagniecia.

// wiesz co? lepiej nie pisz tego artykulu, bo nikt nie będzie w stanie go przeczytać :| - ŁF
// czy Kondzi i songoten to ta sama osoba? :> - ŁF

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