Spaces:
Running
Running
File size: 8,642 Bytes
1d4f55a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
import streamlit as st
from streamlit_extras.switch_page_button import switch_page
translations = {
'en': {'title': 'DocOwl 1.5',
'original_tweet':
"""
[Original tweet](https://twitter.com/mervenoyann/status/1782421257591357824) (April 22, 2024)
""",
'tweet_1':
"""
DocOwl 1.5 is the state-of-the-art document understanding model by Alibaba with Apache 2.0 license 😍📝
Time to dive in and learn more 🧶
""",
'tweet_2':
"""
This model consists of a ViT-based visual encoder part that takes in crops of image and the original image itself.
Then the outputs of the encoder goes through a convolution based model, after that the outputs are merged with text and then fed to LLM.
""",
'tweet_3':
"""
Initially, the authors only train the convolution based part (called H-Reducer) and vision encoder while keeping LLM frozen.
Then for fine-tuning (on image captioning, VQA etc), they freeze vision encoder and train H-Reducer and LLM.
""",
'tweet_4':
"""
Also they use simple linear projection on text and documents. You can see below how they model the text prompts and outputs 🤓
""",
'tweet_5':
"""
They train the model various downstream tasks including:
- document understanding (DUE benchmark and more)
- table parsing (TURL, PubTabNet)
- chart parsing (PlotQA and more)
- image parsing (OCR-CC)
- text localization (DocVQA and more)
""",
'tweet_6':
"""
They contribute a new model called DocOwl 1.5-Chat by:
1. creating a new document-chat dataset with questions from document VQA datasets
2. feeding them to ChatGPT to get long answers
3. fine-tune the base model with it (which IMO works very well!)
""",
'tweet_7':
"""
Resulting generalist model and the chat model are pretty much state-of-the-art 😍
Below you can see how it compares to fine-tuned models.
""",
'tweet_8':
"""
All the models and the datasets (also some eval datasets on above tasks!) are in this [organization](https://t.co/sJdTw1jWTR).
The [Space](https://t.co/57E9DbNZXf).
""",
'ressources':
"""
Ressources:
[mPLUG-DocOwl 1.5: Unified Structure Learning for OCR-free Document Understanding](https://arxiv.org/abs/2403.12895)
by Anwen Hu, Haiyang Xu, Jiabo Ye, Ming Yan, Liang Zhang, Bo Zhang, Chen Li, Ji Zhang, Qin Jin, Fei Huang, Jingren Zhou (2024)
[GitHub](https://github.com/X-PLUG/mPLUG-DocOwl)
"""
},
'fr': {
'title': 'DocOwl 1.5',
'original_tweet':
"""
[Tweet de base](https://twitter.com/mervenoyann/status/1782421257591357824) (en anglais) (22 avril 2024)
""",
'tweet_1':
"""
DocOwl 1.5 est le modèle de compréhension de documents d'Alibaba sous licence Apache 2.0 😍📝
Il est temps de découvrir ce modèle 🧶
""",
'tweet_2':
"""
Ce modèle se compose d'un encodeur visuel basé sur un ViT qui prend en compte les crops de l'image et l'image originale elle-même.
Les sorties de l'encodeur passent ensuite par un modèle convolutif, après quoi les sorties sont fusionnées avec le texte, puis transmises au LLM.
""",
'tweet_3':
"""
Au départ, les auteurs n'entraînent que la partie basée sur la convolution (appelée H-Reducer) et l'encodeur de vision tout en gardant le LLM gelé.
Ensuite, pour le finetuning (légendage d'image, VQA, etc.), ils gèlent l'encodeur de vision et entraînent le H-Reducer et le LLM.
""",
'tweet_4':
"""
Ils utilisent également une simple projection linéaire sur le texte et les documents. Vous pouvez voir ci-dessous comment ils modélisent les prompts et les sorties textuelles 🤓
""",
'tweet_5':
"""
Ils entraînent le modèle pour diverses tâches en aval, notamment
- la compréhension de documents (DUE benchmark et autres)
- analyse de tableaux (TURL, PubTabNet)
- analyse de graphiques (PlotQA et autres)
- analyse d'images (OCR-CC)
- localisation de textes (DocVQA et autres)
""",
'tweet_6':
"""
Ils contribuent à un nouveau modèle appelé DocOwl 1.5-Chat en :
1. créant un nouveau jeu de données document-chat avec des questions provenant de jeux de données VQA
2. en les envoyant à ChatGPT pour obtenir des réponses longues
3. en finetunant le modèle de base à l'aide de ce dernier (qui fonctionne très bien selon moi)
""",
'tweet_7':
"""
Le modèle généraliste qui en résulte et le modèle de chat sont pratiquement à l'état de l'art 😍
Ci-dessous, vous pouvez voir comment ils se comparent aux modèles finetunés.
""",
'tweet_8':
"""
Tous les modèles et jeux de données (y compris certains jeux de données d'évaluation sur les tâches susmentionnées !) se trouvent dans cette [organisation](https://t.co/sJdTw1jWTR). Le [Space](https://t.co/57E9DbNZXf).
""",
'ressources':
"""
Ressources :
[mPLUG-DocOwl 1.5: Unified Structure Learning for OCR-free Document Understanding](https://arxiv.org/abs/2403.12895)
de Anwen Hu, Haiyang Xu, Jiabo Ye, Ming Yan, Liang Zhang, Bo Zhang, Chen Li, Ji Zhang, Qin Jin, Fei Huang, Jingren Zhou (2024)
[GitHub](https://github.com/X-PLUG/mPLUG-DocOwl)
"""
}
}
def language_selector():
languages = {'EN': '🇬🇧', 'FR': '🇫🇷'}
selected_lang = st.selectbox('', options=list(languages.keys()), format_func=lambda x: languages[x], key='lang_selector')
return 'en' if selected_lang == 'EN' else 'fr'
left_column, right_column = st.columns([5, 1])
# Add a selector to the right column
with right_column:
lang = language_selector()
# Add a title to the left column
with left_column:
st.title(translations[lang]["title"])
st.success(translations[lang]["original_tweet"], icon="ℹ️")
st.markdown(""" """)
st.markdown(translations[lang]["tweet_1"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_1.jpg", use_column_width=True)
st.markdown(""" """)
st.markdown(translations[lang]["tweet_2"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_2.jpeg", use_column_width=True)
st.markdown(""" """)
st.markdown(translations[lang]["tweet_3"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_3.jpeg", use_column_width=True)
st.markdown(""" """)
st.markdown(translations[lang]["tweet_4"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_4.jpeg", use_column_width=True)
st.markdown(""" """)
st.markdown(translations[lang]["tweet_5"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_5.jpeg", use_column_width=True)
st.markdown(""" """)
st.markdown(translations[lang]["tweet_6"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_6.jpeg", use_column_width=True)
st.markdown(""" """)
st.markdown(translations[lang]["tweet_7"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_7.jpeg", use_column_width=True)
st.markdown(""" """)
st.markdown(translations[lang]["tweet_8"], unsafe_allow_html=True)
st.markdown(""" """)
st.image("pages/DocOwl_1.5/image_8.jpeg", use_column_width=True)
st.markdown(""" """)
st.info(translations[lang]["ressources"], icon="📚")
st.markdown(""" """)
st.markdown(""" """)
st.markdown(""" """)
col1, col2, col3= st.columns(3)
with col1:
if lang == "en":
if st.button('Previous paper', use_container_width=True):
switch_page("Grounding DINO")
else:
if st.button('Papier précédent', use_container_width=True):
switch_page("Grounding DINO")
with col2:
if lang == "en":
if st.button("Home", use_container_width=True):
switch_page("Home")
else:
if st.button("Accueil", use_container_width=True):
switch_page("Home")
with col3:
if lang == "en":
if st.button("Next paper", use_container_width=True):
switch_page("MiniGemini")
else:
if st.button("Papier suivant", use_container_width=True):
switch_page("MiniGemini") |