From bad7cd7ce4efe53045b437c145aef887f84544c1 Mon Sep 17 00:00:00 2001 From: cabreraalex Date: Tue, 24 Oct 2023 13:54:15 +0000 Subject: [PATCH] deploy: be183747abfcf327515c5749bb5532c66d02bd8b --- 404.html | 4 ++-- about/index.html | 4 ++-- assets/js/842e05e7.7c163d70.js | 1 - assets/js/842e05e7.e38af7d5.js | 1 + assets/js/{935f2afb.cd332b02.js => 935f2afb.ff0d6054.js} | 2 +- ...{runtime~main.195bb128.js => runtime~main.38a13884.js} | 2 +- blog/archive/index.html | 4 ++-- blog/index.html | 4 ++-- blog/tags/index.html | 4 ++-- blog/tags/introduction/index.html | 4 ++-- blog/welcome-post/index.html | 4 ++-- docs/intro/index.html | 4 ++-- docs/python-client/index.html | 4 ++-- docs/using-zeno/index.html | 8 ++++---- docs/views/index.html | 4 ++-- index.html | 4 ++-- 16 files changed, 29 insertions(+), 29 deletions(-) delete mode 100644 assets/js/842e05e7.7c163d70.js create mode 100644 assets/js/842e05e7.e38af7d5.js rename assets/js/{935f2afb.cd332b02.js => 935f2afb.ff0d6054.js} (71%) rename assets/js/{runtime~main.195bb128.js => runtime~main.38a13884.js} (97%) diff --git a/404.html b/404.html index 2ba606d..b7052f8 100644 --- a/404.html +++ b/404.html @@ -13,7 +13,7 @@ - + @@ -21,7 +21,7 @@
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/about/index.html b/about/index.html index feb27ec..750502b 100644 --- a/about/index.html +++ b/about/index.html @@ -13,7 +13,7 @@ - + @@ -21,7 +21,7 @@
Skip to main content

About Us

Zeno is designed, built, and maintained by a team of interdisciplinary researchers at Carnegie Mellon University. We span research groups in Machine Learning, Human-Computer Interaction, and Language Technologies. We are passionate about empowering people to understand the complexities of AI systems in order to design the future of responsible AI.

Team

Alex Cabrera

PhD Candidate

Alex Bäuerle

Research Scientist

Erica Fu

Undergraduate Student

Ankitha Vasudev

Masters Student

Kathy Yu

Masters Student

Josh Zhou

Undergraduate Student

Donald Bertucci

Undergraduate Student

Ameet Talwalkar

Associate Professor

Graham Neubig

Associate Professor

Jason Hong

Professor

Adam Perer

Assistant Professor

Past Members

Tianqi Wu

Masters Student

Yi-Cheng Huang

Research Associate

Sponsors & Organizations

We are thankful to our sponsors and affiliated organizations. Zeno is part of the Mozilla Technology Fund and developed partly with the support of multiple NSF grants and fellowships.

Mozilla logoMozilla logoCMU logo

Contact

If you have any questions or issues with Zeno please send an email to hello@zenoml.com, ask in our Discord, or open an issue on GitHub

Cite

Please reference our CHI 2023 paper if you would like to cite Zeno:


