R-net
- Eine Tensorflow-Implementierung von R-NET: Maschinenleseverständnis mit selbstübergreifenden Netzwerken. Dieses Projekt wurde speziell für den Squad -Datensatz entwickelt.
- Wenn Sie Fragen haben, wenden Sie sich bitte an Wenxuan Zhou ([email protected]).
Anforderungen
Es gab viele bekannte Probleme, die durch die Verwendung verschiedener Softwareversionen verursacht wurden. Bitte überprüfen Sie Ihre Versionen, bevor Sie Probleme öffnen oder mir eine E -Mail senden.
Allgemein
- Python> = 3,4
- Unzipp, WGet
Python -Pakete
- TensorFlow-GPU> = 1.5.0
- Spacy> = 2.0.0
- tqdm
- Ujson
Verwendung
Um die Daten herunterzuladen und vorzuverarbeiten, leiten Sie die Daten aus
# download SQuAD and Glove
sh download.sh
# preprocess the data
python config.py --mode prepro
Hyperparameter werden in config.py gespeichert. Um das Modell zu debuggen/zu trainieren/zu testen
python config.py --mode debug/train/test
Um die offizielle Punktzahl zu erhalten, rennen Sie
python evaluate-v1.1.py ~ /data/squad/dev-v1.1.json log/answer/answer.json
Das Standardverzeichnis für die Tensorboard -Protokolldatei ist log/event
Siehe Veröffentlichung für geschultes Modell.
Detaillierte Implementierung
- Das Originalpapier verwendet additive Aufmerksamkeit, die viel Speicher verbraucht. Dieses Projekt nimmt skalierte multiplikative Aufmerksamkeit an, die in Aufmerksamkeit präsentiert werden, was Sie brauchen.
- In diesem Projekt wird Variationsabbrecher angewendet, das in einer theoretisch geerdeten Anwendung von Abbrechern in wiederkehrenden neuronalen Netzwerken vorgestellt wird.
- Um das Abbauproblem in gestapelter RNN zu lösen, werden die Ausgänge jeder Schicht verkettet, um die endgültige Ausgabe zu erzeugen.
- Wenn der Verlust am Dev Set in einem bestimmten Zeitraum zunimmt, wird die Lernrate halbiert.
- Während der Vorhersage übernimmt das Projekt die Suchmethode, die im Maschinenverständnis unter Verwendung von Match-LSTM und Antwortzeiger dargestellt wird.
- Um das Effizienzproblem zu beheben, verwendet diese Implementierung die Bucketing -Methode (von Xiongyifan beigetragen) und CudnnGru. Die Bucketing -Methode kann das Training beschleunigen, senkt jedoch den F1 -Score um 0,3%.
Leistung
Punktzahl
| Em | F1 |
|---|
| Originalpapier | 71.1 | 79,5 |
| Dieses Projekt | 71.07 | 79,51 |


Trainingszeit (s/es)
| Einheimisch | Native + Eimer | Cudnn | Cudnn + Eimer |
|---|
| E5-2640 | 6.21 | 3.56 | - - | - - |
| Titan x | 2.56 | 1.31 | 0,41 | 0,28 |
Erweiterungen
Diese Einstellungen können die Punktzahl erhöhen, aber standardmäßig nicht im Modell verwendet werden. Sie können diese Einstellungen in config.py aktivieren.
- Einbettung des vorbereiteten Handschuhcharakters. Beigesteuert von Yanghanxy.
- FastText -Einbettung. Beitrag von Xiongyifan. Kann den F1 um 1% erhöhen (gemeldet von Xiongyifan).