
    WiF                        d dl Z d dlZd dlZd dlmZ d dlmZ 	 d dlm	Z	m
Z
mZmZmZmZ dZd dlmZ 	 d dlZdZ	 d dlmZ dZd	Zd
ZdZdZdZdZdZdZ	 	 	 	 	 	 	 	 	 d/de de de dz  de dz  de!de!de!de dee e!f   de!fdZ"d Z#d Z$de fdZ%de fdZ&d e de fd!Z'd" Z(d#e fd$Z)d% Z*d#e fd&Z+d#e fd'Z,d(ee e jZ                  f   fd)Z. G d* d+ej^                        Z0d, Z1d- Z2d. Z3y# e$ r dZY w xY w# e$ r dZY w xY w# e$ r dZY w xY w)0    N)Path)TemporaryDirectory)create_repoget_hf_file_metadatahf_hub_download
hf_hub_urlrepo_type_and_id_from_hf_idupload_folderTF)Union)Imageztopics.jsonzconfig.jsonztopic_embeddings.binztopic_embeddings.safetensorsz
ctfidf.binzctfidf.safetensorszctfidf_config.jsona3  
---
tags:
- bertopic
library_name: bertopic
pipeline_tag: {PIPELINE_TAG}
---

# {MODEL_NAME}

This is a [BERTopic](https://github.com/MaartenGr/BERTopic) model.
BERTopic is a flexible and modular topic modeling framework that allows for the generation of easily interpretable topics from large datasets.

## Usage

To use this model, please install BERTopic:

```
pip install -U bertopic
```

You can use the model as follows:

```python
from bertopic import BERTopic
topic_model = BERTopic.load("{PATH}")

topic_model.get_topic_info()
```

## Topic overview

* Number of topics: {NR_TOPICS}
* Number of training documents: {NR_DOCUMENTS}

<details>
  <summary>Click here for an overview of all topics.</summary>

  {TOPICS}

</details>

## Training hyperparameters

{HYPERPARAMS}

## Framework versions

{FRAMEWORKS}
repo_idcommit_messagetokenrevisionprivate	create_pr
model_cardserializationsave_embedding_modelsave_ctfidfc                    t         st        d      t        |||d      }t        |      \  }}}| d| }t	               5 }| j                  |||	|
       	 t        t        |d|             t        |||||
      cddd       S #  |r-t        | |      }t        |      dz  }|j                  |d	       Y LxY w# 1 sw Y   yxY w)af  Push your BERTopic model to a HuggingFace Hub.

    Arguments:
        model: The BERTopic model to push
        repo_id: The name of your HuggingFace repository
        commit_message: A commit message
        token: Token to add if not already logged in
        revision: Repository revision
        private: Whether to create a private repository
        create_pr: Whether to upload the model as a Pull Request
        model_card: Whether to automatically create a modelcard
        serialization: The type of serialization.
                       Either `safetensors` or `pytorch`
        save_embedding_model: A pointer towards a HuggingFace model to be loaded in with
                                SentenceTransformers. E.g.,
                                `sentence-transformers/all-MiniLM-L6-v2`
        save_ctfidf: Whether to save c-TF-IDF information
    z\Make sure you have the huggingface hub installed via `pip install --upgrade huggingface_hub`T)r   r   exist_ok/)r   r   r   z	README.md)r   filenamer   utf8encoding)r   folder_pathr   r   r   N)_has_hf_hub
ValueErrorr   r	   r   saver   r   generate_readmer   
write_textr
   )modelr   r   r   r   r   r   r   r   r   r   repo_url_