@inproceedings{cabrera23zeno,
author = {Cabrera, Ángel Alexander and Fu, Erica and Bertucci, Donald and Holstein, Kenneth and Talwalkar, Ameet and Hong, Jason I. and Perer, Adam},
title = {Zeno: An Interactive Framework for Behavioral Evaluation of Machine Learning},
year = {2023},
isbn = {978-1-4503-9421-5/23/04},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3544548.3581268},
doi = {10.1145/3544548.3581268},
booktitle = {CHI Conference on Human Factors in Computing Systems},
location = {Hamburg, Germany},
series = {CHI '23}
}
- + \ No newline at end of file diff --git a/assets/js/842e05e7.7c163d70.js b/assets/js/842e05e7.7c163d70.js deleted file mode 100644 index cdabaef..0000000 --- a/assets/js/842e05e7.7c163d70.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[954],{36:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var o=a(7462),n=(a(7294),a(3905));const i={},l="Using Zeno",r={unversionedId:"using-zeno",id:"using-zeno",title:"Using Zeno",description:"To highlight the main features and uses of Zeno, we walk through an example of using Zeno to explore a dataset of customer service emails, which you can explore in our chatbot report.",source:"@site/docs/using-zeno.mdx",sourceDirName:".",slug:"/using-zeno",permalink:"/docs/using-zeno",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Python Client API",permalink:"/docs/python-client"},next:{title:"Instance views",permalink:"/docs/views/"}},s={},u=[{value:"Data and Model Output Exploration",id:"data-and-model-output-exploration",level:2},{value:"Chart Building",id:"chart-building",level:2},{value:"Qualitative Comparison",id:"qualitative-comparison",level:2}],p={toc:u},h="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(h,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"using-zeno"},"Using Zeno"),(0,n.kt)("p",null,"To highlight the main features and uses of Zeno, we walk through an example of using Zeno to explore a dataset of customer service emails, which you can explore in our ",(0,n.kt)("a",{parentName:"p",href:"https://zeno-ml-chatbot-report.hf.space/"},"chatbot report"),"."),(0,n.kt)("p",null,"You can explore the code that created this Zeno report in the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/zeno-ml/zeno-build/tree/main/examples/chatbot"},"Zeno Build repository"),"."),(0,n.kt)("h2",{id:"data-and-model-output-exploration"},"Data and Model Output Exploration"),(0,n.kt)("p",null,"When you first open Zeno you will see your data instances on the right hand side and metadata distributions on the left hand side."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/blob/main/docs/images/zeno-walkthrough-initial-page.png?raw=true",alt:"Zeno Screenshot"})),(0,n.kt)("p",null,"The metadata distributions on the left show summary visualizations of columns in your dataset:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-feature-display.png",alt:"Metadata view"})),(0,n.kt)("p",null,"If you want to filter down your data to only include examples that have a particular value for a feature:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Textual Features:"),' Type in a value in the text box and click "set". You can also use regexes or adjust case-sensitivity by pressing the buttons.'),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Numerical Features:")," Dragging the slider to select a range of values."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Categorical Features:")," Clicking on a specific value in the bar chart (not displayed above).")),(0,n.kt)("p",null,'For instance, if we want to find all examples that have a length of 100 or fewer characters that contain the string "sorry", you can filter the "label and "label_length" features, and see that the displayed examples on the right are updated.'),(0,n.kt)("p",null,"Once you've found a subset of the data that you're interested in, you can save it for future analysis and monitoring by clicking the \"Create a new Slice\" button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-create-slice.png",alt:"Slice Creation"})),(0,n.kt)("p",null,"You can also arrange slices into folders for easier browsing."),(0,n.kt)("p",null,"This slicing is very powerful functionality if you get creative with the features and patterns that you use! If you want to try to add new features, you can implement them and add them to the config.py file in the examples that you're using, some examples below:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/chatbot/config.py#L187-L201"},"Features for Chatbots")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/analysis_gpt_mt/config.py#L117-L134"},"Features for Translation"))),(0,n.kt)("h2",{id:"chart-building"},"Chart Building"),(0,n.kt)("p",null,'Once you have some models to compare and some slices to compare them on, you can start building interactive charts to summarize model performance. To do this, click on the "Charts" button on the left of the page:'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-button.png",alt:"Chart tab"})),(0,n.kt)("p",null,"This will take you to a page that shows all of your created charts:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-page.png",alt:"Charts"})),(0,n.kt)("p",null,"You can create new charts by interactively selecting slices, metrics, and models. For example, you can create a chart comparing model performance across instances with short, medium, or long ground truth labels:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-report-slices.png",alt:"Chart example"})),(0,n.kt)("h2",{id:"qualitative-comparison"},"Qualitative Comparison"),(0,n.kt)("p",null,"One final handy feature of Zeno is the ability to compare the outputs of two models on the same examples. You can do this by clicking on the qualitative comparison button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-button.png",alt:"Qualitative comparison"})),(0,n.kt)("p",null,"On the page, you can then select the two models you want to compare side-by-side, and select the metric you'd like to compare them by. Here we choose ",(0,n.kt)("inlineCode",{parentName:"p"},"gpt-3.5-turbo")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"vicuna")," and compare them according to the ",(0,n.kt)("inlineCode",{parentName:"p"},"bert_score")," metric."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-standard.png",alt:"Comparison"})),(0,n.kt)("p",null,'You can also sort the outputs by the difference between the scores between the two systems by clicking on the header of the "difference" column. This allows you to find examples where one of the two systems produces much better outputs than the other, such as the one below where one model suddenly went off track and produced an incomprehensible output.'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-sorted.png",alt:"Example find"})))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/842e05e7.e38af7d5.js b/assets/js/842e05e7.e38af7d5.js new file mode 100644 index 0000000..b636cee --- /dev/null +++ b/assets/js/842e05e7.e38af7d5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[954],{36:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var o=a(7462),n=(a(7294),a(3905));const i={},l="Using Zeno",r={unversionedId:"using-zeno",id:"using-zeno",title:"Using Zeno",description:"Explore Zeno's interface and features.",source:"@site/docs/using-zeno.mdx",sourceDirName:".",slug:"/using-zeno",permalink:"/docs/using-zeno",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Python Client API",permalink:"/docs/python-client"},next:{title:"Instance views",permalink:"/docs/views/"}},s={},u=[{value:"Quickstart Video",id:"quickstart-video",level:3},{value:"Data and Model Output Exploration",id:"data-and-model-output-exploration",level:2},{value:"Chart Building",id:"chart-building",level:2},{value:"Qualitative Comparison",id:"qualitative-comparison",level:2}],c={toc:u},p="wrapper";function h(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,o.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"using-zeno"},"Using Zeno"),(0,n.kt)("p",null,"Explore Zeno's interface and features."),(0,n.kt)("h3",{id:"quickstart-video"},"Quickstart Video"),(0,n.kt)("p",null,"We recommend you watch the following video for a quick overview of Zeno's features."),(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/28eLbSSUZOA?si=8VVSzaV-LIv6CJ4H",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowfullscreen:!0}),(0,n.kt)("p",null,"The following is a written walkthrough of Zeno's features using Zeno to explore a dataset of customer service emails."),(0,n.kt)("h2",{id:"data-and-model-output-exploration"},"Data and Model Output Exploration"),(0,n.kt)("p",null,"When you first open Zeno you will see your data instances on the right hand side and metadata distributions on the left hand side."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/blob/main/docs/images/zeno-walkthrough-initial-page.png?raw=true",alt:"Zeno Screenshot"})),(0,n.kt)("p",null,"The metadata distributions on the left show summary visualizations of columns in your dataset:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-feature-display.png",alt:"Metadata view"})),(0,n.kt)("p",null,"If you want to filter down your data to only include examples that have a particular value for a feature:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Textual Features:"),' Type in a value in the text box and click "set". You can also use regexes or adjust case-sensitivity by pressing the buttons.'),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Numerical Features:")," Dragging the slider to select a range of values."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Categorical Features:")," Clicking on a specific value in the bar chart (not displayed above).")),(0,n.kt)("p",null,'For instance, if we want to find all examples that have a length of 100 or fewer characters that contain the string "sorry", you can filter the "label and "label_length" features, and see that the displayed examples on the right are updated.'),(0,n.kt)("p",null,"Once you've found a subset of the data that you're interested in, you can save it for future analysis and monitoring by clicking the \"Create a new Slice\" button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-create-slice.png",alt:"Slice Creation"})),(0,n.kt)("p",null,"You can also arrange slices into folders for easier browsing."),(0,n.kt)("p",null,"This slicing is very powerful functionality if you get creative with the features and patterns that you use! If you want to try to add new features, you can implement them and add them to the config.py file in the examples that you're using, some examples below:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/chatbot/config.py#L187-L201"},"Features for Chatbots")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/analysis_gpt_mt/config.py#L117-L134"},"Features for Translation"))),(0,n.kt)("h2",{id:"chart-building"},"Chart Building"),(0,n.kt)("p",null,'Once you have some models to compare and some slices to compare them on, you can start building interactive charts to summarize model performance. To do this, click on the "Charts" button on the left of the page:'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-button.png",alt:"Chart tab"})),(0,n.kt)("p",null,"This will take you to a page that shows all of your created charts:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-page.png",alt:"Charts"})),(0,n.kt)("p",null,"You can create new charts by interactively selecting slices, metrics, and models. For example, you can create a chart comparing model performance across instances with short, medium, or long ground truth labels:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-report-slices.png",alt:"Chart example"})),(0,n.kt)("h2",{id:"qualitative-comparison"},"Qualitative Comparison"),(0,n.kt)("p",null,"One final handy feature of Zeno is the ability to compare the outputs of two models on the same examples. You can do this by clicking on the qualitative comparison button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-button.png",alt:"Qualitative comparison"})),(0,n.kt)("p",null,"On the page, you can then select the two models you want to compare side-by-side, and select the metric you'd like to compare them by. Here we choose ",(0,n.kt)("inlineCode",{parentName:"p"},"gpt-3.5-turbo")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"vicuna")," and compare them according to the ",(0,n.kt)("inlineCode",{parentName:"p"},"bert_score")," metric."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-standard.png",alt:"Comparison"})),(0,n.kt)("p",null,'You can also sort the outputs by the difference between the scores between the two systems by clicking on the header of the "difference" column. This allows you to find examples where one of the two systems produces much better outputs than the other, such as the one below where one model suddenly went off track and produced an incomprehensible output.'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-sorted.png",alt:"Example find"})))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.cd332b02.js b/assets/js/935f2afb.ff0d6054.js similarity index 71% rename from assets/js/935f2afb.cd332b02.js rename to assets/js/935f2afb.ff0d6054.js index cfa21fb..c2ac3c6 100644 --- a/assets/js/935f2afb.cd332b02.js +++ b/assets/js/935f2afb.ff0d6054.js @@ -1 +1 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/intro","docId":"intro"},{"type":"link","label":"Python Client API","href":"/docs/python-client","docId":"python-client"},{"type":"link","label":"Using Zeno","href":"/docs/using-zeno","docId":"using-zeno"},{"type":"link","label":"Instance views","href":"/docs/views/","docId":"views/views"}]},"docs":{"intro":{"id":"intro","title":"Getting Started","description":"Zeno is an interactive platform for AI evaluation for exploring, discovering and reporting the performance of your models.","sidebar":"tutorialSidebar"},"python-client":{"id":"python-client","title":"Python Client API","description":"The Python client is used to create projects and upload data.","sidebar":"tutorialSidebar"},"using-zeno":{"id":"using-zeno","title":"Using Zeno","description":"To highlight the main features and uses of Zeno, we walk through an example of using Zeno to explore a dataset of customer service emails, which you can explore in our chatbot report.","sidebar":"tutorialSidebar"},"views/views":{"id":"views/views","title":"Instance views","description":"Zeno Instance Views are modular renderers for different data types and tasks.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/intro","docId":"intro"},{"type":"link","label":"Python Client API","href":"/docs/python-client","docId":"python-client"},{"type":"link","label":"Using Zeno","href":"/docs/using-zeno","docId":"using-zeno"},{"type":"link","label":"Instance views","href":"/docs/views/","docId":"views/views"}]},"docs":{"intro":{"id":"intro","title":"Getting Started","description":"Zeno is an interactive platform for AI evaluation for exploring, discovering and reporting the performance of your models.","sidebar":"tutorialSidebar"},"python-client":{"id":"python-client","title":"Python Client API","description":"The Python client is used to create projects and upload data.","sidebar":"tutorialSidebar"},"using-zeno":{"id":"using-zeno","title":"Using Zeno","description":"Explore Zeno\'s interface and features.","sidebar":"tutorialSidebar"},"views/views":{"id":"views/views","title":"Instance views","description":"Zeno Instance Views are modular renderers for different data types and tasks.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.195bb128.js b/assets/js/runtime~main.38a13884.js similarity index 97% rename from assets/js/runtime~main.195bb128.js rename to assets/js/runtime~main.38a13884.js index 1b681a0..3f70706 100644 --- a/assets/js/runtime~main.195bb128.js +++ b/assets/js/runtime~main.38a13884.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,o,c={},n={};function f(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return c[e].call(r.exports,r,r.exports,f),r.exports}f.m=c,e=[],f.O=(t,r,a,o)=>{if(!r){var c=1/0;for(b=0;b=o)&&Object.keys(f.O).every((e=>f.O[e](r[d])))?r.splice(d--,1):(n=!1,o0&&e[b-1][2]>o;b--)e[b]=e[b-1];e[b]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};t=t||[null,r({}),r([]),r(r)];for(var n=2&a&&e;"object"==typeof n&&!~t.indexOf(n);n=r(n))Object.getOwnPropertyNames(n).forEach((t=>c[t]=()=>e[t]));return c.default=()=>e,f.d(o,c),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",60:"ae6c4130",89:"a6aa9e1f",103:"ccc49370",194:"4d0932fd",206:"f8409a7e",237:"1df93b7f",346:"989c4899",477:"b2f554cd",514:"1be78505",517:"5cd43755",533:"b2b675dd",535:"814f3328",539:"5c1fb99f",566:"c339cc82",592:"common",608:"9e4087bc",610:"6875c492",713:"a7023ddc",743:"20417f73",831:"fda116a3",918:"17896441",934:"28df1be2",954:"842e05e7",979:"5ad2500b"}[e]||e)+"."+{13:"dcf8bbfc",48:"ae5d3629",53:"cd332b02",60:"6c7f8800",89:"cfc8d2e3",103:"04542d8e",194:"0924e6f2",206:"cb894f46",237:"f47b6543",346:"45ea0b40",477:"e95f12ca",490:"9bbad5f6",514:"2c3641ec",517:"a9dd1ab8",533:"3192af58",535:"d7001619",539:"6cbab119",566:"e4577f66",592:"2b9d9296",608:"51c641ce",610:"b17c2964",713:"1c0c0cb9",743:"5d3664c4",831:"0ca767e0",918:"58b50a6b",934:"4aa3c9f8",954:"7c163d70",972:"dbc475e8",979:"2310f764"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="zeno-docs:",f.l=(e,t,r,c)=>{if(a[e])a[e].push(t);else{var n,d;if(void 0!==r)for(var i=document.getElementsByTagName("script"),b=0;b{n.onerror=n.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],n.parentNode&&n.parentNode.removeChild(n),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=l.bind(null,n.onerror),n.onload=l.bind(null,n.onload),d&&document.head.appendChild(n)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"918","01a85c17":"13","935f2afb":"53",ae6c4130:"60",a6aa9e1f:"89",ccc49370:"103","4d0932fd":"194",f8409a7e:"206","1df93b7f":"237","989c4899":"346",b2f554cd:"477","1be78505":"514","5cd43755":"517",b2b675dd:"533","814f3328":"535","5c1fb99f":"539",c339cc82:"566",common:"592","9e4087bc":"608","6875c492":"610",a7023ddc:"713","20417f73":"743",fda116a3:"831","28df1be2":"934","842e05e7":"954","5ad2500b":"979"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var c=f.p+f.u(t),n=new Error;f.l(c,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;n.message="Loading chunk "+t+" failed.\n("+o+": "+c+")",n.name="ChunkLoadError",n.type=o,n.request=c,a[1](n)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,c=r[0],n=r[1],d=r[2],i=0;if(c.some((t=>0!==e[t]))){for(a in n)f.o(n,a)&&(f.m[a]=n[a]);if(d)var b=d(f)}for(t&&t(r);i{"use strict";var e,t,r,a,o,c={},n={};function f(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return c[e].call(r.exports,r,r.exports,f),r.exports}f.m=c,e=[],f.O=(t,r,a,o)=>{if(!r){var c=1/0;for(b=0;b=o)&&Object.keys(f.O).every((e=>f.O[e](r[d])))?r.splice(d--,1):(n=!1,o0&&e[b-1][2]>o;b--)e[b]=e[b-1];e[b]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};t=t||[null,r({}),r([]),r(r)];for(var n=2&a&&e;"object"==typeof n&&!~t.indexOf(n);n=r(n))Object.getOwnPropertyNames(n).forEach((t=>c[t]=()=>e[t]));return c.default=()=>e,f.d(o,c),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",60:"ae6c4130",89:"a6aa9e1f",103:"ccc49370",194:"4d0932fd",206:"f8409a7e",237:"1df93b7f",346:"989c4899",477:"b2f554cd",514:"1be78505",517:"5cd43755",533:"b2b675dd",535:"814f3328",539:"5c1fb99f",566:"c339cc82",592:"common",608:"9e4087bc",610:"6875c492",713:"a7023ddc",743:"20417f73",831:"fda116a3",918:"17896441",934:"28df1be2",954:"842e05e7",979:"5ad2500b"}[e]||e)+"."+{13:"dcf8bbfc",48:"ae5d3629",53:"ff0d6054",60:"6c7f8800",89:"cfc8d2e3",103:"04542d8e",194:"0924e6f2",206:"cb894f46",237:"f47b6543",346:"45ea0b40",477:"e95f12ca",490:"9bbad5f6",514:"2c3641ec",517:"a9dd1ab8",533:"3192af58",535:"d7001619",539:"6cbab119",566:"e4577f66",592:"2b9d9296",608:"51c641ce",610:"b17c2964",713:"1c0c0cb9",743:"5d3664c4",831:"0ca767e0",918:"58b50a6b",934:"4aa3c9f8",954:"e38af7d5",972:"dbc475e8",979:"2310f764"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="zeno-docs:",f.l=(e,t,r,c)=>{if(a[e])a[e].push(t);else{var n,d;if(void 0!==r)for(var i=document.getElementsByTagName("script"),b=0;b{n.onerror=n.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],n.parentNode&&n.parentNode.removeChild(n),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=l.bind(null,n.onerror),n.onload=l.bind(null,n.onload),d&&document.head.appendChild(n)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"918","01a85c17":"13","935f2afb":"53",ae6c4130:"60",a6aa9e1f:"89",ccc49370:"103","4d0932fd":"194",f8409a7e:"206","1df93b7f":"237","989c4899":"346",b2f554cd:"477","1be78505":"514","5cd43755":"517",b2b675dd:"533","814f3328":"535","5c1fb99f":"539",c339cc82:"566",common:"592","9e4087bc":"608","6875c492":"610",a7023ddc:"713","20417f73":"743",fda116a3:"831","28df1be2":"934","842e05e7":"954","5ad2500b":"979"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var c=f.p+f.u(t),n=new Error;f.l(c,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;n.message="Loading chunk "+t+" failed.\n("+o+": "+c+")",n.name="ChunkLoadError",n.type=o,n.request=c,a[1](n)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,c=r[0],n=r[1],d=r[2],i=0;if(c.some((t=>0!==e[t]))){for(a in n)f.o(n,a)&&(f.m[a]=n[a]);if(d)var b=d(f)}for(t&&t(r);i - + @@ -21,7 +21,7 @@ - + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 16771cd..26df50f 100644 --- a/blog/index.html +++ b/blog/index.html @@ -13,7 +13,7 @@ - + @@ -26,7 +26,7 @@ Zeno is primarily a UI for interactively exploring your data, model outputs, and metrics. You can interactively filter your data using metadata and create slices to track and compare model performance. Lastly, you can create visualizations and reports to summarize model performance and share insights with other stakeholders.

