chatterbot-corpus: training data for ChatterBot, and the limits of a community corpus
A multilingual dialog corpus
At a glance
- What is it?
- chatterbot-corpus packages YAML dialog data for priming a ChatterBot database. It is easy to install and easy to extend, but the quality of any single language depends on who contributed it.
- Who is it for?
- Adopt chatterbot-corpus if you want a quick, BSD-3-Clause starting point for a ChatterBot bot and you are willing to read the YAML before trusting it. Do not adopt it as a general-purpose dialog dataset for another framework, since the files are structured around ChatterBot's conversation pairs.
- Can I use it commercially?
- Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 176 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What chatterbot-corpus is for, and who it is not for
ChatterBot is designed to be language independent, but a fresh database has nothing to respond with. chatterbot-corpus exists to fill that gap: the README says the modules are used "to quickly train ChatterBot to respond to various inputs in different languages" and to "prime a fresh database" so the variety of responses is more diverse. The package is a data distribution, not an algorithm. It ships YAML files that ChatterBot reads during training.
The intended user is someone already building on ChatterBot who wants their bot to say something plausible on day one instead of returning empty or default responses. A second audience is people adding a new language: the README asks anyone interested in supporting a new language to create a pull request, and states that additions are welcomed. If you are building a retrieval system, a fine-tuning dataset, or an evaluation benchmark for a different framework, this is the wrong shape of data. The corpus is organized as ordered conversation pairs, and the README notes that all training data is user contributed, which tells you what to expect about consistency across languages.
How the YAML training data is structured
Each file is a YAML document with two top-level keys. The first is categories, a list that can hold one or more labels. The second is conversations, a list of exchanges where each exchange is itself a list of utterances in order. The README gives this example, which is worth reading closely because the nesting is the whole mechanism:
categories:
- myown
- my own categories
conversations:
- - Hello
- Hello
- - Hi
- HelloThe double dash matters. A single dash starts a conversation; the second dash starts the first utterance inside it. So the first conversation is the pair (Hello, Hello) and the second is (Hi, Hello), which is why the same reply can appear for different openings. ChatterBot consumes these pairs when it trains, using them to associate inputs with responses. The categories list is metadata you choose; nothing in the README ties category names to a required vocabulary, so you can label a file with your own domain and keep it separate from the shipped languages.
The repository layout puts the data under chatterbot_corpus/, and the README instructs contributors to place new files in an existing or new directory under chatterbot_corpus\data\<NEW DIRECTORY>. That path is written with Windows separators in the README, which is a small sign of how informal the contribution guidance is.
Installing chatterbot-corpus and running a first training pass
The package is on PyPI, so the install is a normal pip install. The project metadata requires Python >=3.10,<4.0, and the test extra pulls in chatterbot itself, which is useful because the corpus is not much use without something to train.
pip install chatterbot-corpus
pip install "chatterbot-corpus[test]"The first command installs the corpus package. The second adds the test extra, which the pyproject.toml defines as flake8, sphinx, chatterbot>=1.2.12 and pyyaml>=6.0,<7.0. If you only want the YAML files and already have ChatterBot installed, the plain install is enough.
To check that your own data file is well formed before wiring it into a bot, create the file under the data directory as the README describes and run the project's own test command. The README quotes Daniel Read on untested software and then gives this invocation:
python -Wonce -m unittest discover -s tests -vRun it from the repository root. The -Wonce flag shows each warning only once, and -v makes unittest print each test name as it runs, so a malformed YAML file should surface as a failure or error rather than silently passing. This is the fastest feedback loop the project offers for data edits; the README does not describe a separate validation CLI, so the test suite is the check you have.
Where the corpus is thin, and where it will not help
The README is candid that content quality varies. It states that the project strives for factual correctness, proper grammar and spelling, but adds that because this is community contributed there "may be occasional mistakes or inaccuracies", and points readers to CONTRIBUTING.md. That is an honest admission, and it has practical consequences. Coverage is not uniform across languages. Nothing in the repository metadata or README guarantees a minimum number of conversations per language, so the only way to know whether a given language is usable for your domain is to open its directory and count. A language with a few dozen greeting exchanges will produce a bot that greets well and fails at everything else.
The second limitation is structural. Conversation pairs teach associations, not reasoning. If your product needs the bot to answer questions about a database, follow a policy, or refuse unsafe requests, training data of the form (input, response) does not give you a place to express that. You would be layering rules or retrieval on top of ChatterBot, at which point the corpus is a small part of the system. Finally, the project classifies itself as Development Status :: 4 - Beta in pyproject.toml. Treat version numbers accordingly: the release history shows 1.3.1, 1.3.2 and 1.3.3 within roughly seven weeks in early 2026, and the last push was on 2026-03-24, so the data can shift between minor releases.
Alternatives: hand-written training data versus a larger dialog dataset
The most direct alternative is to skip the corpus and write your own YAML in the same format. You keep the mechanism, the categories and conversations keys, and the ChatterBot training path, but every pair is one you control. For a narrow assistant this is often better than inheriting community data, because you avoid replies that are grammatical but irrelevant to your product. The cost is time: you are writing the pairs yourself, and the diversity the README mentions as the point of the corpus is exactly what you give up.
The second alternative is a large general dialog dataset from a different source and a different framework. Those datasets are typically much bigger than any single language directory here, but they are not organized as ChatterBot conversation pairs, so you would write a conversion step and lose the drop-in property. They also come with their own licensing questions, which this project does not have to answer for you. The honest summary is that chatterbot-corpus wins on integration and loses on scale and domain fit. If your priority is getting a ChatterBot instance to respond today, integration wins. If your priority is measurable coverage, a purpose-built dataset does.
Licence and the cost of keeping up
The project is BSD-3-Clause, stated in package.json, in the license field of pyproject.toml and in the repository's license.md file. ChatterBot itself is a separate package with its own terms, so if you install the test extra you are pulling in chatterbot>=1.2.12 under whatever licence that project carries. The corpus metadata does not describe per-file provenance beyond the statement that all training data is user contributed, so if you need to attribute individual contributors or clear rights for commercial redistribution, the repository does not give you that mapping. That is a question for your own legal review, not something the README answers.
Upgrade cost is mostly data review. Because the package is versioned and the corpus changes between releases, a pip upgrade can change what your bot says without any change to your code. Pinning the version in your requirements and reading the diff of the language directories you actually use is the cheap way to avoid surprise behaviour changes. The maintenance signal is mixed: the last push was on 2026-03-24, and releases 1.3.1 through 1.3.3 landed in February and March 2026, so the project is not dormant, but the beta classifier and the community-contributed data mean you should not treat any single language as curated.
Editorial conclusion
Adopt chatterbot-corpus if you want a quick, BSD-3-Clause starting point for a ChatterBot bot and you are willing to read the YAML before trusting it. Do not adopt it as a general-purpose dialog dataset for another framework, since the files are structured around ChatterBot's conversation pairs. Before shipping, open the language directory you plan to use and check how many conversations it actually contains, then run python -Wonce -m unittest discover -s tests -v after any edit you make to the data.
Frequently asked questions
How do I install chatterbot-corpus?
Install it from PyPI with pip install chatterbot-corpus. The project metadata requires Python >=3.10,<4.0. There is also a test extra, installed as pip install "chatterbot-corpus[test]", which adds flake8, sphinx, chatterbot>=1.2.12 and pyyaml>=6.0,<7.0.
What does a chatterbot-corpus YAML file look like?
Each file has a categories list and a conversations list. Inside conversations, a single dash starts a conversation and a second dash starts the first utterance, so the README example defines the pairs (Hello, Hello) and (Hi, Hello).
Can I add my own training data to chatterbot-corpus?
Yes. The README says to create or copy a .yml file and place it in an existing or new directory under chatterbot_corpus\data\<NEW DIRECTORY>, then edit it with any text editor. It also invites pull requests for new language support.
Community notes