Skip to content
Snippets Groups Projects

Top2Vec integration

Merged Sonja Huber requested to merge top2vec_integration into master
7 files
+ 229
5
Compare changes
  • Side-by-side
  • Inline
Files
7
# Top2Vec
Top2vec ist ein Algorithmus basierend auf [diesem Paper](https://arxiv.org/abs/2008.09470), welcher in einem Vektorraum Word- und Document Embeddings erstellt und auf dieser Grundlage Topics berechnet und ebenfalls in diesem Vektorraum projiziert.
Ein grosser Vorteil dieser Methode ist, dass die Anzahl Topics nicht angegeben werden muss, sondern selbst vom Algorithmus bestimmt wird. Die Projiektion von Word-, Document- und Topic Embeddings in denselben Raum macht ausserdem viele übergreifende Abfagen möglich. Die [Dokumentation](https://top2vec.readthedocs.io/en/latest/Top2Vec.html#) und [API-Reference](https://top2vec.readthedocs.io/en/latest/api.html) zu studieren ist deshalb sehr empfehlenswert.
Gemäss einigen (allerdings nicht umfassenden) Tests gibt top2vec etwa ab Grössenordnung 4000 Swissdox-Artikel gute Resultate zurück. Je mehr Dokumente man im Input liefern kann, tendentiell mehr Topics werden erstellt, die entsprechend feingliedriger werden. Ausserdem können, wie weiter unten noch beschrieben wird, einige Parameter an die Grösse des vorliegenden Korpus angepasst werden. Ausprobieren kann sich lohnen.
### Installation
Top2Vec kann mit pip installiert werden:
```bash
`pip install top2vec`
```
auf **Windows** sind möglicherweise noch folgende Installationen nötig, um top2vec zu installieren:
1. python developer tools:
```bash
py -m pip install python-dev-tools —user —upgrade
```
2. VisualStudio build tools:
[direkter Downloadlink](visualstuido.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16)
um alle verschiedenen Varianten zu installieren, führe zudem folgende Befehle aus:
```bash
pip install top2vec[sentence_encoders]
pip install top2vec[sentence_transformers]
pip install top2vec[indexing]
```
bzw auf **Mac** in doppelten Anführungszeichen:
```bash
pip3 install "top2vec[sentence_encoders]"
pip3 install "top2vec[sentence_encoders]"
pip3 install "top2vec[sentence_encoders]"
```
für die Skripts brauchst du ausserdem, wenn nicht schon installiert:
```bash
pip install pandas
pip install plotly
```
## Skripts in diesem Ordner
⚠ Stellen im Code, welche geändert werden können oder müssen, sind mit *TODO* in einem Kommentar in der unmittelbaren Nähe markiert ⚠
- **top2vec_model.py**
Hiermit kannst du ein top2vec Modell von deinem Korpus erstellen. Das Format des Korpus sollte ein Dokument pro Zeile sein,
wie du es mit dem Skript [vrt2docperline.py](/4._Korpusanalyse/Topic_Modeling/vrt2docperline.py) erstellen kannst.
In der Zeile, wo das Modell erstellt wird, kannst du verschiedene Anpassungen im Skript machen:
- *embedding_model*: ohne Änderungen ist _doc2vec_ gewählt, was neue Word- und Document embeddings aufgrund deines Korpus
erstellt. Andere Optionen sind vortrainierte Modelle, zur Auswahl stehen _universal-sentence-encoder_, _universal-sentence-encoder-multilingual_, _distiluse-base-multilingual-cased_. Um zu entscheiden, welches für dein Korpus am besten
geeignet ist, liest du am besten die Beschreibung [hier](https://top2vec.readthedocs.io/en/latest/Top2Vec.html#pretrained-embedding-models-a-name-pretrained-a). Je nach Grösse und enthaltenen Sprachen kann ein anderes Modell besser sein.
- *speed* : falls _doc2vec_ als embedding modell gewählt wurde, kann man mit _speed_ noch die Geschwindigkeit und, daran gekoppelt, die Qualität der Embeddings bestimmen. Die drei Optionen sind _fast-learn_, _learn_ und _deep-learn_, wobei _deep-learn_ am längsten dauert aber die genauesten Ergebnisse liefert.
- *workers*: wie viele Threads gleichzeitig am Training arbeiten. Je mehr, desto schneller; allerdings hängt die Anzahl machbarer Threads von der "Stärke" (genauer, der Anzahl CPUs)deines Geräts ab. Neuere Macs und MacBooks (M2) sollten problemlos 6-8 worker laufen lassen können, schwächere oder ältere Geräte vielleicht nur 2-4. Du kannst im Task-Manager oder in der Aktivitätsanzeige
beobachten, wie viel Ressourcen das Programm benötigt, und wenn nötig anpassen.
- *min_count*: Die mindestanzahl die ein Wort erreichen muss, damit von diesem Wort ein Word Embedding entstehen, und entsprechend
in die Topics einfliessen kann. Im Skript ist defaultmässig 30 angegeben, auch hier kann man je nach Korpusgrösse und gewünschtem Resultat anpassen.
Für die Erstellung des Modelles gibt es noch weitere Parameter, welche du [hier](https://top2vec.readthedocs.io/en/latest/api.html), der erste Eintrag _class top2vec.Top2Vec.Top2Vec_ nachlesen kannst.
Ausführung nach gespeicherten Anpassungen:
```bash
python3 top2vec_model.py
```
- **top2vec_overview.py**
Dieses Skript gibt dir zu deinem Topic Modell
1. Ein CSV-Skript mit der Topic ID, der Worten, die in einem Topic vorkommen und der Anzahl Dokumente pro Dokument,
2. Ein Balkendiagramm erstellt mit plotly, welches die Verteilung über die einzelnen Topics anzeigt.
Auch in diesem Skript musst du vor der Ausführung einige Anpassungen machen. Diesmal sind es Dateipfade, Titel und Masse des Diagramms und einige optionale Änderungen.
Ausführung:
```bash
python3 top2vec_overview.py
```
- **top2vec_inspect_docs.py**
Mit diesem Skript kannst du die zu einem ausgewählten Topic zugehörigen Dokumente einsehen, es gibt dir zu deinem Topic Modell ein .txt file mit den Dokumenten, eines pro Zeile, aus.
Dazu musst du die Dateipfade, die ID des Topics (ablesbar im CSV-file oder im Diagramm) und optional die Anzahl der Dokumente, die ausgegeben werden sollen, spezifizieren. Standardmässig werden alle Dokumente eines Topics ins Outputfile geschrieben.
Die Anzahl Dokumente pro Topic findest du ebenfalls im CSV file oder im Balkendiagramm von _top2vec_overview.py_.
Ausführung:
```bash
python3 top2vec_inspect_docs.py
```
Loading