repo_owner	repo_nametmpdirreadme_textreadme_paths                     `/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/bertopic/_save_utils.pypush_to_hf_hubr-   j   s    > wxx 7%4PH:8DAz9Ai[)G 
	 


'!5#	 	 	
	E Gk\d!ef )
'
 
	E-eW="6l[8&&{V&D!
 
s$   B>B/B>1B;9B>>Cc                    t        | t        z        }t        | t        z        }| t        z  }|j	                         rt        |      }na| t        z  }|j	                         rHt        j                  |d      }|j                         D ci c]  \  }}||j                          }}}	 d}| t        z  }|j	                         rt        |      }na| t        z  }|j	                         rHt        j                  |d      }|j                         D ci c]  \  }}||j                          }}}t        | t        z        }	d}
t        rl	 t        j                   | dz         d}|rOt#        |d   j%                               }i }
|D ],  }t        j                   | d	| d
z        }||
t'        |      <   . ||||	|
fS c c}}w c c}}w #  d\  }	}Y xY w#  d}Y wxY w)zLoad local BERTopic files.cpumap_locationNNNimages/0.jpgTFtopic_representationsimages/.jpg)load_cfg_from_jsonTOPICS_NAMECONFIG_NAMEHF_SAFE_WEIGHTS_NAMEis_fileload_safetensorsHF_WEIGHTS_NAMEtorchloaditemsnumpyCTFIDF_SAFE_WEIGHTS_NAMECTFIDF_WEIGHTS_NAMECTFIDF_CFG_NAME_has_visionr   openlistkeysint)pathtopicsparamssafetensor_pathtensors
torch_pathkvctfidf_tensorsctfidf_configimages_has_images
topic_listtopicimages                  r,   load_local_filesrY      s     { 23F{ 23F 11O "?3O+
jj%@G07@1q!'')|@G@3!99""$-o>N 33J!!#!&JU!K;I;O;O;Q!R41a!QWWY,!R!R*4/+AB
 F	 JJtn,-K f%<=BBDEJF# +

4GE7$*?#?@%*s5z"+ 67NM6IIC A "S3(2%~	 Ks1   G,A*G G1G G G GG c           	         t        |       } t        t        | t        d            }t        t        | t        d            }	 t        | t
        d      }t        |      }	 t        t        | t        d            }	 t        | t        d      }t        |      }d}t        rk	 t        | dd       d}|rXt        |d	   j                               }i }|D ]5  }	t!        j"                  t        | d
|	 dd            }
|
|t%        |	      <   7 ||||||fS #  t        | t        d      }t        j                  |d      }Y xY w#  t        | t        d      }t        j                  |d      }Y xY w#  d\  }}Y xY w#  d}Y xY w)zLoad files from HuggingFace.N)r   r/   r0   r2   r3   TFr4   r5   r6   )strr7   r   r8   r9   r:   r<   r=   r>   r?   rD   rB   rC   rE   rG   rH   r   rF   rI   )rJ   rK   rL   rN   rS   rR   rT   rU   rV   rW   rX   s              r,   load_files_from_hfr\      s   t9D  kD QRFkD QRF:!$(<tL"7+	3*?4[_+`a	L,T3KVZ[N-n=N F	 D.4@K f%<=BBDEJF# +

?475'9NY]#^_%*s5z"+ 67NM6IIA:!$$G**W59	L,T3FQUVN"ZZUKN3(2%~	 Ks6   D !E5 =E #F +E+E20E5 5E>Fc                 *   t         }d}|j                  d      d   }| j                         j                         D ci c]  \  }}d|vs|| }}}dj	                  |j                         D cg c]  \  }}d| d|  c}}      }t        t        t        | j                                    }t        t        t        | j                                    }	| j                  -t        t        | j                  j                                     }
nd	}
|D cg c]4  }d
j	                  t        t        | j!                  |             dd       6 }}|D cg c]  }| j#                  |       }}| j$                  r| j$                  n|D cg c]  }| j&                  |    c}}t)        |      D cg c]  \  }}d| d||    d||    d||    d	 }}}|d	j	                  |      z   }dj	                  t+               j                         D cg c]  \  }}d| d|  c}}      }|j-                  d|      }|j-                  d|      }|j-                  d|	      }|j-                  d|j/                               }|j-                  d|
      }|j-                  d|      }|j-                  d|      }t1        |       }|s|j-                  dd      }|S |j-                  dd	      }|S c c}}w c c}}w c c}w c c}w c c}w c c}}w c c}}w )z+Generate README for HuggingFace model card.zr| Topic ID | Topic Keywords | Topic Frequency | Label | 