Get Started

Interested in using Zeno? Get started with our Quickstart guide!

- + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index e7b6b64..fb3ef57 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -13,7 +13,7 @@ - + @@ -21,7 +21,7 @@ - + \ No newline at end of file diff --git a/blog/tags/introduction/index.html b/blog/tags/introduction/index.html index de0fa27..0b2c866 100644 --- a/blog/tags/introduction/index.html +++ b/blog/tags/introduction/index.html @@ -13,7 +13,7 @@ - + @@ -26,7 +26,7 @@ Zeno is primarily a UI for interactively exploring your data, model outputs, and metrics. You can interactively filter your data using metadata and create slices to track and compare model performance. Lastly, you can create visualizations and reports to summarize model performance and share insights with other stakeholders.

Get Started

Interested in using Zeno? Get started with our Quickstart guide!

- + \ No newline at end of file diff --git a/blog/welcome-post/index.html b/blog/welcome-post/index.html index 5df7b3b..dcb1f1a 100644 --- a/blog/welcome-post/index.html +++ b/blog/welcome-post/index.html @@ -13,7 +13,7 @@ - + @@ -26,7 +26,7 @@ Zeno is primarily a UI for interactively exploring your data, model outputs, and metrics. You can interactively filter your data using metadata and create slices to track and compare model performance. Lastly, you can create visualizations and reports to summarize model performance and share insights with other stakeholders.

