import%20marimo%0A%0A__generated_with%20%3D%20%220.9.14%22%0Aapp%20%3D%20marimo.App(width%3D%22full%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Political%20Ideologies%20Analysis%0A%0A%20%20%20%20%20%20%20%20This%20project%20provides%20a%20detailed%20analysis%20of%20political%20ideologies%20using%20data%20from%20the%20Huggingface%20Political%20Ideologies%20dataset.%20The%20code%20leverages%20various%20data%20science%20libraries%20and%20visualization%20tools%20to%20map%2C%20analyze%2C%20and%20visualize%20political%20ideology%20text%20data.%0A%20%20%20%20%20%20%20%20Project%20Structure%0A%0A%20%20%20%20%20%20%20%20This%20analysis%20is%20based%20on%20huggingface%20dataset%20repository.%20%3Cbr%3E%0A%20%20%20%20%20%20%20%20You%20can%20visit%20right%20%5Bhere%5D(https%3A%2F%2Fhuggingface.co%2Fdatasets%2FJyotiNayak%2Fpolitical_ideologies)%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20seaborn%20as%20sns%0A%20%20%20%20import%20altair%20as%20alt%0A%0A%20%20%20%20from%20gensim.models%20import%20Word2Vec%0A%20%20%20%20from%20sklearn.manifold%20import%20TSNE%0A%0A%20%20%20%20import%20tensorflow%20as%20tf%0A%20%20%20%20from%20tensorflow.keras.models%20import%20Sequential%0A%20%20%20%20from%20tensorflow.keras.layers%20import%20Embedding%2C%20Bidirectional%2C%20LSTM%2C%20Dense%0A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%201.%20Import%20all%20libraries%20needed%0A%0A%20%20%20%20The%20initial%20cells%20import%20the%20necessary%20libraries%20for%20data%20handling%2C%20visualization%2C%20and%20word%20embedding.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20Bidirectional%2C%0A%20%20%20%20%20%20%20%20Dense%2C%0A%20%20%20%20%20%20%20%20Embedding%2C%0A%20%20%20%20%20%20%20%20LSTM%2C%0A%20%20%20%20%20%20%20%20Sequential%2C%0A%20%20%20%20%20%20%20%20TSNE%2C%0A%20%20%20%20%20%20%20%20Word2Vec%2C%0A%20%20%20%20%20%20%20%20alt%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20pd%2C%0A%20%20%20%20%20%20%20%20plt%2C%0A%20%20%20%20%20%20%20%20sns%2C%0A%20%20%20%20%20%20%20%20tf%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Here%20are%20the%20mapped%20of%20label%20and%20issue%20type%20columns.%0A%0A%20%20%20%20%20%20%20%20%60%60%60yaml%0A%20%20%20%20%20%20%20%20Label%20Mapping%3A%20%7B'conservative'%3A%200%2C%20'liberal'%3A%201%20%7D%0A%20%20%20%20%20%20%20%20Issue%20Type%20Mapping%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20'economic'%3A%200%2C%20'environmental'%3A%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20'family%2Fgender'%3A%202%2C%20'geo-political%20and%20foreign%20policy'%3A%203%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20'political'%3A%204%2C%20'racial%20justice%20and%20immigration'%3A%205%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20'religious'%3A%206%2C%20'social%2C%20health%20and%20education'%3A%207%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo%2C%20pd)%3A%0A%20%20%20%20df%20%3D%20pd.concat(%0A%20%20%20%20%20%20%20%20%5Bpd.read_parquet(f'%7Bname%7D.parquet')%20for%20name%20in%20%5B'train'%2C%20'val'%2C%20'test'%5D%5D%2C%20%0A%20%20%20%20%20%20%20%20axis%3D0%2C%0A%20%20%20%20)%0A%0A%20%20%20%20df%20%3D%20df.drop('__index_level_0__'%2C%20axis%3D1)%0A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%202.%20Dataset%20Loading%0A%0A%20%20%20%20The%20dataset%20files%20(%60train.parquet%60%2C%20%60val.parquet%60%2C%20and%20%60test.parquet%60)%20are%20loaded%2C%20concatenated%2C%20and%20cleaned%20to%20form%20a%20single%20DataFrame%20(df).%20Columns%20are%20mapped%20to%20readable%20labels%20for%20ease%20of%20understanding.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%20(df%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__()%3A%0A%20%20%20%20label_mapping%20%3D%20%7B%0A%20%20%20%20%20%20%20%20'conservative'%3A%200%2C%20%0A%20%20%20%20%20%20%20%20'liberal'%3A%201%0A%20%20%20%20%7D%0A%0A%20%20%20%20issue_type_mapping%20%3D%20%7B%0A%20%20%20%20%20%20%20%20'economic'%3A%200%2C%0A%20%20%20%20%20%20%20%20'environmental'%3A%201%2C%0A%20%20%20%20%20%20%20%20'family%2Fgender'%3A%202%2C%0A%20%20%20%20%20%20%20%20'geo-political%20and%20foreign%20policy'%3A%203%2C%0A%20%20%20%20%20%20%20%20'political'%3A%204%2C%0A%20%20%20%20%20%20%20%20'racial%20justice%20and%20immigration'%3A%205%2C%0A%20%20%20%20%20%20%20%20'religious'%3A%206%2C%0A%20%20%20%20%20%20%20%20'social%2C%20health%20and%20education'%3A%207%0A%20%20%20%20%7D%0A%20%20%20%20return%20issue_type_mapping%2C%20label_mapping%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(issue_type_mapping%2C%20label_mapping)%3A%0A%20%20%20%20label_mapping_reversed%20%3D%20%7Bv%3A%20k%20for%20k%2C%20v%20in%20label_mapping.items()%7D%0A%20%20%20%20issue_type_mapping_reversed%20%3D%20%7Bv%3A%20k%20for%20k%2C%20v%20in%20issue_type_mapping.items()%7D%0A%0A%20%20%20%20print(label_mapping_reversed)%0A%20%20%20%20print(issue_type_mapping_reversed)%0A%20%20%20%20return%20issue_type_mapping_reversed%2C%20label_mapping_reversed%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(df%2C%20issue_type_mapping_reversed%2C%20label_mapping_reversed%2C%20mo)%3A%0A%20%20%20%20df%5B'label_text'%5D%20%3D%20df%5B'label'%5D.replace(label_mapping_reversed)%0A%20%20%20%20df%5B'issue_type_text'%5D%20%3D%20df%5B'issue_type'%5D.replace(issue_type_mapping_reversed)%0A%0A%20%20%20%20labels_grouped%20%3D%20df%5B'label_text'%5D.value_counts().rename_axis('label_text').reset_index(name%3D'counts')%0A%20%20%20%20issue_types_grouped%20%3D%20(%0A%20%20%20%20%20%20%20%20df%5B%22issue_type_text%22%5D%0A%20%20%20%20%20%20%20%20.value_counts()%0A%20%20%20%20%20%20%20%20.rename_axis(%22issue_type_text%22)%0A%20%20%20%20%20%20%20%20.reset_index(name%3D%22counts%22)%0A%20%20%20%20)%0A%0A%20%20%20%20mo.md(%22%22%22%0A%20%20%20%20%23%23%203.%20Mapping%20Labels%20and%20Issue%20Types%0A%0A%20%20%20%20Two%20dictionaries%20map%20labels%20(conservative%20and%20liberal)%20and%20issue%20types%20(e.g.%2C%20economic%2C%20environmental%2C%20etc.)%20to%20numerical%20values%20for%20machine%20learning%20purposes.%20Reversed%20mappings%20are%20created%20to%20convert%20numerical%20labels%20back%20into%20their%20text%20form.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%20issue_types_grouped%2C%20labels_grouped%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(df)%3A%0A%20%20%20%20df.iloc%5B%3A%2C%20%3A6%5D.head(7)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%204.%20Visualizing%20Data%20Distributions%0A%0A%20%20%20%20%20%20%20%20Bar%20plots%20visualize%20the%20proportions%20of%20conservative%20vs.%20liberal%20ideologies%20and%20the%20count%20of%20different%20issue%20types.%20These%20provide%20an%20overview%20of%20the%20dataset%20composition.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(alt%2C%20labels_grouped%2C%20mo)%3A%0A%20%20%20%20mo.ui.altair_chart(%0A%20%20%20%20%20%20%20%20alt.Chart(labels_grouped).mark_bar(%0A%20%20%20%20%20%20%20%20%20%20%20%20fill%3D'%234C78A8'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cursor%3D'pointer'%2C%0A%20%20%20%20%20%20%20%20).encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X('label_text'%2C%20axis%3Dalt.Axis(labelAngle%3D0))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D'counts%3AQ'%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(alt%2C%20issue_types_grouped%2C%20mo)%3A%0A%20%20%20%20mo.ui.altair_chart(%0A%20%20%20%20%20%20%20%20alt.Chart(issue_types_grouped)%0A%20%20%20%20%20%20%20%20.mark_bar(%0A%20%20%20%20%20%20%20%20%20%20%20%20fill%3D%22%234C78A8%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cursor%3D%22pointer%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22issue_type_text%3AO%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20axis%3Dalt.Axis(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20labelAngle%3D-10%2C%20labelAlign%3D%22center%22%2C%20labelPadding%3D10%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22counts%3AQ%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%205.%20Word%20Embedding%20with%20Word2Vec%0A%0A%20%20%20%20%20%20%20%20Using%20Word2Vec%2C%20word%20embeddings%20are%20created%20from%20text%20statements%20in%20the%20dataset.%20The%20model%20trains%20on%20tokenized%20sentences%2C%20generating%20a%20100-dimensional%20embedding%20for%20each%20word.%20Statements%20are%20averaged%20to%20form%20document-level%20embeddings.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(Word2Vec%2C%20df)%3A%0A%20%20%20%20df%5B'tokens'%5D%20%3D%20df%5B'statement'%5D.apply(lambda%20x%3A%20x.lower().split())%0A%20%20%20%20word2vec_model%20%3D%20Word2Vec(sentences%3Ddf%5B'tokens'%5D%2C%20vector_size%3D100%2C%20window%3D5%2C%20min_count%3D1%2C%20seed%3D0)%0A%20%20%20%20return%20(word2vec_model%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(np%2C%20word2vec_model)%3A%0A%20%20%20%20def%20get_doc_embedding(tokens)%3A%0A%20%20%20%20%20%20%20%20vectors%20%3D%20%5Bword2vec_model.wv%5Bword%5D%20for%20word%20in%20tokens%20if%20word%20in%20word2vec_model.wv%5D%0A%20%20%20%20%20%20%20%20if%20vectors%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20np.mean(vectors%2C%20axis%3D0)%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20np.zeros(word2vec_model.vector_size)%0A%20%20%20%20return%20(get_doc_embedding%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(df%2C%20get_doc_embedding%2C%20np)%3A%0A%20%20%20%20df%5B'embedding'%5D%20%3D%20df%5B'tokens'%5D.apply(get_doc_embedding)%0A%20%20%20%20embeddings_matrix%20%3D%20np.vstack(df%5B'embedding'%5D.values)%0A%20%20%20%20return%20(embeddings_matrix%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%206.%20Dimensionality%20Reduction%20with%20TSNE%0A%0A%20%20%20%20%20%20%20%20Embeddings%20are%20projected%20into%20a%202D%20space%20using%20TSNE%20for%20visualization.%20The%20embeddings%20are%20colored%20by%20issue%20type%2C%20showing%20clusters%20of%20similar%20statements.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(TSNE%2C%20alt%2C%20df%2C%20embeddings_matrix%2C%20plt%2C%20sns)%3A%0A%20%20%20%20tsne%20%3D%20TSNE(n_components%3D2%2C%20random_state%3D0)%0A%20%20%20%20tsne_results%20%3D%20tsne.fit_transform(embeddings_matrix)%0A%20%20%20%20df%5B'x'%5D%20%3D%20tsne_results%5B%3A%2C%200%5D%0A%20%20%20%20df%5B'y'%5D%20%3D%20tsne_results%5B%3A%2C%201%5D%0A%0A%20%20%20%20%23%20Brush%20for%20selection%0A%20%20%20%20brush%20%3D%20alt.selection_interval()%0A%20%20%20%20size%20%3D%20350%0A%0A%20%20%20%20plt.figure(figsize%3D(10%2C%206))%0A%20%20%20%20sns.scatterplot(data%3Ddf%2C%20x%3D'x'%2C%20y%3D'y'%2C%20hue%3D'issue_type_text'%2C%20palette%3D'Set1'%2C%20s%3D100)%0A%20%20%20%20plt.title(%222D%20Visualization%20of%20Text%20Data%20by%20Ideology%20(Word2Vec%20Embeddings)%22)%0A%20%20%20%20plt.xlabel(%22t-SNE%20Dimension%201%22)%0A%20%20%20%20plt.ylabel(%22t-SNE%20Dimension%202%22)%0A%20%20%20%20plt.legend(title%3D'Ideology')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20brush%2C%20size%2C%20tsne%2C%20tsne_results%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%207.%20Interactive%20Visualizations%0A%0A%20%20%20%20%20%20%20%20Interactive%20scatter%20plots%20in%20Altair%20show%20ideology%20and%20issue%20types%20in%202D%20space.%20A%20brush%20selection%20tool%20allows%20users%20to%20explore%20specific%20points%20and%20view%20tooltip%20information.%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20Combined%20Scatter%20Plot%0A%0A%20%20%20%20%20%20%20%20Combines%20the%20two%20scatter%20plots%20into%20a%20side-by-side%20visualization%20for%20direct%20comparison%20of%20ideologies%20vs.%20issue%20types.%0A%20%20%20%20%20%20%20%20Running%20the%20Code%0A%0A%20%20%20%20%20%20%20%20Run%20the%20code%20using%20the%20marimo.App%20instance.%20This%20notebook%20can%20also%20be%20run%20as%20a%20standalone%20Python%20script%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(alt%2C%20brush%2C%20df%2C%20mo%2C%20size)%3A%0A%20%20%20%20points1%20%3D%20alt.Chart(df%2C%20height%3Dsize%2C%20width%3Dsize).mark_point().encode(%0A%20%20%20%20%20%20%20%20x%3D'x%3AQ'%2C%0A%20%20%20%20%20%20%20%20y%3D'y%3AQ'%2C%0A%20%20%20%20%20%20%20%20color%3Dalt.condition(brush%2C%20'label_text'%2C%20alt.value('grey'))%2C%0A%20%20%20%20%20%20%20%20tooltip%3D%5B'x%3AQ'%2C%20'y%3AQ'%2C%20'statement%3AN'%2C%20'label_text%3AN'%5D%20%0A%20%20%20%20).add_params(brush).properties(title%3D'By%20Political%20Ideologies')%0A%0A%20%20%20%20scatter_chart1%20%3D%20mo.ui.altair_chart(points1)%0A%0A%20%20%20%20points2%20%3D%20alt.Chart(df%2C%20height%3Dsize%2C%20width%3Dsize).mark_point().encode(%0A%20%20%20%20%20%20%20%20x%3D'x%3AQ'%2C%0A%20%20%20%20%20%20%20%20y%3D'y%3AQ'%2C%0A%20%20%20%20%20%20%20%20color%3Dalt.condition(brush%2C%20'issue_type_text'%2C%20alt.value('grey'))%2C%0A%20%20%20%20%20%20%20%20tooltip%3D%5B'x%3AQ'%2C%20'y%3AQ'%2C%20'statement%3AN'%2C%20'issue_type%3AN'%5D%20%0A%20%20%20%20).add_params(brush).properties(title%3D'By%20Issue%20Types')%0A%0A%20%20%20%20scatter_chart2%20%3D%20mo.ui.altair_chart(points2)%0A%0A%20%20%20%20combined_chart%20%3D%20(scatter_chart1%20%7C%20scatter_chart2)%0A%20%20%20%20combined_chart%0A%20%20%20%20return%20combined_chart%2C%20points1%2C%20points2%2C%20scatter_chart1%2C%20scatter_chart2%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(combined_chart)%3A%0A%20%20%20%20combined_chart.value%5B%5B'statement'%2C%20'label_text'%2C%20'issue_type_text'%5D%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(combined_chart)%3A%0A%20%20%20%20combined_chart.value%5B'statement'%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Data%20Insights%0A%0A%20%20%20%20%20%20%20%20-%20Ideology%20Distribution%3A%20Visualizes%20proportions%20of%20conservative%20and%20liberal%20ideologies.%0A%20%20%20%20%20%20%20%20-%20Issue%20Types%3A%20Bar%20plot%20reveals%20the%20diversity%20and%20frequency%20of%20issue%20types%20in%20the%20dataset.%0A%20%20%20%20%20%20%20%20-%20Word%20Embeddings%3A%20Using%20TSNE%20for%202D%20projections%20helps%20identify%20clusters%20in%20political%20statements.%0A%20%20%20%20%20%20%20%20-%20Interactive%20Exploration%3A%20Offers%20detailed%2C%20interactive%20views%20on%20ideology%20vs.%20issue%20type%20distribution.%0A%0A%20%20%20%20%20%20%20%20This%20code%20provides%20a%20thorough%20analysis%20pipeline%2C%20from%20data%20loading%20to%20interactive%20visualizations%2C%20enabling%20an%20in-depth%20exploration%20of%20political%20ideologies.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Building%20Bidirection%20LSTM%20Model%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20max_length%20%3D%20100%0A%20%20%20%20embedding_dim%20%3D%20100%0A%20%20%20%20num_classes%20%3D%202%0A%20%20%20%20return%20embedding_dim%2C%20max_length%2C%20num_classes%0A%0A%0A%40app.cell%0Adef%20__(%0A%20%20%20%20Bidirectional%2C%0A%20%20%20%20Dense%2C%0A%20%20%20%20Embedding%2C%0A%20%20%20%20LSTM%2C%0A%20%20%20%20Sequential%2C%0A%20%20%20%20embedding_dim%2C%0A%20%20%20%20max_length%2C%0A%20%20%20%20num_classes%2C%0A%20%20%20%20word2vec_model%2C%0A)%3A%0A%20%20%20%20model%20%3D%20Sequential()%0A%20%20%20%20model.add(Embedding(input_dim%3Dlen(word2vec_model.wv.index_to_key)%2C%20output_dim%3Dembedding_dim%2C%20input_length%3Dmax_length))%0A%20%20%20%20model.add(Bidirectional(LSTM(64%2C%20return_sequences%3DFalse)))%0A%20%20%20%20model.add(Dense(num_classes%2C%20activation%3D'softmax'))%0A%20%20%20%20return%20(model%2C)%0A%0A%0A%40app.cell%0Adef%20__(model)%3A%0A%20%20%20%20model.compile(optimizer%3D'adam'%2C%20loss%3D'sparse_categorical_crossentropy'%2C%20metrics%3D%5B'accuracy'%5D)%0A%20%20%20%20model.summary()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(df%2C%20np)%3A%0A%20%20%20%20X%20%3D%20np.vstack(df%5B'embedding'%5D.values)%0A%20%20%20%20y%20%3D%20df%5B'label'%5D.values%0A%20%20%20%20return%20X%2C%20y%0A%0A%0A%40app.cell%0Adef%20__(X%2C%20model%2C%20y)%3A%0A%20%20%20%20model.fit(X%2C%20y%2C%20epochs%3D10%2C%20batch_size%3D32%2C%20validation_split%3D0.2)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
957b00ca4d078a95dbb30750be7ffb5276ebcbc84f8627f47a4d1f0fd35b280a