{"id":28561310,"url":"https://github.com/edoardopona/steve","last_synced_at":"2026-05-18T19:02:07.052Z","repository":{"id":170296124,"uuid":"134901965","full_name":"EdoardoPona/STEVE","owner":"EdoardoPona","description":"STEVE will be a deep learning general purpose chatbot. Initially it will be completely useless but fun. Later on it could turn useful. ","archived":false,"fork":false,"pushed_at":"2018-05-27T14:57:13.000Z","size":14,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-10T10:53:16.303Z","etag":null,"topics":["artificial-intelligence","chatbot","neural-networks","pytorch","seq2seq-chatbot"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EdoardoPona.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-05-25T20:30:30.000Z","updated_at":"2018-06-01T14:25:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"ac75ef99-d745-4f24-a046-af34585be260","html_url":"https://github.com/EdoardoPona/STEVE","commit_stats":null,"previous_names":["edoardopona/steve"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EdoardoPona/STEVE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EdoardoPona%2FSTEVE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EdoardoPona%2FSTEVE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EdoardoPona%2FSTEVE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EdoardoPona%2FSTEVE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EdoardoPona","download_url":"https://codeload.github.com/EdoardoPona/STEVE/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EdoardoPona%2FSTEVE/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280761857,"owners_count":26386245,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-24T02:00:06.418Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artificial-intelligence","chatbot","neural-networks","pytorch","seq2seq-chatbot"],"created_at":"2025-06-10T10:41:58.756Z","updated_at":"2025-10-24T07:52:07.824Z","avatar_url":"https://github.com/EdoardoPona.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# STEVE\nSTEVE will be a deep learning general purpose chatbot. Initially it will be only entertaining, the objective is just getting\nit to answer something decent. Later on it will be an app, and after that it would be nice to make it do something actually \nuseful for people. \n\nThe model I am trying is, as far as I know, new, as I haven't seen it used anywhere. This might be explained by the fact that \nat the moment it doesn't work. The high level idea is to have an encoder and a decoder to get sentence level meaning vectors, \nand a neural network into which you feed these meaning vectors to get an answer's meaning vector. I like to call this the 'TSN'\nas in Talking (should be used for chatbots, if it will ever work) Sandwich Network. RNN's are bread and feedforward nets\nare the meat. \n\nEncoder: \nThis is composed of two parts. A character level word encoder and a word level sentence encoder. The words in the input \nsentence are fed into the word encoder ,which is a character level RNN, one by one, and the hidden state is the word's meaning\nvector. These word meaning vectors are concatenated and fed into the sentence level encoder which does the same thing. \nThe hidden state of this RNN is our sentence meaning. \n\nMiddle Layer: \nThis is simply a feedforward fully connected network at the moment. It is what I am currently working on and trying to improve.\nIt receives a meaning vector from the encoder and outputs the answer's meaning vector. \n\nDecoder: \nThis is an RNN that starts with the answer's meaning vector as initial hidden state and a start of sequence character as first \ninput. The outputs at every timestep are the word level meaning vectors, which are individually fed to a word level decoder \nwhich works in the same exact way. The outputs from this are concatenated appended to a list. Each entry in the list is a\nmatrix of probabilities of characters for every word. \n\nTraining: \nThere are several options, of which I have only tried one. \n\noption 1:\nThe one I originally had in mind, which I have tried, consists in training the word encoder and decoder as an autoencoder, then\ntraining the sentence encoder and decoder as an autoenocoder as well without updating the word encoder/decoder weights. Finally\nfeed sentence vectors into the middle layer and train that without updating the other networks. When training the middle layer\nthe target obviously isn't the input sentence as it was for the sentence autoencoder, but a valid asnwer. \nThe word and sentence level autoencoders work, but training the middle layer doesn't produce any valid answer. \n\noption 2: \nInstead of training the word level autoencoder and the sentence level one separately, update their weights at the same time.\nThis way there will be no direct correspondence between word encodings (meaning that if you feed a word's vector into the word \ndecoder you might not get the exact word out of it) but it should work at the sentence level. After doing that you train the \nmiddle layer the same way it is done in option1.\n\noption 3:\ntrain everything together directly on the final task. \n\nThe loss can be on the final outputs, or in the first two cases it can also be the difference between the middle layer output\nand the target meaning vector (which would not otherwise be calculated as you would use the character probabilities with the \nmodel output). \n\nThings I'm working on:\nImplementing attention. \nAlternative models for the middle layer. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedoardopona%2Fsteve","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedoardopona%2Fsteve","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedoardopona%2Fsteve/lists"}