Get Started

Interested in using Zeno? Get started with our Quickstart guide!

- + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index ab9090a..d5b8796 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -13,7 +13,7 @@ - + @@ -27,7 +27,7 @@ After logging in to Zeno Hub, generate your API key by clicking on your profile at the bottom left to navigate to your account page.

Next, install the zeno-client Python package, which is used to upload new datasets and AI system outputs:

pip install zeno-client

In a Python script or notebook we can now create a new project:

from zeno_client import ZenoClient

client = ZenoClient("YOUR API KEY HERE")

Now lets load some text data to analyze. The client API works with Pandas DataFrames, so we can create a sample DataFrame looking at text sentiment classification:

from zeno_client import ZenoClient
import pandas as pd

client = ZenoClient("YOUR API KEY HERE")

df = pd.DataFrame(
{
"text": [
"I love this movie!",
"I hate this movie!",
"This movie is ok.",
],
"label": ["positive", "negative", "neutral"],
}
)

# Explicitly save the index as a column to upload.
df["id"] = df.index

# Add any additional columns you want to do analysis across.
df["input length"] = df["text"].str.len()

Let's create a project for this task. Projects in Zeno are a base dataset and any number of AI system outputs, and are used to evaluate and compare AI system performance. Here we create a project and upload our base dataset.

