# End-to-end Training \[Experimental\]

**URL:** <https://forum.rasa.com/t/end-to-end-training-experimental/38158>\
**Category:** Important Updates\
**Created:** [December 17, 2020, 3:32pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158 "2020-12-17T15:32:08Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Emma](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/emma/32/4620_2.png) [@Emma](https://forum.rasa.com/u/Emma)\
**Post date:** [December 17, 2020, 3:32pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/1 "2020-12-17T15:32:08Z")

</div>

Hey Rasa [@community](https://forum.rasa.com/groups/community),

One year ago we wrote that it’s [about time we get rid of intents](https://blog.rasa.com/its-about-time-we-get-rid-of-intents/), and about how we see a future beyond the limitations of them. In order to build [level 5 assistants](https://blog.rasa.com/5-levels-of-conversational-ai-2020-update/), we believe that we should not remain stuck in the mindset that every user message has to neatly fit into one of our predefined intents.

With Rasa Open Source 2.2, we released a new experimental feature called end-to-end training, it allows you to train the dialogue policy directly on user text without separate NLU data. So instead of a two step process (an NLU prediction followed by a dialogue policy choosing the next action), Rasa can now directly predict the next action the bot should take by looking at the message the user sent.

As you work on an assistant over time to make it more sophisticated, end-to-end learning allows you to keep evolving and improving without being limited by a rigid set of intents. The benefit of this approach is that it makes intents optional.

To get a more in depth understanding of how End-to-End Training works in Rasa Open Source, check our latest blog post:

> **[We’re a step closer to getting rid of intents](https://blog.rasa.com/were-a-step-closer-to-getting-rid-of-intents/)**
>
> One year ago I wrote that it’s about time we get rid of intents, and that seems to have struck a nerve with many people working in conversational AI.

It’s important to note that, since this is an experimental feature, we don’t have full support yet across all Rasa features like interactive learning, or Rasa X.

For now, think of end-to-end learning as a feature for advanced teams who want to push the limits of what Rasa Open Source can do. This has been a massive joint effort from our research and engineering teams, and we believe it’s a major piece of the puzzle towards better conversational AI. As we get feedback and learn about how to best use end-to-end in production systems, we’ll build more tooling, provide more examples and docs, and turn this into a feature our whole community can benefit from.

---

<div class="post-metadata">

**Author:** ![tatianaf](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/tatianaf/32/7906_2.png) [@tatianaf](https://forum.rasa.com/u/tatianaf)\
**Post date:** [December 17, 2020, 4:28pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/2 "2020-12-17T16:28:52Z")

</div>

This looks like a really exciting feature! Can’t wait to experiment with this next year!

---

<div class="post-metadata">

**Author:** ![inthematrix](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/inthematrix/32/12458_2.png) [@inthematrix](https://forum.rasa.com/u/inthematrix)\
**Post date:** [December 17, 2020, 4:41pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/3 "2020-12-17T16:41:31Z")

</div>

As part of [We’re a step closer to getting rid of intents](https://blog.rasa.com/were-a-step-closer-to-getting-rid-of-intents/), the training example towards the end of the post:

```auto
version: "2.0"

stories:
- story: end to end happy path
  steps:
  - user: “hi”
  - bot: “hi!”
  - user: “I’m looking for a restaurant”
  - bot: “how about Chinese food?”
  - user: “sure”
  - bot: “here’s what I found ...”

```

Was wondering how to extract entities like cuisine (chinese in this case)?

---

<div class="post-metadata">

**Author:** ![sebastian](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/sebastian/32/10638_2.png) [@sebastian](https://forum.rasa.com/u/sebastian)\
**Post date:** [December 17, 2020, 4:42pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/4 "2020-12-17T16:42:10Z")

</div>

Great progress, this sounds very interesting. Especially for handling ambiguous, context-sensitive utterances. One question for now: Let’s say I have more than one concrete user utterance I would like to use in story at a specific point as an alternative to an intent. Do I in this case create two (or more) completely separate stories or can I somehow combine the concrete utterance variants in one single story?

---

<div class="post-metadata">

**Author:** ![Nasnl](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/nasnl/32/9755_2.png) [@Nasnl](https://forum.rasa.com/u/Nasnl)\
**Post date:** [December 17, 2020, 4:51pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/5 "2020-12-17T16:51:09Z")

</div>

Sounds super exciting. I’m just about to start the design of a new bot next week. Not super critical, so would you say that I could best start with this feature right away rather than first using the ‘traditional way’ and later rebuild?

---

<div class="post-metadata">

**Author:** ![aymen](https://avatars.discourse-cdn.com/v4/letter/a/8e8cbc/32.png) [@aymen](https://forum.rasa.com/u/aymen)\
**Post date:** [December 18, 2020, 9:12am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/6 "2020-12-18T09:12:58Z")

</div>

exciting

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [December 18, 2020, 9:18am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/7 "2020-12-18T09:18:11Z")

</div>

> [@inthematrix](#):
>
> Was wondering how to extract entities like cuisine (chinese in this case)?

Please take a look at the docs for how to create stories for e2e training: [Training Data Format](https://rasa.com/docs/rasa/training-data-format#end-to-end-training)

You can mark entities in user text in the same way, you mark entities in the NLU data

```auto
version: "2.0"

stories:
- story: end to end happy path
  steps:
  - user: “hi”
  - bot: “hi!”
  - user: “I’m looking for a restaurant”
  - bot: “how about [Chinese](cuisine) food?”
  - user: “sure”
  - bot: “here’s what I found ...”

```

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [December 18, 2020, 9:19am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/8 "2020-12-18T09:19:32Z")

</div>

you need to create as many stories as you have utterances. This is why we keep intents, because quite often, if you can imagine a lot of such utterances, it is better to create an intent for it

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [December 18, 2020, 9:20am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/9 "2020-12-18T09:20:29Z")

</div>

I don’t suggest to use it in production. I’d recommend to do it in a ‘traditional way’. Why do you want to rebuild it later?

---

<div class="post-metadata">

**Author:** ![Nasnl](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/nasnl/32/9755_2.png) [@Nasnl](https://forum.rasa.com/u/Nasnl)\
**Post date:** [December 18, 2020, 9:38am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/10 "2020-12-18T09:38:37Z")

</div>

Thanks @Ghostvv. At first I didn’t pick up on that intents will still exist next to it; that’s clear now and no rebuild is required to ‘a next version’.

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [December 18, 2020, 9:52am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/11 "2020-12-18T09:52:49Z")

</div>

glad to clarify. Intents are very useful, but we expect `e2e` to be useful as well, we’re trying to find a “mixed” approach (you can have intents and texts in the same story, but in different dialogue turns) in the same sense as we implemented rules so that they work together with ML.

---

<div class="post-metadata">

**Author:** ![kearnsw](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/kearnsw/32/4838_2.png) [@kearnsw](https://forum.rasa.com/u/kearnsw)\
**Post date:** [December 18, 2020, 2:35pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/12 "2020-12-18T14:35:29Z")

</div>

I am wondering if you all have thought of a hybrid approach instead of deprecating intents in later releases. That is, you train the model end-to-end, but use scaffolding as with the MOSS framework that trains on all available data (using them as intermediate outputs):

> **[MOSS: End-to-End Dialog System Framework with Modular Supervision](https://arxiv.org/abs/1909.05528)**
>
> A major bottleneck in training end-to-end task-oriented dialog system is the
> lack of data. To utilize limited training data more efficiently, we propose
> Modular Supervision Network (MOSS), an encoder-decoder training framework that
> could incorporate...

In this way, the user can provide data in the end-to-end format, traditional format, or a mixture.

I see Vladimir is already on this post, but thought I’d loop in @amn41 as well.

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [December 21, 2020, 9:10am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/13 "2020-12-21T09:10:46Z")

</div>

as I said above, we’re not deprecating intents, you can have hybrid stories:

```auto
stories:
- story: full end-to-end story
  steps:
  - intent: greet
    entities:
    - name: Ivan
  - bot: Hello, a person with a name!
  - intent: search_restaurant
  - action: utter_suggest_cuisine
  - user: I can always go for [sushi](cuisine)
  - bot: Personally, I prefer pizza, but sure let's search sushi restaurants
  - action: utter_suggest_cuisine
  - user: Have a beautiful day!
  - action: utter_goodbye

```

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [December 21, 2020, 9:12am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/14 "2020-12-21T09:12:28Z")

</div>

in a sense our current approach with intents is a modular supervision approach

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [December 21, 2020, 9:14am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/15 "2020-12-21T09:14:18Z")

</div>

with our hybrid `e2e` approach, we try to solve the problem when intermediate labels are unknown, therefore there is no supervision signal from intent labels at all. And we implement it so that you can have all the different mixtures.

---

<div class="post-metadata">

**Author:** ![DeqianBai](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/deqianbai/32/19826_2.png) [@DeqianBai](https://forum.rasa.com/u/DeqianBai)\
**Post date:** [December 23, 2020, 8:18am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/16 "2020-12-23T08:18:34Z")

</div>

what the meaning of " user turns"？

---

<div class="post-metadata">

**Author:** ![Rajendra9](https://avatars.discourse-cdn.com/v4/letter/r/3ec8ea/32.png) [@Rajendra9](https://forum.rasa.com/u/Rajendra9)\
**Post date:** [December 30, 2020, 6:43pm UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/17 "2020-12-30T18:43:37Z")

</div>

when are you going to plan this to do practically.

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [January 5, 2021, 11:01am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/18 "2021-01-05T11:01:08Z")

</div>

“user turn” - is the dialogue turn that contain an input from the user

---

<div class="post-metadata">

**Author:** ![Ghostvv](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/ghostvv/32/211_2.png) [@Ghostvv](https://forum.rasa.com/u/Ghostvv)\
**Post date:** [January 5, 2021, 11:01am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/19 "2021-01-05T11:01:41Z")

</div>

what do you mean? end-to-end training is released in rasa open source 2.2

---

<div class="post-metadata">

**Author:** ![Aspirinkb](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.rasa.com/aspirinkb/32/11878_2.png) [@Aspirinkb](https://forum.rasa.com/u/Aspirinkb)\
**Post date:** [January 13, 2021, 3:18am UTC](https://forum.rasa.com/t/end-to-end-training-experimental/38158/20 "2021-01-13T03:18:18Z")

</div>

Great!

[Next page](https://forum.rasa.com/t/end-to-end-training-experimental/38158.md?page=2)