|----------|----------------|-----------------|-------| 
r   r$   
z* z: N z -    z| z | z | 
z{MODEL_NAME}z{PATH}z{NR_TOPICS}z{TOPICS}z{NR_DOCUMENTS}z{HYPERPARAMS}z{FRAMEWORKS}z{PIPELINE_TAG}ztext-classificationzpipeline_tag: {PIPELINE_TAG}
)MODEL_CARD_TEMPLATEsplit
get_paramsr@   joinsortedrG   settopics_r[   lentopic_sizes_sumvaluesnextzip	get_topicget_topic_freqcustom_labels_topic_labels_	enumerateget_package_versionsreplacestripcheck_has_visual_aspect)r$   r   r   topic_table_head
model_nameparamvaluerL   rK   	nr_topicsnr_documentsrW   topic_keywords
topic_freqtopic_labelsindex
frameworkshas_visual_aspects                     r,   r"   r"     s    $J N s#B'J/4/?/?/A/G/G/Ib|ueW\aMaeUlbFbYY&,,.Q,%"UG2eW-QRFDU]]+,-FCEMM*+,I%3u1188:;< W]]Uejjc5??5+A&B!CBQ!GH]N];AB%%&&u-BJB+0+?+?5''ntEuejeFYFYZ_F`EuL &f-E5 UG3~e,-SE1B0C3|TYGZF[[`aF  /FFZF\FbFbFdeleUbr%1efJ ##NJ?J##Hg6J##M9=J##J?J##$4lCJ##OV<J##NJ?J 06''(8:OP
   ''(H"M
K cQ ^BEu
 fs/   K.K.1K4
9K:K?L4"L	L
c                 (   t        j                  | j                  t         j                        }|dk(  rd|i}t	        |t
        z  |       |dk(  rBt        sJ d       dt        j                  |      i}t        j                  ||t        z         yy)zQSave topic embeddings, either safely (using safetensors) or using legacy pytorch.dtypesafetensorstopic_embeddingspytorchz$`pip install pytorch` to save as binN)nparraytopic_embeddings_float32save_safetensorsr:   