from zeno_client import ZenoClient, ZenoMetric

...

project = client.create_project(
name="Sentiment Classification",
view="text-classification",
metrics=[
ZenoMetric(name="accuracy", type="mean", columns=["correct"]),
]
)

project.upload_dataset(df, id_column="id", data_column='text', label_column="label")

We named our project "Sentiment Classification" and specified that it is a text classification task. Check out all supported data types and tasks here. We also added an initial accuracy metric which takes the mean of the correct column, which will be present in the system outputs we upload later.

Next, we can upload some system outputs to evaluate. Here we'll upload some fake predictions from a model:


...

df_system = pd.DataFrame(
{
"output": ["positive", "negative", "negative"],
}
)

# Create an id column to match the base dataset.
df_system["id"] = df_system.index

# Measure accuracy for each instance, which is averaged by the ZenoMetric above.
df_system["correct"] = (df_system["output"] == df["label"]).astype(int)

proj.upload_system(df_system, name="System A", id_column="id", output_column="output")

You can now navigate to the project URL in Zeno Hub to see the uploaded data and metrics and start exploring your AI system's performance!

Complete Example

from zeno_client import ZenoClient, ZenoMetric
import pandas as pd

client = ZenoClient("YOUR API KEY HERE")

df = pd.DataFrame(
{
"text": [
"I love this movie!",
"I hate this movie!",
"This movie is ok.",
],
"label": ["positive", "negative", "neutral"],
}
)

