├── .gitignore ├── LICENSE ├── README.md ├── cli.py ├── config.py ├── data_utils.py ├── evaluation.ipynb ├── experiment.py ├── extras ├── author2embedding.pickle ├── author2embedding.projector.tsv ├── author2embedding.projector_meta.tsv └── projector_config.json ├── germeval-data.ipynb ├── images └── architecture.png ├── models.py ├── requirements.txt └── wikidata_for_authors.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | 106 | .idea/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Malte Ostendorff 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PyTorch BERT Document Classification 2 | 3 | Implementation and pre-trained models of the paper *Enriching BERT with Knowledge Graph Embedding for Document Classification* ([PDF](https://arxiv.org/abs/1909.08402)). 4 | A submission to the [GermEval 2019 shared task](https://www.inf.uni-hamburg.de/en/inst/ab/lt/resources/data/germeval-2019-hmc.html) on hierarchical text classification. 5 | If you encounter any problems, feel free to contact us or submit a GitHub issue. 6 | 7 | ## Content 8 | 9 | - CLI script to run all experiments 10 | - WikiData author embeddings ([view on Tensorboard Projector](http://projector.tensorflow.org/?config=https://raw.githubusercontent.com/malteos/pytorch-bert-document-classification/master/extras/projector_config.json)) 11 | - Data preparation 12 | - Requirements 13 | - Trained model weights as [release files](https://github.com/malteos/pytorch-bert-document-classification/releases) 14 | 15 | ## Model architecture 16 | 17 | ![BERT + Knowledge Graph Embeddings](https://github.com/malteos/pytorch-bert-document-classification/raw/master/images/architecture.png) 18 | 19 | 20 | ## Installation 21 | 22 | Requirements: 23 | - Python 3.6 24 | - CUDA GPU 25 | - Jupyter Notebook 26 | 27 | Install dependencies: 28 | ``` 29 | pip install -r requirements.txt 30 | ``` 31 | 32 | ## Prepare data 33 | 34 | ### GermEval data 35 | 36 | - Download from shared-task website: [here](https://competitions.codalab.org/competitions/20139) 37 | - Run all steps in Jupyter Notebook: [germeval-data.ipynb](#) 38 | 39 | ### Author Embeddings 40 | 41 | - [Download pre-trained Wikidata embedding (30GB): Facebook PyTorch-BigGraph](https://github.com/facebookresearch/PyTorch-BigGraph#pre-trained-embeddings) 42 | - [Download WikiMapper index files (de+en)](https://github.com/jcklie/wikimapper#precomputed-indices) 43 | 44 | ``` 45 | python wikidata_for_authors.py run ~/datasets/wikidata/index_enwiki-20190420.db \ 46 | ~/datasets/wikidata/index_dewiki-20190420.db \ 47 | ~/datasets/wikidata/torchbiggraph/wikidata_translation_v1.tsv.gz \ 48 | ~/notebooks/bert-text-classification/authors.pickle \ 49 | ~/notebooks/bert-text-classification/author2embedding.pickle 50 | 51 | # OPTIONAL: Projector format 52 | python wikidata_for_authors.py convert_for_projector \ 53 | ~/notebooks/bert-text-classification/author2embedding.pickle 54 | extras/author2embedding.projector.tsv \ 55 | extras/author2embedding.projector_meta.tsv 56 | 57 | ``` 58 | 59 | 60 | ## Reproduce paper results 61 | 62 | 63 | Download pre-trained models: [GitHub releases](https://github.com/malteos/pytorch-bert-document-classification/releases) 64 | 65 | 66 | ### Available experiment settings 67 | 68 | Detailed settings for each experiment can found in `cli.py`. 69 | 70 | ``` 71 | task-a__bert-german_full 72 | task-a__bert-german_manual_no-embedding 73 | task-a__bert-german_no-manual_embedding 74 | task-a__bert-german_text-only 75 | task-a__author-only 76 | task-a__bert-multilingual_text-only 77 | 78 | task-b__bert-german_full 79 | task-b__bert-german_manual_no-embedding 80 | task-b__bert-german_no-manual_embedding 81 | task-b__bert-german_text-only 82 | task-b__author-only 83 | task-b__bert-multilingual_text-only 84 | ``` 85 | 86 | ### Enviroment variables 87 | 88 | - `TRAIN_DF_PATH`: Path to Pandas Dataframe (pickle) 89 | - `GPU_ID`: Run experiments on this GPU (used for `CUDA_VISIBLE_DEVICES`) 90 | - `OUTPUT_DIR`: Directory to store experiment output 91 | - `EXTRAS_DIR`: Directory where author embeddings and [gender data](https://data.world/howarder/gender-by-name) is located 92 | - `BERT_MODELS_DIR`: Directory where pre-trained BERT models are located 93 | 94 | ### Validation set 95 | 96 | ``` 97 | python cli.py run_on_val $GPU_ID $EXTRAS_DIR $TRAIN_DF_PATH $VAL_DF_PATH $OUTPUT_DIR --epochs 5 98 | ``` 99 | 100 | ### Test set 101 | 102 | ``` 103 | python cli.py run_on_test $GPU_ID $EXTRAS_DIR $FULL_DF_PATH $TEST_DF_PATH $OUTPUT_DIR --epochs 5 104 | ``` 105 | 106 | ### Evaluation 107 | 108 | The scores from the result table can be reproduced with the `evaluation.ipynb` notebook. 109 | 110 | ## How to cite 111 | 112 | If you are using our code, please cite [our paper](https://arxiv.org/abs/1909.08402): 113 | ``` 114 | @inproceedings{Ostendorff2019, 115 | address = {Erlangen, Germany}, 116 | author = {Ostendorff, Malte and Bourgonje, Peter and Berger, Maria and Moreno-Schneider, Julian and Rehm, Georg}, 117 | booktitle = {Proceedings of the GermEval 2019 Workshop}, 118 | title = {{Enriching BERT with Knowledge Graph Embedding for Document Classification}}, 119 | year = {2019} 120 | } 121 | ``` 122 | 123 | ## References 124 | 125 | - [GermEval 2019 Task 1 on Codalab](https://competitions.codalab.org/competitions/20139) 126 | - [Google BERT Tensorflow](https://github.com/google-research/bert) 127 | - [Huggingface PyTorch Transformer](https://github.com/huggingface/pytorch-transformers) 128 | - [Deepset AI - BERT-german](https://deepset.ai/german-bert) 129 | - [Facebook PyTorch BigGraph](https://github.com/facebookresearch/PyTorch-BigGraph) 130 | 131 | ## License 132 | 133 | MIT 134 | 135 | 136 | -------------------------------------------------------------------------------- /cli.py: -------------------------------------------------------------------------------- 1 | 2 | """ 3 | 4 | Run experiments for paper results 5 | - for each experiment: sub-task A + B 6 | - save model weights to disk 7 | - save val results to disk 8 | 9 | /experiments/ 10 | bert_extras/ 11 | weights/ 12 | config/ 13 | validation/ 14 | stats/ 15 | 16 | 17 | export BERT_MODELS_DIR="/home/mostendorff/datasets/BERT_pre_trained_models/pytorch" 18 | 19 | python cli.py run_on_val $GPU_ID $EXTRAS_DIR $TRAIN_DF_PATH $VAL_DF_PATH $OUTPUT_DIR --epochs 5 20 | 21 | 4 \ 22 | data/extras \ 23 | germeval_train_df_meta.pickle \ 24 | germeval_val_df_meta.pickle \ 25 | experiments_output 26 | 27 | python experiments.py run task-a__bert-german_manual_author-embedding_author-gender \ 28 | 4 \ 29 | data/extras \ 30 | germeval_train_df_meta.pickle \ 31 | germeval_val_df_meta.pickle \ 32 | experiments_output 33 | 34 | 35 | python experiments.py run task-a__bert-german_manual_no-embedding_author-gender \ 36 | 4 \ 37 | data/extras \ 38 | germeval_train_df_meta.pickle \ 39 | germeval_val_df_meta.pickle \ 40 | experiments_output 41 | 42 | python experiments.py run task-a__bert-german_manual_no-embedding_author-gender \ 43 | 4 \ 44 | data/extras \ 45 | germeval_train_df_meta.pickle \ 46 | germeval_val_df_meta.pickle \ 47 | experiments_output 48 | 49 | 50 | python experiments.py run task-a__bert-german_text-only \ 51 | 4 \ 52 | data/extras \ 53 | germeval_train_df_meta.pickle \ 54 | germeval_val_df_meta.pickle \ 55 | experiments_output 56 | 57 | python experiments.py run task-a__author-only \ 58 | 4 \ 59 | data/extras \ 60 | germeval_train_df_meta.pickle \ 61 | germeval_val_df_meta.pickle \ 62 | experiments_output 63 | 64 | python experiments.py run task-b__author-only \ 65 | 4 \ 66 | data/extras \ 67 | germeval_train_df_meta.pickle \ 68 | germeval_val_df_meta.pickle \ 69 | experiments_output 70 | 71 | python experiments.py run task-b__bert-german_full \ 72 | 4 \ 73 | data/extras \ 74 | germeval_train_df_meta.pickle \ 75 | germeval_val_df_meta.pickle \ 76 | experiments_output \ 77 | --epochs 5 78 | 79 | ---- 80 | 81 | python experiments.py final task-a__bert-german_full \ 82 | 4 \ 83 | data/extras \ 84 | germeval_fulltrain_df_meta.pickle \ 85 | germeval_test_df_meta.pickle \ 86 | experiments_output \ 87 | --epochs 1 88 | 89 | python experiments.py final task-b__bert-german_full 3 data/extras germeval_fulltrain_df_meta.pickle germeval_test_df_meta.pickle experiments_output --epochs 5 90 | 91 | 92 | python experiments.py final task-a__bert-german_text-only 2 data/extras germeval_fulltrain_df_meta.pickle germeval_test_df_meta.pickle experiments_output --epochs 5 93 | 94 | 95 | python experiments.py final task-b__bert-german_full 2 data/extras germeval_fulltrain_df_meta.pickle germeval_test_df_meta.pickle experiments_output --epochs 5 96 | 97 | """ 98 | import json 99 | import os 100 | import pickle 101 | import numpy as np 102 | 103 | import fire 104 | import torch 105 | import logging 106 | 107 | from torch.optim import Adam 108 | from sklearn.metrics import classification_report 109 | 110 | from config import AUTHOR_DIM, LEARNING_RATE, TASK_A_LABELS_COUNT, TASK_B_LABELS_COUNT, most_popular_label 111 | from data_utils import get_best_thresholds, nn_output_to_submission 112 | from experiment import Experiment 113 | from models import LinearMultiClassifier 114 | 115 | logging.basicConfig(level=logging.INFO) 116 | 117 | 118 | # Define experiments 119 | 120 | experiments = { 121 | ########## A 122 | 'task-a__bert-german_full': Experiment( 123 | 'a', 'bert-base-german-cased', with_text=True, with_author_gender=True, with_manual=True, with_author_vec=True 124 | ), 125 | 'task-a__bert-german_full_2': Experiment( 126 | 'a', 'bert-base-german-cased', with_text=True, with_author_gender=True, with_manual=True, with_author_vec=True, mlp_dim=500, 127 | ), 128 | 129 | 'task-a__bert-german_manual_no-embedding': Experiment( 130 | 'a', 'bert-base-german-cased', with_text=True, with_author_gender=True, with_manual=True, with_author_vec=False 131 | ), 132 | 133 | 'task-a__bert-german_no-manual_embedding': Experiment( 134 | 'a', 'bert-base-german-cased', with_text=True, with_author_gender=False, with_manual=False, with_author_vec=True 135 | ), 136 | 'task-a__bert-german_text-only': Experiment( 137 | 'a', 'bert-base-german-cased', with_text=True, with_author_gender=False, with_manual=False, with_author_vec=False 138 | ), 139 | # author only 140 | 'task-a__author-only': Experiment( 141 | 'a', '-', with_text=False, with_author_gender=False, with_manual=False, with_author_vec=True, 142 | classifier_model=LinearMultiClassifier( 143 | labels_count=TASK_A_LABELS_COUNT, 144 | extras_dim=AUTHOR_DIM, 145 | ) 146 | ), 147 | # bert-base-multilingual-cased 148 | 'task-a__bert-multilingual_text-only': Experiment( 149 | 'a', 'bert-base-multilingual-cased', with_text=True, with_author_gender=False, with_manual=False, with_author_vec=False 150 | ), 151 | 152 | 153 | ##### B 154 | 155 | 'task-b__bert-german_full': Experiment( 156 | 'b', 'bert-base-german-cased', with_text=True, with_author_gender=True, with_manual=True, with_author_vec=True 157 | ), 158 | 'task-b__bert-german_manual_no-embedding': Experiment( 159 | 'b', 'bert-base-german-cased', with_text=True, with_author_gender=True, with_manual=True, with_author_vec=False 160 | ), 161 | 'task-b__bert-german_no-manual_embedding': Experiment( 162 | 'b', 'bert-base-german-cased', with_text=True, with_author_gender=False, with_manual=False, with_author_vec=True 163 | ), 164 | 'task-b__bert-german_text-only': Experiment( 165 | 'b', 'bert-base-german-cased', with_text=True, with_author_gender=False, with_manual=False, with_author_vec=False 166 | ), 167 | # author only 168 | 'task-b__author-only': Experiment( 169 | 'b', '-', with_text=False, with_author_gender=False, with_manual=False, with_author_vec=True, 170 | classifier_model=LinearMultiClassifier( 171 | labels_count=TASK_B_LABELS_COUNT, 172 | extras_dim=AUTHOR_DIM, 173 | ) 174 | ), 175 | # bert-base-multilingual-cased 176 | 'task-b__bert-multilingual_text-only': Experiment( 177 | 'b', 'bert-base-multilingual-cased', with_text=True, with_author_gender=False, with_manual=False, with_author_vec=False 178 | ), 179 | 180 | ###### 181 | 182 | # switch does not work 183 | 'task-a__bert-german_full-switch': Experiment( 184 | 'a', 'bert-base-german-cased', with_text=True, with_author_gender=True, with_manual=True, with_author_vec=True, 185 | author_vec_switch=True, 186 | ), 187 | 188 | # manual and gender goes only together (for paper) 189 | # 'task-a__bert-german_manual_no-embedding_no-gender': Experiment( 190 | # 'a', 'bert-base-german-cased', with_text=True, with_author_gender=False, with_manual=True, with_author_vec=False 191 | # ), 192 | } 193 | 194 | 195 | def run_on_val(name, cuda_device, extras_dir, df_train_path, df_val_path, output_dir, epochs=None, continue_training=False, 196 | batch_size=None): 197 | 198 | if name not in experiments: 199 | print(f'Experiment not found: {name}') 200 | exit(1) 201 | 202 | experiment = experiments[name] 203 | experiment.name = name 204 | experiment.output_dir = output_dir 205 | experiment.init(cuda_device, epochs, batch_size, continue_training) 206 | 207 | train_dataloader, val_dataloader, vec_found_selector, val_df, val_y = experiment.prepare_data_loaders(df_train_path, df_val_path, extras_dir) 208 | 209 | model = experiment.get_model() 210 | 211 | print(f'Using model: {type(model).__name__}') 212 | 213 | # Load existing model weights 214 | if continue_training: 215 | print('Loading existing model weights...') 216 | model.load_state_dict(torch.load(os.path.join(experiment.get_output_dir(), 'model_weights'))) 217 | 218 | # Training 219 | optimizer = Adam(model.parameters(), lr=LEARNING_RATE) 220 | 221 | # Model to GPU 222 | model = model.cuda() 223 | 224 | experiment.train(model, optimizer, train_dataloader) 225 | 226 | # Validation 227 | output_ids, outputs = experiment.eval(model, val_dataloader) 228 | 229 | t_max, f_max = get_best_thresholds(experiment.labels, val_y, outputs, plot=False) 230 | 231 | report = classification_report(val_y, np.where(outputs>t_max, 1, 0), target_names=experiment.labels, output_dict=True) 232 | report_str = classification_report(val_y, np.where(outputs > t_max, 1, 0), target_names=experiment.labels) 233 | 234 | if vec_found_selector is not None and len(vec_found_selector) > 0: 235 | try: 236 | report_author_vec = classification_report(val_y[vec_found_selector], np.where(outputs[vec_found_selector] > t_max, 1, 0), target_names=experiment.labels, output_dict=True) 237 | report_author_vec_str = classification_report(val_y[vec_found_selector], np.where(outputs[vec_found_selector] > t_max, 1, 0), target_names=experiment.labels) 238 | except BaseException: 239 | print('Cannot report author_vec_found') 240 | 241 | # Save 242 | with open(os.path.join(experiment.get_output_dir(), 'report.json'), 'w') as f: 243 | json.dump(report, f) 244 | 245 | with open(os.path.join(experiment.get_output_dir(), 'report.txt'), 'w') as f: 246 | f.write(report_str) 247 | 248 | if vec_found_selector is not None and len(vec_found_selector) > 0: 249 | try: 250 | with open(os.path.join(experiment.get_output_dir(), 'report_author_vec_found.json'), 'w') as f: 251 | json.dump(report_author_vec, f) 252 | 253 | with open(os.path.join(experiment.get_output_dir(), 'report_author_vec_found.txt'), 'w') as f: 254 | f.write(report_author_vec_str) 255 | except BaseException: 256 | print('Cannot write report_author_vec_found') 257 | 258 | with open(os.path.join(experiment.get_output_dir(), 'best_thresholds.csv'), 'w') as f: 259 | f.write(','.join([str(t) for t in t_max])) 260 | 261 | with open(os.path.join(experiment.get_output_dir(), 'outputs_with_ids.pickle'), 'wb') as f: 262 | pickle.dump((outputs, output_ids), f) 263 | 264 | torch.save(model.state_dict(), os.path.join(experiment.get_output_dir(), 'model_weights')) 265 | 266 | with open(os.path.join(experiment.get_output_dir(), 'model_config.json'), 'w') as f: 267 | json.dump(model.config, f) 268 | 269 | # Submission 270 | lines, no_label = nn_output_to_submission('subtask_' + experiment.task, val_df, outputs, output_ids, t_max, experiment.labels, 271 | most_popular_label) 272 | print(f'-- no found: {no_label}') 273 | 274 | fn = os.path.join(experiment.get_output_dir(), 'submission.txt') 275 | with open(fn, 'w') as f: 276 | f.write('\n'.join(lines)) 277 | 278 | print(f'Submission file saved to: {fn}') 279 | 280 | 281 | def run_on_test(name, cuda_device, extras_dir, df_full_path, df_test_path, output_dir, epochs=None, continue_training=False, 282 | batch_size=None): 283 | 284 | if name not in experiments: 285 | print(f'Experiment not found: {name}') 286 | exit(1) 287 | 288 | experiment = experiments[name] 289 | experiment.name = 'final-' + name 290 | experiment.output_dir = output_dir 291 | experiment.init(cuda_device, epochs, batch_size, continue_training) 292 | 293 | # best thresholds from validation set 294 | t_fn = os.path.join(output_dir, name, 'best_thresholds.csv') 295 | if not os.path.exists(t_fn): 296 | raise ValueError('Could not load threshold values') 297 | 298 | train_dataloader, test_dataloader, vec_found_selector, test_df, _ = experiment.prepare_data_loaders(df_full_path, df_test_path, extras_dir, test_set=True) 299 | 300 | # Parse thresholds 301 | with open(t_fn, 'r') as f: 302 | t_max = [float(t) for t in f.read().split(',')] 303 | 304 | if len(t_max) != len(experiment.labels): 305 | raise ValueError('Threshold values does not match label count') 306 | 307 | model = experiment.get_model() 308 | 309 | print(f'Using model: {type(model).__name__}') 310 | 311 | # Load existing model weights 312 | if continue_training: 313 | print('Loading existing model weights...') 314 | model.load_state_dict(torch.load(os.path.join(experiment.get_output_dir(), 'full_model_weights'))) 315 | 316 | # Training 317 | optimizer = Adam(model.parameters(), lr=LEARNING_RATE) 318 | 319 | # Model to GPU 320 | model = model.cuda() 321 | 322 | experiment.train(model, optimizer, train_dataloader) 323 | 324 | # Save trained model 325 | torch.save(model.state_dict(), os.path.join(experiment.get_output_dir(), 'model_weights')) 326 | with open(os.path.join(experiment.get_output_dir(), 'model_config.json'), 'w') as f: 327 | json.dump(model.config, f) 328 | 329 | # Test results 330 | output_ids, outputs = experiment.eval(model, test_dataloader) 331 | 332 | # Store predictions 333 | with open(os.path.join(experiment.get_output_dir(), 'outputs_with_ids.pickle'), 'wb') as f: 334 | pickle.dump((outputs, output_ids), f) 335 | 336 | # Submission 337 | lines, no_label = nn_output_to_submission('subtask_' + experiment.task, test_df, outputs, output_ids, t_max, experiment.labels, 338 | most_popular_label) 339 | print(f'-- no found: {no_label}') 340 | 341 | fn = os.path.join(experiment.get_output_dir(), 'submission.txt') 342 | with open(fn, 'w') as f: 343 | f.write('\n'.join(lines)) 344 | 345 | print(f'Submission file saved to: {fn}') 346 | 347 | 348 | if __name__ == '__main__': 349 | fire.Fire() -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # Global settings 4 | # (same for all experiments) 5 | 6 | MAX_SEQ_LENGTH = 300 #256 # max 512 (strongly affects GPU memory consumption) 7 | HIDDEN_DIM = 768 # size of BERT hidden layer 8 | MLP_DIM = 1024 #500 # size of multi layer perceptron (2 layers) 9 | AUTHOR_DIM = 200 # size of Wikidata author embeddings 10 | GENDER_DIM = 2 11 | TRAIN_BATCH_SIZE = 16 12 | EVAL_BATCH_SIZE = 32 13 | LEARNING_RATE = 2e-5 14 | NUM_TRAIN_EPOCHS = 5 15 | TASK_A_LABELS_COUNT = 8 16 | TASK_B_LABELS_COUNT = 343 17 | default_extra_cols = [ 18 | 'author_count', 19 | 'authors_academic', 20 | 'title_words', 'text_words', 21 | 'age', 22 | 'word_len_max', 23 | 'word_len_mean', 24 | 'word_len_median' 25 | ] 26 | most_popular_label = 'Literatur & Unterhaltung' # use this as default 27 | 28 | if 'BERT_MODELS_DIR' not in os.environ: 29 | raise ValueError('You must define BERT_MODELS_DIR as environment variable!') 30 | 31 | BERT_MODELS_DIR = os.environ['BERT_MODELS_DIR'] 32 | 33 | -------------------------------------------------------------------------------- /data_utils.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | from torch.utils.data import (DataLoader, RandomSampler, SequentialSampler, TensorDataset) 4 | from keras.preprocessing.sequence import pad_sequences 5 | from sklearn.metrics import confusion_matrix, roc_curve, precision_recall_fscore_support 6 | 7 | import matplotlib.pyplot as plt 8 | import re 9 | 10 | import numpy as np 11 | import torch 12 | 13 | class TensorIndexDataset(TensorDataset): 14 | def __getitem__(self, index): 15 | """ 16 | Returns in addition to the actual data item also its index (useful when assign a prediction to a item) 17 | """ 18 | return index, super().__getitem__(index) 19 | 20 | def text_to_train_tensors(texts, tokenizer, max_seq_length): 21 | train_tokens = list(map(lambda t: ['[CLS]'] + tokenizer.tokenize(t)[:max_seq_length - 1], texts)) 22 | train_tokens_ids = list(map(tokenizer.convert_tokens_to_ids, train_tokens)) 23 | train_tokens_ids = pad_sequences(train_tokens_ids, maxlen=max_seq_length, truncating="post", padding="post", 24 | dtype="int") 25 | 26 | train_masks = [[float(i > 0) for i in ii] for ii in train_tokens_ids] 27 | 28 | # to tensors 29 | # train_tokens_tensor, train_masks_tensor 30 | return torch.tensor(train_tokens_ids), torch.tensor(train_masks) 31 | 32 | 33 | def to_dataloader(texts, extras, ys, 34 | tokenizer, 35 | max_seq_length, 36 | batch_size, 37 | dataset_cls=TensorDataset, 38 | sampler_cls=RandomSampler): 39 | """ 40 | Convert raw input into PyTorch dataloader 41 | """ 42 | #train_y = train_df[labels].values 43 | 44 | # Labels 45 | train_y_tensor = torch.tensor(ys).float() 46 | 47 | if texts is not None and extras is not None: 48 | # All features 49 | train_tokens_tensor, train_masks_tensor = text_to_train_tensors(texts, tokenizer, max_seq_length) 50 | train_extras_tensor = torch.tensor(extras, dtype=torch.float) 51 | 52 | train_dataset = dataset_cls(train_tokens_tensor, train_masks_tensor, train_extras_tensor, train_y_tensor) 53 | elif texts is not None and extras is None: 54 | # Text only 55 | train_tokens_tensor, train_masks_tensor = text_to_train_tensors(texts, tokenizer, max_seq_length) 56 | train_dataset = dataset_cls(train_tokens_tensor, train_masks_tensor, train_y_tensor) 57 | elif texts is None and extras is not None: 58 | 59 | train_extras_tensor = torch.tensor(extras, dtype=torch.float) 60 | train_dataset = dataset_cls(train_extras_tensor, train_y_tensor) 61 | else: 62 | raise ValueError('Either texts or extra must be set.') 63 | 64 | train_sampler = sampler_cls(train_dataset) 65 | 66 | return DataLoader(train_dataset, sampler=train_sampler, batch_size=batch_size) 67 | 68 | 69 | def get_extras_gender(df, extra_cols, author2vec, author2gender, with_vec=True, with_gender=True, on_off_switch=False): 70 | """ 71 | Build matrix for extra data (i.e. author embeddings + gender) 72 | """ 73 | if with_vec: 74 | AUTHOR_DIM = len(next(iter(author2vec.values()))) 75 | 76 | if on_off_switch: 77 | AUTHOR_DIM += 1 # One additional dimension of binary (1/0) if embedding is available 78 | else: 79 | AUTHOR_DIM = 0 80 | 81 | if with_gender: 82 | GENDER_DIM = len(next(iter(author2gender.values()))) 83 | else: 84 | GENDER_DIM = 0 85 | 86 | extras = np.zeros((len(df), len(extra_cols) + AUTHOR_DIM + GENDER_DIM)) 87 | vec_found_selector = [False] * len(df) 88 | gender_found_selector = [False] * len(df) 89 | 90 | vec_found_count = 0 91 | gender_found_count = 0 92 | 93 | for i, authors in enumerate(df['authors']): 94 | # simple extras 95 | extras[i][:len(extra_cols)] = df[extra_cols].values[i] 96 | 97 | # author vec 98 | if with_vec: 99 | for author in authors.split(';'): 100 | if author in author2vec: 101 | if on_off_switch: 102 | extras[i][len(extra_cols):len(extra_cols) + AUTHOR_DIM - 1] = author2vec[author] 103 | extras[i][len(extra_cols) + AUTHOR_DIM] = 1 104 | else: 105 | extras[i][len(extra_cols):len(extra_cols)+AUTHOR_DIM] = author2vec[author] 106 | 107 | vec_found_count += 1 108 | vec_found_selector[i] = True 109 | break 110 | 111 | # author gender 112 | if with_gender: 113 | for author in authors.split(';'): 114 | first_name = author.split(' ')[0] 115 | if first_name in author2gender: 116 | extras[i][len(extra_cols)+AUTHOR_DIM:] = author2gender[first_name] 117 | gender_found_count += 1 118 | gender_found_selector[i] = True 119 | break 120 | 121 | return extras, vec_found_count, gender_found_count, vec_found_selector, gender_found_selector 122 | 123 | 124 | def get_best_thresholds(labels, test_y, outputs, plot=False): 125 | """ 126 | Hyper parameter search for best classification threshold 127 | """ 128 | t_max = [0] * len(labels) 129 | f_max = [0] * len(labels) 130 | 131 | for i, label in enumerate(labels): 132 | ts = [] 133 | fs = [] 134 | 135 | for t in np.linspace(0.1, 0.99, num=50): 136 | p, r, f, _ = precision_recall_fscore_support(test_y[:,i], np.where(outputs[:,i]>t, 1, 0), average='micro') 137 | ts.append(t) 138 | fs.append(f) 139 | if f > f_max[i]: 140 | f_max[i] = f 141 | t_max[i] = t 142 | 143 | if plot: 144 | print(f'LABEL: {label}') 145 | print(f'f_max: {f_max[i]}') 146 | print(f't_max: {t_max[i]}') 147 | 148 | plt.scatter(ts, fs) 149 | plt.show() 150 | 151 | return t_max, f_max 152 | 153 | 154 | def nn_output_to_submission(first_line, df, outputs, output_ids, t_max, labels, most_popular_label): 155 | """ 156 | Convert BERT-output into submission format (only a single task) 157 | """ 158 | no_label = 0 159 | 160 | lines = [first_line] 161 | 162 | for idx in output_ids: 163 | pred_labels = [] 164 | 165 | for i, label in enumerate(labels): 166 | if outputs[idx][i] > t_max[i]: 167 | label = re.sub(r'^([-]+)', '', label) # remove leading - 168 | pred_labels.append(label) 169 | 170 | if len(pred_labels) == 0: 171 | no_label += 1 172 | 173 | # If no label was predicted -> just use most popular 174 | pred_labels = most_popular_label 175 | else: 176 | pred_labels = '\t'.join(pred_labels) 177 | 178 | isbn = df['isbn'].values[idx] 179 | 180 | lines.append(f'{isbn}\t{pred_labels}') 181 | 182 | return lines, no_label 183 | -------------------------------------------------------------------------------- /evaluation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Build evaluation tables for paper\n", 8 | "\n", 9 | "- Precomputed results must be located in `experiments_output` directory." 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import json\n", 19 | "import os\n", 20 | "import pickle\n", 21 | "import pandas as pd\n", 22 | "import numpy as np\n", 23 | "import logging\n", 24 | "import matplotlib.pyplot as plt" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 2, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "experiments = {}\n", 34 | "out_dir = 'experiments_output'\n", 35 | "for name in os.listdir(out_dir):\n", 36 | " if name.startswith('task'):\n", 37 | " if not os.path.exists(os.path.join(out_dir, name, 'report.json')):\n", 38 | " continue\n", 39 | " \n", 40 | " experiments[name] = {}\n", 41 | " \n", 42 | " experiments[name]['task'] = 'a' if name.startswith('task-a') else 'b'\n", 43 | " \n", 44 | " # Load report\n", 45 | " with open(os.path.join(out_dir, name, 'report.json'), 'r') as f:\n", 46 | " experiments[name]['report'] = json.load(f)\n", 47 | " \n", 48 | " if os.path.exists(os.path.join(out_dir, name, 'model_config.json')):\n", 49 | " with open(os.path.join(out_dir, name, 'model_config.json'), 'r') as f:\n", 50 | " experiments[name]['config'] = json.load(f)\n", 51 | " \n", 52 | " if 'author-only' in name:\n", 53 | " with open(os.path.join(out_dir, name, 'report_author_vec_found.json'), 'r') as f:\n", 54 | " experiments[name]['report'] = json.load(f) \n", 55 | " " 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 3, 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [ 64 | "metrics = ['f1-score', 'precision', 'recall']\n", 65 | "scores = []\n", 66 | "\n", 67 | "for n, d in experiments.items():\n", 68 | " dd = {\n", 69 | " 'name': n,\n", 70 | " 'task': d['task'],\n", 71 | " }\n", 72 | " \n", 73 | " for metric in metrics:\n", 74 | " dd[metric] = d['report']['micro avg'][metric] * 100\n", 75 | "\n", 76 | " scores.append(dd)\n", 77 | " \n", 78 | "#scores = [{'name': n, 'task': , 'micro avg f1-score': d['report']['micro avg']['f1-score']}]\n", 79 | "\n", 80 | "df = pd.DataFrame(scores)\n", 81 | "df = df.set_index('name')\n", 82 | "\n", 83 | "for metric in metrics:\n", 84 | " df[metric + '_diff'] = 0\n" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 4, 90 | "metadata": {}, 91 | "outputs": [], 92 | "source": [ 93 | "from IPython.display import display\n", 94 | "\n", 95 | "pd.options.display.float_format = '{:,.2f}'.format\n", 96 | "\n", 97 | "def display_task(df, task_id):\n", 98 | " print(f'#### Task {task_id} ####')\n", 99 | " \n", 100 | " df_a = df[df['task'] == task_id]\n", 101 | " for metric in metrics:\n", 102 | " max_val = df_a[metric].max()\n", 103 | " df_a = df_a.assign(**{metric + '_diff': max_val - df_a[metric]})\n", 104 | " \n", 105 | " for metric in metrics:\n", 106 | " print(f'Sorted by {metric}')\n", 107 | " display(df_a.sort_values([metric], ascending=False))" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 5, 113 | "metadata": {}, 114 | "outputs": [ 115 | { 116 | "name": "stdout", 117 | "output_type": "stream", 118 | "text": [ 119 | "#### Task a ####\n", 120 | "Sorted by f1-score\n" 121 | ] 122 | }, 123 | { 124 | "data": { 125 | "text/html": [ 126 | "
\n", 127 | "\n", 140 | "\n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | "
f1-scoreprecisionrecalltaskf1-score_diffprecision_diffrecall_diff
name
task-a__bert-german_manual_author-embedding_author-gender_287.2088.7685.70a0.000.890.00
task-a__bert-german_full87.1289.2385.11a0.080.420.58
task-a__bert-german_manual_no-embedding86.9089.6584.30a0.300.001.39
task-a__bert-german_no-manual_embedding86.8489.0284.75a0.360.630.94
task-a__bert-german_text-only86.6589.6583.86a0.550.011.84
task-a__bert-multilingual_text-only83.9486.3181.70a3.263.343.99
task-a__baseline77.0079.0074.00a10.2010.6511.70
task-a__author-only61.9975.5952.54a25.2114.0733.16
\n", 246 | "
" 247 | ], 248 | "text/plain": [ 249 | " f1-score precision \\\n", 250 | "name \n", 251 | "task-a__bert-german_manual_author-embedding_aut... 87.20 88.76 \n", 252 | "task-a__bert-german_full 87.12 89.23 \n", 253 | "task-a__bert-german_manual_no-embedding 86.90 89.65 \n", 254 | "task-a__bert-german_no-manual_embedding 86.84 89.02 \n", 255 | "task-a__bert-german_text-only 86.65 89.65 \n", 256 | "task-a__bert-multilingual_text-only 83.94 86.31 \n", 257 | "task-a__baseline 77.00 79.00 \n", 258 | "task-a__author-only 61.99 75.59 \n", 259 | "\n", 260 | " recall task \\\n", 261 | "name \n", 262 | "task-a__bert-german_manual_author-embedding_aut... 85.70 a \n", 263 | "task-a__bert-german_full 85.11 a \n", 264 | "task-a__bert-german_manual_no-embedding 84.30 a \n", 265 | "task-a__bert-german_no-manual_embedding 84.75 a \n", 266 | "task-a__bert-german_text-only 83.86 a \n", 267 | "task-a__bert-multilingual_text-only 81.70 a \n", 268 | "task-a__baseline 74.00 a \n", 269 | "task-a__author-only 52.54 a \n", 270 | "\n", 271 | " f1-score_diff \\\n", 272 | "name \n", 273 | "task-a__bert-german_manual_author-embedding_aut... 0.00 \n", 274 | "task-a__bert-german_full 0.08 \n", 275 | "task-a__bert-german_manual_no-embedding 0.30 \n", 276 | "task-a__bert-german_no-manual_embedding 0.36 \n", 277 | "task-a__bert-german_text-only 0.55 \n", 278 | "task-a__bert-multilingual_text-only 3.26 \n", 279 | "task-a__baseline 10.20 \n", 280 | "task-a__author-only 25.21 \n", 281 | "\n", 282 | " precision_diff \\\n", 283 | "name \n", 284 | "task-a__bert-german_manual_author-embedding_aut... 0.89 \n", 285 | "task-a__bert-german_full 0.42 \n", 286 | "task-a__bert-german_manual_no-embedding 0.00 \n", 287 | "task-a__bert-german_no-manual_embedding 0.63 \n", 288 | "task-a__bert-german_text-only 0.01 \n", 289 | "task-a__bert-multilingual_text-only 3.34 \n", 290 | "task-a__baseline 10.65 \n", 291 | "task-a__author-only 14.07 \n", 292 | "\n", 293 | " recall_diff \n", 294 | "name \n", 295 | "task-a__bert-german_manual_author-embedding_aut... 0.00 \n", 296 | "task-a__bert-german_full 0.58 \n", 297 | "task-a__bert-german_manual_no-embedding 1.39 \n", 298 | "task-a__bert-german_no-manual_embedding 0.94 \n", 299 | "task-a__bert-german_text-only 1.84 \n", 300 | "task-a__bert-multilingual_text-only 3.99 \n", 301 | "task-a__baseline 11.70 \n", 302 | "task-a__author-only 33.16 " 303 | ] 304 | }, 305 | "metadata": {}, 306 | "output_type": "display_data" 307 | }, 308 | { 309 | "name": "stdout", 310 | "output_type": "stream", 311 | "text": [ 312 | "Sorted by precision\n" 313 | ] 314 | }, 315 | { 316 | "data": { 317 | "text/html": [ 318 | "
\n", 319 | "\n", 332 | "\n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | "
f1-scoreprecisionrecalltaskf1-score_diffprecision_diffrecall_diff
name
task-a__bert-german_manual_no-embedding86.9089.6584.30a0.300.001.39
task-a__bert-german_text-only86.6589.6583.86a0.550.011.84
task-a__bert-german_full87.1289.2385.11a0.080.420.58
task-a__bert-german_no-manual_embedding86.8489.0284.75a0.360.630.94
task-a__bert-german_manual_author-embedding_author-gender_287.2088.7685.70a0.000.890.00
task-a__bert-multilingual_text-only83.9486.3181.70a3.263.343.99
task-a__baseline77.0079.0074.00a10.2010.6511.70
task-a__author-only61.9975.5952.54a25.2114.0733.16
\n", 438 | "
" 439 | ], 440 | "text/plain": [ 441 | " f1-score precision \\\n", 442 | "name \n", 443 | "task-a__bert-german_manual_no-embedding 86.90 89.65 \n", 444 | "task-a__bert-german_text-only 86.65 89.65 \n", 445 | "task-a__bert-german_full 87.12 89.23 \n", 446 | "task-a__bert-german_no-manual_embedding 86.84 89.02 \n", 447 | "task-a__bert-german_manual_author-embedding_aut... 87.20 88.76 \n", 448 | "task-a__bert-multilingual_text-only 83.94 86.31 \n", 449 | "task-a__baseline 77.00 79.00 \n", 450 | "task-a__author-only 61.99 75.59 \n", 451 | "\n", 452 | " recall task \\\n", 453 | "name \n", 454 | "task-a__bert-german_manual_no-embedding 84.30 a \n", 455 | "task-a__bert-german_text-only 83.86 a \n", 456 | "task-a__bert-german_full 85.11 a \n", 457 | "task-a__bert-german_no-manual_embedding 84.75 a \n", 458 | "task-a__bert-german_manual_author-embedding_aut... 85.70 a \n", 459 | "task-a__bert-multilingual_text-only 81.70 a \n", 460 | "task-a__baseline 74.00 a \n", 461 | "task-a__author-only 52.54 a \n", 462 | "\n", 463 | " f1-score_diff \\\n", 464 | "name \n", 465 | "task-a__bert-german_manual_no-embedding 0.30 \n", 466 | "task-a__bert-german_text-only 0.55 \n", 467 | "task-a__bert-german_full 0.08 \n", 468 | "task-a__bert-german_no-manual_embedding 0.36 \n", 469 | "task-a__bert-german_manual_author-embedding_aut... 0.00 \n", 470 | "task-a__bert-multilingual_text-only 3.26 \n", 471 | "task-a__baseline 10.20 \n", 472 | "task-a__author-only 25.21 \n", 473 | "\n", 474 | " precision_diff \\\n", 475 | "name \n", 476 | "task-a__bert-german_manual_no-embedding 0.00 \n", 477 | "task-a__bert-german_text-only 0.01 \n", 478 | "task-a__bert-german_full 0.42 \n", 479 | "task-a__bert-german_no-manual_embedding 0.63 \n", 480 | "task-a__bert-german_manual_author-embedding_aut... 0.89 \n", 481 | "task-a__bert-multilingual_text-only 3.34 \n", 482 | "task-a__baseline 10.65 \n", 483 | "task-a__author-only 14.07 \n", 484 | "\n", 485 | " recall_diff \n", 486 | "name \n", 487 | "task-a__bert-german_manual_no-embedding 1.39 \n", 488 | "task-a__bert-german_text-only 1.84 \n", 489 | "task-a__bert-german_full 0.58 \n", 490 | "task-a__bert-german_no-manual_embedding 0.94 \n", 491 | "task-a__bert-german_manual_author-embedding_aut... 0.00 \n", 492 | "task-a__bert-multilingual_text-only 3.99 \n", 493 | "task-a__baseline 11.70 \n", 494 | "task-a__author-only 33.16 " 495 | ] 496 | }, 497 | "metadata": {}, 498 | "output_type": "display_data" 499 | }, 500 | { 501 | "name": "stdout", 502 | "output_type": "stream", 503 | "text": [ 504 | "Sorted by recall\n" 505 | ] 506 | }, 507 | { 508 | "data": { 509 | "text/html": [ 510 | "
\n", 511 | "\n", 524 | "\n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | "
f1-scoreprecisionrecalltaskf1-score_diffprecision_diffrecall_diff
name
task-a__bert-german_manual_author-embedding_author-gender_287.2088.7685.70a0.000.890.00
task-a__bert-german_full87.1289.2385.11a0.080.420.58
task-a__bert-german_no-manual_embedding86.8489.0284.75a0.360.630.94
task-a__bert-german_manual_no-embedding86.9089.6584.30a0.300.001.39
task-a__bert-german_text-only86.6589.6583.86a0.550.011.84
task-a__bert-multilingual_text-only83.9486.3181.70a3.263.343.99
task-a__baseline77.0079.0074.00a10.2010.6511.70
task-a__author-only61.9975.5952.54a25.2114.0733.16
\n", 630 | "
" 631 | ], 632 | "text/plain": [ 633 | " f1-score precision \\\n", 634 | "name \n", 635 | "task-a__bert-german_manual_author-embedding_aut... 87.20 88.76 \n", 636 | "task-a__bert-german_full 87.12 89.23 \n", 637 | "task-a__bert-german_no-manual_embedding 86.84 89.02 \n", 638 | "task-a__bert-german_manual_no-embedding 86.90 89.65 \n", 639 | "task-a__bert-german_text-only 86.65 89.65 \n", 640 | "task-a__bert-multilingual_text-only 83.94 86.31 \n", 641 | "task-a__baseline 77.00 79.00 \n", 642 | "task-a__author-only 61.99 75.59 \n", 643 | "\n", 644 | " recall task \\\n", 645 | "name \n", 646 | "task-a__bert-german_manual_author-embedding_aut... 85.70 a \n", 647 | "task-a__bert-german_full 85.11 a \n", 648 | "task-a__bert-german_no-manual_embedding 84.75 a \n", 649 | "task-a__bert-german_manual_no-embedding 84.30 a \n", 650 | "task-a__bert-german_text-only 83.86 a \n", 651 | "task-a__bert-multilingual_text-only 81.70 a \n", 652 | "task-a__baseline 74.00 a \n", 653 | "task-a__author-only 52.54 a \n", 654 | "\n", 655 | " f1-score_diff \\\n", 656 | "name \n", 657 | "task-a__bert-german_manual_author-embedding_aut... 0.00 \n", 658 | "task-a__bert-german_full 0.08 \n", 659 | "task-a__bert-german_no-manual_embedding 0.36 \n", 660 | "task-a__bert-german_manual_no-embedding 0.30 \n", 661 | "task-a__bert-german_text-only 0.55 \n", 662 | "task-a__bert-multilingual_text-only 3.26 \n", 663 | "task-a__baseline 10.20 \n", 664 | "task-a__author-only 25.21 \n", 665 | "\n", 666 | " precision_diff \\\n", 667 | "name \n", 668 | "task-a__bert-german_manual_author-embedding_aut... 0.89 \n", 669 | "task-a__bert-german_full 0.42 \n", 670 | "task-a__bert-german_no-manual_embedding 0.63 \n", 671 | "task-a__bert-german_manual_no-embedding 0.00 \n", 672 | "task-a__bert-german_text-only 0.01 \n", 673 | "task-a__bert-multilingual_text-only 3.34 \n", 674 | "task-a__baseline 10.65 \n", 675 | "task-a__author-only 14.07 \n", 676 | "\n", 677 | " recall_diff \n", 678 | "name \n", 679 | "task-a__bert-german_manual_author-embedding_aut... 0.00 \n", 680 | "task-a__bert-german_full 0.58 \n", 681 | "task-a__bert-german_no-manual_embedding 0.94 \n", 682 | "task-a__bert-german_manual_no-embedding 1.39 \n", 683 | "task-a__bert-german_text-only 1.84 \n", 684 | "task-a__bert-multilingual_text-only 3.99 \n", 685 | "task-a__baseline 11.70 \n", 686 | "task-a__author-only 33.16 " 687 | ] 688 | }, 689 | "metadata": {}, 690 | "output_type": "display_data" 691 | } 692 | ], 693 | "source": [ 694 | "display_task(df, 'a')\n" 695 | ] 696 | }, 697 | { 698 | "cell_type": "code", 699 | "execution_count": 6, 700 | "metadata": { 701 | "scrolled": true 702 | }, 703 | "outputs": [ 704 | { 705 | "name": "stdout", 706 | "output_type": "stream", 707 | "text": [ 708 | "#### Task b ####\n", 709 | "Sorted by f1-score\n" 710 | ] 711 | }, 712 | { 713 | "data": { 714 | "text/html": [ 715 | "
\n", 716 | "\n", 729 | "\n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | "
f1-scoreprecisionrecalltaskf1-score_diffprecision_diffrecall_diff
name
task-b__bert-german_full64.7083.7852.70b0.000.170.32
task-b__bert-german_no-manual_embedding64.4182.0253.03b0.291.930.00
task-b__bert-german_manual_no-embedding63.9683.9451.67b0.740.001.36
task-b__bert-german_text-only60.5183.4447.47b4.190.505.56
task-b__bert-multilingual_text-only54.0882.6340.19b10.621.3112.83
task-b__baseline45.0067.0034.00b19.7016.9419.03
task-b__author-only32.1372.3920.65b32.5711.5632.38
\n", 825 | "
" 826 | ], 827 | "text/plain": [ 828 | " f1-score precision recall task \\\n", 829 | "name \n", 830 | "task-b__bert-german_full 64.70 83.78 52.70 b \n", 831 | "task-b__bert-german_no-manual_embedding 64.41 82.02 53.03 b \n", 832 | "task-b__bert-german_manual_no-embedding 63.96 83.94 51.67 b \n", 833 | "task-b__bert-german_text-only 60.51 83.44 47.47 b \n", 834 | "task-b__bert-multilingual_text-only 54.08 82.63 40.19 b \n", 835 | "task-b__baseline 45.00 67.00 34.00 b \n", 836 | "task-b__author-only 32.13 72.39 20.65 b \n", 837 | "\n", 838 | " f1-score_diff precision_diff \\\n", 839 | "name \n", 840 | "task-b__bert-german_full 0.00 0.17 \n", 841 | "task-b__bert-german_no-manual_embedding 0.29 1.93 \n", 842 | "task-b__bert-german_manual_no-embedding 0.74 0.00 \n", 843 | "task-b__bert-german_text-only 4.19 0.50 \n", 844 | "task-b__bert-multilingual_text-only 10.62 1.31 \n", 845 | "task-b__baseline 19.70 16.94 \n", 846 | "task-b__author-only 32.57 11.56 \n", 847 | "\n", 848 | " recall_diff \n", 849 | "name \n", 850 | "task-b__bert-german_full 0.32 \n", 851 | "task-b__bert-german_no-manual_embedding 0.00 \n", 852 | "task-b__bert-german_manual_no-embedding 1.36 \n", 853 | "task-b__bert-german_text-only 5.56 \n", 854 | "task-b__bert-multilingual_text-only 12.83 \n", 855 | "task-b__baseline 19.03 \n", 856 | "task-b__author-only 32.38 " 857 | ] 858 | }, 859 | "metadata": {}, 860 | "output_type": "display_data" 861 | }, 862 | { 863 | "name": "stdout", 864 | "output_type": "stream", 865 | "text": [ 866 | "Sorted by precision\n" 867 | ] 868 | }, 869 | { 870 | "data": { 871 | "text/html": [ 872 | "
\n", 873 | "\n", 886 | "\n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | "
f1-scoreprecisionrecalltaskf1-score_diffprecision_diffrecall_diff
name
task-b__bert-german_manual_no-embedding63.9683.9451.67b0.740.001.36
task-b__bert-german_full64.7083.7852.70b0.000.170.32
task-b__bert-german_text-only60.5183.4447.47b4.190.505.56
task-b__bert-multilingual_text-only54.0882.6340.19b10.621.3112.83
task-b__bert-german_no-manual_embedding64.4182.0253.03b0.291.930.00
task-b__author-only32.1372.3920.65b32.5711.5632.38
task-b__baseline45.0067.0034.00b19.7016.9419.03
\n", 982 | "
" 983 | ], 984 | "text/plain": [ 985 | " f1-score precision recall task \\\n", 986 | "name \n", 987 | "task-b__bert-german_manual_no-embedding 63.96 83.94 51.67 b \n", 988 | "task-b__bert-german_full 64.70 83.78 52.70 b \n", 989 | "task-b__bert-german_text-only 60.51 83.44 47.47 b \n", 990 | "task-b__bert-multilingual_text-only 54.08 82.63 40.19 b \n", 991 | "task-b__bert-german_no-manual_embedding 64.41 82.02 53.03 b \n", 992 | "task-b__author-only 32.13 72.39 20.65 b \n", 993 | "task-b__baseline 45.00 67.00 34.00 b \n", 994 | "\n", 995 | " f1-score_diff precision_diff \\\n", 996 | "name \n", 997 | "task-b__bert-german_manual_no-embedding 0.74 0.00 \n", 998 | "task-b__bert-german_full 0.00 0.17 \n", 999 | "task-b__bert-german_text-only 4.19 0.50 \n", 1000 | "task-b__bert-multilingual_text-only 10.62 1.31 \n", 1001 | "task-b__bert-german_no-manual_embedding 0.29 1.93 \n", 1002 | "task-b__author-only 32.57 11.56 \n", 1003 | "task-b__baseline 19.70 16.94 \n", 1004 | "\n", 1005 | " recall_diff \n", 1006 | "name \n", 1007 | "task-b__bert-german_manual_no-embedding 1.36 \n", 1008 | "task-b__bert-german_full 0.32 \n", 1009 | "task-b__bert-german_text-only 5.56 \n", 1010 | "task-b__bert-multilingual_text-only 12.83 \n", 1011 | "task-b__bert-german_no-manual_embedding 0.00 \n", 1012 | "task-b__author-only 32.38 \n", 1013 | "task-b__baseline 19.03 " 1014 | ] 1015 | }, 1016 | "metadata": {}, 1017 | "output_type": "display_data" 1018 | }, 1019 | { 1020 | "name": "stdout", 1021 | "output_type": "stream", 1022 | "text": [ 1023 | "Sorted by recall\n" 1024 | ] 1025 | }, 1026 | { 1027 | "data": { 1028 | "text/html": [ 1029 | "
\n", 1030 | "\n", 1043 | "\n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | " \n", 1095 | " \n", 1096 | " \n", 1097 | " \n", 1098 | " \n", 1099 | " \n", 1100 | " \n", 1101 | " \n", 1102 | " \n", 1103 | " \n", 1104 | " \n", 1105 | " \n", 1106 | " \n", 1107 | " \n", 1108 | " \n", 1109 | " \n", 1110 | " \n", 1111 | " \n", 1112 | " \n", 1113 | " \n", 1114 | " \n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | " \n", 1124 | " \n", 1125 | " \n", 1126 | " \n", 1127 | " \n", 1128 | " \n", 1129 | " \n", 1130 | " \n", 1131 | " \n", 1132 | " \n", 1133 | " \n", 1134 | " \n", 1135 | " \n", 1136 | " \n", 1137 | " \n", 1138 | "
f1-scoreprecisionrecalltaskf1-score_diffprecision_diffrecall_diff
name
task-b__bert-german_no-manual_embedding64.4182.0253.03b0.291.930.00
task-b__bert-german_full64.7083.7852.70b0.000.170.32
task-b__bert-german_manual_no-embedding63.9683.9451.67b0.740.001.36
task-b__bert-german_text-only60.5183.4447.47b4.190.505.56
task-b__bert-multilingual_text-only54.0882.6340.19b10.621.3112.83
task-b__baseline45.0067.0034.00b19.7016.9419.03
task-b__author-only32.1372.3920.65b32.5711.5632.38
\n", 1139 | "
" 1140 | ], 1141 | "text/plain": [ 1142 | " f1-score precision recall task \\\n", 1143 | "name \n", 1144 | "task-b__bert-german_no-manual_embedding 64.41 82.02 53.03 b \n", 1145 | "task-b__bert-german_full 64.70 83.78 52.70 b \n", 1146 | "task-b__bert-german_manual_no-embedding 63.96 83.94 51.67 b \n", 1147 | "task-b__bert-german_text-only 60.51 83.44 47.47 b \n", 1148 | "task-b__bert-multilingual_text-only 54.08 82.63 40.19 b \n", 1149 | "task-b__baseline 45.00 67.00 34.00 b \n", 1150 | "task-b__author-only 32.13 72.39 20.65 b \n", 1151 | "\n", 1152 | " f1-score_diff precision_diff \\\n", 1153 | "name \n", 1154 | "task-b__bert-german_no-manual_embedding 0.29 1.93 \n", 1155 | "task-b__bert-german_full 0.00 0.17 \n", 1156 | "task-b__bert-german_manual_no-embedding 0.74 0.00 \n", 1157 | "task-b__bert-german_text-only 4.19 0.50 \n", 1158 | "task-b__bert-multilingual_text-only 10.62 1.31 \n", 1159 | "task-b__baseline 19.70 16.94 \n", 1160 | "task-b__author-only 32.57 11.56 \n", 1161 | "\n", 1162 | " recall_diff \n", 1163 | "name \n", 1164 | "task-b__bert-german_no-manual_embedding 0.00 \n", 1165 | "task-b__bert-german_full 0.32 \n", 1166 | "task-b__bert-german_manual_no-embedding 1.36 \n", 1167 | "task-b__bert-german_text-only 5.56 \n", 1168 | "task-b__bert-multilingual_text-only 12.83 \n", 1169 | "task-b__baseline 19.03 \n", 1170 | "task-b__author-only 32.38 " 1171 | ] 1172 | }, 1173 | "metadata": {}, 1174 | "output_type": "display_data" 1175 | } 1176 | ], 1177 | "source": [ 1178 | "display_task(df, 'b')" 1179 | ] 1180 | }, 1181 | { 1182 | "cell_type": "code", 1183 | "execution_count": null, 1184 | "metadata": {}, 1185 | "outputs": [], 1186 | "source": [] 1187 | }, 1188 | { 1189 | "cell_type": "code", 1190 | "execution_count": null, 1191 | "metadata": {}, 1192 | "outputs": [], 1193 | "source": [] 1194 | }, 1195 | { 1196 | "cell_type": "code", 1197 | "execution_count": null, 1198 | "metadata": {}, 1199 | "outputs": [], 1200 | "source": [] 1201 | }, 1202 | { 1203 | "cell_type": "code", 1204 | "execution_count": null, 1205 | "metadata": {}, 1206 | "outputs": [], 1207 | "source": [] 1208 | }, 1209 | { 1210 | "cell_type": "code", 1211 | "execution_count": null, 1212 | "metadata": {}, 1213 | "outputs": [], 1214 | "source": [] 1215 | } 1216 | ], 1217 | "metadata": { 1218 | "kernelspec": { 1219 | "display_name": "Python 3", 1220 | "language": "python", 1221 | "name": "python3" 1222 | }, 1223 | "language_info": { 1224 | "codemirror_mode": { 1225 | "name": "ipython", 1226 | "version": 3 1227 | }, 1228 | "file_extension": ".py", 1229 | "mimetype": "text/x-python", 1230 | "name": "python", 1231 | "nbconvert_exporter": "python", 1232 | "pygments_lexer": "ipython3", 1233 | "version": "3.6.8" 1234 | } 1235 | }, 1236 | "nbformat": 4, 1237 | "nbformat_minor": 2 1238 | } 1239 | -------------------------------------------------------------------------------- /experiment.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pickle 3 | 4 | import numpy as np 5 | import pandas as pd 6 | import torch 7 | from pytorch_pretrained_bert import BertTokenizer 8 | from torch import nn 9 | from torch.utils.data import TensorDataset, RandomSampler, SequentialSampler 10 | from tqdm import tqdm 11 | 12 | from data_utils import get_extras_gender, to_dataloader, TensorIndexDataset 13 | from config import MAX_SEQ_LENGTH, HIDDEN_DIM, MLP_DIM, AUTHOR_DIM, GENDER_DIM, TRAIN_BATCH_SIZE, NUM_TRAIN_EPOCHS, \ 14 | default_extra_cols, BERT_MODELS_DIR 15 | from models import ExtraBertMultiClassifier, BertMultiClassifier 16 | 17 | 18 | class Experiment(object): 19 | """ 20 | Holds all experiment information 21 | """ 22 | name = None 23 | output_dir = None 24 | epochs = None 25 | batch_size = None 26 | device = None 27 | labels = None 28 | 29 | def __init__(self, task, bert_model, classifier_model=None, with_text=True, with_author_gender=True, 30 | with_manual=True, with_author_vec=True, author_vec_switch=False, mlp_dim=None): 31 | self.task = task 32 | self.bert_model = bert_model 33 | self.with_text = with_text 34 | self.with_author_gender = with_author_gender 35 | self.with_manual = with_manual 36 | self.with_author_vec = with_author_vec 37 | self.author_vec_switch = author_vec_switch 38 | self.classifier_model = classifier_model 39 | 40 | self.mlp_dim = mlp_dim if mlp_dim is not None else MLP_DIM 41 | 42 | def init(self, cuda_device, epochs, batch_size, continue_training): 43 | # Set GPU 44 | os.environ["CUDA_VISIBLE_DEVICES"] = str(cuda_device) 45 | 46 | if not torch.cuda.is_available(): 47 | print('CUDA GPU is not available') 48 | exit(1) 49 | 50 | self.epochs = epochs if epochs is not None else NUM_TRAIN_EPOCHS 51 | self.batch_size = batch_size if batch_size is not None else TRAIN_BATCH_SIZE 52 | 53 | if not continue_training and os.path.exists(self.get_output_dir()): 54 | print(f'Output directory exist already: {self.get_output_dir()}') 55 | exit(1) 56 | else: 57 | os.makedirs(self.get_output_dir()) 58 | 59 | def get_output_dir(self): 60 | return os.path.join(self.output_dir, self.name) 61 | 62 | def get_bert_model_path(self): 63 | return os.path.join(BERT_MODELS_DIR, self.bert_model) 64 | 65 | def get_author_dim(self): 66 | # Use author switch? 67 | if self.author_vec_switch: 68 | author_dim = AUTHOR_DIM + 1 69 | else: 70 | author_dim = AUTHOR_DIM 71 | 72 | return author_dim 73 | 74 | def get_extra_cols(self): 75 | if self.with_manual: 76 | extra_cols = default_extra_cols 77 | else: 78 | extra_cols = [] 79 | return extra_cols 80 | 81 | def prepare_data_loaders(self, df_train_path, df_val_path, extras_dir, test_set=False): 82 | 83 | self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 84 | 85 | if self.with_text: 86 | tokenizer = BertTokenizer.from_pretrained(self.get_bert_model_path(), do_lower_case=False) 87 | else: 88 | tokenizer = None 89 | 90 | # Load external data 91 | if self.with_author_vec: 92 | with open(os.path.join(extras_dir, 'author2embedding.pickle'), 'rb') as f: 93 | author2vec = pickle.load(f) 94 | 95 | print(f'Embeddings avaiable for {len(author2vec)} authors') 96 | else: 97 | author2vec = None 98 | 99 | if self.with_author_gender: 100 | gender_df = pd.read_csv(os.path.join(extras_dir, 'name_gender.csv')) 101 | author2gender = { 102 | row['name']: np.array([row['probability'], 0] if row['gender'] == 'M' else [0, row['probability']]) for 103 | idx, row in gender_df.iterrows()} 104 | 105 | print(f'Gender data avaiable for {len(author2gender)} authors') 106 | else: 107 | author2gender = None 108 | 109 | # Load training data 110 | with open(df_train_path, 'rb') as f: 111 | train_df, doc_cols, task_b_labels, task_a_labels = pickle.load(f) 112 | 113 | # Define labels (depends on task) 114 | if self.task == 'a': 115 | self.labels = task_a_labels 116 | elif self.task == 'b': 117 | self.labels = task_b_labels 118 | else: 119 | raise ValueError('Invalid task specified') 120 | 121 | if self.with_manual or self.with_author_gender or self.with_author_vec: 122 | train_extras, vec_found_count, gender_found_count, _, _ = get_extras_gender( 123 | train_df, 124 | self.get_extra_cols(), 125 | author2vec, 126 | author2gender, 127 | with_vec=self.with_author_vec, 128 | with_gender=self.with_author_gender, 129 | on_off_switch=self.author_vec_switch 130 | ) 131 | else: 132 | train_extras = None 133 | 134 | if self.with_text: 135 | train_texts = [t + '.\n' + train_df['text'].values[i] for i, t in enumerate(train_df['title'].values)] 136 | else: 137 | train_texts = None 138 | 139 | train_y = train_df[self.labels].values 140 | 141 | train_dataloader = to_dataloader(train_texts, train_extras, train_y, 142 | tokenizer, 143 | MAX_SEQ_LENGTH, 144 | self.batch_size, 145 | dataset_cls=TensorDataset, 146 | sampler_cls=RandomSampler) 147 | 148 | # Load validation data 149 | with open(df_val_path, 'rb') as f: 150 | val_df, _, _, _ = pickle.load(f) 151 | 152 | if self.with_manual or self.with_author_gender or self.with_author_vec: 153 | val_extras, vec_found_count, gender_found_count, vec_found_selector, gender_found_selector = get_extras_gender( 154 | val_df, 155 | self.get_extra_cols(), 156 | author2vec, 157 | author2gender, 158 | with_vec=self.with_author_vec, 159 | with_gender=self.with_author_gender, 160 | on_off_switch=self.author_vec_switch, 161 | ) 162 | else: 163 | val_extras = None 164 | vec_found_selector = None 165 | 166 | if self.with_text: 167 | val_texts = [t + '.\n' + val_df['text'].values[i] for i, t in enumerate(val_df['title'].values)] 168 | else: 169 | val_texts = None 170 | 171 | # Is test set? 172 | # np.zeros((len(test_texts), len(labels))) 173 | if test_set: 174 | val_y = np.zeros((len(val_texts), len(self.labels))) 175 | else: 176 | val_y = val_df[self.labels].values 177 | 178 | val_dataloader = to_dataloader(val_texts, val_extras, val_y, 179 | tokenizer, 180 | MAX_SEQ_LENGTH, 181 | self.batch_size, 182 | dataset_cls=TensorIndexDataset, 183 | sampler_cls=SequentialSampler) 184 | 185 | return train_dataloader, val_dataloader, vec_found_selector, val_df, val_y 186 | 187 | def get_model(self): 188 | if self.classifier_model is None: 189 | # No pre-defined model 190 | 191 | extras_dim = len(self.get_extra_cols()) 192 | if self.with_author_vec: 193 | extras_dim += self.get_author_dim() 194 | 195 | if self.with_author_gender: 196 | extras_dim += GENDER_DIM 197 | 198 | if extras_dim > 0: 199 | model = ExtraBertMultiClassifier( 200 | bert_model_path=self.get_bert_model_path(), 201 | labels_count=len(self.labels), 202 | hidden_dim=HIDDEN_DIM, 203 | extras_dim=extras_dim, 204 | mlp_dim=self.mlp_dim, 205 | ) 206 | else: 207 | # Text only: Standard BERT classifier 208 | model = BertMultiClassifier( 209 | bert_model_path=self.get_bert_model_path(), 210 | labels_count=len(self.labels), 211 | hidden_dim=HIDDEN_DIM, 212 | ) 213 | else: 214 | model = self.classifier_model 215 | 216 | return model 217 | 218 | def train(self, model, optimizer, train_dataloader): 219 | for epoch_num in range(self.epochs): 220 | model.train() 221 | train_loss = 0 222 | 223 | print(f'Epoch: {epoch_num + 1}/{self.epochs}') 224 | 225 | # for step, batch in enumerate(tqdm_notebook(train_dataloader, desc="Iteration")): 226 | for step_num, batch_data in enumerate(tqdm(train_dataloader, desc="Iteration")): 227 | 228 | if self.with_text and ( 229 | self.with_manual or self.with_author_gender or self.with_author_vec): 230 | # Full features 231 | token_ids, masks, extras, gold_labels = tuple(t.to(self.device) for t in batch_data) 232 | probas = model(token_ids, masks, extras) 233 | elif self.with_text: 234 | # Text only 235 | token_ids, masks, gold_labels = tuple(t.to(self.device) for t in batch_data) 236 | probas = model(token_ids, masks) 237 | else: 238 | # Extras only 239 | extras, gold_labels = tuple(t.to(self.device) for t in batch_data) 240 | probas = model(extras) 241 | 242 | loss_func = nn.BCELoss() 243 | batch_loss = loss_func(probas, gold_labels) 244 | train_loss += batch_loss.item() 245 | 246 | model.zero_grad() 247 | batch_loss.backward() 248 | optimizer.step() 249 | 250 | # clear_output(wait=True) 251 | 252 | print(f'\r{epoch_num} loss: {train_loss / (step_num + 1)}') 253 | 254 | print(str(torch.cuda.memory_allocated(self.device) / 1000000) + 'M') 255 | 256 | return model 257 | 258 | def eval(self, model, data_loader): 259 | 260 | # Validation 261 | model.eval() 262 | 263 | output_ids = [] 264 | outputs = None 265 | 266 | with torch.no_grad(): 267 | for step_num, batch_item in enumerate(data_loader): 268 | batch_ids, batch_data = batch_item 269 | 270 | if self.with_text and ( 271 | self.with_manual or self.with_author_gender or self.with_author_vec): 272 | # Full features 273 | token_ids, masks, extras, _ = tuple(t.to(self.device) for t in batch_data) 274 | logits = model(token_ids, masks, extras) 275 | elif self.with_text: 276 | # Text only 277 | token_ids, masks, _ = tuple(t.to(self.device) for t in batch_data) 278 | logits = model(token_ids, masks) 279 | else: 280 | # Extras only 281 | extras, _ = tuple(t.to(self.device) for t in batch_data) 282 | logits = model(extras) 283 | 284 | numpy_logits = logits.cpu().detach().numpy() 285 | 286 | if outputs is None: 287 | outputs = numpy_logits 288 | else: 289 | outputs = np.vstack((outputs, numpy_logits)) 290 | 291 | output_ids += batch_ids.tolist() 292 | 293 | print(f'Evaluation completed for {len(outputs)} items') 294 | 295 | return output_ids, outputs 296 | -------------------------------------------------------------------------------- /extras/author2embedding.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/malteos/pytorch-bert-document-classification/28a4f717823a2ed7a85adf24b2f5593a327b4bd9/extras/author2embedding.pickle -------------------------------------------------------------------------------- /extras/author2embedding.projector_meta.tsv: -------------------------------------------------------------------------------- 1 | Statens Museum for Kunst 2 | Victor Hugo 3 | Randall Munroe 4 | Alexander Puschkin 5 | William Shakespeare 6 | Barack Obama 7 | Michael Jackson 8 | Anton Tschechow 9 | Heinrich Heine 10 | Friedrich Schiller 11 | Guy de Maupassant 12 | Johann Wolfgang von Goethe 13 | Charlie Chaplin 14 | Lew Tolstoi 15 | Karl-Wilhelm Weeber 16 | J.K. Rowling 17 | Richard Wagner 18 | Nelson Mandela 19 | Isaac Asimov 20 | Martin Luther 21 | Agatha Christie 22 | Stephen King 23 | Christoph Brandhurst 24 | Dante Alighieri 25 | Heidelberger Akademie der Wissenschaften 26 | Hans Christian Andersen 27 | Arthur Conan Doyle 28 | Charles Baudelaire 29 | Stephen Hawking 30 | Eckstein 31 | Jules Verne 32 | Akron 33 | Edgar Allan Poe 34 | Honoré de Balzac 35 | Charles Dickens 36 | Walko 37 | Fjodor Dostojewski 38 | Olaf Schubert 39 | Rainer Maria Rilke 40 | Klaus Kinski 41 | Franz Kafka 42 | Alexandre Dumas 43 | Ernest Hemingway 44 | Karl May 45 | Friedrich Nietzsche 46 | Iwan Turgenjew 47 | Joachim Ringelnatz 48 | Wolfram von Soden 49 | J.R.R. Tolkien 50 | Mark Twain 51 | Rudyard Kipling 52 | Ilse Aichinger 53 | Kurt Tucholsky 54 | Nikolaj Gogol 55 | Miguel de Cervantes Saavedra 56 | Papst Franziskus 57 | Justin Bieber 58 | Galileo 59 | George Sand 60 | Homer 61 | Oscar Wilde 62 | Théophile Gautier 63 | Giovanni Boccaccio 64 | Bertolt Brecht 65 | Lewis Carroll 66 | Ursula K. Le Guin 67 | Georges Simenon 68 | Le Corbusier 69 | Albert Camus 70 | Garri Kasparow 71 | Thomas Mann 72 | Douglas Adams 73 | Émile Zola 74 | George R.R. Martin 75 | Leonard Cohen 76 | Maxim Gorki 77 | T.S. Eliot 78 | James Joyce 79 | Gabriel García Márquez 80 | Vergil 81 | Thilo Sarrazin 82 | Joseph Ratzinger 83 | Tina Turner 84 | Alfred de Musset 85 | Marcel Proust 86 | Arne Dahl 87 | Jack London 88 | Günter Grass 89 | Philip K. Dick 90 | Lene Kaaberbøl 91 | Henry James 92 | Samuel Beckett 93 | Hermann Hesse 94 | Bruce Springsteen 95 | Jane Austen 96 | Alexander von Humboldt 97 | Jimi Hendrix 98 | George Lucas 99 | Robert Louis Stevenson 100 | Erasmus von Rotterdam 101 | Maja Lunde 102 | Selma Lagerlöf 103 | Arthur C. Clarke 104 | Ulrich Sinn 105 | Caroline Paul 106 | Arnold Schwarzenegger 107 | Mario Vargas Llosa 108 | André Gide 109 | Manfried Dietrich 110 | Ralph-Johannes Lilie 111 | Willie Nelson 112 | Kai Brodersen 113 | Gernot Wilhelm 114 | William Butler Yeats 115 | David Lynch 116 | Wilhelm Busch 117 | Martin Moder 118 | August Strindberg 119 | Karel Capek 120 | Tony Blair 121 | Margaret Atwood 122 | Leonard Bernstein 123 | Theodor Fontane 124 | Joseph Conrad 125 | Martin Schwarz Lausten 126 | Andrea Volk 127 | William Shatner 128 | Ursula Sarrazin 129 | Pablo Neruda 130 | John Williams 131 | Virginia Woolf 132 | Michael Ballhaus 133 | William Makepeace Thackeray 134 | Philip Roth 135 | Wolfgang Schäuble 136 | Henry D. Thoreau 137 | Kofi Annan 138 | Emir Kusturica 139 | Søren Kierkegaard 140 | F. Scott Fitzgerald 141 | Richard Burton 142 | Jonathan Swift 143 | Gillian Anderson 144 | Arthur Schopenhauer 145 | Mary Shelley 146 | Thomas Morus 147 | Lao-Tse 148 | Jean Cocteau 149 | Jean-Marie Gustave Le Clézio 150 | Phil Collins 151 | Gustave Flaubert 152 | E.T.A. Hoffmann 153 | Haruki Murakami 154 | John Steinbeck 155 | Luigi Pirandello 156 | Henry A. Kissinger 157 | Quentin Tarantino 158 | José Saramago 159 | Heinrich Böll 160 | Sergej Prokofjev 161 | Giorgio Vasari 162 | Umberto Eco 163 | Marilyn Manson 164 | Nathaniel Hawthorne 165 | Milan Kundera 166 | Ralph Waldo Emerson 167 | Jean-Paul Belmondo 168 | Terry Pratchett 169 | Aldous Huxley 170 | Walt Whitman 171 | Helmut Schmidt 172 | Antoine de Saint-Exupéry 173 | David Duchovny 174 | Colette 175 | Willy Brandt 176 | Boris Leonidowitsch Pasternak 177 | Michail Bulgakow 178 | Harriet Beecher Stowe 179 | Stanislas Dehaene 180 | Theodor W. Adorno 181 | Herman Melville 182 | Neil Gaiman 183 | Gerhart Hauptmann 184 | Daniel Defoe 185 | Roald Dahl 186 | Gilbert Keith Chesterton 187 | Al Gore 188 | Helen Dunmore 189 | Ernst Haeckel 190 | Georg Büchner 191 | Roberto Benigni 192 | Harry Belafonte 193 | Neil Patrick Harris 194 | Arthur Miller 195 | D. H. Lawrence 196 | Hannah Arendt 197 | Enid Blyton 198 | Charlotte Bronte 199 | Heyne Verlag 200 | Donatien Alphonse Francois de Sade 201 | Hilary Duff 202 | Ozzy Osbourne 203 | Doris Lessing 204 | Friedrich Hölderlin 205 | Stefan Zweig 206 | Salman Rushdie 207 | Murasaki Shikibu 208 | Martin Buber 209 | Emily Bronte 210 | Tom Clancy 211 | Cameron Diaz 212 | Tania Blixen 213 | Michel de Montaigne 214 | Erich Maria Remarque 215 | Marion Zimmer Bradley 216 | Willi Fährmann 217 | Donna Leon 218 | Richard von Weizsäcker 219 | Bram Stoker 220 | Philipp Melanchthon 221 | Kazuo Ishiguro 222 | James Fenimore Cooper 223 | Diane Keaton 224 | Gotthold Ephraim Lessing 225 | François Truffaut 226 | Frederik Pohl 227 | Michael Crichton 228 | Orhan Pamuk 229 | J. M. Barrie 230 | John De Lancie 231 | Jaroslav Hasek 232 | Orson Scott Card 233 | Harry Mulisch 234 | Edgar Wallace 235 | Guido Westerwelle 236 | Imre Kertész 237 | Poul Anderson 238 | Hamburger Kunsthalle 239 | Nele Neuhaus 240 | José Ortega y Gasset 241 | Brüder Grimm 242 | Alexej Tolstoi 243 | Joachim Gauck 244 | Rick Riordan 245 | Janusz Korczak 246 | Salman Khan 247 | Robert A. Heinlein 248 | Sinclair Lewis 249 | Ryunosuke Akutagawa 250 | Roman Herzog 251 | Muhammad Yunus 252 | Dalai Lama 253 | Kathrin Fischer 254 | Soseki Natsume 255 | John Cleese 256 | Anna Seghers 257 | Nick Hornby 258 | Rod Stewart 259 | Gottfried Keller 260 | Lawrence M. Krauss 261 | Robert Silverberg 262 | Thor Heyerdahl 263 | Luna 264 | Desmond Tutu 265 | Hesiod 266 | Isabel Allende 267 | Kenneth Grahame 268 | Harlan Ellison 269 | Sidney Sheldon 270 | Madeleine K. Albright 271 | Anthony Burgess 272 | Guillermo del Toro 273 | Michael Engel 274 | Carlo Collodi 275 | Abaelard 276 | Hugh Lofting 277 | Grazia Deledda 278 | Susan Sontag 279 | Julian Fellowes 280 | George Soros 281 | Heinrich von Kleist 282 | Alan Alexander Milne 283 | Ruth Rendell 284 | Girolamo Savonarola 285 | John Grisham 286 | Jiddu Krishnamurti 287 | Frank Herbert 288 | Ambrose Bierce 289 | Joaquim Maria Machado de Assis 290 | Udo Jürgens 291 | Franz Josef Strauß 292 | Roger Zelazny 293 | Françoise Sagan 294 | Erich Fromm 295 | Keith Richards 296 | Else Lasker-Schüler 297 | David Arnold 298 | Lemmy Kilmister 299 | Cees Nooteboom 300 | Andre Agassi 301 | Harper Lee 302 | Debbie Harry 303 | Antje Boetius 304 | Yuval Noah Harari 305 | Sun Bear 306 | Stephenie Meyer 307 | Thomas Piketty 308 | Joyce Carol Oates 309 | Peter Ackroyd 310 | Tove Jansson 311 | Nick Cave 312 | Sasha Grey 313 | Edith Wharton 314 | Osho 315 | Scholem Alejchem 316 | Mario Puzo 317 | Arthur Schnitzler 318 | Erich Kästner 319 | Paul Bocuse 320 | Young 321 | Joseph Stiglitz 322 | David Brin 323 | Christopher Lloyd 324 | Elias Canetti 325 | John Kenneth Galbraith 326 | Max Frisch 327 | Vicki Baum 328 | Terry Gilliam 329 | Anthony Bourdain 330 | Alexander Granach 331 | Hugo von Hofmannsthal 332 | Dylan Thomas 333 | Willa Cather 334 | Peter Scholl-Latour 335 | Dean Koontz 336 | Christopher Hitchens 337 | Henning Mankell 338 | Griselda Pollock 339 | Kevin Smith 340 | Edward W. Said 341 | Christian Morgenstern 342 | William Gibson 343 | Franz Werfel 344 | R.L. Stine 345 | Meister Eckhart 346 | Robert Musil 347 | Käthe Kollwitz 348 | Carlo Ancelotti 349 | Arturo Pérez-Reverte 350 | Didier van Cauwelaert 351 | Bruce Dickinson 352 | The Clash 353 | Samuel P. Huntington 354 | Stefan Heym 355 | Elton 356 | André Gorz 357 | José Carreras 358 | Karel Jaromir Erben 359 | Heinrich Mann 360 | Upton Sinclair 361 | Philip Pullman 362 | Joschka Fischer 363 | Rob Zombie 364 | Anton Zeilinger 365 | Nora Ephron 366 | Louis Greenberg 367 | Christian Keysers 368 | Abbé Prévost 369 | Katherine Mansfield 370 | Ayaan Hirsi Ali 371 | Clive Barker 372 | David Garnett 373 | Claire Goll 374 | Daniel Barenboim 375 | Amos Oz 376 | Paul Celan 377 | Viktor E. Frankl 378 | A.E. van Vogt 379 | Catherine Cookson 380 | Jerome K. Jerome 381 | Edmund Stoiber 382 | Gene Wolfe 383 | Sherwood Anderson 384 | Ricky Gervais 385 | James Patterson 386 | Theodor Storm 387 | Robert Ludlum 388 | Hunter S. Thompson 389 | Baltasar Gracián 390 | Eva Mozes Kor 391 | Gustav Schwab 392 | Julian Barnes 393 | Christa Wolf 394 | Matthieu Ricard 395 | Fritz Stern 396 | Jack Vance 397 | Aaron Allston 398 | Charles Benoit 399 | John Lydon 400 | Simon Ward 401 | Gene Roddenberry 402 | Raymond Queneau 403 | Willy Russell 404 | Elizabeth Gaskell 405 | Alfred Döblin 406 | Manfred Weber 407 | Ernst Jünger 408 | Jostein Gaarder 409 | Carlos Ruiz Zafón 410 | Marina Abramović 411 | Michael Shermer 412 | Italo Svevo 413 | Daniel Kahneman 414 | Stieg Larsson 415 | Tracey Stewart 416 | Franz-Olivier Giesbert 417 | Christian Meier 418 | Linda Lovelace 419 | Dietrich Bonhoeffer 420 | Chuck Hogan 421 | Naomi Novik 422 | Ulrich Hegerl 423 | Albert Espinosa 424 | Tom Wolfe 425 | Kurt H. Biedenkopf 426 | Laurence Sterne 427 | Wilhelm Hauff 428 | Leena Lander 429 | Thomas de Maizière 430 | Thomas Bernhard 431 | Gottfried August Bürger 432 | Lauren Kate 433 | Michail Chodorkowski 434 | Larry Niven 435 | María Dueñas 436 | Jacobus de Voragine 437 | Frances Hodgson Burnett 438 | Dan Simmons 439 | Madame de La Fayette 440 | Joshua Ferris 441 | Philip José Farmer 442 | Cory Doctorow 443 | Wilko Johnson 444 | Eric-Emmanuel Schmitt 445 | Robert Muchamore 446 | Ayad Akhtar 447 | Trudi Canavan 448 | James Cobb 449 | Eric Kandel 450 | Denise Mina 451 | Gilles Clément 452 | Heather Young 453 | Rudolf Augstein 454 | Patricia Kaas 455 | Christine Nöstlinger 456 | Dieter Bohlen 457 | Johanna Spyri 458 | Howard Marks 459 | Stephen Baxter 460 | Bruce Sterling 461 | Bora Ćosić 462 | Leon de Winter 463 | Edmondo de Amicis 464 | Yoani Sánchez 465 | Iain Banks 466 | Thomas Keneally 467 | Christian Bischoff 468 | Daniel Abraham 469 | Paula Hawkins 470 | Andreas Lorenz 471 | Gerhard Wegner 472 | Michael Ebert 473 | Robert Levy 474 | Robert M. Sapolsky 475 | Joy Fielding 476 | Johannes Huber 477 | Mötley Crüe 478 | Robert Sheckley 479 | Robert Ellis 480 | Sandra Maischberger 481 | Jeffrey D. Sachs 482 | Anthony Trollope 483 | Clifford D. Simak 484 | E. M. Delafield 485 | Will Jordan 486 | Kingsley Amis 487 | Jun'ichiro Tanizaki 488 | Bettina von Arnim 489 | Hans-Jochen Vogel 490 | Sabine Bode 491 | Juliette Gréco 492 | Per Olov Enquist 493 | Nancy Grossman 494 | Harry Harrison 495 | Joe Haldeman 496 | Neal Stephenson 497 | Roger Scruton 498 | Daniel Cohen 499 | Dorothy L. Sayers 500 | Dorothy Parker 501 | John Irving 502 | Sylvain Tesson 503 | Mary McCarthy 504 | Tracy Moore 505 | Jenny Lee 506 | Ariana Franklin 507 | Nicholas Sparks 508 | Ogai Mori 509 | Anne McCaffrey 510 | David Gibson 511 | Glendon Swarthout 512 | Michael Katz 513 | Jürgen Trittin 514 | Irène Némirovsky 515 | David John 516 | Ted Harris 517 | James Blish 518 | David Austin 519 | David Willis 520 | Jonathan Lee 521 | Sarah Wilson 522 | Paul Carson 523 | Greg Cox 524 | Thomas Perry 525 | Ed McDonald 526 | John Dolan 527 | Robert Schwartz 528 | Ross King 529 | Andrew Lane 530 | Daniel Klein 531 | David Wheeler 532 | Gavin Smith 533 | Jan Anderson 534 | John Sandford 535 | Michael Byrne 536 | Patrick Graham 537 | Robert Reeves 538 | Susan Wright 539 | Petra Müller 540 | Jack Henderson 541 | Michael Freeman 542 | Jane Kennedy 543 | David Wolfe 544 | Tony Buzan 545 | Edward Lee 546 | Mark Edwards 547 | Susan Crawford 548 | Graham Brown 549 | Colin Stuart 550 | Craig Taylor 551 | Lucy Robinson 552 | Nick Stone 553 | Bob Harper 554 | Paul Perry 555 | Chuck Palahniuk 556 | Julia Klöckner 557 | Frederick Forsyth 558 | Russell Brand 559 | Tasty 560 | Jürgen Möllemann 561 | Josef Joffe 562 | Spencer Johnson 563 | Jo Nesbø 564 | Christoph Sonntag 565 | Wilfried Reuter 566 | Kerstin Werner 567 | Thomas Schmid 568 | Alan Bradley 569 | Alexander Adams 570 | Michael Schofield 571 | Noah Gordon 572 | Aaron James 573 | Christian Hesse 574 | Christoph Koch 575 | Karen Olsen 576 | Holger Stark 577 | Thomas Lindemann 578 | Alexander Klee 579 | Erich Keller 580 | Rainer Stadler 581 | Hartmut Lange 582 | Hermann Meyer 583 | Klaus Werner 584 | Jochen Schmidt 585 | Julia Hartmann 586 | Peter Richter 587 | Craig Robertson 588 | Georg Fink 589 | Stefan Peters 590 | Christiane Hoffmann 591 | Bernhard Peters 592 | Andrew Grant 593 | Ansha 594 | Anthony Ryan 595 | Jacob Thomas 596 | James Corey 597 | Jamie Shaw 598 | John Gwynne 599 | Mark Sullivan 600 | Rachel Gibson 601 | Richard Bird 602 | Jane Johnson 603 | Werner Wirth 604 | Diana Cooper 605 | Hanns Kurth 606 | Armin Klein 607 | Caroline Hamann 608 | Christoph Reuter 609 | Volker Jung 610 | Uwe Wolff 611 | Wolfgang Bergmann 612 | Daniel Fox 613 | James McBride 614 | Olivier Roy 615 | Robert Holden 616 | Sarah Hall 617 | Joel Rosenberg 618 | Johannes Rehm 619 | Agnete Friis 620 | Bernd Flessner 621 | Bernd Meyer 622 | Dirk Schmidt 623 | Werner Schmidbauer 624 | Gabriele Hoffmann 625 | Hans-Peter Schwarz 626 | Hans Hartmann 627 | Klaus Berger 628 | Peter Henning 629 | Thomas Kaufmann 630 | Peter Watts 631 | Steve Friedman 632 | James Duke 633 | James Oswald 634 | Sebastian Herrmann 635 | William Cohn 636 | Sarah Jordan 637 | Carnovsky 638 | Christian Schwarz 639 | Georg Huber 640 | Thomas Neumann 641 | Adam Roberts 642 | Barbara Hall 643 | David Kessler 644 | Katherine Neville 645 | Mark Pearson 646 | Geoffrey James 647 | Christian Seiler 648 | Peter Brunner 649 | Thomas John 650 | Horst Herrmann 651 | Olaf Peters 652 | Peter Hess 653 | Manfred Mai 654 | Franz Brandl 655 | Friedrich Junge 656 | Johannes Hofmann 657 | Martin Zimmermann 658 | Wolf-Dieter Hauschild 659 | Adam Leonard 660 | Jason Matthews 661 | Sarah Bryant 662 | Joseph Hooper 663 | Norbert Wolf 664 | Harald Roth 665 | Hans Pfeifer 666 | Abby Lee 667 | Dirk Ahner 668 | Gregor Weber 669 | Hademar Bankhofer 670 | Hans Gerlach 671 | Adam Baker 672 | Charles Todd 673 | Keith Donohue 674 | Patrick Dunne 675 | Richard Sylvester 676 | Stuart Hill 677 | William Powers 678 | Gary Gibson 679 | Jonathan Holt 680 | Daniel Krause 681 | Boris Strugatzki 682 | Simon Borowiak 683 | D. E. Stevenson 684 | Victoria Schwab 685 | Paul Levine 686 | Christian Koch 687 | Marcel Reich-Ranicki 688 | R.A. Salvatore 689 | Sabine Leutheusser-Schnarrenberger 690 | Peter Schnyder 691 | Christoph Gottwald 692 | Irene Becker 693 | Ingrid Bauer 694 | Christian Feldmann 695 | Karin Weber 696 | Rainer Schmitz 697 | Susanne Becker 698 | Munro Price 699 | Brian Greene 700 | David Nicholls 701 | Jane Scott 702 | Richard Thaler 703 | Agnes Husslein-Arco 704 | Chris Paul 705 | Robin Hobb 706 | Gerhard Ernst 707 | Kim Stanley Robinson 708 | Thomas Elbel 709 | Christian Buder 710 | Stefanie Arend 711 | Stefan Schreiber 712 | Barbara Schaefer 713 | Jeffrey Lang 714 | Elisabeth Herrmann 715 | Peter Vollmer 716 | Matthias Berg 717 | Spiegel-Verlag Rudolf Augstein GmbH & Co. KG 718 | Lafcadio Hearn 719 | Hans Magnus Enzensberger 720 | Ernst Ulrich von Weizsäcker 721 | Peter Thiel 722 | Michael Connelly 723 | Peter Weiss 724 | Cassandra Clare 725 | Anatol Regnier 726 | Fajah Lourens 727 | Romain Puértolas 728 | China Miéville 729 | Ernst Toller 730 | Billy Idol 731 | Viktor Pelewin 732 | Elizabeth Little 733 | Clarice Lispector 734 | Justin Scott 735 | Shane Stevens 736 | Elizabeth Haynes 737 | Daniel Kraus 738 | Josef Imbach 739 | Hannah Rothschild 740 | Marlon James 741 | John Brunner 742 | James Briggs 743 | Alexander Betts 744 | David Benioff 745 | Colleen McCullough 746 | Jeanette Winterson 747 | Rebecca Skloot 748 | Mark Slater 749 | Renate Künast 750 | Ry Cooder 751 | Jeffrey Archer 752 | Axel Meyer 753 | Hildegard Hamm-Brücher 754 | Barbara Stollberg-Rilinger 755 | Joseph Roth 756 | Jack Williamson 757 | Sophie Kinsella 758 | Helmut Pfleger 759 | Cornelia Funke 760 | Ingeborg Bachmann 761 | Hoffmann von Fallersleben 762 | Michael Pollan 763 | Helmut Krausser 764 | Brenda Cooper 765 | David Foster Wallace 766 | Scott Jurek 767 | Ödön von Horváth 768 | Michael Hübner 769 | Tara Stiles 770 | Terry Brooks 771 | Mathias Jung 772 | Misty Copeland 773 | Antonio Muñoz Molina 774 | John Birmingham 775 | Stephen Joseph 776 | Brandon Sanderson 777 | Julia Gregson 778 | Jenny-Mai Nuyen 779 | Pamela L. Travers 780 | Nora Roberts 781 | Alfred Brendel 782 | Sam Harris 783 | Bret Easton Ellis 784 | William Ury 785 | Thomas Wolfe 786 | Annette von Droste-Hülshoff 787 | Ian Rankin 788 | Anne Applebaum 789 | Christian Kämmerling 790 | Hjalmar Söderberg 791 | Camilla Grebe 792 | Connie Willis 793 | Anne Tyler 794 | Eddie Joyce 795 | Helma Sanders-Brahms 796 | Annie Proulx 797 | Anton Hofreiter 798 | Philipp Ruch 799 | Lee Child 800 | Jonathan Franzen 801 | Michael Wilde 802 | Amy Gentry 803 | Patricia Cornwell 804 | Jeremias Gotthelf 805 | Norbert Blüm 806 | Carl Zuckmayer 807 | Bernard Cornwell 808 | Sei Shonagon 809 | Atze Schröder 810 | Max Hollein 811 | Clive Cussler 812 | Robert B. Parker 813 | Bear Grylls 814 | Peter Sloterdijk 815 | Antje Vollmer 816 | Susanne Schmidt 817 | Nikolaus Wachsmann 818 | Hannes Jaenicke 819 | Estelle Maskame 820 | Milos Kirschner 821 | Jürgen Todenhöfer 822 | Eckhart Tolle 823 | Jan Guillou 824 | Sofja Tolstaja 825 | Gottfried Benn 826 | Sally Hepworth 827 | Anna Gavalda 828 | Robert Forster 829 | Katja Riemann 830 | Wolfram von Eschenbach 831 | Janice Jakait 832 | Christopher Paolini 833 | Heinrich Harrer 834 | Pieter Steinz 835 | Alexander McCall Smith 836 | Gerd Bucerius 837 | Gillian Flynn 838 | Michel Onfray 839 | Klaus Hahn 840 | Kristin Neff 841 | Penny Vincenzi 842 | Napoleon Hill 843 | Elena Ferrante 844 | Suzanne Francis 845 | Mary Higgins Clark 846 | Octavia E. Butler 847 | James Last 848 | Renate Schmidt 849 | Richard Reed 850 | David S. Goyer 851 | Alan Dean Foster 852 | Marie von Ebner-Eschenbach 853 | Rachida Lamrabet 854 | Theodore Sturgeon 855 | Alexander Kluge 856 | Gustav Seibt 857 | Amitav Ghosh 858 | Wilhelm Raabe 859 | Michael Borgolte 860 | Nan Goldin 861 | Samantha Hayes 862 | Alvin E. Roth 863 | Charles Stross 864 | Mark Miodownik 865 | Neil Pasricha 866 | Eduard Augustin 867 | Eoin Colfer 868 | David Niall Wilson 869 | Vladimir Sorokin 870 | Camille Seaman 871 | Detlef Lotze 872 | Meg Cabot 873 | Kathy Reichs 874 | Didier Ottinger 875 | Bernd Neumann 876 | Carl Nixon 877 | DJ BoBo 878 | José Luis Sampedro 879 | Andrew Blum 880 | Gardner Dozois 881 | Bob Woodward 882 | Shonda Rhimes 883 | Günter Eich 884 | Alain de Botton 885 | Jan Josef Liefers 886 | Aziz Ansari 887 | Martin Walser 888 | Ernst Jandl 889 | Vernor Vinge 890 | Warren Ellis 891 | David Weber 892 | John Cheever 893 | Thich Nhat Hanh 894 | Francesco Guccini 895 | António Lobo Antunes 896 | Sait Faik Abasiyanik 897 | Amy Tan 898 | Martin Bucer 899 | Walter Mischel 900 | Uwe Timm 901 | Frank Schätzing 902 | Cornelia Schmalz-Jacobsen 903 | Rebekka Reinhard 904 | Thomas Harris 905 | Liselotte Pulver 906 | Alastair Reynolds 907 | Bill Bryson 908 | Chris Hadfield 909 | Friedbert Pflüger 910 | Roddy Doyle 911 | Ilja Ilf 912 | Michael Cunningham 913 | Jurek Becker 914 | Joe R. Lansdale 915 | Heimito von Doderer 916 | John Wyndham 917 | Greg Bear 918 | Gloria Steinem 919 | E L James 920 | Heinz G. Konsalik 921 | Harlan Coben 922 | Alan Bennett 923 | Tim Powers 924 | Peter David 925 | Matthias Claudius 926 | Zadie Smith 927 | Arianna Huffington 928 | Irvine Welsh 929 | Paolo Bacigalupi 930 | Emanuel Schikaneder 931 | Edgar Cayce 932 | Heike Makatsch 933 | Pierre Drieu la Rochelle 934 | Arthur Hailey 935 | Kevin J. Anderson 936 | Joachim Fuchsberger 937 | Heike Drechsler 938 | Jenny Lawson 939 | Antonio Damasio 940 | Sofi Oksanen 941 | Wolfgang Borchert 942 | Marc Levy 943 | Fred Vargas 944 | Sergej Lukianenko 945 | Deepak Chopra 946 | Gerd Gigerenzer 947 | Tanith Lee 948 | Heloïse 949 | Michael J. Sullivan 950 | Veronica Ferres 951 | Barbara Tuchman 952 | Judy Blume 953 | Ute Lauterbach 954 | David Simon 955 | Otto Waalkes 956 | N.K. Jemisin 957 | Zelda Fitzgerald 958 | Dieter Lattmann 959 | Heinz Erhardt 960 | Veronica Roth 961 | Simon Tress 962 | Stephen Merchant 963 | Jonathan Safran Foer 964 | Cecelia Ahern 965 | Lee Miller 966 | Städtische Galerie im Lenbachhaus 967 | Emmanuel Carrère 968 | Steve Earle 969 | George Saunders 970 | Friederike Mayröcker 971 | Håkan Nesser 972 | Nicole Richie 973 | Jeffery Deaver 974 | Hjalmar Bergman 975 | Charlaine Harris 976 | Paul Theroux 977 | Desmond Morris 978 | Markus Zusak 979 | Alan Hollinghurst 980 | Ken Wilber 981 | Tariq Ali 982 | Lucius Shepard 983 | Hermann Broch 984 | Anton Corbijn 985 | Malcolm Gladwell 986 | Greg Egan 987 | Ramana Maharshi 988 | Frank McCourt 989 | Kunsthalle Bremen 990 | Ellis Peters 991 | Krysten Ritter 992 | Fareed Zakaria 993 | Donna Tartt 994 | Jean M. Auel 995 | Pierdomenico Baccalario 996 | Nassim Nicholas Taleb 997 | Hans-Peter Martin 998 | Arno Schmidt 999 | Alex Garland 1000 | Diana Gabaldon 1001 | Nathanael West 1002 | Terry Goodkind 1003 | Tracy Chevalier 1004 | Helen Fielding 1005 | Iwan Jefremow 1006 | B.J. Novak 1007 | Robert Kirkman 1008 | John Peel 1009 | Giorgio Faletti 1010 | Robin Cook 1011 | Ulrich Kasparick 1012 | Herman Bang 1013 | Doris Dörrie 1014 | Abdelkarim 1015 | James Rollins 1016 | Erich Fried 1017 | Elisabeth Kübler-Ross 1018 | Katharina Winter 1019 | Michael Lewis 1020 | Leon Uris 1021 | Óscar Rodríguez Maradiaga 1022 | Howard Gordon 1023 | Hanns Hatt 1024 | Bob Ross 1025 | Jürgen Schmieder 1026 | Karl Valentin 1027 | Manfred Gortz 1028 | NEON 1029 | Dolly Buster 1030 | Ljudmila Ulitzkaja 1031 | Niall Ferguson 1032 | Dmitry Glukhovsky 1033 | Maite Kelly 1034 | Udo Lindenberg 1035 | Randy Pausch 1036 | Katherine Anne Porter 1037 | Gregory Benford 1038 | Linda Blair 1039 | Mark Robson 1040 | Peter Härtling 1041 | Dick Wolf 1042 | Lars Saabye Christensen 1043 | Andy Weir 1044 | Tess Gerritsen 1045 | Marion Gräfin Dönhoff 1046 | Francesca Marciano 1047 | Paolo Giordano 1048 | David Baldacci 1049 | Peter Straub 1050 | Max Brooks 1051 | Peter Høeg 1052 | Richard Price 1053 | Steven D. Levitt 1054 | Luigi Capuana 1055 | Matthias Sammer 1056 | David McCullough 1057 | Ole von Beust 1058 | Jodi Picoult 1059 | Andreas Möller 1060 | Raymond Feist 1061 | Laurell K. Hamilton 1062 | Uwe Johnson 1063 | Eva Ibbotson 1064 | Ayelet Waldman 1065 | John Boyne 1066 | Johann Heinrich Voß 1067 | Andreas Eschbach 1068 | Fausto Brizzi 1069 | Paolo Genovese 1070 | Ben Bova 1071 | Tom Jones 1072 | Peter S. Beagle 1073 | Robert Dallek 1074 | Jordan Belfort 1075 | Len Deighton 1076 | Janosch 1077 | Ippolito Nievo 1078 | Hal Clement 1079 | Ian Kershaw 1080 | Tad Williams 1081 | Daniel Tammet 1082 | Adolph Freiherr von Knigge 1083 | Staatsgalerie Stuttgart 1084 | Sue Townsend 1085 | Jack Finney 1086 | Eknath Easwaran 1087 | Hans Joachim Schellnhuber 1088 | Günter Wallraff 1089 | Antony Beevor 1090 | Matthew Weiner 1091 | John Scalzi 1092 | Algis Budrys 1093 | Hannelore Hoger 1094 | Jean-Christophe Rufin 1095 | Michael Brown 1096 | Rafael Chirbes 1097 | T.C. Boyle 1098 | Thorbjoern Egner 1099 | Jaume Cabré 1100 | Markus Wolf 1101 | David Eddings 1102 | Sebastian Haffner 1103 | Michael Harner 1104 | Abraham a Sancta Clara 1105 | James Krüss 1106 | Wolf Haas 1107 | Timothy Zahn 1108 | Thomas Arnold 1109 | Tom Sharpe 1110 | Christian Ude 1111 | Jean Ziegler 1112 | Christiane Paul 1113 | Adriana Altaras 1114 | Jean-Philippe Toussaint 1115 | Gianrico Carofiglio 1116 | James Dashner 1117 | Martin Cruz Smith 1118 | Jan Assmann 1119 | Linn Ullmann 1120 | Yvan Goll 1121 | Christine Taylor 1122 | Eleanor Catton 1123 | Stephen R. Donaldson 1124 | Holger Karsten Schmidt 1125 | Esther Duflo 1126 | Sarah Kirsch 1127 | Christoph Schlingensief 1128 | Beryl Bainbridge 1129 | Joe Hill 1130 | Chrissie Hynde 1131 | Licia Troisi 1132 | Marica Bodrožić 1133 | Hélène Grimaud 1134 | Cyril M. Kornbluth 1135 | Lee Smolin 1136 | Elizabeth von Arnim 1137 | Sophie Calle 1138 | Wolfgang Kehl 1139 | Hellmuth Karasek 1140 | Alberto Angela 1141 | Anne-Laure Bondoux 1142 | Warlam Schalamow 1143 | Marie Luise Kaschnitz 1144 | Pascal Mercier 1145 | Arthur Golden 1146 | William Gaddis 1147 | Bernhard Bayer 1148 | Janet Evanovich 1149 | Ursula Karven 1150 | Ludwig Bechstein 1151 | Diane Duane 1152 | Rudy Rucker 1153 | Inger Christensen 1154 | Barbara Rütting 1155 | Dieter Hildebrandt 1156 | Tim Winton 1157 | Maria Àngels Anglada 1158 | Jagdish N. Bhagwati 1159 | Cixin Liu 1160 | Jonas Jonasson 1161 | Robert Darnton 1162 | Norman Spinrad 1163 | Shane McMahon 1164 | Irvin D. Yalom 1165 | Ottfried Fischer 1166 | Cordwainer Smith 1167 | Helmut Qualtinger 1168 | Daniel Goleman 1169 | Jasper Fforde 1170 | Jean Prévost 1171 | Julian Press 1172 | Vonda N. McIntyre 1173 | Wolfgang Hohlbein 1174 | Tania Singer 1175 | Howard Jacobson 1176 | Harald Lesch 1177 | Kjell Westö 1178 | Julia Franck 1179 | Hans Mommsen 1180 | Anne Enright 1181 | Scott Turow 1182 | Raif Badawi 1183 | Lothar-Günther Buchheim 1184 | Martin Dreyer 1185 | Peter Rühmkorf 1186 | Beth Ditto 1187 | P.C. Cast 1188 | Wolfgang Koeppen 1189 | Stephen Chbosky 1190 | Oskar Maria Graf 1191 | Selahattin Demirtaş 1192 | Emma Donoghue 1193 | Arthur Benjamin 1194 | Mark Haddon 1195 | Michael Swanwick 1196 | Peter Maffay 1197 | Hartmann von Aue 1198 | Elizabeth George 1199 | Robert Charles Wilson 1200 | Dave van Ronk 1201 | Chögyam Trungpa 1202 | Friederike Rath 1203 | Cecily von Ziegesar 1204 | Candace Bushnell 1205 | Walter Kempowski 1206 | Philippa Carr 1207 | Martin Seligman 1208 | Franz Rosenzweig 1209 | Carl Sternheim 1210 | David Foenkinos 1211 | Michael Köhlmeier 1212 | Javier Sierra 1213 | Chesley B. Sullenberger 1214 | Steven Erikson 1215 | Penelope Lively 1216 | Hermann Löns 1217 | Lucy Hawking 1218 | Neale Donald Walsch 1219 | Hans-Olaf Henkel 1220 | Ben Miller 1221 | Ildefonso Falcones 1222 | Günter Kunert 1223 | Judith Hermann 1224 | Lois Duncan 1225 | Stephen Greenblatt 1226 | Rolf Hochhuth 1227 | Zülfü Livaneli 1228 | Cesar Millan 1229 | Jung Chang 1230 | Jude Watson 1231 | Reinhard Marx 1232 | Simon Singh 1233 | Christoph Hein 1234 | CUS 1235 | Tiziano Terzani 1236 | Waldemar Bonsels 1237 | Jim Butcher 1238 | Richard Preston 1239 | Ludwig Thoma 1240 | Stefan Rahmstorf 1241 | Seth Grahame-Smith 1242 | Mary Bauermeister 1243 | Kate Wilhelm 1244 | Durs Grünbein 1245 | Jay Asher 1246 | Gerard O'Neill 1247 | Virginia Satir 1248 | Douglas Preston 1249 | Kôji Suzuki 1250 | Brian Herbert 1251 | Karin Baal 1252 | James Swallow 1253 | Klaus Schwab 1254 | Patrick Rothfuss 1255 | Thomas Gottschalk 1256 | John Shirley 1257 | Lauren Weisberger 1258 | Mitch Albom 1259 | Guido Knopp 1260 | Gerhard Ludwig Kardinal Müller 1261 | André Heller 1262 | Dan Abnett 1263 | Jayne Ann Krentz 1264 | Aleksandar Hemon 1265 | Karl Ove Knausgård 1266 | Andreas Feininger 1267 | Christiane Gohl 1268 | Louise Hay 1269 | Lawrence Wright 1270 | Rafik Schami 1271 | Renate Dorrestein 1272 | Mark Z. Danielewski 1273 | Jimmy Kelly 1274 | Margit Sandemo 1275 | David Graeber 1276 | Robert Habeck 1277 | David Gerrold 1278 | Massimo Carlotto 1279 | Eric Carle 1280 | Lemony Snicket 1281 | Wladimir Kaminer 1282 | Ingrid Noll 1283 | Guido Cantz 1284 | Stanislav Grof 1285 | Andreas Schlüter 1286 | Steve Perry 1287 | Richard David Precht 1288 | Carl Hiaasen 1289 | Josef Pieper 1290 | Jonathan Stroud 1291 | Tonino Benacquista 1292 | Michela Marzano 1293 | Walter Moers 1294 | Navid Kermani 1295 | Carl Amery 1296 | Liza Marklund 1297 | Minette Walters 1298 | Sandra Brown 1299 | Konstantin Wecker 1300 | Allen Carr 1301 | Mick Fleetwood 1302 | Hal Foster 1303 | Elizabeth Strout 1304 | Wolfgang Böhmer 1305 | Caleb Carr 1306 | John Lewis Gaddis 1307 | Devendra Banhart 1308 | Miljenko Jergović 1309 | Markus Lanz 1310 | M. Scott Peck 1311 | Günter de Bruyn 1312 | David Brooks 1313 | Mia May 1314 | David Heinemeier Hansson 1315 | Silvana De Mari 1316 | Diane Ackerman 1317 | Joe Kirschvink 1318 | Nick Perumov 1319 | Adnan Maral 1320 | Robert Skidelsky 1321 | Robert Wilson 1322 | Rhonda Byrne 1323 | Gabriele Pauli 1324 | Michele Mari 1325 | Richard J. Evans 1326 | Karen Joy Fowler 1327 | Julie Plec 1328 | Holly Black 1329 | Scott Westerfeld 1330 | Joseph Delaney 1331 | Jürgen Moltmann 1332 | Edgar Hilsenrath 1333 | Mark Owen 1334 | Maarten 't Hart 1335 | Trevor Noah 1336 | Peter Gaymann 1337 | Kathleen Weise 1338 | Hans Joas 1339 | Ann Brashares 1340 | Nora Krug 1341 | Lennart Nilsson 1342 | Robert Gernhardt 1343 | Grace Paley 1344 | Val McDermid 1345 | Walter Isaacson 1346 | Hannah Monyer 1347 | Beppe Severgnini 1348 | Rüdiger Safranski 1349 | Mirjam Pressler 1350 | Neil Strauss 1351 | Russell Simmons 1352 | Ann Leckie 1353 | Joe Abercrombie 1354 | Christopher Clark 1355 | Daniel Quinn 1356 | Delphine de Vigan 1357 | Sara Shepard 1358 | Erwin Strittmatter 1359 | Brigitte Hamann 1360 | Sebastian Junger 1361 | Gilbert Adair 1362 | Cerina Vincent 1363 | Pierre Lemaitre 1364 | Rosa Liksom 1365 | Erika Lust 1366 | Alfred Polgar 1367 | Geoff Ryman 1368 | Trevanian 1369 | Eric Van Lustbader 1370 | Adam Hamdy 1371 | Babak Rafati 1372 | John Aldridge 1373 | George Rodger 1374 | Karl Pilkington 1375 | Stella Gibbons 1376 | Dan White 1377 | Ian Brown 1378 | Don Winslow 1379 | Margaret Peterson Haddix 1380 | Einar Már Gudmundsson 1381 | Ferdinand von Schirach 1382 | Antonio Carluccio 1383 | Loriano Macchiavelli 1384 | Richard Overy 1385 | Yrsa Sigurdardóttir 1386 | Franz Hohler 1387 | Geert Mak 1388 | Hanns-Josef Ortheil 1389 | Louis Begley 1390 | Michael Jan Friedman 1391 | Ulrich Wickert 1392 | Kathrin Schmidt 1393 | Herbert Rosendorfer 1394 | Melania G. Mazzucco 1395 | David Lagercrantz 1396 | Dav Pilkey 1397 | Brian Williams 1398 | Dorothy Catherine Fontana 1399 | Edward Bach 1400 | Lira Bajramaj 1401 | Leif GW Persson 1402 | Dale Brown 1403 | Robert Crais 1404 | Walter Lewin 1405 | Wladimir Makanin 1406 | Noah Hawley 1407 | Cheryl Strayed 1408 | Robert Kagan 1409 | Elizabeth May 1410 | John Gray 1411 | Caroline Graham 1412 | John Rabe 1413 | Ernst Busch 1414 | Justin Cronin 1415 | Riad Sattouf 1416 | Ali Smith 1417 | Mark Williams 1418 | Tom Rob Smith 1419 | Klaus Hagerup 1420 | Irmtraud Morgner 1421 | Stefan Aust 1422 | Naja Marie Aidt 1423 | Meg Rosoff 1424 | Feridun Zaimoglu 1425 | Richard C. Schneider 1426 | Atul Gawande 1427 | David Levithan 1428 | John Flanagan 1429 | Leïla Slimani 1430 | Christie Golden 1431 | Uwe Tellkamp 1432 | Jenny Erpenbeck 1433 | Hanna Krall 1434 | Natalia Wörner 1435 | Anne Perry 1436 | Gianluigi Nuzzi 1437 | Jewgeni Petrow 1438 | Ulrich Walter 1439 | Jack Ketchum 1440 | Leonardo Boff 1441 | M. John Harrison 1442 | Eugen Kogon 1443 | Peter Kraus 1444 | Joyce Maynard 1445 | Anselm Grün 1446 | Aslı Erdoğan 1447 | Joachim Masannek 1448 | David Jenkins 1449 | Gaito Gasdanow 1450 | Maybrit Illner 1451 | Maria Barbal 1452 | Rainer Wieland 1453 | Nico Hofmann 1454 | Joachim Kaiser 1455 | Johannes Bobrowski 1456 | Catherine Millet 1457 | Nate Silver 1458 | Gisela von Arnim 1459 | Kerstin Gier 1460 | David Drake 1461 | Dominique Horwitz 1462 | Robert Thurman 1463 | Walter Jon Williams 1464 | Jeri Taylor 1465 | Amy Silver 1466 | Matti Y. Joensuu 1467 | Nizami 1468 | Torsten Fink 1469 | Anonyma 1470 | Wolfram Eberhard 1471 | Margot Käßmann 1472 | Jeremy Taylor 1473 | Max von der Grün 1474 | Kate Morton 1475 | Charlie Higson 1476 | Francis Durbridge 1477 | S. D. Perry 1478 | Marianne Williamson 1479 | Kate Grenville 1480 | Hermann Kretzschmar 1481 | David Servan-Schreiber 1482 | Anatoli Boukreev 1483 | Biz Stone 1484 | Will Russell 1485 | Maggie Stiefvater 1486 | Patric Heizmann 1487 | Delia Ephron 1488 | Colson Whitehead 1489 | Angel Wagenstein 1490 | Kij Johnson 1491 | Mo Hayder 1492 | Alexander Langer 1493 | Diverse 1494 | James Lee Burke 1495 | Bert Hellinger 1496 | John Hill 1497 | Michael Reaves 1498 | Robert L. Forward 1499 | Thomas Harlan 1500 | Saša Stanišić 1501 | Stefanie Zweig 1502 | Greg Palast 1503 | Anthony Doerr 1504 | Owen King 1505 | Peter Mayle 1506 | Marina Lewycka 1507 | Rick Yancey 1508 | Christine Bergmann 1509 | Arno Geiger 1510 | Catherine Clément 1511 | Günther Maria Halmer 1512 | Sven Regener 1513 | Charlotte Roche 1514 | Susan E. Hinton 1515 | James Luceno 1516 | Christopher Golden 1517 | Nicholas J. Conard 1518 | Elke Heidenreich 1519 | Christine Feehan 1520 | Jonas Karlsson 1521 | Simon Scarrow 1522 | Elliot Aronson 1523 | Mary Roach 1524 | Andres Veiel 1525 | Stephen J. Dubner 1526 | Harry Rowohlt 1527 | Dinesh D'Souza 1528 | Jim Thompson 1529 | A. M. Homes 1530 | Wolfgang Herrndorf 1531 | Dimitri Verhulst 1532 | Ursula Krechel 1533 | Désirée Nick 1534 | Günter M. Ziegler 1535 | Tom Fletcher 1536 | Jan Frodeno 1537 | Dietrich Schwanitz 1538 | Billy Mills 1539 | Raymond Moody 1540 | David Sedaris 1541 | Tamora Pierce 1542 | William McIlvanney 1543 | Chris Ryan 1544 | Ha-Joon Chang 1545 | Neil MacGregor 1546 | Eduard von Keyserling 1547 | Steven Barnes 1548 | Fabian Hambüchen 1549 | Charlotte Link 1550 | Ulla Hahn 1551 | Timothy Ferriss 1552 | Robert Gerwarth 1553 | Jennifer Weiner 1554 | Walter Kohl 1555 | Margrit Kennedy 1556 | Katherine Pancol 1557 | Michael Scott 1558 | Reinhard Mohn 1559 | Loretta Napoleoni 1560 | Kelley Armstrong 1561 | Mari Jungstedt 1562 | Kjell Askildsen 1563 | Jeanne DuPrau 1564 | Åsa Larsson 1565 | Lisa Tuttle 1566 | Marco Bianchi 1567 | Clarissa Pinkola Estés 1568 | Claire 1569 | Mario Spezi 1570 | Michail Schischkin 1571 | Jens Reich 1572 | Kenneth Frampton 1573 | Ursula Caberta 1574 | Kai Meyer 1575 | Carolin Kebekus 1576 | Chris Carter 1577 | Becca Fitzpatrick 1578 | Henryk M. Broder 1579 | Michelle Paver 1580 | Peter Lerangis 1581 | Christiane Sadlo 1582 | Andrew Newberg 1583 | Eric Nylund 1584 | Maja Haderlap 1585 | Hans von Dohnanyi 1586 | Alain Ducasse 1587 | John Lloyd 1588 | Karin Alvtegen 1589 | Heinrich Spoerl 1590 | Kristine Kathryn Rusch 1591 | Mikael Niemi 1592 | Paul McAuley 1593 | C. J. Sansom 1594 | Jonathan Coe 1595 | Catherine Fisher 1596 | Jeff Abbott 1597 | Tom Perrotta 1598 | Hans Otte 1599 | Gregory David Roberts 1600 | Jonathan Kellerman 1601 | Sibylle Lewitscharoff 1602 | Rotraut Susanne Berner 1603 | Jack Canfield 1604 | Anne Donovan 1605 | VOX Television GmbH 1606 | Boris Palmer 1607 | Rolf Börjlind 1608 | David Landes 1609 | Thomas Hettche 1610 | Andrea Levy 1611 | Kay Pollak 1612 | Daniel Jonah Goldhagen 1613 | Robert Graysmith 1614 | Alexis Jenni 1615 | Wieslaw Mysliwski 1616 | Michael Adam 1617 | Christianna Brand 1618 | David Baddiel 1619 | Judith Miller 1620 | Melinda Nadj Abonji 1621 | Peter Keglevic 1622 | Andrew Keen 1623 | John Varley 1624 | Karin Slaughter 1625 | Vince Flynn 1626 | Andreas Hoppe 1627 | Giulia Carcasi 1628 | Marc Dugain 1629 | Gordon Korman 1630 | Richard Laymon 1631 | Lionel Davidson 1632 | Patrick Carman 1633 | William Nicholson 1634 | Matthew Quick 1635 | Bob Holmes 1636 | Hisham Matar 1637 | Greg Iles 1638 | Walter Felsenstein 1639 | Dieter Dorn 1640 | Jamie Thomson 1641 | Susan Cain 1642 | Sherrilyn Kenyon 1643 | Lauren Myracle 1644 | Maria Lang 1645 | J. M. Dillard 1646 | Jane Roberts 1647 | J. R. Ward 1648 | Lucky McKee 1649 | Paul Collier 1650 | Markus Heitz 1651 | Geraldine Brooks 1652 | Gayle Forman 1653 | Francine Prose 1654 | Colin Meloy 1655 | Margherita Oggero 1656 | Kathryn Stockett 1657 | Jürgen Seidel 1658 | Matt Haig 1659 | Daniel Woodrell 1660 | Robert A. Monroe 1661 | Scott Lynch 1662 | Rebecca Solnit 1663 | Loki Schmidt 1664 | Lilli Beck 1665 | John M. Ford 1666 | Matthew Stover 1667 | Peter L. Bergen 1668 | Lutz Hachmeister 1669 | Conn Iggulden 1670 | Belinda Bauer 1671 | Robert Harris 1672 | Peter Arens 1673 | Chris Bunch 1674 | Drew Karpyshyn 1675 | Ann C. Crispin 1676 | John Saul 1677 | Laura Lippman 1678 | Mark Helprin 1679 | Helmut Thielicke 1680 | Lukas Bärfuss 1681 | Gerhard Holtz-Baumert 1682 | Chris Taylor 1683 | Eva Menasse 1684 | Ruth Maria Kubitschek 1685 | Deborah Ellis 1686 | Johanna Lindsey 1687 | Patricia Briggs 1688 | Petra Hammesfahr 1689 | Dan Millman 1690 | Hans Sahl 1691 | Jordan Romero 1692 | Tore Renberg 1693 | Christos Tsiolkas 1694 | Julia Navarro 1695 | Ken Grimwood 1696 | Rob Sitch 1697 | Doug Naylor 1698 | Ramez Naam 1699 | Fritz Rudolf Fries 1700 | Amanda Hocking 1701 | Deborah Harkness 1702 | Jorge Bucay 1703 | Daniel Everett 1704 | Leonie Swann 1705 | Lena Christ 1706 | Kerstin Hensel 1707 | Åke Edwardson 1708 | Friedrich Ani 1709 | Peter Brown 1710 | Mac Barnett 1711 | Michael Grant 1712 | Laurence Cossé 1713 | Norbert Frei 1714 | Julia Shaw 1715 | Helme Heine 1716 | John Hart 1717 | John Stephens 1718 | Alessandro Bosetti 1719 | Patrick Ness 1720 | Jane McGonigal 1721 | Gonçalo M. Tavares 1722 | Barbara Hambly 1723 | Tony Gonzales 1724 | Jeff Grubb 1725 | Lisa Kleypas 1726 | Christian Habicht 1727 | Austin Wright 1728 | Dana Arnold 1729 | Arnold Stadler 1730 | Christine Brückner 1731 | Nina Garcia 1732 | Jorge González 1733 | Hanns Dieter Hüsch 1734 | Paul Lendvai 1735 | Linda Sue Park 1736 | Dave Wolverton 1737 | Max Barry 1738 | Marian Keyes 1739 | Marie-Monique Robin 1740 | Caitlin Moran 1741 | Matt Ruff 1742 | Miklós Vámos 1743 | Terézia Mora 1744 | Adam Tooze 1745 | Peter Longerich 1746 | Tom McCarthy 1747 | Don Hutson 1748 | Jörg Dräger 1749 | Majgull Axelsson 1750 | Pierre Franckh 1751 | Alyson Noël 1752 | Franz Fühmann 1753 | Benjamin Lebert 1754 | Mathias Malzieu 1755 | Greg Keyes 1756 | Bruce Coville 1757 | Zoran Drvenkar 1758 | Lisa See 1759 | Meg Wolitzer 1760 | Prem Rawat 1761 | Andrea Maria Schenkel 1762 | Larry Brown 1763 | Robert C. Atkins 1764 | Heinrich Hoffmann 1765 | Diane Carey 1766 | Roger MacBride Allen 1767 | Jacqueline Carey 1768 | Gabrielle Zevin 1769 | Pierre Bordage 1770 | Teresa De Sio 1771 | Steve Alten 1772 | Teresa de la Parra 1773 | Bernard A. Lietaer 1774 | Jaroslav Rudiš 1775 | Hanne Ørstavik 1776 | Marika Kilius 1777 | Renata Salecl 1778 | Isabel Abedi 1779 | Michael Langer 1780 | Pema Chödrön 1781 | John Gottman 1782 | Siobhan Dowd 1783 | Michael Mittermeier 1784 | Laurence Yep 1785 | Pierce Brown 1786 | Frank Schirrmacher 1787 | David Peace 1788 | Terence Conran 1789 | Thomas Köster 1790 | Kaya Yanar 1791 | Albrecht Beutelspacher 1792 | Ian McDonald 1793 | Linda Howard 1794 | Johannes Schilling 1795 | Siegfried Unseld 1796 | Ursula Buchfellner 1797 | Spencer Quinn 1798 | Kim Leine 1799 | Thea Dorn 1800 | Carol O'Connell 1801 | Suzette Haden Elgin 1802 | Aminatta Forna 1803 | Jon Halliday 1804 | Peter Freund 1805 | Steve Jenkins 1806 | Carsten Peter Thiede 1807 | Michael A. Stackpole 1808 | Janny Wurts 1809 | John Ringo 1810 | Jeannette Walls 1811 | Hanne-Vibeke Holst 1812 | Jonas Hassen Khemiri 1813 | Liz Mohn 1814 | Janne Teller 1815 | Jürgen Roth 1816 | Brigitte Kronauer 1817 | George R. Stewart 1818 | Franck Thilliez 1819 | Penny Jordan 1820 | Misha Glenny 1821 | Corinne Hofmann 1822 | John King 1823 | Edward St Aubyn 1824 | James Craig 1825 | Barbara Bartos-Höppner 1826 | Bi Feiyu 1827 | Romain Sardou 1828 | Susanne Gaschke 1829 | Guus Kuijer 1830 | Ahmet Ümit 1831 | Stacy Schiff 1832 | Yangzom Brauen 1833 | Peter V. Brett 1834 | Thomas Bodström 1835 | Allan Cole 1836 | Geling Yan 1837 | Lydie Salvayre 1838 | Roger Smith 1839 | Richard Davidson 1840 | Sue Monk Kidd 1841 | Philipp Meyer 1842 | Gerd Theißen 1843 | Sarah Bailey 1844 | Tarita Teriipaia 1845 | Michael Robotham 1846 | John Bellairs 1847 | S.P. Somtow 1848 | Walther Köhler 1849 | Eva Padberg 1850 | Willi Lemke 1851 | Chris Evans 1852 | Matthias Steiner 1853 | Rolf-Dieter Müller 1854 | Ernst Lothar 1855 | Julian Nida-Rümelin 1856 | Troy Denning 1857 | Tom Segev 1858 | Carsten Jensen 1859 | Leslie Hunter 1860 | Charlie Huston 1861 | Mark Schultz 1862 | Hans Jürgen Press 1863 | Wolf Schneider 1864 | Phil Hogan 1865 | Pete Souza 1866 | Christopher Thomas 1867 | Violet Blue 1868 | Damon Galgut 1869 | Stephan Remmler 1870 | Uwe Steimle 1871 | Karen Traviss 1872 | Carl-Johan Vallgren 1873 | Rebecca James 1874 | Dietmar Dath 1875 | Marlene Streeruwitz 1876 | Gordon Smith 1877 | Daniel Glattauer 1878 | Sean Stewart 1879 | Anders Wijkman 1880 | William Forstchen 1881 | Frédérick Leboyer 1882 | Jean-François Parot 1883 | Christian Ritter 1884 | Bruno Jonas 1885 | Joshua Foer 1886 | Anna Todd 1887 | Peter Müller 1888 | Wolfgang Jeschke 1889 | Börge Hellström 1890 | Niall Williams 1891 | Brian L. Weiss 1892 | Sean Williams 1893 | Laurent Gounelle 1894 | Jordi Soler 1895 | Fritz J. Raddatz 1896 | Sissi Perlinger 1897 | Andreas Giebel 1898 | Jehoschua Kenaz 1899 | Manfred Gregor 1900 | Karl Kraus 1901 | Aprilynne Pike 1902 | Giorgio Panariello 1903 | Donald F. Glut 1904 | Lily Brett 1905 | Jancis Robinson 1906 | Chris Wooding 1907 | Brené Brown 1908 | Donato Carrisi 1909 | Hermann Lübbe 1910 | Rainer M. Schröder 1911 | Carl Frode Tiller 1912 | John Grogan 1913 | Anna Quindlen 1914 | Eva Gabrielsson 1915 | Amy Bloom 1916 | Peter Temple 1917 | Timothy Greenfield-Sanders 1918 | Wolfgang Huber 1919 | Varujan Vosganian 1920 | Peter Hayes 1921 | Peter Bamm 1922 | Michael Wallner 1923 | Zoë Jenny 1924 | Manon Straché 1925 | Burkhard Driest 1926 | Hanna Johansen 1927 | Edward Rutherfurd 1928 | Nando Parrado 1929 | Doris Gercke 1930 | Karen Duve 1931 | Jakob Augstein 1932 | Martha Grimes 1933 | Richard Yates 1934 | Anne B. Ragde 1935 | Sophie Hannah 1936 | Christian Jungersen 1937 | Judith Kuckart 1938 | John Lanchester 1939 | Grayson Perry 1940 | Lawrence Norfolk 1941 | Robert Wright 1942 | Colin Greenland 1943 | Marcia Clark 1944 | Harold S. Kushner 1945 | Steve Sem-Sandberg 1946 | Tom Egeland 1947 | Hope Jahren 1948 | David Thomas 1949 | Raoul Schrott 1950 | Laura Wright 1951 | Peter Williams 1952 | Ingrid Newkirk 1953 | Henry Winterfeld 1954 | John L. Allen 1955 | Tahereh Mafi 1956 | Erich Gräßer 1957 | Helene Jarmer 1958 | Hermann Kaufmann 1959 | John Burnside 1960 | David Ellis 1961 | Donna W. Cross 1962 | Maureen Johnson 1963 | Sebastian Krumbiegel 1964 | Claude Cueni 1965 | Buddy Giovinazzo 1966 | Esther M. Friesner 1967 | Jeffrey Moussaieff Masson 1968 | Hannu Raittila 1969 | Dennenesch Zoudé 1970 | Christian v. Ditfurth 1971 | Victoria Hislop 1972 | Christian Ditter 1973 | Chris Williams 1974 | John Crowley 1975 | Joseph Kanon 1976 | Diane Setterfield 1977 | Robert Seethaler 1978 | Kimberley Freeman 1979 | Peter Ochs 1980 | Tilman Spengler 1981 | Gregor Schöllgen 1982 | Dr. Oetker 1983 | Rupert Neudeck 1984 | Peter Hoffmann 1985 | Sylvia Day 1986 | Nick Harkaway 1987 | Reza Aslan 1988 | Stefan Rogall 1989 | David Perry 1990 | Xiaolu Guo 1991 | Alessandro D'Avenia 1992 | Otto de Kat 1993 | John Armstrong 1994 | James Sallis 1995 | David Anthony Durham 1996 | Chris Kuzneski 1997 | Friedrich Haase 1998 | Nicholas Carr 1999 | Irina Korschunow 2000 | Francisco Gómez 2001 | Rudolf Leopold 2002 | Dirk Cussler 2003 | Georgia Byng 2004 | Mark Lawrence 2005 | Alice Waters 2006 | Cathleen Schine 2007 | Abraham Verghese 2008 | Todd McCaffrey 2009 | James B. Donovan 2010 | Griet Op de Beeck 2011 | Martina Cole 2012 | Uschi Obermaier 2013 | Frédéric Martel 2014 | Sarah Zettel 2015 | Erich Zenger 2016 | Philippe-Joseph Salazar 2017 | Peter Schneider 2018 | John Perkins 2019 | Volker Kriegel 2020 | Beate Grimsrud 2021 | Bob Mayer 2022 | Frederick Taylor 2023 | Oliver Hassencamp 2024 | Colin Bateman 2025 | Hannes Råstam 2026 | Kresley Cole 2027 | Dunja Hayali 2028 | David Eagleman 2029 | Peter Wapnewski 2030 | Cherie Priest 2031 | Doron Rabinovici 2032 | Adam Zamoyski 2033 | Andrew Davidson 2034 | Ulrike Draesner 2035 | David Roberts 2036 | Helene Tursten 2037 | Fearne Cotton 2038 | Charles Marsh 2039 | Jürgen von der Lippe 2040 | Anna Enquist 2041 | Andrew Gross 2042 | L. Neil Smith 2043 | Mark Billingham 2044 | Jakob Ejersbo 2045 | Janine di Giovanni 2046 | Julie Otsuka 2047 | Abhijit Banerjee 2048 | Jockel Tschiersch 2049 | Frank-Markus Barwasser 2050 | Matt Taibbi 2051 | Kim Harrison 2052 | Jess Walter 2053 | Wolfgang Mueller 2054 | Thomas Weiß 2055 | Abraham Skorka 2056 | Robyn Young 2057 | Susan Elizabeth Phillips 2058 | Ceija Stojka 2059 | Tomáš Sedláček 2060 | Deva Premal 2061 | Heinz Schilling 2062 | Patrick Lapeyre 2063 | James Kahn 2064 | Richard Kropf 2065 | Sascha Arango 2066 | Theo Sommer 2067 | Piet Klocke 2068 | Regine Schindler 2069 | D.J. MacHale 2070 | Anna Jansson 2071 | Grégoire Delacourt 2072 | Martha Wells 2073 | Thomas Heise 2074 | Murmel Clausen 2075 | Robert C. Solomon 2076 | Frank Elstner 2077 | Michael Roth 2078 | Ben Winters 2079 | David Grann 2080 | Simone Elkeles 2081 | Captain Richard Phillips 2082 | Hagen Schulze 2083 | Ernst Peter Fischer 2084 | Andrew Morton 2085 | David Lodge 2086 | Felix Sturm 2087 | Max Wehrli 2088 | Peter Thorwarth 2089 | Marisha Pessl 2090 | M. Agejew 2091 | Claudia Schreiber 2092 | Marie Pohl 2093 | Wolfgang Niedecken 2094 | Runar Schildt 2095 | Andrés Pascual 2096 | Julianna Baggott 2097 | Maurizio de Giovanni 2098 | Alissa Jung 2099 | Brent Weeks 2100 | Asli Bayram 2101 | André Leon Talley 2102 | Volker Weidermann 2103 | Marie Desplechin 2104 | Thierry Lentz 2105 | Peter Wohlleben 2106 | Robert Greene 2107 | Pierre Pevel 2108 | Stuart MacBride 2109 | Denny Martin Flinn 2110 | Ajahn Brahm 2111 | Rebecca Martin 2112 | Ingo Appelt 2113 | Frank Witzel 2114 | Heiko A. Oberman 2115 | Abbas Khider 2116 | Andreas Biermann 2117 | Koushun Takami 2118 | Bill Buford 2119 | Ralf Isau 2120 | Dan Diner 2121 | James S.A. Corey 2122 | Anna Mitgutsch 2123 | Matthias Politycki 2124 | Arjen Lubach 2125 | Pierre Grimbert 2126 | John Vornholt 2127 | Tim Parks 2128 | Faye Kellerman 2129 | Claus Kleber 2130 | Scott Speer 2131 | Arnulf Baring 2132 | Hiro Arikawa 2133 | Pinchas Lapide 2134 | Hugo Hamilton 2135 | Ralf Schmitt 2136 | Sherko Fatah 2137 | Mina Ahadi 2138 | Martin Schmid 2139 | Peter Schmidt 2140 | Andrew Sean Greer 2141 | Tami Hoag 2142 | Bill Mockridge 2143 | Elaine Cunningham 2144 | James Hayman 2145 | Johannes Gropper 2146 | Stefan Klein 2147 | Dieter Thoma 2148 | Melissa Scott 2149 | Iris Hanika 2150 | Kazuki Sakuraba 2151 | Erin Kelly 2152 | Peter May 2153 | Marjorie M. Liu 2154 | Nathan Englander 2155 | Hans Wagner 2156 | Richard Mason 2157 | David Quammen 2158 | Olen Steinhauer 2159 | James Reed 2160 | Robert Walser 2161 | John Jackson Miller 2162 | Andreas Gruber 2163 | Rike Schmid 2164 | Justin Somper 2165 | Esther Hicks 2166 | Marlo Morgan 2167 | Nathan Archer 2168 | Susan Lyons 2169 | Michael P. Kube-McDowell 2170 | Claudia Bausewein 2171 | Ruth Moschner 2172 | Anne Bishop 2173 | Okwui Enwezor 2174 | Marcel Möring 2175 | Bülent Ceylan 2176 | Robert Domes 2177 | Stephen Leather 2178 | Jonas Lüscher 2179 | Heinz Ludwig Arnold 2180 | Jenny Downham 2181 | Caryl Férey 2182 | Mats Strandberg 2183 | Olga Martynova 2184 | Gary Renard 2185 | Christian Gerlach 2186 | Dirk Müller 2187 | Renate Delfs 2188 | Teofila Reich-Ranicki 2189 | Melinda Snodgrass 2190 | Kanae Minato 2191 | Rob Grant 2192 | James Barclay 2193 | Kristina Ohlsson 2194 | Alex Capus 2195 | Diana L. Paxson 2196 | Peter Prange 2197 | Danny Sugerman 2198 | Rafael Seligmann 2199 | Bettina Röhl 2200 | Anne-Sophie Brasme 2201 | Luise Rist 2202 | Ursula Poznanski 2203 | Eberhard Bethge 2204 | Andrew Brown 2205 | Wolf Jobst Siedler 2206 | Roy Baumeister 2207 | Marcellus Emants 2208 | John Christensen 2209 | Gudrun Klein 2210 | Jörg Pilawa 2211 | Matias Faldbakken 2212 | Stefanie Hertel 2213 | Gerhard Müller 2214 | Manfred Schneckenburger 2215 | Ina Weisse 2216 | Margaret Stohl 2217 | Kunstsammlung Nordrhein-Westfalen 2218 | David Halperin 2219 | Michael Coney 2220 | Boy Lornsen 2221 | Jörg Kachelmann 2222 | Michael Schneider 2223 | Hermann Scherer 2224 | Daniel Wolf 2225 | Matthias Bauer 2226 | Sharon Bolton 2227 | Nadeem Aslam 2228 | Kazuaki Takano 2229 | Kathrin Passig 2230 | Ross Antony 2231 | James P. Hogan 2232 | Nora Gomringer 2233 | Gerald Hüther 2234 | Michael Wolff 2235 | Charles F. Haanel 2236 | William Horwood 2237 | Tracy Kidder 2238 | Andreas von Flotow 2239 | Joseph Murphy 2240 | John Tierney 2241 | Chris Steele-Perkins 2242 | Gaby Köster 2243 | Herbert Feuerstein 2244 | Marlene van Niekerk 2245 | Marietta Slomka 2246 | Simon Mawer 2247 | Frédéric Gros 2248 | Garry Kilworth 2249 | Lee Goldberg 2250 | Nuala O'Faolain 2251 | Stan Nicholls 2252 | Marc Goergen 2253 | Ralf Husmann 2254 | Jan Costin Wagner 2255 | Pascal Garnier 2256 | Christian Meyer 2257 | Andrew Hutchinson 2258 | L.A. Banks 2259 | Hans Rieder 2260 | Hew Strachan 2261 | Alina Bronsky 2262 | Gordon Dahlquist 2263 | Liä Dsi 2264 | Jehuda Bacon 2265 | Daniel Pyne 2266 | Heinz Oberhummer 2267 | Lena Andersson 2268 | Ina Rudolph 2269 | Peter Ziegler 2270 | Ulla Lena Lundberg 2271 | Madeleine Thien 2272 | Wil McCarthy 2273 | Mary Ann Shaffer 2274 | Paullina Simons 2275 | Krzysztof Charamsa 2276 | Paul Hawkins 2277 | Lee Robinson 2278 | Karin Wahlberg 2279 | Thomas Wessinghage 2280 | Henni Nachtsheim 2281 | Bradley Trevor Greive 2282 | Elisabeth Rynell 2283 | Tom Wood 2284 | Jürgen Alberts 2285 | Linda Chapman 2286 | Walter Serner 2287 | Dan Wells 2288 | Sergio Bambaren 2289 | Rainer Schmidt 2290 | Jan Weiler 2291 | Christopher Moore 2292 | Sam Parnia 2293 | Alexander Monro 2294 | Jeff Cohen 2295 | Melissa Bank 2296 | David Ebershoff 2297 | Klaus Kordon 2298 | Doris Runge 2299 | Axel Brauns 2300 | Nuno Mendes 2301 | Danny Wallace 2302 | Ursel Scheffler 2303 | André van Lysebeth 2304 | Charlotte Knobloch 2305 | Gerhard Jäger 2306 | Oleg Chlewnjuk 2307 | Paul Hoffman 2308 | Erik Axl Sund 2309 | Zoë Beck 2310 | Notker Wolf 2311 | Byron Katie 2312 | Petra Morsbach 2313 | Annabel Pitcher 2314 | John Bradshaw 2315 | Renate Welsh 2316 | Robert Galbraith 2317 | Walter Schmidt 2318 | Sam Wilson 2319 | Claudia Schmölders 2320 | Burkhard Spinnen 2321 | Cate Tiernan 2322 | Hans Söllner 2323 | Rebecca Moesta 2324 | Marcus Luttrell 2325 | Lisa Unger 2326 | Siba Shakib 2327 | Dimitré Dinev 2328 | Debbie Macomber 2329 | Paolo Cognetti 2330 | Hal Duncan 2331 | Karl Marlantes 2332 | Jerome Leroy 2333 | Rob Sheffield 2334 | Meg Gardiner 2335 | Gunter Gebauer 2336 | Thomas Hermanns 2337 | Gayle Lynds 2338 | Rob Reid 2339 | David Hewson 2340 | Patrick deWitt 2341 | D. Nolan Clark 2342 | Brad Thor 2343 | Elijah Wald 2344 | Marissa Meyer 2345 | William Ritter 2346 | Emily Giffin 2347 | Ernst Engelberg 2348 | Jens Andersen 2349 | Joachim Hoffmann 2350 | Rudolf Taschner 2351 | Franz M. Wuketits 2352 | John Verdon 2353 | Walter Krämer 2354 | Sergio Bizzio 2355 | Greg Behrendt 2356 | Carrie Vaughn 2357 | Arno Surminski 2358 | Franziska Gehm 2359 | Andrea Gentile 2360 | Wilfried Härle 2361 | Josh Bazell 2362 | Melody Beattie 2363 | Héctor Abad 2364 | Matthew Pritchard 2365 | Peter Anders 2366 | Peter Ward 2367 | Kelly McGonigal 2368 | Simon Winchester 2369 | Kevin Wilson 2370 | Werner Mang 2371 | Fausia Kufi 2372 | Dieter Nuhr 2373 | Hubertus Meyer-Burckhardt 2374 | Klaus-Peter Wolf 2375 | Josefine Mutzenbacher 2376 | Michael Williamson 2377 | Donald Ray Pollock 2378 | Hans Neuenfels 2379 | Bobby Henderson 2380 | David Fisher 2381 | Philip Ardagh 2382 | Geoffrey Miller 2383 | Henry Marsh 2384 | Rula Jebreal 2385 | Christian Wiese 2386 | Johannes Eckert 2387 | Richard Morgan 2388 | Francesco Ferrari 2389 | Bill Green 2390 | Barbara Burke 2391 | Peter Neumann 2392 | Benjamin Mee 2393 | Karen Smith 2394 | Clemens J. Setz 2395 | Charles Chadwick 2396 | Guadalupe Nettel 2397 | Mark Hill 2398 | Jeaniene Frost 2399 | James Abbott 2400 | Patrick Bauer 2401 | Nick Robinson 2402 | William Ryan 2403 | Sam Baker 2404 | Paul Joannides 2405 | Peter Young 2406 | Monica Meier-Ivancan 2407 | Jane Rogers 2408 | Kami Garcia 2409 | Jack DuBrul 2410 | Dan Cragg 2411 | Stephen Mitchell 2412 | Yeonmi Park 2413 | Jenny Han 2414 | Nikolaus Blome 2415 | Dave Pelzer 2416 | Caprice Crane 2417 | Bernhard Wolff 2418 | David Bergen 2419 | Johannes Anyuru 2420 | Nina Ruge 2421 | Hans Franck 2422 | Wilfried Huismann 2423 | Peter Merseburger 2424 | Margriet de Moor 2425 | Lisa Scott 2426 | Christoffer Carlsson 2427 | Nathaniel Philbrick 2428 | Michael Welker 2429 | Einar Kárason 2430 | Ruediger Dahlke 2431 | Alex Kava 2432 | Jörg Zink 2433 | Norbert Hummelt 2434 | Herbert Koch 2435 | Andrew Britton 2436 | Lotte Hass 2437 | Christoph Thun-Hohenstein 2438 | Francine Shapiro 2439 | Wulf Dorn 2440 | Angela Duckworth 2441 | Toby Wilkinson 2442 | Wolfram Wette 2443 | Geoff Rodkey 2444 | Manel Loureiro 2445 | Ben Tewaag 2446 | Danielle Trussoni 2447 | Jon Flemming Olsen 2448 | Martin Geck 2449 | Wolfram Pyta 2450 | Anne Lucas 2451 | W. Timothy Gallwey 2452 | Jack Kornfield 2453 | Heinz Janisch 2454 | Lori Foster 2455 | Christoph Peters 2456 | Adel Theodor Khoury 2457 | Cathy Hopkins 2458 | Lena Anderson 2459 | Reinhard Schlüter 2460 | Johannes Willms 2461 | Anne Weber 2462 | Proschat Madani 2463 | Susanne Juhnke 2464 | Henrik Berggren 2465 | Christoph Wagner 2466 | Ralf Bauer 2467 | Gottfried Seebaß 2468 | William Dalrymple 2469 | Chris Kraus 2470 | John Matthews 2471 | Peter Watson 2472 | Kaui Hart Hemmings 2473 | Jandy Nelson 2474 | Fabio Geda 2475 | Mark Lilla 2476 | Elke Schmitter 2477 | Tessa de Loo 2478 | Christian Schröder 2479 | Jan Wagner 2480 | Jutta Allmendinger 2481 | Winfried Nerdinger 2482 | Ken Robinson 2483 | Carrie Jones 2484 | Mats Olsson 2485 | Paula McLain 2486 | Jana Voosen 2487 | Sabine Thiesler 2488 | Claudia Gray 2489 | Joachim Meyerhoff 2490 | Daniel Müller 2491 | Klaus-Dietrich Runow 2492 | Claudie Gallay 2493 | George Downing 2494 | Tomas Bannerhed 2495 | Michael Morley 2496 | Frances Maynard 2497 | Jürgen Schreiber 2498 | Michael Wildt 2499 | Paul Harrington 2500 | Paul Harding 2501 | Alexandra Bracken 2502 | Mark Morris 2503 | Sarah Turner 2504 | Reinhard Stumpf 2505 | Paul Reid 2506 | Bertina Henrichs 2507 | Amanda Brown 2508 | Angela Thirkell 2509 | David Walton 2510 | Ottmar Ette 2511 | Bernd Raffelhüschen 2512 | Georg Winter 2513 | Georg Schmidt 2514 | William Dietz 2515 | Otto Kaiser 2516 | Jean-Baptiste Del Amo 2517 | Joan Bolzan 2518 | Bernhard Hennen 2519 | Manfred Koch 2520 | Scott Spencer 2521 | David Lama 2522 | Ane Riel 2523 | Fiona McIntosh 2524 | Nicci French 2525 | Karen Miller 2526 | Massimo Gramellini 2527 | Michele Jaffe 2528 | Gail Carriger 2529 | Christopher McDougall 2530 | Luke Haines 2531 | Barbara Paul 2532 | Serdar Somuncu 2533 | Nikolaus Schneider 2534 | Ernst Pöppel 2535 | Jan Hofer 2536 | Sobo Swobodnik 2537 | Jon Scieszka 2538 | Ryan David Jahn 2539 | Sascha Lobo 2540 | Amelie Fried 2541 | Gisbert Haefs 2542 | Charlotte Joko Beck 2543 | Stephen Sinatra 2544 | Lucy Dillon 2545 | Josef Epping 2546 | Sharon Salzberg 2547 | Peter Schlickenrieder 2548 | Bernd Wegner 2549 | Felix Anschütz 2550 | Sybille Steinbacher 2551 | Neal Baer 2552 | Sally Perel 2553 | Julie Kagawa 2554 | Maxi Schafroth 2555 | Martin Karrer 2556 | Simone van der Vlugt 2557 | Rochus Hahn 2558 | Helmut Friedel 2559 | Thomas Weiss 2560 | Wolfgang Lippert 2561 | John Connell 2562 | Alex Berenson 2563 | Heinrich Bedford-Strohm 2564 | Harald Martenstein 2565 | E. E. Knight 2566 | Ellen Mattson 2567 | Simon Rich 2568 | Annie Barrows 2569 | Manfred Kyber 2570 | Thilo Bode 2571 | Michael Quast 2572 | Amanda Sthers 2573 | Liz Tuccillo 2574 | Nicholas Martin 2575 | Luke Harding 2576 | Herbert Günther 2577 | Susanne Gaensheimer 2578 | Jesper Juul 2579 | Angelika Overath 2580 | Hans Walter Wolff 2581 | Hans Schmid 2582 | Jean-Luc Bannalec 2583 | Alfred Dorfer 2584 | Jürgen Borchert 2585 | Thomas Olde Heuvelt 2586 | Thomas Krüger 2587 | Jean-Philippe Blondel 2588 | Tucker Max 2589 | Anne Jones 2590 | Rosie Rushton 2591 | Debra Doyle 2592 | Max König 2593 | Agnès Martin-Lugand 2594 | Brian Keene 2595 | Maria Konnikova 2596 | Miriam Gebhardt 2597 | Julia Engelmann 2598 | Shary Reeves 2599 | Scott Sigler 2600 | Maria Marc 2601 | Bianka Minte-König 2602 | Gerhard Seyfried 2603 | Joachim Bauer 2604 | Wolfgang M. Heckl 2605 | Johannes Bähr 2606 | Kenizé Mourad 2607 | Colin McAdam 2608 | Po Bronson 2609 | Jonas T. Bengtsson 2610 | John O'Farrell 2611 | Lisa Papademetriou 2612 | Thomas Platt 2613 | Christian Bärmann 2614 | Hera Lind 2615 | Thomas Schäfer 2616 | Jörg Weber 2617 | Thomas Richter 2618 | Susan Abulhawa 2619 | Bill Griffin 2620 | André Schulz 2621 | Dieter Wellershoff 2622 | John Lescroart 2623 | Hans-Günther Kaufmann 2624 | Steve Berry 2625 | John Wade 2626 | Franz Alt 2627 | Melitta Breznik 2628 | Stephen Batchelor 2629 | William Landay 2630 | Werner Oechslin 2631 | Thilo Reffert 2632 | Freddy Sahin-Scholl 2633 | Gina Ruck-Pauquèt 2634 | John Dickie 2635 | Ding Ding 2636 | India Knight 2637 | Patrick Remy 2638 | Helmut Böttiger 2639 | Thomas Hartmann 2640 | David Weiss 2641 | Anna Johnson 2642 | Stefan Weiss 2643 | Andreas Pflüger 2644 | Jörn Müller 2645 | Jürgen Banscherus 2646 | Miriam Meckel 2647 | Friedhelm Kemp 2648 | Volker Perthes 2649 | Lea Singer 2650 | Ulrich Becher 2651 | Andreas Wirsching 2652 | Jennifer Roberson 2653 | Utta Danella 2654 | Bascha Mika 2655 | Maria Bachmann 2656 | Clemens Berger 2657 | Dean Wesley Smith 2658 | Christian Rätsch 2659 | Clemens Kuby 2660 | Tullio Avoledo 2661 | Vincent F. Hendricks 2662 | Hermann Ungar 2663 | Harriet Lerner 2664 | Ralf Bönt 2665 | Thomas Enger 2666 | Frank Crüsemann 2667 | Gerd Bosbach 2668 | Andy McDermott 2669 | Joachim Köhler 2670 | Tanja Kinkel 2671 | Beth Chatto 2672 | Ute Krause 2673 | Gabor Steingart 2674 | Krystyna Kuhn 2675 | Markus Reiter 2676 | Volker Leppin 2677 | Verena Bentele 2678 | Josef H. Reichholf 2679 | Richard Ungar 2680 | Guillem Balagué 2681 | Julie Klausner 2682 | David Whitehouse 2683 | Lavie Tidhar 2684 | Megan Whalen Turner 2685 | Markus Feldenkirchen 2686 | Bas Kast 2687 | Louise Doughty 2688 | Carson Ellis 2689 | Gene DeWeese 2690 | Jens Gieseke 2691 | Achim Peters 2692 | Peter Geyer 2693 | Lorraine Fouchet 2694 | Marcus Sakey 2695 | Lot Vekemans 2696 | Véronique Olmi 2697 | Carina Bergfeldt 2698 | Michael Cordy 2699 | Matt Simon 2700 | Eugen Helmlé 2701 | Gerdt von Bassewitz 2702 | Brigitte Riebe 2703 | Moshe Zimmermann 2704 | Gerhard Arnold 2705 | Johannes Kuhlo 2706 | Tetje Mierendorf 2707 | Amy Waldman 2708 | Rolf Boysen 2709 | Ben Schott 2710 | Kristen Britain 2711 | Caterina Balivo 2712 | Paola Calvetti 2713 | Bethenny Frankel 2714 | Monica Kristensen 2715 | Thorsten Havener 2716 | Mirjam Müntefering 2717 | Thomas Gsella 2718 | Franck Goddio 2719 | Gero von Boehm 2720 | Andreas Schilling 2721 | Thomas Jeier 2722 | Alfred Lansing 2723 | Levi Henriksen 2724 | Malte Herwig 2725 | Irma Krauß 2726 | Hermann Häring 2727 | Charlotte Kerner 2728 | Blake Crouch 2729 | Jacques Berndorf 2730 | Pablo d'Ors 2731 | Gisa Klönne 2732 | Rennie Airth 2733 | Julia Keller 2734 | Nina Blazon 2735 | Jenny Nelson 2736 | Bernard Glassman 2737 | Mark Carwardine 2738 | Robert Hültner 2739 | Kathryn Bowers 2740 | Nick Bilton 2741 | Hagen Rether 2742 | Stephanie Schneider 2743 | Louann Brizendine 2744 | Michaela Merten 2745 | Marilyn Yalom 2746 | Michaela DePrince 2747 | Melanie Rawn 2748 | Ole Könnecke 2749 | Luise Schottroff 2750 | Svenja Flaßpöhler 2751 | Philip Steele 2752 | Vicki Myron 2753 | Monika Feth 2754 | Alfred Schindler 2755 | Norbert Leithold 2756 | Torsten Dewi 2757 | Kristof Magnusson 2758 | Martin Gessmann 2759 | Sigrid Heuck 2760 | Wolfgang Pehnt 2761 | Gretchen Rubin 2762 | Rebecca Campbell 2763 | Eberhard Illner 2764 | Isabelle Thomas 2765 | Dieter Wardetzky 2766 | Jay Bonansinga 2767 | Jacques Vriens 2768 | Adèle Geras 2769 | Benjamin Percy 2770 | Caroline Myss 2771 | Jennifer Crusie 2772 | Kevin Hearne 2773 | Markus Lutteman 2774 | David Bischoff 2775 | Viet Thanh Nguyen 2776 | Diederichs Verlag 2777 | Kati Hiekkapelto 2778 | Reiner Calmund 2779 | Robin Sloan 2780 | Ella Montgomery 2781 | Peter Wawerzinek 2782 | Dennis L. McKiernan 2783 | Peter Ensikat 2784 | Paul M. Zulehner 2785 | Ryan North 2786 | Lauren Groff 2787 | Angie Westhoff 2788 | Hans-Erich Volkmann 2789 | Christoph Meckel 2790 | Tessa Korber 2791 | Craig Ramsay 2792 | Wakayama Bokusui 2793 | Tilde Michels 2794 | Karen Haber 2795 | Sybille Hein 2796 | Gudrun Mebs 2797 | Wolfram Siebeck 2798 | Andreas Franz 2799 | Álvaro Enrigue 2800 | Jürgen Kampmann 2801 | Kateřina Tučková 2802 | Sigrid Damm 2803 | John O. Stevens 2804 | Marie-Theres Wacker 2805 | Ingo Froböse 2806 | Mike Morell 2807 | Milena Baisch 2808 | Stephan Breidenbach 2809 | Volker Hage 2810 | David Sherman 2811 | Debbie Johnson 2812 | Katarzyna Bonda 2813 | Constanze Kurz 2814 | Penny McLean 2815 | William Poundstone 2816 | Nina Müller 2817 | Bärbel Wartenberg-Potter 2818 | Heribert Schulmeyer 2819 | Giuseppe Catozzella 2820 | David Robinson 2821 | Eberhard Amelung 2822 | Georg Meier 2823 | Anne Berest 2824 | Frauke Nahrgang 2825 | Jürgen Neffe 2826 | Kate Brian 2827 | George Dawes Green 2828 | Eduardo Spohr 2829 | Anke Domscheit-Berg 2830 | Manfred Lütz 2831 | Dominik Geppert 2832 | Tina Müller 2833 | Britta Teckentrup 2834 | Josef Epp 2835 | Ben Marshall 2836 | Loretta Stern 2837 | Philipp Felsch 2838 | Thomas Stangl 2839 | Jack Nasher 2840 | Susanne Fröhlich 2841 | Hans Herbert von Arnim 2842 | David Steinmetz 2843 | Florian Langenscheidt 2844 | Karl-Josef Kuschel 2845 | Eckart Conze 2846 | Walter Schels 2847 | Chris Bradford 2848 | Christoph Schwöbel 2849 | Maggie O'Farrell 2850 | Chelsea Cain 2851 | Thomas Greanias 2852 | Derek Meister 2853 | Michael Althen 2854 | Elisabeth Lange 2855 | Robert Greenberger 2856 | Necla Kelek 2857 | Andreas Martin Hofmeir 2858 | Arnhild Lauveng 2859 | Gregor Eisenhauer 2860 | Helga Hirsch 2861 | Idil Baydar 2862 | Judith Döker 2863 | Richard Stengel 2864 | Sally Beauman 2865 | Christoph Marzi 2866 | Eliot Pattison 2867 | Ulrike Schweikert 2868 | Susan Pinker 2869 | Eberhard Straub 2870 | Peter Skinner 2871 | Wolfram Hänel 2872 | Rainer Karlsch 2873 | Chris Hoke 2874 | Ari Shavit 2875 | Lucinda Riley 2876 | Harald Schroeter-Wittke 2877 | Jackson Pearce 2878 | Gerhard Marcel Martin 2879 | Adam Campbell 2880 | Patrick Robinson 2881 | Olaf Breidbach 2882 | Rudolf Hamburger 2883 | Dieter Vieweger 2884 | Colin Cotterill 2885 | Antje Babendererde 2886 | Helmut Oehring 2887 | Bernhard Grom 2888 | Fritz Friedl 2889 | Claus Leggewie 2890 | Fritz Mühlenweg 2891 | Daniel Acht 2892 | Nina Grunenberg 2893 | Guntram Vesper 2894 | Paul Garrison 2895 | Marcel Theroux 2896 | Monica McInerney 2897 | Paola Mastrocola 2898 | Maria Semple 2899 | Margot Anand 2900 | David Michie 2901 | Lisa Jewell 2902 | Anne Fortier 2903 | Annette Langen 2904 | Bernd Schroeder 2905 | Marie Phillips 2906 | Finn-Ole Heinrich 2907 | Erik von Markovik 2908 | Elliot Perlman 2909 | Patrick Mauriès 2910 | Jeff Norton 2911 | George S. Clason 2912 | Brian Daley 2913 | Walter W. Müller 2914 | Werner Fritsch 2915 | Sergej Snegow 2916 | Christian Springer 2917 | Michael Kleeberg 2918 | Franz Josef Wagner 2919 | Hans-Martin Barth 2920 | Peggy Orenstein 2921 | Peter Swanson 2922 | Rüdiger Gamm 2923 | Bettina Belitz 2924 | Hannes Lindemann 2925 | Helmuth Kiesel 2926 | Mike Nicol 2927 | Wolfgang Schorlau 2928 | Tom Chatfield 2929 | Fitzgerald Kusz 2930 | Ingo Siegner 2931 | Michael Stavarič 2932 | Raphael M. Bonelli 2933 | Evelyn Weiss 2934 | David Gilmore 2935 | Christian Thiel 2936 | Åsa Linderborg 2937 | Russel Norman 2938 | Jonathan Maberry 2939 | Lesley Lokko 2940 | Deborah Feldman 2941 | Winifred Watson 2942 | Sarah Wiener 2943 | Mark Warnecke 2944 | Jiang Rong 2945 | Edgar Feuchtwanger 2946 | Simonetta Agnello Hornby 2947 | Andreas Englisch 2948 | Andreas Nachama 2949 | Hans Platzgumer 2950 | Harald Hartung 2951 | Stephan Ernst 2952 | Kirsten Hammann 2953 | Nicola Kraus 2954 | Christoph Dörr 2955 | Jan Fleischhauer 2956 | Hermann Bote 2957 | Heimo Schwilk 2958 | James H. Charlesworth 2959 | Edith Hall 2960 | John C. Parkin 2961 | Rachel Kramer Bussel 2962 | Petra Gerster 2963 | Heinz-Joachim Fischer 2964 | Hermann Kurzke 2965 | Karl-Heinz Frieser 2966 | Günter Ogger 2967 | Ingrid Uebe 2968 | Nora von Collande 2969 | Eva Maria Mudrich 2970 | David Finck 2971 | Irene Dingel 2972 | Brigitte Blobel 2973 | HG. Butzko 2974 | Claire LaZebnik 2975 | Jean Lorrah 2976 | Rich Cohen 2977 | Duane Swierczynski 2978 | Léa Linster 2979 | Albrecht von Müller 2980 | Michael Koser 2981 | Matthias Mühling 2982 | Paul Cattermole 2983 | Uwe Krechel 2984 | Thomas Macho 2985 | Pamela Druckerman 2986 | Kathy Tyers 2987 | Frederick Kempe 2988 | Enzo Fileno Carabba 2989 | Günter Waldorf 2990 | Will McIntosh 2991 | Julian Clary 2992 | Hakan Günday 2993 | Monika Czernin 2994 | Wiebke Lorenz 2995 | Markus Orths 2996 | Susanne Heine 2997 | Alexander Schuller 2998 | Linda Olsson 2999 | Rudolf Herfurtner 3000 | Patrick Larkin 3001 | Gregor Thum 3002 | Andreas Kossert 3003 | Anna Simons 3004 | Radka Denemarková 3005 | Tobias G. Natter 3006 | Britta Bannenberg 3007 | Rolf Hosfeld 3008 | Thomas Krause 3009 | Ernst Feil 3010 | Rudolf Bohren 3011 | Markus Kerber 3012 | Gerd Truntschka 3013 | Wolf-Dieter Storl 3014 | Corina Bomann 3015 | Matthias Mala 3016 | Klaas Huizing 3017 | Kate Jacobs 3018 | John Kenney 3019 | Oliver Kern 3020 | Christoph Süß 3021 | Ulrich Weinzierl 3022 | Jeffrey Zaslow 3023 | Ken Scholes 3024 | Rodica Doehnert 3025 | Wolfram Weimer 3026 | Rachel Cohn 3027 | Owen Sheers 3028 | Diana G. Gallagher 3029 | Roderick Gordon 3030 | Gavin Extence 3031 | Tim Lebbon 3032 | Eckart von Hirschhausen 3033 | Klaus Brinkbäumer 3034 | Ina May Gaskin 3035 | Jennifer Clement 3036 | Eberhard Haufe 3037 | Fabian Lenk 3038 | Eva Nagy 3039 | Holger Schlageter 3040 | Judith Williams 3041 | Nick Cutter 3042 | Klaus Reichert 3043 | Kate Forsyth 3044 | Titus Müller 3045 | Sharon Begley 3046 | Chris Harrison 3047 | Hans-Ulrich Grimm 3048 | Hubertus Halbfas 3049 | Albert Biesinger 3050 | Martin Brecht 3051 | Gilles Legardinier 3052 | Peter Seewald 3053 | Ruediger Schache 3054 | Peter Dempf 3055 | Elke Naters 3056 | Charles Cumming 3057 | Franz Dobler 3058 | Hajo Düchting 3059 | Christoph Strohm 3060 | Laurent Seksik 3061 | Stefan Rieß 3062 | Mark Victor Hansen 3063 | Paul McKenna 3064 | Mantak Chia 3065 | Maria Blumencron 3066 | Kai Weyand 3067 | Deborah Crombie 3068 | Maxim Leo 3069 | Jason Fried 3070 | Christiane Neudecker 3071 | Claudia Janssen 3072 | Wilhelm Vossenkuhl 3073 | Waldtraut Lewin 3074 | Swami Saradananda 3075 | Grace McCleen 3076 | Kathy Lette 3077 | John Gregory Betancourt 3078 | Horst Lichter 3079 | Justine Larbalestier 3080 | Werner Rahn 3081 | Lisa J. Smith 3082 | Lena Gorelik 3083 | Steven Galloway 3084 | Verena Auffermann 3085 | Wolfgang Brenner 3086 | Philipp Sturm 3087 | Horst Schroth 3088 | Simon Kernick 3089 | Florian Opitz 3090 | Gerhard Sauter 3091 | Sabine Klewe 3092 | Martin Doerry 3093 | Felix Fuchssteiner 3094 | Christfried Böttrich 3095 | Craig Dirgo 3096 | Stefan Lukschy 3097 | Earl Mindell 3098 | Axel Hacke 3099 | Georg Schramm 3100 | Anne Müller 3101 | Stefan Brijs 3102 | Christian Meurer 3103 | Michelle Miller 3104 | Paul Cleave 3105 | Dirk Heißerer 3106 | Ingeborg Bayer 3107 | Gabriele Henkel 3108 | Henning Ahrens 3109 | Elisabeth Lukas 3110 | Various 3111 | Bernd Eichmann 3112 | Erik Haffner 3113 | Tilman Rammstedt 3114 | Gunter Dueck 3115 | Margie Kinsky 3116 | Hans Rath 3117 | Nina Zimmer 3118 | Urs Richle 3119 | T. Harv Eker 3120 | Tracy McMillan 3121 | Adrián Paenza 3122 | Carmen Carter 3123 | Michaela Rose 3124 | Don Richard Riso 3125 | Alexander Deeg 3126 | Sabine Ludwig 3127 | Emma McLaughlin 3128 | Miroslav Volf 3129 | Claire Beyer 3130 | Ulrich Lüke 3131 | Kathleen Winter 3132 | Helmut Wandmaker 3133 | Maya Kaathryn Bohnhoff 3134 | Patrick Roth 3135 | Ingeborg Feustel 3136 | Steve Toltz 3137 | Claudia Keller 3138 | Jürgen Tautz 3139 | Christina Baker Kline 3140 | Debbie Ford 3141 | Peter Pomerantsev 3142 | Birgit Adam 3143 | Colin Harvey 3144 | Eckart Witzigmann 3145 | Steve Biddulph 3146 | Bernhard Aichner 3147 | Liz Murray 3148 | Evelyn Holst 3149 | Gerd Köster 3150 | Michaela Karl 3151 | Peter Buwalda 3152 | Christofer Frey 3153 | Petra Joy 3154 | Alexander von Schönburg 3155 | Sasha Marianna Salzmann 3156 | Cornelia Travnicek 3157 | Roland Düringer 3158 | Micaela Jary 3159 | Alafair Burke 3160 | Santo Cilauro 3161 | Tony Hawks 3162 | Wim Vandemaan 3163 | Chade-Meng Tan 3164 | Mur Lafferty 3165 | Kim Fisher 3166 | Kristian Bang Foss 3167 | Janna Hagedorn 3168 | Alexey Pehov 3169 | W. Michael Gear 3170 | Michael Scott Rohan 3171 | Steinar Bragi 3172 | Jürgen Domian 3173 | Barbara Ann Brennan 3174 | Hatice Akyün 3175 | Peter Schaar 3176 | David Bodanis 3177 | Burhan Sönmez 3178 | Keisuke Matsumoto 3179 | Matthew Dunn 3180 | Frauke Scheunemann 3181 | Johanna Adorján 3182 | Perry Schmidt-Leukel 3183 | Wolfgang Gründinger 3184 | Maria Ernestam 3185 | Fritz Bachmann 3186 | Christian Moser 3187 | Bernd Janowski 3188 | Dietmar Sous 3189 | Fridolin Stier 3190 | Julia Onken 3191 | Severin Groebner 3192 | Tanya Byron 3193 | Reinhart Staats 3194 | Christian Bode 3195 | Michael Wolter 3196 | Holm Friebe 3197 | Philipp Kaiser 3198 | Marion Pauw 3199 | Sandra Krautwaschl 3200 | Melanie Raabe 3201 | Alfred Weidinger 3202 | Milena Michiko Flasar 3203 | Allison Brennan 3204 | Tali Sharot 3205 | Michaela Haas 3206 | Klaus Raschzok 3207 | Manfred Cierpka 3208 | Rudolf Egg 3209 | Kristin Harmel 3210 | Johannes Grave 3211 | Iris Kammerer 3212 | Hans-Christian Huf 3213 | Elizabeth Chadwick 3214 | Dirk Roßmann 3215 | Jóanes Nielsen 3216 | Alex Law 3217 | Sonia Mikich 3218 | Heribert Schwan 3219 | Günther Freitag 3220 | Herbert Friedmann 3221 | Carin Hjulström 3222 | Mary Hooper 3223 | Saladin Ahmed 3224 | Alessia Gazzola 3225 | Grant Blackwood 3226 | Lea Schmidbauer 3227 | Naomi Alderman 3228 | Michael Lüders 3229 | Thomas Leif 3230 | Helmut Merklein 3231 | Klaus Feßmann 3232 | Arthur Fleischmann 3233 | Joachim Meißner 3234 | Bärbel Stolz 3235 | Klaus Bender 3236 | Anna McPartlin 3237 | Georg Diez 3238 | Michael Cassutt 3239 | Stephen Briggs 3240 | Jim Ford 3241 | Anita Moorjani 3242 | Ulrich Ritzel 3243 | Sylvie Schenk 3244 | Christiane Florin 3245 | Georg Heinzen 3246 | Helene Weyl 3247 | Erhard Schütz 3248 | Reiner Anselm 3249 | Joseph von Westphalen 3250 | Kai Magnus Sting 3251 | Klaus Wengst 3252 | Roland Doschka 3253 | Christian Tielmann 3254 | Samy Molcho 3255 | Claudia Ziegler 3256 | Hans-Helmut Decker-Voigt 3257 | Agnes Ravatn 3258 | Oswald Loretz 3259 | Rebecca Cantrell 3260 | Wilhelm Deist 3261 | Herbert Steffny 3262 | Michelle Richmond 3263 | Gertrud Höhler 3264 | Heribert Smolinsky 3265 | Thomas Anz 3266 | Karen White 3267 | Carl-A. Fechner 3268 | Luise Schorn-Schütte 3269 | Jürgen Wertheimer 3270 | Waldemar Hartmann 3271 | Kees van Beijnum 3272 | Ralph Caspers 3273 | Tobias Mann 3274 | Robert I. Sutton 3275 | Marianne Majerus 3276 | Lisa Pulitzer 3277 | Uwe Wilhelm 3278 | Ida Simons 3279 | Klaus Siblewski 3280 | Esther Verhoef 3281 | Reinhard Mohr 3282 | Anna von Bayern 3283 | Christiane Tietz 3284 | Hansgeorg Stengel 3285 | Robert Beachy 3286 | Henry Neff 3287 | Jenny Colgan 3288 | Steve White 3289 | W. Bruce Cameron 3290 | Robert E. Vardeman 3291 | Benjamin Moser 3292 | Karl Vocelka 3293 | Paul Sahner 3294 | Klaus-Peter Jörns 3295 | Cecilie Enger 3296 | Jason F. Wright 3297 | Eric Kotani 3298 | Christoph Gengnagel 3299 | Ruben Zimmermann 3300 | Andrea Fazioli 3301 | Lea Ackermann 3302 | Annett Gröschner 3303 | Christoph Lode 3304 | Dirk Dobbrow 3305 | Hans-Georg Lenzen 3306 | Helmut Utzschneider 3307 | Alexandra Fuller 3308 | Michael Koryta 3309 | Walter H. Hunt 3310 | Sarah Rees Brennan 3311 | Klaus Volk 3312 | Annette Bopp 3313 | Norman W. Walker 3314 | Uta Pohl-Patalong 3315 | Uwe-Michael Gutzschhahn 3316 | Kishwar Desai 3317 | Bram Dehouck 3318 | Ullrich Fichtner 3319 | Lothar Seiwert 3320 | Hajo Steinert 3321 | Hans Sarkowicz 3322 | Julia Boehme 3323 | Ulrich H. J. Körtner 3324 | Simonetta Greggio 3325 | Jan-Philipp Sendker 3326 | Joachim Ehlers 3327 | Laurie Stevens 3328 | Bai Yansong 3329 | Tom Liehr 3330 | Eike Wolgast 3331 | Bärbel Schäfer 3332 | David Schwartz 3333 | Andrea Stoll 3334 | Beate Lakotta 3335 | Paul Kemprecos 3336 | Franziska von Au 3337 | Stephan Porombka 3338 | Federica de Cesco 3339 | Albrecht Schönherr 3340 | Jan Erik Schulte 3341 | Manfred Messerschmidt 3342 | Oliver Schulz 3343 | Carin Bartosch Edström 3344 | Michael Fuchs-Gamböck 3345 | Carolyn Mackler 3346 | Johann Lafer 3347 | Katinka Buddenkotte 3348 | Cordt Schnibben 3349 | Michael Miersch 3350 | Lynne McTaggart 3351 | Jonathan Evison 3352 | Pete Hautman 3353 | Derek B. Miller 3354 | Reimer Gronemeyer 3355 | Kim Otto 3356 | Raimund Theis 3357 | Khalid Al-Maaly 3358 | Susanne Leinemann 3359 | Eckhard Fuhr 3360 | James Van Praagh 3361 | Franz Groll 3362 | Michael Jürgs 3363 | Gary Rogers 3364 | Jenna Miscavige Hill 3365 | Jenny Offill 3366 | Krisztián Ungváry 3367 | Thorwald Dethlefsen 3368 | Carsten Maschmeyer 3369 | Bernhard Edmaier 3370 | Jochen Bölsche 3371 | Frank Goosen 3372 | Kristina Andersson 3373 | Gernot Wolfram 3374 | Monika Tworuschka 3375 | Hans-Werner Wahl 3376 | Antonin Varenne 3377 | Paul S. Kemp 3378 | Dietmar Süß 3379 | Olaf Ihlau 3380 | Norbert Nedopil 3381 | Katja Reider 3382 | Martin Rothgangel 3383 | Catherine Coulter 3384 | Giampaolo Simi 3385 | Carol Tavris 3386 | Vince Ebert 3387 | Maria von Welser 3388 | Barbara Honigmann 3389 | Jan M. Piskorski 3390 | Stefan Bollmann 3391 | Stephanie Laurens 3392 | Nava Ebrahimi 3393 | Andreas Brandhorst 3394 | Lorna Byrne 3395 | Esther Bell 3396 | Paul Lowe 3397 | T. J. English 3398 | Dagmar Trodler 3399 | Jenny Rogneby 3400 | Hallie Ephron 3401 | Anne Easter Smith 3402 | Annika Reich 3403 | Eike Wenzel 3404 | Stefan Lehnberg 3405 | Jörg Zittlau 3406 | Albrecht Grözinger 3407 | Marc Degens 3408 | Anna Jones 3409 | Steve Cole 3410 | Jan Wallentin 3411 | Daniel Harrich 3412 | John Niven 3413 | Dieter E. Zimmer 3414 | Mario Frank 3415 | Kathrin Lange 3416 | Martin Korte 3417 | Ellen Sandberg 3418 | Alfred Bekker 3419 | Christian Nürnberger 3420 | Christoph Buchwald 3421 | Dieter Bednarz 3422 | Volker Henning Drecoll 3423 | Keri Arthur 3424 | Michael Moss 3425 | Blanca Busquets 3426 | Kurt Langbein 3427 | Dietmar Bittrich 3428 | Werner Thiede 3429 | Henning Wiesner 3430 | Horst W. Opaschowski 3431 | Nicole Alexander 3432 | THiLO 3433 | Carmelo Abbate 3434 | Elham Manea 3435 | Gerhard Matzig 3436 | Urban Priol 3437 | Herbert Becker 3438 | Gabriele Tergit 3439 | Thomas Schlag 3440 | Elisabeth Åsbrink 3441 | Birgit Virnich 3442 | Friedrich Hermanni 3443 | Stefanie Schardien 3444 | Tanja Busse 3445 | Adam Soboczynski 3446 | Dirk Maxeiner 3447 | John von Düffel 3448 | Thomas Karlauf 3449 | Randolf Menzel 3450 | Guido Maria Kretschmer 3451 | Saira Shah 3452 | Ann Aguirre 3453 | Tom Gleisner 3454 | John-Henri Holmberg 3455 | Katherine Howe 3456 | David Dalglish 3457 | Terence Blacker 3458 | Chuck Wendig 3459 | Anke Stelling 3460 | Marc Elsberg 3461 | Bettina Hauenschild 3462 | Regula Stämpfli 3463 | Varda Hasselmann 3464 | Soname Yangchen 3465 | Hans Conrad Zander 3466 | Heike Sternberg-el Hotabi 3467 | Horst Evers 3468 | Michael Sontheimer 3469 | Sadie Jones 3470 | Christian Humberg 3471 | Eric T. Hansen 3472 | Jörg Echternkamp 3473 | Jens Sembdner 3474 | Werner Bartens 3475 | Micael Dahlén 3476 | Alison Goodman 3477 | Pamela Ribon 3478 | Karin Greiner 3479 | Blaine Harden 3480 | Rainer Funk 3481 | Susanne Beyer 3482 | Daphne Sheldrick 3483 | Taylor Stevens 3484 | Peter Mathis 3485 | Georg Steins 3486 | Heinz Fülfe 3487 | Jochen-Martin Gutsch 3488 | Rainer Castor 3489 | Aimee Friedman 3490 | Stephanie Perkins 3491 | Oliver Schröm 3492 | Annette Mingels 3493 | Susanne Stöcklin-Meier 3494 | Michael Gantenberg 3495 | Traugott Jähnichen 3496 | Philip Shelby 3497 | Wolf Krötke 3498 | Julia Kaergel 3499 | Svenja Goltermann 3500 | Erich Follath 3501 | Christoph Biemann 3502 | Hajo Banzhaf 3503 | Evan Kuhlman 3504 | Harald Tondern 3505 | Reinhard Kreissl 3506 | René Freund 3507 | Andreas Rebers 3508 | Tanja Walther-Ahrens 3509 | Veronika Peters 3510 | Shane Dix 3511 | Brigitte Beil 3512 | Norbert Horst 3513 | Jens Förster 3514 | Nicole C. Vosseler 3515 | Tanya Stewner 3516 | Kuno Hottenrott 3517 | Peter Hamm 3518 | Robin Wasserman 3519 | Uwe Wittstock 3520 | Gabriele Miller 3521 | Achim Achilles 3522 | Oliver Uschmann 3523 | Henning Wrogemann 3524 | Jochen Rausch 3525 | Robert M. Edsel 3526 | Peter Nichols 3527 | Susan Vreeland 3528 | Deborah Chester 3529 | Viktor Martinowitsch 3530 | Gayle Tzemach Lemmon 3531 | Matthew Sullivan 3532 | Barbara von Bellingen 3533 | Victoria Alexander 3534 | Christian Schwägerl 3535 | Oliver Buslau 3536 | Volker Michels 3537 | Alexandra Ivy 3538 | Thomas Kastura 3539 | Myriam Keil 3540 | Manfred Josuttis 3541 | Ernst-Dieter Lantermann 3542 | Astrid Martini 3543 | Daniel Ryser 3544 | Daniel Wiechmann 3545 | Gerhard Wehr 3546 | Jaromir Konecny 3547 | Felix Martin 3548 | Manfred Nebelin 3549 | Stephanie Fey 3550 | Christoph Hardebusch 3551 | Horst Georg Pöhlmann 3552 | Heinrich Pachl 3553 | Henning Boëtius 3554 | Corinne Demas 3555 | Christian von Aster 3556 | Franz-Josef Nocke 3557 | Inka Loreen Minden 3558 | Gregory Smith 3559 | Donata Elschenbroich 3560 | Martin Puntigam 3561 | Stephen Rebello 3562 | Frank Pape 3563 | Chris Greenhalgh 3564 | Sherry Argov 3565 | Frank Rieger 3566 | James A. Moore 3567 | Rainer Hank 3568 | Gayle Tufts 3569 | Richard Rogler 3570 | Thorsten Nagelschmidt 3571 | Udo Tworuschka 3572 | Paul Kidby 3573 | Leon Windscheid 3574 | Alexander Kissler 3575 | Liane Dirks 3576 | Reinhard Raffalt 3577 | Morten A. Strøksnes 3578 | Steffen Kopetzky 3579 | Michael Ledwidge 3580 | Lars A. Fischinger 3581 | Martin Leutzsch 3582 | Ralf Hertwig 3583 | John Sarno 3584 | Sam Leith 3585 | Stephen Dobyns 3586 | Michael Opoczynski 3587 | Alexandra Potter 3588 | Fritz Reheis 3589 | Wighard Strehlow 3590 | Theresa Révay 3591 | Amila 3592 | Andreas Gößling 3593 | Eric Walz 3594 | Rüdiger Frank 3595 | Constanze Wilken 3596 | Norbert Kron 3597 | Sophie Bonnet 3598 | Holger Reiners 3599 | Rachel Williams 3600 | Martin Pfeiffer 3601 | Günter Ederer 3602 | Sven-David Müller 3603 | Dr. Hiromi Shinya 3604 | Emelie Schepp 3605 | Axel Petermann 3606 | Dana Bönisch 3607 | Wilfried Schmickler 3608 | Emma Campion 3609 | Anne Simon 3610 | Christian Esser 3611 | Jeremy Heimans 3612 | Valentin Thurn 3613 | Martin Greschat 3614 | Yuri Dojc 3615 | Hanne Marie Svendsen 3616 | Elke Zimmermann 3617 | Mark Spörrle 3618 | Andreas Malessa 3619 | Annette Neubauer 3620 | Frank Rehfeld 3621 | Max Uthoff 3622 | Eleanor Taylor 3623 | Heather O'Neill 3624 | Veronica Henry 3625 | Jan Dochhorn 3626 | Pam Grout 3627 | Jennifer Holm 3628 | Achim Bröger 3629 | Yury Winterberg 3630 | Helga Kuhlmann 3631 | Sabine Bobert 3632 | Robin Pilcher 3633 | Ernest van der Kwast 3634 | Rhidian Brook 3635 | Ernst Kammerer 3636 | Eckart Brandt 3637 | David Blackbourn 3638 | Ernst Piper 3639 | Franz Kotteder 3640 | Nikolaus Nützel 3641 | Philipp Köster 3642 | Michael Spitzbart 3643 | Rainer Kessler 3644 | Wiglaf Droste 3645 | Jorge Galán 3646 | Mathias Schreiber 3647 | Klaus Bittermann 3648 | Manfred Güllner 3649 | Larry Winget 3650 | Gillian McKeith 3651 | Trevor Shane 3652 | Detlev F. Neufert 3653 | Christian Montillon 3654 | Günther Bentele 3655 | Ulrich Strunz 3656 | Mariam Lau 3657 | Michael Krüger 3658 | Rolf Lamprecht 3659 | Minna Lindgren 3660 | Marie Gamillscheg 3661 | Wolfgang Rüb 3662 | Götz Hamann 3663 | Hugo Stamm 3664 | Jochen Malmsheimer 3665 | Hannah Howell 3666 | Heidemarie Brosche 3667 | Helmut Höge 3668 | Max Steller 3669 | Rabea Edel 3670 | Roman Graf 3671 | Steven Uhly 3672 | Dan Chaon 3673 | Sabri Louatah 3674 | Brett McBean 3675 | Åsa Träff 3676 | Jess Jochimsen 3677 | Petra Durst-Benning 3678 | Werner Gruber 3679 | Isolde Karle 3680 | Hanus Burger 3681 | Rae Carson 3682 | Hubert Haensel 3683 | Tim Mälzer 3684 | Jason Bradbury 3685 | Linda Holeman 3686 | Claudia Puhlfürst 3687 | Drutmar Cremer 3688 | Tilmann Moser 3689 | Lauren DeStefano 3690 | Peter Wensierski 3691 | Michael Kenna 3692 | Diana Evans 3693 | Chris Womersley 3694 | Herbert Renz-Polster 3695 | Uwe Rada 3696 | Christiane Kohl 3697 | Wolfram Eilenberger 3698 | Dirk Bernemann 3699 | Petra Pinzler 3700 | Vincent Klink 3701 | Reinhard K. Sprenger 3702 | Douglas Kennedy 3703 | Bo Lidegaard 3704 | Christian Eisert 3705 | Jürgen Leinemann 3706 | Lutz Budrass 3707 | Barbara Streidl 3708 | Lutz Schumacher 3709 | Jürgen Ebach 3710 | Tsültrim Allione 3711 | Udo Weigelt 3712 | Miles Cameron 3713 | Benita Cantieni 3714 | Christine Ax 3715 | Michael Eichhammer 3716 | Gerald Moers 3717 | Hermann Barth 3718 | Jan Hermelink 3719 | Ellen Alpsten 3720 | Stella Rollig 3721 | Martina Dierks 3722 | Günter Vogler 3723 | Peter Dabrock 3724 | Stephan Detjen 3725 | Tobias O. Meißner 3726 | David Chang 3727 | Andrea Wulf 3728 | Robert Karjel 3729 | Mario Reading 3730 | Andy Mangels 3731 | Simon Hawke 3732 | Michael A. Martin 3733 | Bea Uusma 3734 | Andreas Trojan 3735 | Charlotte Thomas 3736 | Holger Gertz 3737 | Hans Mendl 3738 | Katja Kessler 3739 | Susanne Breit-Keßler 3740 | Rainer Hagencord 3741 | Tilman Jens 3742 | Diane Rehm 3743 | Simon Pasternak 3744 | Pamela Freeman 3745 | Richard Chizmar 3746 | Barbara Natterson-Horowitz 3747 | Margarita Kinstner 3748 | Caragh O'Brien 3749 | Richard Reschika 3750 | Kaspar von Greyerz 3751 | Johannes Kottjé 3752 | Traugott Roser 3753 | Jürgen Elvert 3754 | Verena Roßbacher 3755 | Hans Werner Wüst 3756 | Maximilian Steinbeis 3757 | Miriam Margraf 3758 | Barbara Wilde 3759 | Hans Konrad Biesalski 3760 | Lesley Downer 3761 | Hasnain Kazim 3762 | Bob Anderson 3763 | Maximilian Dorner 3764 | Jirina Prekop 3765 | Jörg Knoblauch 3766 | Michael Farin 3767 | Rainer Moritz 3768 | Wolfgang Herles 3769 | Wunibald Müller 3770 | Jack Hawley 3771 | Astrid Randerath 3772 | Martin Wehrle 3773 | Gil Adamson 3774 | Megan Hess 3775 | Susan Peterson 3776 | Anna Maria Jokl 3777 | Christine Eichel 3778 | Simon Tofield 3779 | Beatrix Mannel 3780 | Irina Tweedie 3781 | Andreas Müller-Cyran 3782 | Marion Kiechle 3783 | Shirlee Busbee 3784 | Carrie Hope Fletcher 3785 | Lincoln Peirce 3786 | Stephen Prothero 3787 | Mark Haskell Smith 3788 | James I. Kirkland 3789 | Lamya Kaddor 3790 | Bernhard Hagemann 3791 | Ivo Pala 3792 | Rainer Erlinger 3793 | Sibylle Krause-Burger 3794 | Sarah Mlynowski 3795 | Sam Sykes 3796 | Hans-Jürgen Jakobs 3797 | Monica Byrne 3798 | Karl Josef Wallner 3799 | Marc Bielefeld 3800 | Tatjana Kruse 3801 | Linda Newbery 3802 | Daniel J. Siegel 3803 | Howard Norman 3804 | Ann-Marlene Henning 3805 | Walter Wüllenweber 3806 | Eric Pfeil 3807 | Florian Schroeder 3808 | Heiner Boehncke 3809 | Cinda Williams Chima 3810 | Sophie Page 3811 | Martina Fischer 3812 | Lori Wilde 3813 | Leena Parkkinen 3814 | Angela Elis 3815 | Antje Szillat 3816 | Bettina Obrecht 3817 | Jonas Winner 3818 | Shaun Ellis 3819 | Carmen Geiss 3820 | Sven Lager 3821 | Ursula Isbel 3822 | Hilke Rosenboom 3823 | Charles Hodges 3824 | Petra Bahr 3825 | Tillmann Prüfer 3826 | Michael Klonovsky 3827 | Dirk Schulz 3828 | Rolf Honold 3829 | Michael Borlik 3830 | Daniel O'Malley 3831 | Maxine Paetro 3832 | Christoph Sieber 3833 | Martin Hyun 3834 | Jeanine Krock 3835 | Thilo Wydra 3836 | John Straley 3837 | Kass Morgan 3838 | Dagmar H. Mueller 3839 | David Ritz 3840 | Odilo Lechner 3841 | Bill Vidal 3842 | Christina Björk 3843 | Mary Kay Andrews 3844 | Andrea Schomburg 3845 | Nicole Schuhmacher 3846 | Manfred Theisen 3847 | Annette Meyhöfer 3848 | Maike Maja Nowak 3849 | Christiane zu Salm 3850 | Austin Kleon 3851 | Claudius Seidl 3852 | Benjamin Bidder 3853 | John Green 3854 | Susanne Schädlich 3855 | Friedrich Schmidt-Bleek 3856 | Werner Tiki Küstenmacher 3857 | Kerim Pamuk 3858 | Max Scharnigg 3859 | Ralf Sotscheck 3860 | Simon Urban 3861 | Adele Griffin 3862 | Max Bentow 3863 | Mainhardt Graf von Nayhauß-Cormons 3864 | Cerrie Burnell 3865 | Lauren Willig 3866 | Steven James 3867 | Chantal Schreiber 3868 | Christoph Quarch 3869 | Oliver Hilmes 3870 | Klaus Vellguth 3871 | Janet Clark 3872 | Joachim Brandl 3873 | Rebecca Casati 3874 | Andreas Maier 3875 | Renate Feyl 3876 | Andrea Schacht 3877 | Adrian Tchaikovsky 3878 | Gerard Donovan 3879 | Aljoscha Long 3880 | Rainer Holbe 3881 | Elizabeth Craft 3882 | Alisa Sheckley 3883 | Dafydd ab Hugh 3884 | Tessa Dare 3885 | Tuna Kiremitci 3886 | Roland Rosenstock 3887 | Manfred Mohr 3888 | Renate Köcher 3889 | Ellen Ueberschär 3890 | A.J. Hartley 3891 | Willi Weitzel 3892 | Barry Lyga 3893 | Tobias Hill 3894 | Viviane Sassen 3895 | Anders Hansen 3896 | Christiane Stenger 3897 | Christine Grän 3898 | Werner Stauffacher 3899 | Patrick Findeis 3900 | David Deida 3901 | Barbara Strohschein 3902 | Pierre Stutz 3903 | Tracey Cox 3904 | Marcel Rosenbach 3905 | Roger Hobbs 3906 | David Gromer 3907 | Wilfried Koch 3908 | Falko Löffler 3909 | Matthias Drobinski 3910 | Norbert Stöbe 3911 | Anselm Bilgri 3912 | Nicola Bardola 3913 | Tilman Birr 3914 | Elin Hilderbrand 3915 | Jessie Burton 3916 | Adelheid Ohlig 3917 | Ana Veloso 3918 | Barry Jonsberg 3919 | Herbert Kolb 3920 | Thomas Böhme 3921 | Christian Kortmann 3922 | Reiner Knieling 3923 | Otto Dov Kulka 3924 | Roman Grafe 3925 | Daniel Kempin 3926 | Gerhard Langer 3927 | David Zinczenko 3928 | Haug von Kuenheim 3929 | Laird Hunt 3930 | Hiltrud Häntzschel 3931 | Ingo Zamperoni 3932 | Fritz Köster 3933 | Beate Rothmaier 3934 | Eva Loschky 3935 | Ulrich Tilgner 3936 | Martin Maria Schwarz 3937 | Regina Rusch 3938 | Menas Kafatos 3939 | Christine Jakob 3940 | Peter Zudeick 3941 | Tillmann Bendikowski 3942 | Matthias Wittekindt 3943 | Ulrich Schnabel 3944 | Vanessa Diffenbaugh 3945 | Frode Granhus 3946 | Jami Attenberg 3947 | Katherine Webb 3948 | Marie Jansen 3949 | Hagen Stoll 3950 | Annette Roeder 3951 | Assaf Gavron 3952 | Bernd Gäbler 3953 | Lothar Trolle 3954 | Peter Kliemann 3955 | Adrian Searle 3956 | Nicole Jordan 3957 | Daniel Oliver Bachmann 3958 | Leo G. Linder 3959 | Felix Krämer 3960 | Rabeya Müller 3961 | Christian Seidel 3962 | Bartholomäus Grill 3963 | Eva Goris 3964 | Gangaji 3965 | Gerd Schnack 3966 | Gesa Schwartz 3967 | Michael Albus 3968 | Ævar Örn Jósepsson 3969 | Wolfgang Kaes 3970 | Beverly Jensen 3971 | Colette Baron-Reid 3972 | Alex Thomas 3973 | Damien Echols 3974 | Nicole Peeler 3975 | Christa-Maria Zimmermann 3976 | Sylvia Englert 3977 | Matthias Edlinger 3978 | Volker Surmann 3979 | John Connolly 3980 | Caitlin Kittredge 3981 | Thomas Bauer 3982 | Eva Weissweiler 3983 | Jasmin Ramadan 3984 | Hilma Wolitzer 3985 | Kyle Mills 3986 | Robert Goolrick 3987 | Lutz van Dijk 3988 | Beate Rygiert 3989 | David Orrell 3990 | Matthias Horx 3991 | Alfons Kifmann 3992 | Alexander Gordon Smith 3993 | Richard Birkefeld 3994 | Edmund Jacoby 3995 | Lou Paget 3996 | Anthony Bozza 3997 | Sandra Lüpkes 3998 | Patricia Riekel 3999 | Mia Morgowski 4000 | Reinhold Batberger 4001 | Utz Claassen 4002 | Anne Mallory 4003 | Claire Shipman 4004 | Andreas R. Batlogg 4005 | Corinne Frottier 4006 | Robert Hofrichter 4007 | Richard Bachman 4008 | Karin Nohr 4009 | Marko Kloos 4010 | Karl Hecker 4011 | Jenny Wingfield 4012 | Edgar Noske 4013 | Hermann Multhaupt 4014 | Peter Spiegel 4015 | Simone Panteleit 4016 | Torsten Krol 4017 | Allison Pearson 4018 | Hyeonseo Lee 4019 | Andreas Rinke 4020 | Elsbeth Stern 4021 | Stephan Müller 4022 | Konrad Lischka 4023 | Niki Glattauer 4024 | Justin Halpern 4025 | Norbert F. Pötzl 4026 | Anna Basener 4027 | Gerhard Hellwig 4028 | Marianne Berglund 4029 | Virginia Doyle 4030 | Glenda Larke 4031 | Lee Correy 4032 | Maria Turtschaninoff 4033 | Christopher Coake 4034 | Cathy Cassidy 4035 | Justin Torres 4036 | Chris Pavone 4037 | Rainer Gross 4038 | Rolf Cantzen 4039 | Catherine Mayer 4040 | Sven Böttcher 4041 | Jesse Andrews 4042 | Alexa Hennig von Lange 4043 | Achim Engelberg 4044 | Christian Pape 4045 | Fabian Vogt 4046 | Kurt Schrimm 4047 | Steve Mosby 4048 | Varg Gyllander 4049 | Paul Melko 4050 | Aileen P. Roberts 4051 | Katherine Center 4052 | Wolff-Christoph Fuss 4053 | Eric Franklin 4054 | Patricia Schröder 4055 | Bruce D. Perry 4056 | Sara Crowe 4057 | Sonya Winterberg 4058 | Annelie Keil 4059 | Achim Wohlgethan 4060 | Jo Lendle 4061 | Michael McCollum 4062 | Kurt Tepperwein 4063 | Gerd R. Ueberschär 4064 | Stephan Sigg 4065 | Brad Ferguson 4066 | Arnd Stein 4067 | David Moody 4068 | Margaret Wander Bonanno 4069 | Annette Herzog 4070 | Brigitte Roßbeck 4071 | Jorge Cham 4072 | Royce Buckingham 4073 | Christina Jones 4074 | Helen Hodgman 4075 | Thorsten Schatz 4076 | Michael Cobley 4077 | Tim Noakes 4078 | Hans-Uwe L. Köhler 4079 | Sabine Asgodom 4080 | Susanne Gerdom 4081 | Matthew Syed 4082 | Sara King 4083 | Andrea Böhm 4084 | Gina Kästele 4085 | Anke Greifeneder 4086 | Brigitte Glaser 4087 | Karl Bruckmaier 4088 | Hans Bankl 4089 | Goedele Liekens 4090 | Rachel Harris 4091 | Stuart David 4092 | Tanjev Schultz 4093 | Alyson Richman 4094 | Stephan Talty 4095 | Jon Stock 4096 | Nicola Marni 4097 | Moses Wolff 4098 | Nicola Förg 4099 | Mark Watson 4100 | Jaume Sanllorente 4101 | Armin Krenz 4102 | Beate Teresa Hanika 4103 | Elizabeth Graver 4104 | Kent M. Keith 4105 | Volkmar Röhrig 4106 | Raphael Montes 4107 | Susanne Kilian 4108 | Siegfried Kreuzer 4109 | Rainer Bielfeldt 4110 | Rainer Fromm 4111 | Iain Reid 4112 | Ewald Plachutta 4113 | Kurt G. Blüchel 4114 | Michael Marcus Thurner 4115 | Joanne Liu 4116 | Jutta Oltmanns 4117 | Heinrich Maria Denneborg 4118 | Margit Schönberger 4119 | Stefanie Gerstenberger 4120 | Tobias Pehle 4121 | Bronnie Ware 4122 | Georg Möller 4123 | Sylvia Schopf 4124 | Rudolf von Waldenfels 4125 | Stefanie Stahl 4126 | Sigrid Engelbrecht 4127 | Irmtraud Tarr 4128 | Catherine MacPhail 4129 | Karl Schroeder 4130 | Dalia Grinkevičiūtė 4131 | Antoine Laurain 4132 | Ina Praetorius 4133 | L. A. Graf 4134 | Kathrin Weßling 4135 | Wendy Mass 4136 | André Wiesler 4137 | Bernd A. Mertz 4138 | Uwe Birnstein 4139 | Guido Mingels 4140 | Sabrina Fox 4141 | Thomas Pletzinger 4142 | Paul Pickering 4143 | Dylan Evans 4144 | Sven Kuntze 4145 | Barbara Stieff 4146 | D. E. Sattler 4147 | Siegfried Bräuer 4148 | Rolf Froböse 4149 | Waltraut Engelberg 4150 | Dörte Hansen 4151 | Annette Bruhns 4152 | Jonah Sievers 4153 | Simone Buchholz 4154 | Michael Baumgartner 4155 | Samuel Bjørk 4156 | Nina Schindler 4157 | Brigitte Melzer 4158 | Matto Barfuss 4159 | Richard Lange 4160 | Elizabeth Edmondson 4161 | James Carlos Blake 4162 | Tom Lloyd 4163 | Barbara Yelin 4164 | Morgan Matson 4165 | Tenzin Wangyal Rinpoche 4166 | Sarah Prineas 4167 | Michael Allaby 4168 | Isabel Vincent 4169 | Gisela von Radowitz 4170 | Martin Zöller 4171 | Claudia Kern 4172 | Tom Rath 4173 | Thomas Hohensee 4174 | Stephanie Merritt 4175 | Matthew Santoro 4176 | Eckard Mordhorst 4177 | Helga Kohler-Spiegel 4178 | Tony O'Neill 4179 | Alma Katsu 4180 | Hans Wolfgang Schumann 4181 | Timm Klotzek 4182 | Petra Bock 4183 | Nils Heinrich 4184 | Susan Juby 4185 | Marianne de Pierres 4186 | Geoff Colvin 4187 | Helen FitzGerald 4188 | Alex Beer 4189 | Maike Bruhns 4190 | Jan Becker 4191 | Rachel Hartman 4192 | Ronald Malfi 4193 | Andreas Niedrig 4194 | Carmen Korn 4195 | Ilona Bürgel 4196 | Irene Dalichow 4197 | Robin Black 4198 | Peter Gorschlüter 4199 | David Plüss 4200 | Catherine O'Flynn 4201 | Giles Kristian 4202 | Harald Wessbecher 4203 | Gerd Schilddorfer 4204 | Alan E. Baklayan 4205 | Walter Adler 4206 | Kathrin Hartmann 4207 | Matthias Eckoldt 4208 | Michael Winterhoff 4209 | Werner Kieser 4210 | Dirk Laabs 4211 | Philip Teir 4212 | Arne Hoffmann 4213 | Margarete Jehn 4214 | Matt Whyman 4215 | Keith Thomson 4216 | Peter Kreuz 4217 | Thomas Poppe 4218 | Ulrich Bassenge 4219 | Amity Gaige 4220 | David Daokui Li 4221 | Tanja Heitmann 4222 | Melda Akbas 4223 | Volker Angres 4224 | Rolf Bauerdick 4225 | Robert Geiss 4226 | Ortrud Westheider 4227 | Angeline Bauer 4228 | Christoph Keese 4229 | Friedrich Hauschildt 4230 | Martin Kuske 4231 | Wilhelm Imkamp 4232 | Tom Booth 4233 | Matthias Wegner 4234 | Bernd Frenz 4235 | Jürgen Grässlin 4236 | Mary Kreutzer 4237 | Geraint Jones 4238 | Steve Stern 4239 | Fiona Harrison 4240 | Christian Stöcker 4241 | Dietmar Bonnen 4242 | Peter Unfried 4243 | Anna Pfeffer 4244 | Pascal Voggenhuber 4245 | Jürgen Werth 4246 | Rebecca Hohlbein 4247 | Susanne Seethaler 4248 | Colin Taylor 4249 | Tom Folsom 4250 | Stefan Brauburger 4251 | Kunsthalle München 4252 | Victoria Scott 4253 | Danuta Harrich-Zandberg 4254 | Steven Harper 4255 | Silvia Tennenbaum 4256 | Michael Thiel 4257 | Theresa Bäuerlein 4258 | Ben Sanders 4259 | Susan Jeffers 4260 | Frédéric Saldmann 4261 | Eva Aschenbrenner 4262 | Rüdiger Schaper 4263 | Bob Flowerdew 4264 | Anna Sheehan 4265 | Anja Förster 4266 | Hans-Dieter Hermann 4267 | Malene Rydahl 4268 | Peter Morwood 4269 | Bernard Jakoby 4270 | Jürgen Förster 4271 | Amy Sackville 4272 | Katharina Saalfrank 4273 | Michaela Axt-Gadermann 4274 | Jeanne Rubner 4275 | Johannes Saltzwedel 4276 | Gerald G. Jampolsky 4277 | Hermann Schoenauer 4278 | Nils Havemann 4279 | Ulrike Sterblich 4280 | Victor Milan 4281 | Magdalena M. Moeller 4282 | Erhard Domay 4283 | Marlene Crüsemann 4284 | Regina Masaracchia 4285 | Katharina Greve 4286 | Stefan Gärtner 4287 | Daniel G. Amen 4288 | Nickolas Butler 4289 | Andreas Wunn 4290 | Annette Sabersky 4291 | Dominik Wichmann 4292 | Klaus De Rottwinkel 4293 | Claudia Hellmann 4294 | Lisa Yee 4295 | Ruth Nestvold 4296 | Kara Thomas 4297 | Oriah Mountain Dreamer 4298 | Johann Legner 4299 | Michael Nehls 4300 | Tom Franz 4301 | Harald-Alexander Korp 4302 | Evelin König 4303 | Igor Eidman 4304 | Udo Baer 4305 | Celine Kiernan 4306 | Britta Sabbag 4307 | Regina Scheer 4308 | Alison Mercer 4309 | Manuela Reichart 4310 | Anja Frisch 4311 | Sabine Breitwieser 4312 | Matthias Reinschmidt 4313 | Katarina Fischer 4314 | Molly Weatherfield 4315 | Herbert Fensterheim 4316 | Beate Maxian 4317 | Matthias Stiehler 4318 | Bettina Haskamp 4319 | Judy Hall 4320 | Mimi Spencer 4321 | Moritz Müller-Wirth 4322 | Margit Auer 4323 | Gunnar Lott 4324 | Magnus Brechtken 4325 | Steven Levitsky 4326 | Elizabeth Kelly 4327 | Eve Babitz 4328 | Kathy Stinson 4329 | David Whitley 4330 | Denise Deegan 4331 | Franziska Sperr 4332 | Claus Fussek 4333 | Michael Rogowski 4334 | Rachel Hawthorne 4335 | David Eberhard 4336 | Kerstin Simoné 4337 | Karla Weigand 4338 | Frank Sieren 4339 | Moritz Boerner 4340 | John Witte 4341 | Robert Betz 4342 | Gerlis Zillgens 4343 | Monika Hofmann 4344 | Michael Koglin 4345 | Marion Küstenmacher 4346 | Anilda Ibrahimi 4347 | Martina Rosenberg 4348 | Lena Falkenhagen 4349 | Annette Kaiser 4350 | Udo Vetter 4351 | Lena Klassen 4352 | Martin Betschart 4353 | Tina Seelig 4354 | Inge Kurtz 4355 | Hans Christian Meiser 4356 | Bill McCay 4357 | Robert Corvus 4358 | Birand Bingül 4359 | Peter Pawlowsky 4360 | Norbert Körzdörfer 4361 | Bel Mooney 4362 | Boris Koch 4363 | Christa von Bernuth 4364 | Simone Edelberg 4365 | Werner Eberwein 4366 | Franklin Foer 4367 | Katharina Schöde 4368 | Elena Santiago 4369 | Sebastian Pufpaff 4370 | Monika Felten 4371 | Sissi Flegel 4372 | Andrew Smart 4373 | Marina Fiorato 4374 | Annette Meisl 4375 | Brendan Simms 4376 | Elizabeth Prettejohn 4377 | Sabine Wefers 4378 | Joachim Hoell 4379 | Christian Haller 4380 | Gunhild Kübler 4381 | Angelika Schwarzhuber 4382 | Björn Moschinski 4383 | Dieter Haselbach 4384 | Gerald Drews 4385 | Michaela Vieser 4386 | Stefan Piendl 4387 | Daniel James Brown 4388 | Daniel Depp 4389 | Sofie Cramer 4390 | Jonathan Eig 4391 | Phillip Mann 4392 | Thomas Wiedling 4393 | Geoffrey Hoppe 4394 | Joe Craig 4395 | Frank Schmolke 4396 | Claire Belton 4397 | Alwyn Hamilton 4398 | Sabine Seyffert 4399 | Erhard F. Freitag 4400 | Tamina Kallert 4401 | Ulli Schauen 4402 | Gayla Trail 4403 | Katty Kay 4404 | Markus Schollmeyer 4405 | Martin Burckhardt 4406 | Marie Adams 4407 | Martin Rütter 4408 | Charles Soule 4409 | Daniel Hauser 4410 | Hank Wesselman 4411 | Judith Lennox 4412 | Françoise Frenkel 4413 | Ulrich Maurer 4414 | Ingo Oschmann 4415 | Birgit Lechtermann 4416 | Hannah Lothrop 4417 | Janet Chapman 4418 | Dick Lehr 4419 | Gabriele Schor 4420 | Oliver Sturm 4421 | Hanna Lindberg 4422 | Peter Trippi 4423 | Hilary Boyd 4424 | Max Bronski 4425 | Aiman Mazyek 4426 | Monika Herz 4427 | Peter Ufer 4428 | Lauren Barnholdt 4429 | Kolja Kleeberg 4430 | Sophie Andresky 4431 | Anne Wilson Schaef 4432 | Verena Schmitt-Roschmann 4433 | Katharina Höftmann 4434 | Mario Ludwig 4435 | Alexandra Kui 4436 | Karl-Ludwig Kley 4437 | Werner Koczwara 4438 | Kerstin Cantz 4439 | Jancee Dunn 4440 | Jennifer Benkau 4441 | Vera Sandberg 4442 | Christian Henze 4443 | Elisabeth Schlumpf 4444 | Kurdo Baksi 4445 | Ben Tripp 4446 | Peter de Jonge 4447 | Michel Rostain 4448 | Peter A. Levine 4449 | Horst Boog 4450 | Rainer Oberthür 4451 | Hanne Köhler 4452 | Sascha Reh 4453 | Susanne Preusker 4454 | Theodor Dierk Petzold 4455 | Claire Holden Rothman 4456 | Col Buchanan 4457 | Hermann Detering 4458 | Marion Grillparzer 4459 | Maximilian Moser 4460 | Andreas Winkelmann 4461 | Alexander Hartmann 4462 | Tim Boltz 4463 | Sven Kemmler 4464 | Ulli Potofski 4465 | Jana Oliver 4466 | Kevin Maher 4467 | Sarah Winman 4468 | Rainer Franke 4469 | Sandra Henke 4470 | Khenpo Sodargye 4471 | Lars Jaeger 4472 | Hartmut Göbel 4473 | Daniel Goffart 4474 | Jutta Häser 4475 | Wilhelm Schlötterer 4476 | Bastian Brinkmann 4477 | Willibert Pauels 4478 | Abby McDonald 4479 | Carola Ferstl 4480 | Inge Steiner 4481 | Sabrina Qunaj 4482 | Jens Petersen 4483 | Frank Quilitzsch 4484 | Kristine Bilkau 4485 | Helmut Vorndran 4486 | Lars Ruppel 4487 | Doris Zölls 4488 | Mitri Raheb 4489 | Luca D'Andrea 4490 | Dergin Tokmak 4491 | Eva Wlodarek 4492 | Sasha Walleczek 4493 | Lois Tilton 4494 | Mike Schulz 4495 | Rachael Treasure 4496 | Joe Schreiber 4497 | Jack Kilborn 4498 | Torben Kuhlmann 4499 | Svenja Hofert 4500 | Niel Bushnell 4501 | John Vaillant 4502 | Philipp Reinartz 4503 | Michael Titze 4504 | Rainer Würth 4505 | Anne Frasier 4506 | Laura Dave 4507 | Jens Jürgen Korff 4508 | Carol Lynch Williams 4509 | Sarah Crossan 4510 | Julie Cohen 4511 | Michael Lissek 4512 | Edo Popović 4513 | Horst von Buttlar 4514 | Robert Griesbeck 4515 | Maren Winter 4516 | Monika Matschnig 4517 | Caro Ramsay 4518 | Susanne Berkenheger 4519 | Marie Rutkoski 4520 | Patricia Gaffney 4521 | Jean Baer 4522 | Annegret Hoberg 4523 | Jane Casey 4524 | Jeff Povey 4525 | Anna Banks 4526 | Helmut Kolitzus 4527 | Marc Schürmann 4528 | Victoria Schlederer 4529 | Steve Stirling 4530 | Ömer Özsoy 4531 | Birgit Klaus 4532 | Gertraud Gruber 4533 | Alan Parks 4534 | Momo Evers 4535 | Martin Becker 4536 | David Wroblewski 4537 | Meike Winnemuth 4538 | David Stubbs 4539 | Marc Beise 4540 | Elli H. Radinger 4541 | Karl Pilny 4542 | Robert Low 4543 | Yongey Mingyur Rinpoche 4544 | Christian Frommert 4545 | Felicitas Then 4546 | Silvia Meixner 4547 | Evan Currie 4548 | Max A. Höfer 4549 | Gustaaf Peek 4550 | Maja Storch 4551 | Peter Schleicher 4552 | Jack Heath 4553 | Claudia Vilshöfer 4554 | Robert Haas 4555 | Josef Wilfling 4556 | Ari Marmell 4557 | Greg Critser 4558 | Anna George 4559 | Rachel Bach 4560 | Ivan Gantschev 4561 | Julia Kröhn 4562 | Majella Lenzen 4563 | Josef Braml 4564 | Christiane Funken 4565 | Hans Gerzlich 4566 | Benedict Jacka 4567 | Elizabeth Lesser 4568 | Jennifer Niven 4569 | Jamie Freveletti 4570 | Galina Schatalova 4571 | Thomas Martin 4572 | Til Mette 4573 | Ursula März 4574 | Anne Wolf 4575 | Jean Kwok 4576 | Martin-Niels Däfler 4577 | Sebastian Wehlings 4578 | Till Hoheneder 4579 | Nell Leyshon 4580 | Sana Krasikov 4581 | Karen Lord 4582 | Bärbel Wardetzki 4583 | Torben Guldberg 4584 | Ted Kosmatka 4585 | Philip Kiefer 4586 | Michael Bernard Beckwith 4587 | Susie Hodge 4588 | Tom Fritze 4589 | Lukas Erler 4590 | Gerhard Schreiber 4591 | Devon Monk 4592 | Claudia Kleinert 4593 | Rebecca Maly 4594 | Thorsten Schröder 4595 | Daehaeng 4596 | Rolf Cyriax 4597 | Christian Begyn 4598 | Constantin von Barloewen 4599 | Julia Corbin 4600 | Rosi Gollmann 4601 | Henrik Fexeus 4602 | Miroslav Nemec 4603 | Heidi Hetzer 4604 | David Fung 4605 | Jen Lancaster 4606 | Alfred Bodenheimer 4607 | Frank Borsch 4608 | Wulfing von Rohr 4609 | Paul Bokowski 4610 | Nicole Bauer 4611 | Roman Maria Koidl 4612 | Phillip Rock 4613 | Dan Kieran 4614 | Sarah Addison Allen 4615 | Florian Steininger 4616 | James McGee 4617 | Richard DiLallo 4618 | Yassin Musharbash 4619 | Kathy Willis 4620 | Dieter Lührmann 4621 | Matthias Schlicht 4622 | John Perry 4623 | Matthias Bloechle 4624 | Natascha Sagorski 4625 | Barbara Berger 4626 | James R. Hansen 4627 | Johanna Driest 4628 | Warren Goldstein 4629 | Ray Robertson 4630 | Steve Hagen 4631 | Deborah Madison 4632 | Karen Dionne 4633 | Georg Pieper 4634 | Edmund Hartsch 4635 | Ellen Henrichs 4636 | Werner Ablass 4637 | Sue Johnson 4638 | Toni Bentley 4639 | David Behre 4640 | Andreas Wenderoth 4641 | Jens Corssen 4642 | Alexi Zentner 4643 | Sarra Manning 4644 | Tommy Donbavand 4645 | Andrej Djakow 4646 | Clemens Dirscherl 4647 | Fiona Wood 4648 | Cameron Alborzian 4649 | Johnny Haeusler 4650 | Ami McKay 4651 | Misha Aster 4652 | Sophie Morgan 4653 | Bryan Kelly 4654 | Timo Blunck 4655 | Olivier Ndjimbi-Tshiende 4656 | Frank Oehler 4657 | Karla Kuskin 4658 | Elise Valmorbida 4659 | Susanne Goga 4660 | Sabine Eichhorst 4661 | Gunnar Decker 4662 | Ulf Meyer zu Kueingdorf 4663 | David Dvorkin 4664 | Andrew Kaufman 4665 | Sibylle Rieckhoff 4666 | Thomas Sonnenburg 4667 | John Garth 4668 | Laura Griffin 4669 | Mathew D. Rose 4670 | Dennis Lewis 4671 | Anousch Mueller 4672 | Sharon E. McKay 4673 | Anna Campbell 4674 | Andreas Lehmann 4675 | Christine Lindemann 4676 | Stefanie Gercke 4677 | Marco von Münchhausen 4678 | Catherine Ponder 4679 | Kai Lüftner 4680 | Anders Roslund 4681 | Harry Paul 4682 | Raymund Krauleidis 4683 | Thomas Gordon 4684 | Adam Nevill 4685 | Tania Kambouri 4686 | Tamsin Pickeral 4687 | Jane Kallir 4688 | Amy Myers 4689 | Alberto Villoldo 4690 | Lynn Raven 4691 | Christian Saehrendt 4692 | Susin Nielsen 4693 | Judith Glück 4694 | Wolfgang Feil 4695 | Adena Halpern 4696 | Andrew Kaplan 4697 | Steven Levenkron 4698 | Tim Collins 4699 | Thilo Mischke 4700 | Steffen Ufer 4701 | Elke Montanari 4702 | Nicola Yoon 4703 | Garance Doré 4704 | Douglas E. Richards 4705 | Nina Stibbe 4706 | Marc Ritter 4707 | Susan Dennard 4708 | Gene Stone 4709 | Laurie Notaro 4710 | Felicitas Heyne 4711 | Kristina Olsson 4712 | Robert A. Emmons 4713 | Maia Szalavitz 4714 | Peyman Amin 4715 | Gin Phillips 4716 | Julia Heilmann 4717 | Kady Cross 4718 | Beate Sauer 4719 | Douglas Hulick 4720 | James Preller 4721 | Lauren Walker 4722 | Sarah Stricker 4723 | Heike Faller 4724 | Eva-Maria Zurhorst 4725 | Isabel Ashdown 4726 | Christoph Meyns 4727 | Jan Plamper 4728 | Sabine Rennefanz 4729 | Katharina Ohana 4730 | Linda Papadopoulos 4731 | Ulrich Timm 4732 | Tamara Dietl 4733 | Fernando S. Llobera 4734 | Anna Lewandowska 4735 | Detlef Steves 4736 | Henrike Leonhardt 4737 | Dima Wannous 4738 | Theresia Graw 4739 | Dada Peng 4740 | Michael Finkel 4741 | Monica Hesse 4742 | Karl Heinz Däke 4743 | Ronald Schweppe 4744 | Alan Lazar 4745 | Andrew Edwards 4746 | Carly Phillips 4747 | Randy Susan Meyers 4748 | Heike Abidi 4749 | Martin Germann 4750 | Barry Thomson 4751 | Annette Rexrodt von Fircks 4752 | Rebekka Knoll 4753 | Max Keller 4754 | Annie Sloan 4755 | Ian Kerner 4756 | Lindsay Gordon 4757 | Carl Hoffman 4758 | Manfred Kluge 4759 | Monika Müller 4760 | Andy Remic 4761 | Gabrielle Bernstein 4762 | Yoram Bauman 4763 | Jean-Yves Leloup 4764 | Moira Young 4765 | Douglas Century 4766 | Pepper Schwartz 4767 | William J. Dobson 4768 | Günther Hoppe 4769 | David G. Haskell 4770 | Terrie Sultan 4771 | Kristine McKenna 4772 | Matteo Corradini 4773 | Birgit Lutz 4774 | Jennifer Steil 4775 | Eileen Dreyer 4776 | Michael Schacht 4777 | Wolf Lotter 4778 | Cleo Paskal 4779 | Michelle Zink 4780 | Carrie Snyder 4781 | Peter Mayr 4782 | Maike Hallmann 4783 | Timo Wopp 4784 | Ian Coutts 4785 | S.G. Browne 4786 | Franz Meurer 4787 | Ursula Summ 4788 | Philipp von Keisenberg 4789 | Dani Felber 4790 | Laura Gehlhaar 4791 | Philippa Perry 4792 | Kerstin Gäfgen-Track 4793 | Ptolemy Tompkins 4794 | Justus Bender 4795 | Eric Berg 4796 | Ulrich Warnke 4797 | Chris Wormell 4798 | A. J. Kazinski 4799 | Joyce Scott 4800 | Diarmuid Gavin 4801 | Tim Weaver 4802 | Mario Galla 4803 | Christa Höhs 4804 | Claudia Croos-Müller 4805 | Rosemary Clement-Moore 4806 | Mark Greaney 4807 | Sebastian Lehmann 4808 | Mary Louise Kelly 4809 | Ruth Frances Long 4810 | Horst Gorski 4811 | Marina Heib 4812 | Virginia Ironside 4813 | Nahuel Lopez 4814 | Hank Moody 4815 | Jana Haas 4816 | Ran HaCohen 4817 | Dinah Jefferies 4818 | Holger Roggelin 4819 | Lisbeth Exner 4820 | Martin Heimbucher 4821 | Stephan Lermer 4822 | Boris Friedewald 4823 | Kerstin Klein 4824 | Lisa Black 4825 | Jessica Morgan 4826 | Amanda Hesser 4827 | Michael George 4828 | Andreas Jungwirth 4829 | Henning Klüver 4830 | Rolf Rietzler 4831 | Sascha Mamczak 4832 | Anne Swithinbank 4833 | Christopher Buehlman 4834 | Liane Merciel 4835 | Michael Grumley 4836 | Oliver Harris 4837 | Simon Lilly 4838 | Sondra Marshak 4839 | Tim Mohr 4840 | Florian Sitzmann 4841 | Sophie McKenzie 4842 | Victoria Moran 4843 | Claudia Lepp 4844 | Tasmina Perry 4845 | Laurie Kilmartin 4846 | Matthew Biggs 4847 | Peter Spork 4848 | Ensaf Haidar 4849 | Bernard Baudouin 4850 | Mark Barnes 4851 | Stephen M. Irwin 4852 | Clemens G. Arvay 4853 | Amby Burfoot 4854 | Greg Olear 4855 | Frank Schmitter 4856 | Sebastian Leber 4857 | Carl-Johan Forssén Ehrlin 4858 | Louisa Leaman 4859 | Laurence Shorter 4860 | Wäis Kiani 4861 | Christian Witt-Dörring 4862 | David McCandless 4863 | Piers Torday 4864 | Matthias Kroeger 4865 | Luzia Sutter Rehmann 4866 | Helge Burggrabe 4867 | Manesse Verlag 4868 | Jonathan L. Howard 4869 | Muir Gray 4870 | Robert Wringham 4871 | Veit Lindau 4872 | Sally Green 4873 | Benjamin Idriz 4874 | Alison Moore 4875 | Uwe Sielert 4876 | Kate Anthony 4877 | Nelson Johnson 4878 | Gareth Powell 4879 | Tod Goldberg 4880 | Morgan Howell 4881 | Beverley Jones 4882 | Tom Wainwright 4883 | Mark Lowery 4884 | Margie Orford 4885 | Jörg Lesczenski 4886 | Paul Pen 4887 | Julia Hoban 4888 | Katharina Eyssen 4889 | Cathy Hummels 4890 | Franziska Fischer 4891 | Fei Long 4892 | Celeste Bradley 4893 | Jessica Sorensen 4894 | Delilah S. Dawson 4895 | Anna Paulsen 4896 | Hunter Beaumont 4897 | Rip Gerber 4898 | Aljoscha Neubauer 4899 | David Hair 4900 | Paul Kalanithi 4901 | Margret Greiner 4902 | Kalayna Price 4903 | Marc Engelhardt 4904 | Yvonne Hofstetter 4905 | Jo Bailey 4906 | Rob Vegas 4907 | Neda Soltani 4908 | Tina Hannan 4909 | Dan Kavanagh 4910 | Ross Raisin 4911 | Sarah Armstrong 4912 | Eberhard Gabler 4913 | Gerri Russell 4914 | Tamer Bakiner 4915 | Angela Steidele 4916 | James Mollison 4917 | Linda Gillard 4918 | Dave Engledow 4919 | Kathleen Tessaro 4920 | Russell Blake 4921 | Kelly Oxford 4922 | Meike Hemschemeier 4923 | Lauren Price 4924 | David Campany 4925 | Yves Bossart 4926 | Elsa Watson 4927 | Cornelia Kuhnert 4928 | Berni Mayer 4929 | Mark Seal 4930 | Tosca Reno 4931 | Sonya Fitzpatrick 4932 | Josh Malerman 4933 | Christina Lee 4934 | Lucretia Grindle 4935 | Amy Spencer 4936 | Scott G. Gier 4937 | Kate Furnivall 4938 | Danielle LaPorte 4939 | Hermien Stellmacher 4940 | Lindsey Kelk 4941 | Ana Lilia Pérez 4942 | Jessica Shirvington 4943 | Georg Schweisfurth 4944 | Michael Braun Alexander 4945 | Ingeborg Prior 4946 | Sarah Fischer 4947 | Kristin Rübesamen 4948 | Karl Rabeder 4949 | Janie Bryant 4950 | Julie Leuze 4951 | Renate Augstein 4952 | Deborah Abela 4953 | Brunonia Barry 4954 | Matthias Morgenroth 4955 | Ulrike Schrimpf 4956 | Philip Simon 4957 | Melissa Grey 4958 | Wolfgang Pauritsch 4959 | Alexandros Stefanidis 4960 | Tony Wrighton 4961 | Julia Bähr 4962 | Cynthia Barcomi 4963 | Philipp Gurt 4964 | Peter Michael Dieckmann 4965 | Karlheinz Keppler 4966 | Caitlin Shetterly 4967 | Michael Hayner 4968 | Margit Hertlein 4969 | Sophie Littlefield 4970 | Kathryn Fox 4971 | Hilmar Klute 4972 | Laura Dockrill 4973 | Peter Orullian 4974 | Rebecca Alexander 4975 | John W. de Gruchy 4976 | Moisés Mayordomo 4977 | Julie Holland 4978 | Günter Heede 4979 | James Maxey 4980 | Museum Barberini 4981 | Thomas Sünder 4982 | Klaus A. Maier 4983 | Hans-Richard Reuter 4984 | Bjarni Haukur Thorsson 4985 | Max Kinnings 4986 | Meredith Goldstein 4987 | Robert Rauh 4988 | Andreas Hock 4989 | Jiri Scherer 4990 | Véronique Witzigmann 4991 | John E. Upledger 4992 | Friedrich Schweitzer 4993 | Martin Horváth 4994 | Miten 4995 | Brenda Davies 4996 | Stephan Schuhmacher 4997 | Can Merey 4998 | Ogi Ogas 4999 | Simone Veenstra 5000 | Rafael Buschmann 5001 | Shannon Messenger 5002 | Nilanjana Roy 5003 | Gabriella Pape 5004 | Ralf Moll 5005 | Michael Embacher 5006 | Philip Carter 5007 | Jo Barrett 5008 | Chris Culver 5009 | Peter Ruch 5010 | Wendy Webb 5011 | Massum Faryar 5012 | Claudia Hunt 5013 | J.F. Englert 5014 | Susan Arnout Smith 5015 | Lucy Blue 5016 | Collin McMahon 5017 | Nadja Hermann 5018 | Mark Sisson 5019 | Andreas Odenwald 5020 | Ulrieke Ruwisch 5021 | David Trobisch 5022 | Doug Johnstone 5023 | Fritz Roth 5024 | Dan Vyleta 5025 | Bernd Kramer 5026 | Alden Bell 5027 | Elan Mastai 5028 | Jan Grossarth 5029 | Pieter Webeling 5030 | Gabrielle Williams 5031 | Jens Westerbeck 5032 | Peter Clines 5033 | Marion Detjen 5034 | Kevin Emerson 5035 | Abbie Taylor 5036 | Frank Trentmann 5037 | Annabel Karmel 5038 | Julia Stuart 5039 | Wolfgang Bossinger 5040 | Elizabeth Day 5041 | Thomas Schulz 5042 | Martin Häusler 5043 | Christine Fehér 5044 | Gary Northfield 5045 | Jekka McVicar 5046 | Mitch Feierstein 5047 | Catherine Robertson 5048 | Harvey Diamond 5049 | Emmy Laybourne 5050 | Peter Probst 5051 | Wesley Chu 5052 | Emma Flint 5053 | Katja Berlin 5054 | Kate Gordon 5055 | Kristin Halbrook 5056 | Sylvia Lott 5057 | Tania Krätschmar 5058 | Franz Hübner 5059 | Rüdiger Maschwitz 5060 | Claire Dederer 5061 | Frank Sommer 5062 | John Cushnie 5063 | Sandro Gaycken 5064 | Erwin Thoma 5065 | Lydia Netzer 5066 | Thomas Fuchs 5067 | Mark Fletcher 5068 | Leo Martin 5069 | Sheldon Solomon 5070 | Bernd Stegemann 5071 | Vicki Goldberg 5072 | Tim Crothers 5073 | Matthew Mather 5074 | Callum Roberts 5075 | Anne Sanders 5076 | Steve Voake 5077 | Oliver Tanzer 5078 | Hannah Pittard 5079 | Fleur Sakura Wöss 5080 | Myrna Culbreath 5081 | Nacho Figueras 5082 | Melissa Jo Peltier 5083 | Claire Legrand 5084 | Teresa Toten 5085 | Klaus-Dieter Kaiser 5086 | Fadumo Korn 5087 | Sabine Durrant 5088 | Irene Schuck 5089 | Vera Buck 5090 | Stefanie Lohaus 5091 | Christa Spannbauer 5092 | Sven Gillert 5093 | Rebecca Lolosoli 5094 | Adam Blade 5095 | Diana Richardson 5096 | Arno Frank 5097 | Matthew Kimberley 5098 | Wilhelm Gräb 5099 | Nadja Nollau 5100 | Gisela Burckhardt 5101 | Allie Brosh 5102 | Sylvie Simmons 5103 | Eckhard Hollmann 5104 | Suzanne Wright 5105 | Cornelia Coenen-Marx 5106 | Paula Lambert 5107 | Ingrid Black 5108 | Stephan Marks 5109 | Martin Urban 5110 | Susanne Oswald 5111 | Rachel Kelly 5112 | Thimon von Berlepsch 5113 | Orna Donath 5114 | Luis Sellano 5115 | Janko Lauenberger 5116 | Charlie Morley 5117 | Benno Ure 5118 | Mario Alberto Zambrano 5119 | Gonzalo Torné 5120 | Candy Guard 5121 | Howard Weinstein 5122 | Marilyn Diamond 5123 | Stefan Wiertz 5124 | Jürgen Geers 5125 | Bahar Yilmaz 5126 | Karen Clarke 5127 | Markus Beile 5128 | Georg Weidinger 5129 | Martin Marianowicz 5130 | Joshua Spanogle 5131 | Sophie Miller 5132 | Eva Siegmund 5133 | Hilly Martinek 5134 | Angela Marsons 5135 | Florence Williams 5136 | Susanne Mierau 5137 | Carla Berling 5138 | Katharina D. Oppel 5139 | Gemma Burgess 5140 | Rudi Rhode 5141 | Sarah Hilary 5142 | Allison Winn Scotch 5143 | Janet G. Woititz 5144 | Alexa Kriele 5145 | Science Busters 5146 | Wim Luijpers 5147 | Shi Xing Mi 5148 | Erika Johansen 5149 | Alexa Iwan 5150 | Julie Schwartz Gottman 5151 | Clifford Jackman 5152 | Eliane Zimmermann 5153 | Robin Alexander 5154 | Dieter Gurkasch 5155 | Susanne Reinker 5156 | Natasha Korsakova 5157 | Evelin Bürger 5158 | Heinz Sobota 5159 | Volker Präkelt 5160 | Rebecca Maria Salentin 5161 | Diana Hillebrand 5162 | Thomas Darnstädt 5163 | Elaine Winter 5164 | Dennis E. Taylor 5165 | Susa Bobke 5166 | Angie Thomas 5167 | Oliver Bertram 5168 | Kerstin Rosenberg 5169 | Jeff Greenberg 5170 | Tom Pyszczynski 5171 | Sali Hughes 5172 | Hannah Fühler 5173 | Ralf Beil 5174 | Bradley Garrett 5175 | Christopher Finch 5176 | Alison Tyler 5177 | Kimberly McCreight 5178 | Pai Kit Fai 5179 | Duncan Lay 5180 | Holger Witzel 5181 | Nina Riggs 5182 | Sylvain Neuvel 5183 | Christina Morina 5184 | Emily Benedek 5185 | Jürgen Luh 5186 | Wendy MacNaughton 5187 | Alexandra Becker 5188 | Jeff Wise 5189 | John Hands 5190 | Raman K. Prinja 5191 | Christine Koller 5192 | Emil König 5193 | Ulf Torreck 5194 | Michael Kaufmann 5195 | Chandran Nair 5196 | Heather Cooper 5197 | Imaani Brown 5198 | Jonathan Black 5199 | Joyce Hinnefeld 5200 | Douglas Saunders 5201 | Andrea Schirmaier-Huber 5202 | Ryan Hunter 5203 | Christophe André 5204 | Nora Reinhardt 5205 | Barbara O'Neal 5206 | Anna Magdalena Bössen 5207 | Maitreyi D. Piontek 5208 | Wenzel-Hablik-Museum 5209 | Lara Morgan 5210 | Susanne Weber 5211 | Julie Berry 5212 | Tilmann Lahme 5213 | Terry Stickels 5214 | Gregor Peter Schmitz 5215 | Nataša Dragnić 5216 | Felicia Yap 5217 | Mark Parisi 5218 | Claus Koch 5219 | Alena Schröder 5220 | Fred Butler 5221 | Marlies Ferber 5222 | Anja Kömmerling 5223 | Marina Lommel 5224 | Jens Zimmermann 5225 | Colleen Houck 5226 | Fiona McFarlane 5227 | James Meek 5228 | Dan T. Sehlberg 5229 | Ian Marber 5230 | Thomas Grasberger 5231 | Kirsten Hanser 5232 | Ralf K. Wüstenberg 5233 | Jo Baker 5234 | Zentrum für Militärgeschichte und Sozialwissenschaften der Bundeswehr 5235 | Hermine König 5236 | Matthias Pöhlmann 5237 | Sydney Croft 5238 | Garfield Reeves-Stevens 5239 | Süddeutsche Zeitung Magazin 5240 | Ana Kraš 5241 | Tom Callaghan 5242 | Nils Egtermeyer 5243 | Dirk Hempel 5244 | Ben McPherson 5245 | Sascha Adamek 5246 | Dina Nayeri 5247 | Kevin Hall 5248 | Swati Avasthi 5249 | Sara Raasch 5250 | Sven Gerhardt 5251 | Josephine Moon 5252 | Harry Connolly 5253 | Devin O. Pendas 5254 | Jason Fry 5255 | Marco Matthes 5256 | Kat Zhang 5257 | Ulrich Drüner 5258 | Detlef Vogel 5259 | Franz Ruppert 5260 | Jason Shulman 5261 | Jonas Hartmann 5262 | Ernst Klink 5263 | Andreas Austilat 5264 | Arnold Huijgen 5265 | Georgiana Uhlyarik 5266 | Sean Slater 5267 | J.D. Robb 5268 | Matthias Wagner K 5269 | Lauren Braun Costello 5270 | Einzlkind 5271 | Robert Egger 5272 | C.S. Pacat 5273 | Patricia Thielemann 5274 | Prinz Chaos II. 5275 | Heribert Lenz 5276 | Klaus Wiegrefe 5277 | Roland Rottenfußer 5278 | Taylor Jenkins Reid 5279 | Anni Daulter 5280 | Rowan Hisayo Buchanan 5281 | Michael Reitz 5282 | Kim Barnouin 5283 | Karen Thompson Walker 5284 | Matthias Bahr 5285 | Jalid Sehouli 5286 | Olivia Ryan 5287 | Constantin Gillies 5288 | Ian Whates 5289 | Daniel Schwemer 5290 | Paula Brackston 5291 | Daniel Siemens 5292 | Boyd Morrison 5293 | Anne Hertz 5294 | Elizabeth Fremantle 5295 | Jeffrey Long 5296 | Hermann-Josef Frisch 5297 | Olaf Gersemann 5298 | Jaye Wells 5299 | Johann-Adam-Möhler-Institut für Ökumenik 5300 | Amy Liptrot 5301 | Nikita Afanasjew 5302 | Tim Schanetzky 5303 | Christopher B. Krebs 5304 | Katarina Agathos 5305 | Joe Wicks 5306 | Steen T. Kittl 5307 | Anselm Schubert 5308 | Sarah Beth Durst 5309 | Stefan Maiwald 5310 | Alexander Neubacher 5311 | Susanne Hofmann 5312 | Kendare Blake 5313 | Herbert Niehr 5314 | Sarah Graves 5315 | Louis Lewitan 5316 | Balli Kaur Jaswal 5317 | Michalis Pantelouris 5318 | Fritz Schaap 5319 | Uli Hauser 5320 | Matthias Henze 5321 | Jessica Fellowes 5322 | Anton Svensson 5323 | Isabella Kroth 5324 | Reem Sahwil 5325 | Melissa Hartwig 5326 | Burkhard Voß 5327 | Egbert Ballhorn 5328 | Eberhard Rathgeb 5329 | Samantha Cowen 5330 | Jon Wallace 5331 | Niamh O'Connor 5332 | Stephan Orth 5333 | Matthias Pohlig 5334 | Douglas Corleone 5335 | Susanne Winnacker 5336 | Hans-Martin Gutmann 5337 | Torsten Meireis 5338 | Kate Racculia 5339 | A. J. Finn 5340 | Volker Kitz 5341 | Paula Polanski 5342 | Angelika Gulder 5343 | Stephen Kenson 5344 | Matthias Kolbusa 5345 | Bundesverband Farbe Gestaltung Bautenschutz 5346 | Axel Krohn 5347 | Dietrich Faber 5348 | Rainer Nübel 5349 | Thomas Baschab 5350 | Bernadette Conrad 5351 | Liliane und Fred Funcken 5352 | Margaret Dilloway 5353 | Michelle Gable 5354 | Matthias Lohre 5355 | Courtney Allison Moulton 5356 | Lorenzo Cohen 5357 | Denis Wischniewski 5358 | Ralf Heimann 5359 | Maik Brüggemeyer 5360 | Donna Grant 5361 | Molly Yeh 5362 | Anne Freytag 5363 | Gae Polisner 5364 | Elizabeth Wilhide 5365 | Johannes Kaul 5366 | Werner Otto Müller-Hill 5367 | Martin Werner 5368 | Ariston Verlag 5369 | Mazda Adli 5370 | Jochen Arnold 5371 | Erik Flügge 5372 | Lars Amend 5373 | Joachim Schaffer-Suchomel 5374 | Adriana Popescu 5375 | Matthias Nöllke 5376 | Patrick Flanery 5377 | Miguel Szymanski 5378 | Mieshelle Nagelschneider 5379 | Holger Senzel 5380 | Tim Pröse 5381 | Jan Philipp Burgard 5382 | Tilar J. Mazzeo 5383 | Hannes Finkbeiner 5384 | Peter Sawyer 5385 | Jo Piazza 5386 | Michael Feld 5387 | Eli Jaxon-Bear 5388 | Liz Howard 5389 | Jan Kowalsky 5390 | Sara Nović 5391 | Emma Slade 5392 | C. E. Bernard 5393 | Linda Antonsson 5394 | Marco Canora 5395 | C.J. Tudor 5396 | Astrid von Schlachta 5397 | The Berkeley 5398 | Brian Staveley 5399 | Jennifer Nadel 5400 | Susan Schwartz 5401 | Michael Philipp 5402 | Wabun 5403 | Cammie McGovern 5404 | Susan Schneider 5405 | Paul Maréchal 5406 | Anna Daniels 5407 | Stefan Ark Nitsche 5408 | Stefan Alkier 5409 | Heinrich Assel 5410 | Frank Surall 5411 | James Rebanks 5412 | David Malki 5413 | Robin Gold 5414 | Josiah Bancroft 5415 | Barbara von Meibom 5416 | Volker Zahn 5417 | Michael Kröher 5418 | Yan Ge 5419 | Kester Schlenz 5420 | Iain R. Webb 5421 | Eberhard Hauschildt 5422 | Huntley Fitzpatrick 5423 | Marlis Gielen 5424 | Robin Jacobs 5425 | Chris Boettcher 5426 | Susan Ee 5427 | Maarten Keulemans 5428 | Ayisha Malik 5429 | Steven Rowley 5430 | Anthony Sarpong 5431 | Jack Mingo 5432 | Peta Mathias 5433 | Jonathan Newey 5434 | Gayle Callen 5435 | Ortwin Ennigkeit 5436 | Karen Webb 5437 | Tammara Webber 5438 | Meagan Spooner 5439 | Siegfried Eckert 5440 | T. S. Orgel 5441 | E. K. Johnston 5442 | Evangelische Arbeitsgemeinschaft für Kirchliche Zeitgeschichte 5443 | Lumira 5444 | Boris Fishman 5445 | Cynthia D'Aprix Sweeney 5446 | Sean Black 5447 | Morgan Rhodes 5448 | Nancy Baker 5449 | A.G. Howard 5450 | Gerhard Krebs 5451 | Bart Yasso 5452 | Bernd Weiß 5453 | Michael McBride 5454 | Horst Rohde 5455 | Florian Werner 5456 | Sarah Cooper 5457 | Roland Thomas 5458 | Jodi Meadows 5459 | Karsten Brandt 5460 | Reinhold Heller 5461 | Rana Ahmad 5462 | Heather Cocks 5463 | Liturgische Konferenz 5464 | Kurt Derungs 5465 | Django Wexler 5466 | Daniel Ziblatt -------------------------------------------------------------------------------- /extras/projector_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "embeddings": [ 3 | { 4 | "tensorName": "WikiData Author Embeddings", 5 | "tensorShape": [ 6 | 5465, 7 | 200 8 | ], 9 | "tensorPath": "https://raw.githubusercontent.com/malteos/pytorch-bert-document-classification/master/extras/author2embedding.projector.tsv", 10 | "metadataPath": "https://raw.githubusercontent.com/malteos/pytorch-bert-document-classification/master/extras/author2embedding.projector_meta.tsv" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /images/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/malteos/pytorch-bert-document-classification/28a4f717823a2ed7a85adf24b2f5593a327b4bd9/images/architecture.png -------------------------------------------------------------------------------- /models.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from pytorch_pretrained_bert import BertModel 3 | from torch import nn 4 | from torch.nn import functional as F 5 | 6 | 7 | class BertMultiClassifier(nn.Module): 8 | def __init__(self, bert_model_path, labels_count, hidden_dim=768, dropout=0.1): 9 | super().__init__() 10 | 11 | self.config = { 12 | 'bert_model_path': bert_model_path, 13 | 'labels_count': labels_count, 14 | 'hidden_dim': hidden_dim, 15 | 'dropout': dropout, 16 | } 17 | 18 | self.bert = BertModel.from_pretrained(bert_model_path) 19 | self.dropout = nn.Dropout(dropout) 20 | self.linear = nn.Linear(hidden_dim, labels_count) 21 | self.sigmoid = nn.Sigmoid() 22 | 23 | def forward(self, tokens, masks): 24 | _, pooled_output = self.bert(tokens, attention_mask=masks, output_all_encoded_layers=False) 25 | dropout_output = self.dropout(pooled_output) 26 | 27 | linear_output = self.linear(dropout_output) 28 | proba = self.sigmoid(linear_output) 29 | 30 | return proba 31 | 32 | 33 | class ExtraBertMultiClassifier(nn.Module): 34 | def __init__(self, bert_model_path, labels_count, hidden_dim=768, mlp_dim=100, extras_dim=6, dropout=0.1): 35 | super().__init__() 36 | 37 | self.config = { 38 | 'bert_model_path': bert_model_path, 39 | 'labels_count': labels_count, 40 | 'hidden_dim': hidden_dim, 41 | 'mlp_dim': mlp_dim, 42 | 'extras_dim': extras_dim, 43 | 'dropout': dropout, 44 | } 45 | 46 | self.bert = BertModel.from_pretrained(bert_model_path) 47 | self.dropout = nn.Dropout(dropout) 48 | self.mlp = nn.Sequential( 49 | nn.Linear(hidden_dim + extras_dim, mlp_dim), 50 | nn.ReLU(), 51 | nn.Linear(mlp_dim, mlp_dim), 52 | # nn.ReLU(), 53 | # nn.Linear(mlp_dim, mlp_dim), 54 | nn.ReLU(), 55 | nn.Linear(mlp_dim, labels_count) 56 | ) 57 | # self.sigmoid = nn.Sigmoid() 58 | self.softmax = nn.Softmax() 59 | 60 | def forward(self, tokens, masks, extras): 61 | _, pooled_output = self.bert(tokens, attention_mask=masks, output_all_encoded_layers=False) 62 | dropout_output = self.dropout(pooled_output) 63 | 64 | concat_output = torch.cat((dropout_output, extras), dim=1) 65 | mlp_output = self.mlp(concat_output) 66 | # proba = self.sigmoid(mlp_output) 67 | proba = self.softmax(mlp_output) 68 | 69 | return proba 70 | 71 | 72 | class LinearMultiClassifier(nn.Module): 73 | def __init__(self, labels_count, extras_dim=6, dropout=0.1): 74 | super().__init__() 75 | 76 | self.config = { 77 | 'labels_count': labels_count, 78 | 'extras_dim': extras_dim, 79 | } 80 | self.linear = nn.Linear(extras_dim, labels_count) 81 | self.softmax = nn.Softmax() 82 | # self.sigmoid = nn.Sigmoid() 83 | 84 | def forward(self, extras): 85 | lin_output = self.linear(extras) 86 | # proba = self.sigmoid(mlp_output) 87 | proba = self.softmax(lin_output) 88 | 89 | return proba 90 | 91 | 92 | class ExtraMultiClassifier(nn.Module): 93 | def __init__(self, labels_count, mlp_dim=100, extras_dim=6, dropout=0.1): 94 | super().__init__() 95 | 96 | self.config = { 97 | 'labels_count': labels_count, 98 | 'mlp_dim': mlp_dim, 99 | 'extras_dim': extras_dim, 100 | 'dropout': dropout, 101 | } 102 | 103 | self.mlp = nn.Sequential( 104 | nn.Linear(extras_dim, mlp_dim), 105 | nn.ReLU(), 106 | nn.Linear(mlp_dim, labels_count) 107 | ) 108 | self.softmax = nn.Softmax() 109 | # self.sigmoid = nn.Sigmoid() 110 | 111 | def forward(self, extras): 112 | 113 | mlp_output = self.mlp(extras) 114 | # proba = self.sigmoid(mlp_output) 115 | proba = self.softmax(mlp_output) 116 | 117 | return proba 118 | 119 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pandas 2 | tqdm 3 | scikit-learn 4 | pytorch-pretrained-bert 5 | jupyter 6 | matplotlib 7 | numpy 8 | 9 | # cli 10 | fire 11 | 12 | # author embeddings 13 | wikimapper 14 | smart-open 15 | 16 | # for padding 17 | keras 18 | tensorflow -------------------------------------------------------------------------------- /wikidata_for_authors.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | Prepare the Wikidata knowledge graph embeddings 4 | 5 | # Extract embeddings for authors 6 | python wikidata_for_authors.py run ~/datasets/wikidata/index_enwiki-20190420.db \ 7 | ~/datasets/wikidata/index_dewiki-20190420.db \ 8 | ~/datasets/wikidata/torchbiggraph/wikidata_translation_v1.tsv.gz \ 9 | ~/notebooks/bert-text-classification/authors.pickle \ 10 | ~/notebooks/bert-text-classification/author2embedding.pickle 11 | 12 | Found 3684 QIDs for authors (not found: 11779) 13 | 14 | # Convert for projector 15 | python wikidata_for_authors.py convert_for_projector \ 16 | ~/notebooks/bert-text-classification/author2embedding.pickle 17 | extras/author2embedding.projector.tsv \ 18 | extras/author2embedding.projector_meta.tsv 19 | 20 | """ 21 | import pickle 22 | 23 | import fire 24 | import numpy as np 25 | 26 | from wikimapper import WikiMapper 27 | from smart_open import open 28 | 29 | 30 | def run(wikimapper_index_en, wikimapper_index_de, graph_embedding_file, authors_file, out_file): 31 | """ 32 | 33 | Find the correct Wikidata embeddings for authors in `author_file` and write them 34 | into a author2embedding mapping file. 35 | 36 | :param wikimapper_index_en: 37 | :param wikimapper_index_de: 38 | :param graph_embedding_file: 39 | :param authors_file: 40 | :param out_file: 41 | :return: 42 | """ 43 | print('Starting...') 44 | 45 | with open(authors_file, 'rb') as f: 46 | authors_list = pickle.load(f) 47 | 48 | print('Author file loaded') 49 | 50 | 51 | en_mapper = WikiMapper(wikimapper_index_en) # title language is defined in index file 52 | de_mapper = WikiMapper(wikimapper_index_de) # title language is defined in index file 53 | 54 | print('WikiMapper loaded (de+en)') 55 | 56 | not_found = 0 57 | not_found_ = [] 58 | 59 | selected_entity_ids = set() 60 | found = 0 61 | 62 | qid2author = {} 63 | 64 | for book_authors_str in authors_list: 65 | authors = book_authors_str.split(';') 66 | 67 | for author in authors: 68 | 69 | qid = None 70 | 71 | # Wikipedia article might have the occupation in parenthesis 72 | en_queries = [ 73 | author, 74 | author.replace(' ', '_'), 75 | author.replace(' ', '_') + '_(novelist)', 76 | author.replace(' ', '_') + '_(poet)', 77 | author.replace(' ', '_') + '_(writer)', 78 | author.replace(' ', '_') + '_(author)', 79 | author.replace(' ', '_') + '_(journalist)', 80 | author.replace(' ', '_') + '_(artist)', 81 | ] 82 | for query in en_queries: # Try all options 83 | qid = en_mapper.title_to_id(query) 84 | if qid is not None: 85 | break 86 | 87 | # de 88 | if qid is None: 89 | de_queries = [ 90 | author, 91 | author.replace(' ', '_'), 92 | author.replace(' ', '_') + '_(Dichter)', 93 | author.replace(' ', '_') + '_(Schriftsteller)', 94 | author.replace(' ', '_') + '_(Autor)', 95 | author.replace(' ', '_') + '_(Journalist)', 96 | author.replace(' ', '_') + '_(Autorin)', 97 | ] 98 | for query in en_queries: # Try all options 99 | qid = de_mapper.title_to_id(query) 100 | if qid is not None: 101 | break 102 | 103 | if qid is None: 104 | not_found += 1 105 | not_found_.append(author) 106 | else: 107 | found += 1 108 | selected_entity_ids.add(qid) 109 | qid2author[qid] = author 110 | 111 | print(f'Found {len(selected_entity_ids)} QIDs for authors (not found: {not_found})') 112 | 113 | author2embedding = {} 114 | 115 | #with open(graph_embedding_file) as fp: 116 | with open(graph_embedding_file, encoding='utf-8') as fp: # smart open can read .gz files 117 | for i, line in enumerate(fp): 118 | cols = line.split('\t') 119 | 120 | entity_id = cols[0] 121 | 122 | if entity_id.startswith(''): 123 | entity_id = entity_id.replace('', '') 124 | 125 | if entity_id in selected_entity_ids: 126 | author2embedding[qid2author[entity_id]] = np.array(cols[1:]).astype(np.float) 127 | 128 | if not i % 100000: 129 | print(f'Lines completed {i}') 130 | 131 | # Save 132 | with open(out_file, 'wb') as f: 133 | pickle.dump(author2embedding, f) 134 | 135 | print(f'Saved to {out_file}') 136 | 137 | 138 | def convert_for_projector(author2embedding_path, out_projector_path, out_projector_meta_path): 139 | """ 140 | 141 | Converts embeddings such that they can be visualized with Tensorflow Projector 142 | 143 | See http://projector.tensorflow.org/ 144 | 145 | :param author2embedding_path: Path to output of `run()` 146 | :param out_projector_path: Write TSV file of vectors to this path. 147 | :param out_projector_meta_path: Write TSV file of metadata to this path. 148 | """ 149 | print(f'Reading embeddings from {author2embedding_path}') 150 | 151 | with open(author2embedding_path, 'rb') as f: 152 | a2vec = pickle.load(f) 153 | 154 | vecs = [] 155 | metas = [] 156 | 157 | for a, vec in a2vec.items(): 158 | vecs.append('\t'.join([str(t) for t in vec.tolist()])) 159 | metas.append(a) 160 | 161 | with open(out_projector_path, 'w') as ff: 162 | ff.write('\n'.join(vecs)) 163 | 164 | with open(out_projector_meta_path, 'w') as ff: 165 | ff.write('\n'.join(metas)) 166 | 167 | print(f'Saved tensors to {out_projector_path}') 168 | print(f'Saved meta info to {out_projector_meta_path}') 169 | 170 | 171 | # Use full dump + filter for not found names 172 | # https://github.com/maxlath/wikidata-filter 173 | 174 | # Scrape https://www.randomhouse.de/Autoren/Uebersicht.rhd 175 | 176 | if __name__ == '__main__': 177 | fire.Fire() --------------------------------------------------------------------------------