_has_torchr>   
from_numpyr!   r=   )r$   save_directoryr   rN   s       r,   save_hfr   >  s    hhu..bjjAG%%w/*>>H	!AAAz%u'7'7'@A

7N_<= "    r   c                    | j                   j                  }| j                   j                  }| j                   j                  }t	        j
                  | j                   j                        }t	        j
                  | j                  j                  j                        }|dk(  r|||||d}t        |t        z  |       |dk(  rt        sJ d       t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      d}t        j                  ||t        z         yy)zSave c-TF-IDF sparse matrix.r   )indptrindicesdatashapediagr   z%`pip install pytorch` to save as .binN)	c_tf_idf_r   r   r   r   r   r   ctfidf_model	_idf_diagr   rB   r   r>   r   r!   rC   )	r$   r   r   r   r   r   r   r   rN   s	            r,   r   r   K  s   __##Foo%%G??DHHU__**+E88E&&00556D%
 	*BBGL	!BBBz&&v.''0$$T*%%e,$$T*
 	

7N-@@A "r   c                    i }| j                   j                  | j                   j                  d|d<   | j                  j	                         }|d= |d= |d= t        |d   t              s|d= || j                  j                  d|d<   |j                  d	      5 }t        j                  ||d
       ddd       y# 1 sw Y   yxY w)z9Save parameters to recreate CountVectorizer and c-TF-IDF.)bm25_weightingreduce_frequent_wordsr   	tokenizerpreprocessorr   analyzer)rL   vocabvectorizer_modelw   indentN)r   r   r   r   rd   
isinstancer[   vocabulary_rF   jsondump)r$   rJ   config	cv_paramsfs        r,   save_ctfidf_configr   h  s    F  ,,;;!&!3!3!I!IF> &&113I+	. 99W;Mi
+S1j! ''33"F
 
3 '1		&!A&' ' 's   B;;CrJ   c                 @   t        |      }| j                         }|j                         D ci c]  \  }}d|vs|| }}}t        |t              r||d<   |j                  d      5 }t        j                  ||d       ddd       |S c c}}w # 1 sw Y   |S xY w)zSave BERTopic configuration.r$   embedding_modelr   r   r   N)r   rd   r@   r   r[   rF   r   r   )r$   rJ   r   rL   rz   r{   r   r   s           r,   save_configr     s    :DF/5||~V|uePUAUeUlVFV /3'$3 !	3 '1		&!A&' M W' Ms   BB*BBc                     t         rB| j                  j                         D ]$  \  }}t        |d   t        j                        s$ y yy)z!Check if model has visual aspect.r   TN)rE   topic_aspects_r@   r   r   )r$   aspectr{   s      r,   rw   rw     sA    "11779 	MFE%(EKK0	 r   c                 @   t         rd}| j                  j                         D ]3  \  }}t        |d   t        j                        s$| j                  |   } n |C|j                  dd       |j                         D ]  \  }}|j                  || dz          yyy)zSave topic images.Nr   T)r   parentsr6   )rE   r   r@   r   r   mkdirr!   )r$   rJ   visual_aspectsr   r{   rW   rX   s          r,   save_imagesr     s    "11779 	MFE%(EKK0!&!5!5f!=	
 %JJdJ3 . 4 4 6 2u

4UG4.012 & r   c           	         t        |      }t        rMi }| j                  j                         D ]-  \  }}t	        |d   t
        j
                        s|||<   )d|d<   / n| j                  }| j                  | j                  D cg c]  }t        |       c}| j                  t        j                  | j                  j                  t              j                         | j                  | j                   t        | j"                        |d}|j%                  d      5 }t'        j(                  ||dt*               d	d	d	       y	c c}w # 1 sw Y   y	xY w)
z Save Topic-specific information.r   TVisual_Aspectr   )r4   rK   topic_sizestopic_mapperr   custom_labels	_outlierstopic_aspectsr   r   )r   clsN)r   rE   r   r@   r   r   topic_representations_rh   rI   rj   r   r   topic_mapper_	mappings_tolistrr   rq   r   rF   r   r   NumpyEncoder)r$   rJ   selected_topic_aspectsr   r{   rW   rK   r   s           r,   save_topicsr     s!   :D!#"11779 	?MFEeAh416&v.:>&7		? "'!5!5 "'!=!=+0==9%3u:9))!4!4!>!>cJQQS++--)/	F 
3 91		&!A<89 9 :9 9s   EE

E	json_filec                     t        | dd      5 }|j                         }ddd       t        j                        S # 1 sw Y   xY w)zLoad configuration from json.rzutf-8r   N)rF   readr   loads)r   readertexts      r,   r7   r7     s?    	iw	/ 6{{}::d s	   =Ac                        e Zd Z fdZ xZS )r   c                     t        |t        j                        rt        |      S t        |t        j                        rt        |      S t        t        | #  |      S )N)	r   r   integerrI   floatingfloatsuperr   default)selfobj	__class__s     r,   r   zNumpyEncoder.default  sD    c2::&s8Oc2;;':\4055r   )__name__
__module____qualname__r   __classcell__)r   s   @r,   r   r     s    6 6r   r   c                     	 ddl } ddlm} ddlm} ddlm} ddlm} 	 ddlm}  |d      }	 ddl
m} 	 ddlm} 	 ddlm}	 	 ddlm}
 |||||||
|	|| j                         d
S # t        t        f$ r d}Y Jw xY w# t        t        f$ r d}Y Zw xY w# t        t        f$ r d}Y jw xY w# t        t        f$ r d}	Y zw xY w# t        t        f$ r d}
Y w xY w# t        $ r}|cY d}~S d}~ww xY w)z.Get versions of main dependencies of BERTopic.r   N)__version__)versionhdbscan)
NumpyHDBSCANUMAPPandaszScikit-LearnzSentence-transformersTransformersNumbaPlotlyPython)platformrA   r   pandassklearnplotlyimportlib.metadatar   ImportErrorModuleNotFoundErrorumapsentence_transformersnumbatransformerspython_version	Exception)r   
np_versionpandas_versionsklearn_versionplotly_versionr   hdbscan_versionumap_versionsbert_versionnumba_versiontransformers_versiones               r,   rt   rt     s   /38:8	#2%i0O	 8	!J	!:	(H
  & $+%20"$--/
 	
/ 01 	#"O	#
 01 	 L	 
 01 	! M	!
 01 	! M	!
 01 	(#' 	(  s   C A$ A; B B) C  	C $A85C 7A88C ;BC BC B&#C %B&&C )B=:C <B==C  CC CC 	C, C'!C,'C,c                 r    	 ddl }|j                  j                  |       S # t        $ r t	        d      w xY w)z3Load safetensors and check whether it is installed.r   Nz.`pip install safetensors` to load .safetensors)safetensors.numpyrA   	load_filer   r    )rJ   r   s     r,   r<   r<   	  s?    K   **400 KIJJKs   ! 6c                 v    	 ddl }|j                  j                  ||        y# t        $ r t	        d      w xY w)z3Save safetensors and check whether it is installed.r   Nz1`pip install safetensors` to save as .safetensors)r  rA   	save_filer   r    )rJ   rN   r   s      r,   r   r     s>    N ##GT2 NLMMNs    # 8)	zAdd BERTopic modelNNFFTr   TF)4osr   rA   r   pathlibr   tempfiler   huggingface_hubr   r   r   r   r	   r
   r   r   typingr   r>   r   PILr   rE   r8   r9   r=   r:   rC   rB   rD   rb   r[   boolr-   rY   r\   r"   r   r   r   r   rw   r   r   PathLiker7   JSONEncoderr   rt   r<   r    r   r,   <module>r     s   	    '  K
 J
K
 (5 " / &1 n /&-1A
A
 A
 :	A

 DjA
 A
 A
 A
 A
  T	*A
 A
H/Jd,J^,C ,^
># 
>Bs B3 B:'2S  2S 29S 9:%R[[(8"9 64## 61hKN}  K  J  Ks3   C% C2 C? %C/.C/2C<;C<?D	D	