# Explicitly save the index as a column to upload.
df["id"] = df.index

# Add any additional columns you want to do analysis across.
df["input length"] = df["text"].str.len()

project = client.create_project(
name="Sentiment Classification",
view="text-classification",
metrics=[
ZenoMetric(name="accuracy", type="mean", columns=["correct"]),
]
)

project.upload_dataset(df, id_column="id", data_column='text', label_column="label")

df_system = pd.DataFrame(
{
"output": ["positive", "negative", "negative"],
}
)

# Create an id column to match the base dataset.
df_system["id"] = df_system.index

# Measure accuracy for each instance, which is averaged by the ZenoMetric above.
df_system["correct"] = (df_system["output"] == df["label"]).astype(int)

project.upload_system(df_system, name="System A", id_column="id", output_column="output")

Quickstart with Zeno Build

Zeno Build is a Python library that makes it easy to set up Zeno projects for common AI and ML tasks.

Follow the Zeno Build Tutorial to learn the basic Zeno concepts on an example LLM task.

- + \ No newline at end of file diff --git a/docs/python-client/index.html b/docs/python-client/index.html index 874354a..7304d90 100644 --- a/docs/python-client/index.html +++ b/docs/python-client/index.html @@ -13,7 +13,7 @@ - + @@ -33,7 +33,7 @@ Defaults to 10.
  • public bool, optional - Whether the project is public. Defaults to False.
  • description str, optional - The description of the project. Defaults to "".
  • Returns:

    ZenoProject | None: The created project object or None if the project could not be created.

    Raises:

    • ValidationError - If the config does not match the ProjectConfig schema.
    • APIError - If the project could not be created.

    get_project

    def get_project(project_name: str) -> ZenoProject

    Get a project object by its name. Names are split into owner/project_name.

    Arguments:

    • project_name str - The owner/project_name of the project to get.

    Returns:

    Project | None: The project object or None if the project could not be found.

    Raises:

    • APIError - If the project could not be found.
    - + \ No newline at end of file diff --git a/docs/using-zeno/index.html b/docs/using-zeno/index.html index e27dfee..0389660 100644 --- a/docs/using-zeno/index.html +++ b/docs/using-zeno/index.html @@ -3,7 +3,7 @@ -Using Zeno | AI Evaluation Platform +Using Zeno | AI Evaluation Platform @@ -13,15 +13,15 @@ - +
    -

    Using Zeno

    To highlight the main features and uses of Zeno, we walk through an example of using Zeno to explore a dataset of customer service emails, which you can explore in our chatbot report.

    You can explore the code that created this Zeno report in the Zeno Build repository.

    Data and Model Output Exploration

    When you first open Zeno you will see your data instances on the right hand side and metadata distributions on the left hand side.

    Zeno Screenshot

    The metadata distributions on the left show summary visualizations of columns in your dataset:

    Metadata view

    If you want to filter down your data to only include examples that have a particular value for a feature:

    • Textual Features: Type in a value in the text box and click "set". You can also use regexes or adjust case-sensitivity by pressing the buttons.
    • Numerical Features: Dragging the slider to select a range of values.
    • Categorical Features: Clicking on a specific value in the bar chart (not displayed above).

    For instance, if we want to find all examples that have a length of 100 or fewer characters that contain the string "sorry", you can filter the "label and "label_length" features, and see that the displayed examples on the right are updated.

    Once you've found a subset of the data that you're interested in, you can save it for future analysis and monitoring by clicking the "Create a new Slice" button:

    Slice Creation

    You can also arrange slices into folders for easier browsing.

    This slicing is very powerful functionality if you get creative with the features and patterns that you use! If you want to try to add new features, you can implement them and add them to the config.py file in the examples that you're using, some examples below:

    Chart Building

    Once you have some models to compare and some slices to compare them on, you can start building interactive charts to summarize model performance. To do this, click on the "Charts" button on the left of the page:

    Chart tab

    This will take you to a page that shows all of your created charts:

    Charts

    You can create new charts by interactively selecting slices, metrics, and models. For example, you can create a chart comparing model performance across instances with short, medium, or long ground truth labels:

    Chart example

    Qualitative Comparison

    One final handy feature of Zeno is the ability to compare the outputs of two models on the same examples. You can do this by clicking on the qualitative comparison button:

    Qualitative comparison

    On the page, you can then select the two models you want to compare side-by-side, and select the metric you'd like to compare them by. Here we choose gpt-3.5-turbo and vicuna and compare them according to the bert_score metric.

    Comparison

    You can also sort the outputs by the difference between the scores between the two systems by clicking on the header of the "difference" column. This allows you to find examples where one of the two systems produces much better outputs than the other, such as the one below where one model suddenly went off track and produced an incomprehensible output.

    Example find

    - +

    Using Zeno

    Explore Zeno's interface and features.

    Quickstart Video

    We recommend you watch the following video for a quick overview of Zeno's features.

    The following is a written walkthrough of Zeno's features using Zeno to explore a dataset of customer service emails.

    Data and Model Output Exploration

    When you first open Zeno you will see your data instances on the right hand side and metadata distributions on the left hand side.

    Zeno Screenshot

    The metadata distributions on the left show summary visualizations of columns in your dataset:

    Metadata view

    If you want to filter down your data to only include examples that have a particular value for a feature:

    • Textual Features: Type in a value in the text box and click "set". You can also use regexes or adjust case-sensitivity by pressing the buttons.
    • Numerical Features: Dragging the slider to select a range of values.
    • Categorical Features: Clicking on a specific value in the bar chart (not displayed above).

    For instance, if we want to find all examples that have a length of 100 or fewer characters that contain the string "sorry", you can filter the "label and "label_length" features, and see that the displayed examples on the right are updated.

    Once you've found a subset of the data that you're interested in, you can save it for future analysis and monitoring by clicking the "Create a new Slice" button:

    Slice Creation

    You can also arrange slices into folders for easier browsing.

    This slicing is very powerful functionality if you get creative with the features and patterns that you use! If you want to try to add new features, you can implement them and add them to the config.py file in the examples that you're using, some examples below:

    Chart Building

    Once you have some models to compare and some slices to compare them on, you can start building interactive charts to summarize model performance. To do this, click on the "Charts" button on the left of the page:

    Chart tab

    This will take you to a page that shows all of your created charts:

    Charts

    You can create new charts by interactively selecting slices, metrics, and models. For example, you can create a chart comparing model performance across instances with short, medium, or long ground truth labels:

    Chart example

    Qualitative Comparison

    One final handy feature of Zeno is the ability to compare the outputs of two models on the same examples. You can do this by clicking on the qualitative comparison button:

    Qualitative comparison

    On the page, you can then select the two models you want to compare side-by-side, and select the metric you'd like to compare them by. Here we choose gpt-3.5-turbo and vicuna and compare them according to the bert_score metric.

    Comparison

    You can also sort the outputs by the difference between the scores between the two systems by clicking on the header of the "difference" column. This allows you to find examples where one of the two systems produces much better outputs than the other, such as the one below where one model suddenly went off track and produced an incomprehensible output.

    Example find

    + \ No newline at end of file diff --git a/docs/views/index.html b/docs/views/index.html index 8b9b327..a77f8b6 100644 --- a/docs/views/index.html +++ b/docs/views/index.html @@ -13,7 +13,7 @@ - + @@ -22,7 +22,7 @@

    Instance views

    Zeno Instance Views are modular renderers for different data types and tasks. Each of the following views can be passed as the view option when creating a new project.

    View NameDescription
    image-classificationDisplay images with ground truth and predicted class labels. Works for both binary and multiclass classification. Requires image inputs and text or numeric outputs.
    text-classificationDisplay text with ground truth and predicted class labels. Requires text inputs and text or numeric outputs.
    audio-transcriptionDisplay audio file along with outputed text, e.g. transcription. Requires audio inputs and text outputs.
    image-segmentationDisplay image with overlayed ground truth and predicted segmentation masks. Works for both binary segmentation. Requires image inputs and binary image outputs.
    code-generationShow formatted code input and code predictions. Use for evaluating code generation models such as Codex.
    openai-chatShow input-output pairs from chatbot models using the OpenAI API. See the API documentation for details on the required Chat data format.
    openai-chat-markdownSame as `openai-chat` but renders each cell block as markdown. Useful for rendering complex interactions with external agents, etc.
    chatbotShow a single input-output pair from chatbot models.
    space-separated-valuesTable view of inputs, outputs, and labels which are space-separated words. Useful for tasks such as part-of-speech tagging.
    ragShow the input to a generator that can access information from other documents (retrieval augmented generation). The documents that are used and the system's answer can also be displayed.

    Input and label are just plain text whereas ouptut has to be JSON in the form:
    {
    "retrieved": [
    {
    "reference": [YOUR_DOCUMENT],
    "text": [TEXT_IN_YOUR_DOC],
    "score": [RANKING_OF_DOC]
    },
    ...
    ],
    "answer": [SYSTEM_ANSWER],
    }
    - + \ No newline at end of file diff --git a/index.html b/index.html index c3d7e92..c20af08 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,7 @@ - + @@ -21,7 +21,7 @@

    AI Evaluation Made Easy

    Discover how your AI performs with Zeno. Explore your data, uncover failures, and create beautiful, interactive reports.

    Diagram showing illustration of Zeno interface

    Explore

    Visualize data and model outputs with views for any data type

    Diagram showing illustration of Zeno interface

    Analyze

    Discover and save errors for model comparison and updates

    Diagram showing illustration of Zeno interface

    Report

    Create rich, interactive reports sharing your findings


    Example image from ImagenetteExample image from ImagenetteExample image from ImagenetteExample image from Imagenette

    Screenshot of radar chart
    Screenshot of bar chartScreenshot of beeswarm chart

    Chart Building

    Create beautiful, interactive visualizations to compare model performnce across slices and models

    Use Zeno's drag-and-drop interface to create interactive charts. Create a radar chart comparing multiple models on different slices of your data, or a beeswarm plot to compare hundreds of models.


    Report Authoring

    Create reports with interactive visualizations and markdown

    Visualizations can be combined with rich markdown text to share insights and tell stories about your data and model performance.

    Reports can be shared with other stakeholders or posted on any platform. All that people need to read your report is a link to it.


    Sponsors and Organizations

    Mozilla logoNSF logoCMU logo
    - + \ No newline at end of file