{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Authorship prediction with the author-topic model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial, you will learn how to use the author-topic model in Gensim for authorship prediction, based on the topic distributions and mesuring their similarity.\n", "We will train the author-topic model on a Reuters dataset, which contains 50 authors, each with 50 documents for trianing and another 50 documents for testing: https://archive.ics.uci.edu/ml/datasets/Reuter_50_50 ." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you wish to learn more about the Author-topic model and LDA and how to train them, you should check out these tutorials beforehand. A lot of the preprocessing and configuration here has been done using their example:\n", "* [LDA training tips](https://nbviewer.jupyter.org/github/rare-technologies/gensim/blob/develop/docs/notebooks/lda_training_tips.ipynb)\n", "* [Training the author-topic model](https://nbviewer.jupyter.org/github/rare-technologies/gensim/blob/develop/docs/notebooks/atmodel_tutorial.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **NOTE:**\n", ">\n", "> To run this tutorial on your own, install Jupyter, Gensim, SpaCy, Scikit-Learn, Bokeh and Pandas, e.g. using pip:\n", ">\n", "> `pip install jupyter gensim spacy sklearn bokeh pandas`\n", ">\n", "> Note that you need to download some data for SpaCy using `python -m spacy.en.download`.\n", ">\n", "> Download the notebook at https://github.com/RaRe-Technologies/gensim/tree/develop/docs/notebooks/atmodel_prediction_tutorial.ipynb.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Predicting the author of a document is a difficult task, where current approaches usually turn to neural networks. These base a lot of their predictions on learing stylistic and syntactic preferences of the authors and also other features which help rather identify the author. \n", "\n", "In our case, we first model the domain knowledge of a certain author, based on what the author writes about. We do this by calculating the topic distributions for each author using the author-topic model.\n", "After that, we perform the [new author inference](https://github.com/RaRe-Technologies/gensim/pull/1766) on the held-out subset. This again calculates a topic distribution for this new unknown author. \n", "In order to perform the prediction, we find out of all known authors, the most similar one to the new unknown. Mathematically speaking, we find the author, whose topic distribution is the closest to the topic distribution of the new author, by a certrain distrance function or metric. \n", "Here we explore the [Hellinger distance](https://en.wikipedia.org/wiki/Hellinger_distance) for the measuring the distance between two discrete multinomial topic distributions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We start off by downloading the dataset. You can do it manually using the aforementioned link, or run the following code cell." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2018-03-25 17:24:26-- https://archive.ics.uci.edu/ml/machine-learning-databases/00217/C50.zip\n", "Resolving archive.ics.uci.edu... 128.195.10.249\n", "Connecting to archive.ics.uci.edu|128.195.10.249|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 8194031 (7.8M) [application/zip]\n", "Saving to: 'STDOUT'\n", "\n", "- 100%[===================>] 7.81M 2.30MB/s in 3.4s \n", "\n", "2018-03-25 17:24:31 (2.30 MB/s) - written to stdout [8194031/8194031]\n", "\n" ] } ], "source": [ "!wget -O - \"https://archive.ics.uci.edu/ml/machine-learning-databases/00217/C50.zip\" > /tmp/C50.zip" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import logging\n", "logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import zipfile\n", "\n", "filename = '/tmp/C50.zip'\n", "\n", "zip_ref = zipfile.ZipFile(filename, 'r')\n", "zip_ref.extractall(\"/tmp/\")\n", "zip_ref.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We wrap all the preprocessing steps, that you can find more about in the [author-topic notebook](https://nbviewer.jupyter.org/github/rare-technologies/gensim/blob/develop/docs/notebooks/atmodel_tutorial.ipynb) , in one fucntion so that we are able to iterate over different preprocessing parameters." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import os, re, io\n", "def preprocess_docs(data_dir):\n", " doc_ids = []\n", " author2doc = {}\n", " docs = []\n", " \n", " folders = os.listdir(data_dir) # List of filenames.\n", " for authorname in folders:\n", " files = file = os.listdir(data_dir + '/' + authorname)\n", " for filen in files:\n", " (idx1, idx2) = re.search('[0-9]+', filen).span() # Matches the indexes of the start end end of the ID.\n", " if not author2doc.get(authorname):\n", " # This is a new author.\n", " author2doc[authorname] = []\n", " doc_id = str(int(filen[idx1:idx2]))\n", " doc_ids.append(doc_id)\n", " author2doc[authorname].extend([doc_id])\n", "\n", " # Read document text.\n", " # Note: ignoring characters that cause encoding errors.\n", " with io.open(data_dir + '/' + authorname + '/' + filen, errors='ignore', encoding='utf-8') as fid:\n", " txt = fid.read()\n", "\n", " # Replace any whitespace (newline, tabs, etc.) by a single space.\n", " txt = re.sub('\\s', ' ', txt)\n", " docs.append(txt)\n", " \n", " doc_id_dict = dict(zip(doc_ids, range(len(doc_ids))))\n", " # Replace dataset IDs by integer IDs.\n", " for a, a_doc_ids in author2doc.items():\n", " for i, doc_id in enumerate(a_doc_ids):\n", " author2doc[a][i] = doc_id_dict[doc_id]\n", " import spacy\n", " nlp = spacy.load('en')\n", " \n", " %%time\n", " processed_docs = []\n", " for doc in nlp.pipe(docs, n_threads=4, batch_size=100):\n", " # Process document using Spacy NLP pipeline.\n", "\n", " ents = doc.ents # Named entities.\n", "\n", " # Keep only words (no numbers, no punctuation).\n", " # Lemmatize tokens, remove punctuation and remove stopwords.\n", " doc = [token.lemma_ for token in doc if token.is_alpha and not token.is_stop]\n", "\n", " # Remove common words from a stopword list.\n", " #doc = [token for token in doc if token not in STOPWORDS]\n", "\n", " # Add named entities, but only if they are a compound of more than word.\n", " doc.extend([str(entity) for entity in ents if len(entity) > 1])\n", " processed_docs.append(doc)\n", " docs = processed_docs\n", " del processed_docs\n", " \n", " # Compute bigrams.\n", "\n", " from gensim.models import Phrases\n", "\n", " # Add bigrams and trigrams to docs (only ones that appear 20 times or more).\n", " bigram = Phrases(docs, min_count=20)\n", " for idx in range(len(docs)):\n", " for token in bigram[docs[idx]]:\n", " if '_' in token:\n", " # Token is a bigram, add to document.\n", " docs[idx].append(token)\n", " return docs, author2doc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We create the corpus of the train and test data using two separate functions, since each corpus is tied to a certain dictionary which maps the words to their ids. Also in order to create the test corpus, we use the dictionary from the train data, since the trained model has have the same id2word reference as the new test data. Otherwise token with id 1 from the test data wont't mean the same as the trained upon token with id 1 in the model." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def create_corpus_dictionary(docs, max_freq=0.5, min_wordcount=20):\n", " # Create a dictionary representation of the documents, and filter out frequent and rare words.\n", " from gensim.corpora import Dictionary\n", " dictionary = Dictionary(docs)\n", "\n", " # Remove rare and common tokens.\n", " # Filter out words that occur too frequently or too rarely.\n", " max_freq = max_freq\n", " min_wordcount = min_wordcount\n", " dictionary.filter_extremes(no_below=min_wordcount, no_above=max_freq)\n", "\n", " _ = dictionary[0] # This sort of \"initializes\" dictionary.id2token.\n", "\n", " # Vectorize data.\n", " # Bag-of-words representation of the documents.\n", " corpus = [dictionary.doc2bow(doc) for doc in docs]\n", "\n", " return corpus, dictionary\n", "\n", "def create_test_corpus(train_dictionary, docs):\n", " # Create test corpus using the dictionary from the train data.\n", " return [train_dictionary.doc2bow(doc) for doc in docs]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For our first training, we specify that we want the parameters max_freq and min_wordcoun to be 50 and 20, as proposed by the original notebook tutorial. We will find out if this configuration is good enough for us." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "05:24:36 DEBUG:Registered VCS backend: git\n", "05:24:36 DEBUG:Registered VCS backend: hg\n", "05:24:36 DEBUG:Registered VCS backend: svn\n", "05:24:36 DEBUG:Registered VCS backend: bzr\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3 µs, sys: 0 ns, total: 3 µs\n", "Wall time: 7.15 µs\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:26:17 INFO:'pattern' package not found; tag filters are not available for English\n", "05:26:17 INFO:collecting all words and their counts\n", "05:26:17 INFO:PROGRESS: at sentence #0, processed 0 words and 0 word types\n", "05:26:19 INFO:collected 437598 word types from a corpus of 746622 words (unigram + bigrams) and 2500 sentences\n", "05:26:19 INFO:using 437598 counts as vocab in Phrases<0 vocab, min_count=20, threshold=10.0, max_vocab_size=40000000>\n", "/Users/martin/Projects/bachelor/gensim/gensim/models/phrases.py:490: UserWarning: For a faster implementation, use the gensim.models.phrases.Phraser class\n", " warnings.warn(\"For a faster implementation, use the gensim.models.phrases.Phraser class\")\n", "05:26:24 INFO:adding document #0 to Dictionary(0 unique tokens: [])\n", "05:26:25 INFO:built Dictionary(46905 unique tokens: ['$83.4 million', 'boarder', '$2.72 billion', 'checking', 'suzuki']...) from 2500 documents (total 786032 corpus positions)\n", "05:26:25 INFO:discarding 42991 tokens: [('$1.4 billion', 11), ('$15', 3), ('$17.25', 1), ('$380 million', 2), ('12.5 cents', 7), ('Big B', 3), ('Big B Inc.', 2), (\"Big B's\", 3), ('Big B. I', 1), ('Dwayne Hoven', 1)]...\n", "05:26:25 INFO:keeping 3914 tokens which were in no less than 20 and no more than 1250 (=50.0%) documents\n", "05:26:25 DEBUG:rebuilding dictionary, shrinking gaps\n", "05:26:25 INFO:resulting dictionary: Dictionary(3914 unique tokens: ['chris_patten', 'online', 'loss', 'hub', 'sound']...)\n" ] } ], "source": [ "traindata_dir = \"/tmp/C50train\"\n", "train_docs, train_author2doc = preprocess_docs(traindata_dir)\n", "train_corpus_50_20, train_dictionary_50_20 = create_corpus_dictionary(train_docs, 0.5, 20)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of unique tokens: 3914\n" ] } ], "source": [ "print('Number of unique tokens: %d' % len(train_dictionary_50_20))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3 µs, sys: 1e+03 ns, total: 4 µs\n", "Wall time: 15 µs\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:28:06 INFO:collecting all words and their counts\n", "05:28:06 INFO:PROGRESS: at sentence #0, processed 0 words and 0 word types\n", "05:28:08 INFO:collected 448895 word types from a corpus of 758070 words (unigram + bigrams) and 2500 sentences\n", "05:28:08 INFO:using 448895 counts as vocab in Phrases<0 vocab, min_count=20, threshold=10.0, max_vocab_size=40000000>\n", "/Users/martin/Projects/bachelor/gensim/gensim/models/phrases.py:490: UserWarning: For a faster implementation, use the gensim.models.phrases.Phraser class\n", " warnings.warn(\"For a faster implementation, use the gensim.models.phrases.Phraser class\")\n" ] } ], "source": [ "testdata_dir = \"/tmp/C50test\"\n", "test_docs, test_author2doc = preprocess_docs(testdata_dir)\n", "test_corpus_50_20 = create_test_corpus(train_dictionary_50_20, test_docs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We wrap the model training also in a function, in order to, again, be able to iterate over different parametrizations." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def train_model(corpus, author2doc, dictionary, num_topics=20, eval_every=0, iterations=50, passes=20):\n", " from gensim.models import AuthorTopicModel\n", " \n", " model = AuthorTopicModel(corpus=corpus, num_topics=num_topics, id2word=dictionary.id2token, \\\n", " author2doc=author2doc, chunksize=2500, passes=passes, \\\n", " eval_every=eval_every, iterations=iterations, random_state=1)\n", " top_topics = model.top_topics(corpus)\n", " tc = sum([t[1] for t in top_topics]) \n", " print(tc / num_topics)\n", " return model" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# NOTE: Author of the logic of this function is the Olavur Mortensen, from his notebook tutorial.\n", "\n", "def predict_author(new_doc, atmodel, top_n=10, smallest_author=1):\n", " from gensim import matutils\n", " import pandas as pd\n", "\n", " def similarity(vec1, vec2):\n", " '''Get similarity between two vectors'''\n", " dist = matutils.hellinger(matutils.sparse2full(vec1, atmodel.num_topics), \\\n", " matutils.sparse2full(vec2, atmodel.num_topics))\n", " sim = 1.0 / (1.0 + dist)\n", " return sim\n", "\n", " def get_sims(vec):\n", " '''Get similarity of vector to all authors.'''\n", " sims = [similarity(vec, vec2) for vec2 in author_vecs]\n", " return sims\n", "\n", " author_vecs = [atmodel.get_author_topics(author) for author in atmodel.id2author.values()]\n", " new_doc_topics = atmodel.get_new_author_topics(new_doc)\n", " # Get similarities.\n", " sims = get_sims(new_doc_topics)\n", "\n", " # Arrange author names, similarities, and author sizes in a list of tuples.\n", " table = []\n", " for elem in enumerate(sims):\n", " author_name = atmodel.id2author[elem[0]]\n", " sim = elem[1]\n", " author_size = len(atmodel.author2doc[author_name])\n", " if author_size >= smallest_author:\n", " table.append((author_name, sim, author_size))\n", "\n", " # Make dataframe and retrieve top authors.\n", " df = pd.DataFrame(table, columns=['Author', 'Score', 'Size'])\n", " df = df.sort_values('Score', ascending=False)[:top_n]\n", "\n", " return df\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We define a custom function, which measures the prediction accuracy, following the [precision at k](https://en.wikipedia.org/wiki/Information_retrieval#Precision_at_K) principle. We parametrize the accuracy by a parameter k, k=1 meaning we need an exact match in order to be accurate, k=5 meaning our prediction has be in the top 5 results, ordered by similarity." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prediction_accuracy(test_author2doc, test_corpus, model, k=5):\n", "\n", " print(\"Precision@k: top_n={}\".format(k))\n", " matches=0\n", " tries = 0\n", " for author in test_author2doc:\n", " author_id = model.author2id[author]\n", " for doc_id in test_author2doc[author]:\n", " predicted_authors = predict_author(test_corpus[doc_id:doc_id+1], atmodel=model, top_n=k)\n", " tries = tries+1\n", " if author_id in predicted_authors[\"Author\"]:\n", " matches=matches+1\n", "\n", " accuracy = matches/tries\n", " print(\"Prediction accuracy: {}\".format(accuracy))\n", " return accuracy, k" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def plot_accuracy(scores1, label1, scores2=None, label2=None):\n", " \n", " import matplotlib.pyplot as plt\n", " s = [score*100 for score in scores1.values()]\n", " t = list(scores1.keys())\n", "\n", " plt.plot(t, s, \"b-\", label=label1)\n", " plt.plot(t, s, \"r^\", label=label1+\" data points\")\n", " \n", " if scores2 is not None:\n", " s2 = [score*100 for score in scores2.values()]\n", " plt.plot(t, s2, label=label2)\n", " plt.plot(t, s2, \"o\", label=label2+\" data points\")\n", " \n", " plt.legend(loc=\"lower right\")\n", "\n", " plt.xlabel('parameter k')\n", " plt.ylabel('prediction accuracy')\n", " plt.title('Precision at k')\n", " plt.xticks(t)\n", " plt.grid(True)\n", " plt.yticks([30,40,50,60,70,80,90,100])\n", " plt.axis([0, 11, 30, 100])\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We calculate the accuracy for a range of values for k=[1,2,3,4,5,6,8,10] and plot how exactly the prediction accuracy naturally rises with higher k." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "05:28:14 INFO:Vocabulary consists of 3914 words.\n", "05:28:14 INFO:using symmetric alpha at 0.05\n", "05:28:14 INFO:using symmetric eta at 0.05\n", "05:28:14 INFO:running online author-topic training, 20 topics, 50 authors, 20 passes over the supplied corpus of 2500 documents, updating model once every 2500 documents, evaluating perplexity every 0 documents, iterating 50x with a convergence threshold of 0.001000\n", "05:28:14 INFO:PROGRESS: pass 0, at document #2500/2500\n", "05:28:14 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:22 DEBUG:3/2500 documents converged within 50 iterations\n", "05:28:22 DEBUG:updating topics\n", "05:28:22 INFO:topic #11 (0.050): 0.028*\"gm\" + 0.013*\"plant\" + 0.012*\"strike\" + 0.009*\"worker\" + 0.009*\"uaw\" + 0.007*\"automaker\" + 0.007*\"share\" + 0.007*\"union\" + 0.006*\"truck\" + 0.006*\"analyst\"\n", "05:28:22 INFO:topic #17 (0.050): 0.018*\"apple\" + 0.008*\"computer\" + 0.008*\"software\" + 0.008*\"share\" + 0.008*\"analyst\" + 0.007*\"quarter\" + 0.006*\"microsoft\" + 0.006*\"service\" + 0.006*\"base\" + 0.005*\"plan\"\n", "05:28:22 INFO:topic #15 (0.050): 0.009*\"analyst\" + 0.008*\"computer\" + 0.008*\"stock\" + 0.007*\"billion\" + 0.007*\"quarter\" + 0.007*\"share\" + 0.006*\"industry\" + 0.005*\"software\" + 0.005*\"oil\" + 0.005*\"sale\"\n", "05:28:22 INFO:topic #9 (0.050): 0.009*\"analyst\" + 0.006*\"share\" + 0.006*\"china\" + 0.006*\"gold\" + 0.006*\"chinese\" + 0.005*\"price\" + 0.005*\"government\" + 0.005*\"stock\" + 0.004*\"base\" + 0.004*\"drug\"\n", "05:28:22 INFO:topic #14 (0.050): 0.010*\"pound\" + 0.009*\"share\" + 0.008*\"profit\" + 0.007*\"billion\" + 0.007*\"analyst\" + 0.007*\"group\" + 0.007*\"bank\" + 0.006*\"business\" + 0.005*\"million_pound\" + 0.005*\"price\"\n", "05:28:22 INFO:topic diff=2.864277, rho=1.000000\n", "05:28:22 INFO:PROGRESS: pass 1, at document #2500/2500\n", "05:28:22 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:25 DEBUG:2491/2500 documents converged within 50 iterations\n", "05:28:25 DEBUG:updating topics\n", "05:28:25 INFO:topic #0 (0.050): 0.011*\"bank\" + 0.009*\"analyst\" + 0.005*\"share\" + 0.005*\"billion\" + 0.005*\"government\" + 0.004*\"news\" + 0.004*\"business\" + 0.004*\"rule\" + 0.004*\"profit\" + 0.004*\"group\"\n", "05:28:25 INFO:topic #14 (0.050): 0.011*\"pound\" + 0.010*\"share\" + 0.009*\"profit\" + 0.008*\"group\" + 0.008*\"analyst\" + 0.008*\"billion\" + 0.007*\"bank\" + 0.006*\"business\" + 0.006*\"million_pound\" + 0.005*\"penny\"\n", "05:28:25 INFO:topic #15 (0.050): 0.010*\"analyst\" + 0.009*\"stock\" + 0.008*\"share\" + 0.008*\"billion\" + 0.007*\"quarter\" + 0.007*\"computer\" + 0.006*\"oil\" + 0.006*\"bank\" + 0.005*\"industry\" + 0.005*\"high\"\n", "05:28:25 INFO:topic #1 (0.050): 0.014*\"bank\" + 0.010*\"china\" + 0.009*\"hong_kong\" + 0.009*\"kong\" + 0.008*\"hong\" + 0.008*\"billion\" + 0.007*\"Hong Kong\" + 0.006*\"analyst\" + 0.006*\"stock\" + 0.006*\"fund\"\n", "05:28:25 INFO:topic #7 (0.050): 0.007*\"analyst\" + 0.007*\"sale\" + 0.007*\"share\" + 0.006*\"group\" + 0.005*\"business\" + 0.005*\"price\" + 0.004*\"profit\" + 0.004*\"industry\" + 0.004*\"pound\" + 0.004*\"billion\"\n", "05:28:25 INFO:topic diff=1.147566, rho=0.577350\n", "05:28:25 INFO:PROGRESS: pass 2, at document #2500/2500\n", "05:28:25 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:27 DEBUG:2498/2500 documents converged within 50 iterations\n", "05:28:27 DEBUG:updating topics\n", "05:28:27 INFO:topic #9 (0.050): 0.011*\"drug\" + 0.009*\"colombia\" + 0.007*\"analyst\" + 0.006*\"government\" + 0.006*\"sale\" + 0.005*\"share\" + 0.005*\"base\" + 0.004*\"price\" + 0.004*\"stock\" + 0.004*\"united\"\n", "05:28:27 INFO:topic #15 (0.050): 0.010*\"stock\" + 0.009*\"analyst\" + 0.008*\"share\" + 0.008*\"billion\" + 0.007*\"bank\" + 0.007*\"oil\" + 0.006*\"quarter\" + 0.006*\"canada\" + 0.006*\"toronto\" + 0.005*\"high\"\n", "05:28:27 INFO:topic #8 (0.050): 0.026*\"bre\" + 0.024*\"gold\" + 0.024*\"bre_x\" + 0.024*\"x\" + 0.018*\"Bre-X\" + 0.015*\"barrick\" + 0.011*\"analyst\" + 0.010*\"busang\" + 0.010*\"indonesian\" + 0.008*\"government\"\n", "05:28:27 INFO:topic #19 (0.050): 0.019*\"hong\" + 0.018*\"kong\" + 0.018*\"hong_kong\" + 0.014*\"china\" + 0.012*\"Hong Kong\" + 0.006*\"chinese\" + 0.005*\"price\" + 0.005*\"british\" + 0.005*\"tell\" + 0.004*\"tung\"\n", "05:28:27 INFO:topic #10 (0.050): 0.009*\"billion\" + 0.008*\"bank\" + 0.005*\"loan\" + 0.005*\"tonne\" + 0.005*\"yen\" + 0.005*\"price\" + 0.005*\"exporter\" + 0.004*\"real_estate\" + 0.004*\"analyst\" + 0.004*\"real\"\n", "05:28:27 INFO:topic diff=1.010061, rho=0.500000\n", "05:28:27 INFO:PROGRESS: pass 3, at document #2500/2500\n", "05:28:27 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:29 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:29 DEBUG:updating topics\n", "05:28:29 INFO:topic #13 (0.050): 0.017*\"china\" + 0.014*\"wang\" + 0.012*\"beijing\" + 0.011*\"taiwan\" + 0.009*\"court\" + 0.009*\"party\" + 0.008*\"chinese\" + 0.008*\"government\" + 0.007*\"official\" + 0.007*\"communist\"\n", "05:28:29 INFO:topic #19 (0.050): 0.022*\"hong\" + 0.021*\"kong\" + 0.021*\"hong_kong\" + 0.015*\"china\" + 0.014*\"Hong Kong\" + 0.006*\"chinese\" + 0.005*\"airbus\" + 0.005*\"tung\" + 0.005*\"british\" + 0.005*\"Hong Kong's\"\n", "05:28:29 INFO:topic #12 (0.050): 0.012*\"czech\" + 0.007*\"bank\" + 0.007*\"crown\" + 0.006*\"government\" + 0.006*\"klaus\" + 0.005*\"billion\" + 0.005*\"price\" + 0.005*\"party\" + 0.005*\"prague\" + 0.005*\"foreign\"\n", "05:28:29 INFO:topic #17 (0.050): 0.041*\"apple\" + 0.026*\"computer\" + 0.022*\"software\" + 0.020*\"quarter\" + 0.013*\"microsoft\" + 0.013*\"analyst\" + 0.010*\"share\" + 0.009*\"sale\" + 0.009*\"macintosh\" + 0.008*\"pc\"\n", "05:28:29 INFO:topic #6 (0.050): 0.020*\"share\" + 0.017*\"analyst\" + 0.010*\"bank\" + 0.010*\"shanghai\" + 0.009*\"stock\" + 0.007*\"sale\" + 0.007*\"b\" + 0.006*\"quarter\" + 0.006*\"base\" + 0.005*\"business\"\n", "05:28:29 INFO:topic diff=0.877566, rho=0.447214\n", "05:28:29 INFO:PROGRESS: pass 4, at document #2500/2500\n", "05:28:29 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:31 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:31 DEBUG:updating topics\n", "05:28:31 INFO:topic #14 (0.050): 0.012*\"pound\" + 0.010*\"profit\" + 0.010*\"share\" + 0.009*\"group\" + 0.008*\"analyst\" + 0.008*\"billion\" + 0.007*\"business\" + 0.007*\"bank\" + 0.006*\"million_pound\" + 0.005*\"british\"\n", "05:28:31 INFO:topic #9 (0.050): 0.014*\"drug\" + 0.011*\"colombia\" + 0.006*\"government\" + 0.005*\"analyst\" + 0.005*\"sale\" + 0.005*\"united\" + 0.005*\"colombian\" + 0.004*\"guerrilla\" + 0.004*\"base\" + 0.004*\"force\"\n", "05:28:31 INFO:topic #13 (0.050): 0.018*\"china\" + 0.015*\"wang\" + 0.013*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"court\" + 0.009*\"party\" + 0.009*\"chinese\" + 0.008*\"government\" + 0.007*\"communist\" + 0.007*\"official\"\n", "05:28:31 INFO:topic #2 (0.050): 0.010*\"share\" + 0.009*\"analyst\" + 0.008*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.005*\"business\"\n", "05:28:31 INFO:topic #15 (0.050): 0.010*\"stock\" + 0.009*\"analyst\" + 0.008*\"billion\" + 0.008*\"share\" + 0.008*\"bank\" + 0.007*\"oil\" + 0.007*\"canada\" + 0.007*\"toronto\" + 0.006*\"russia\" + 0.005*\"high\"\n", "05:28:31 INFO:topic diff=0.761073, rho=0.408248\n", "05:28:31 INFO:PROGRESS: pass 5, at document #2500/2500\n", "05:28:31 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:33 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:33 DEBUG:updating topics\n", "05:28:33 INFO:topic #15 (0.050): 0.010*\"stock\" + 0.009*\"analyst\" + 0.009*\"bank\" + 0.008*\"billion\" + 0.008*\"share\" + 0.007*\"oil\" + 0.007*\"canada\" + 0.007*\"toronto\" + 0.006*\"russia\" + 0.006*\"tonne\"\n", "05:28:33 INFO:topic #2 (0.050): 0.011*\"share\" + 0.009*\"analyst\" + 0.008*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.005*\"business\"\n", "05:28:33 INFO:topic #13 (0.050): 0.018*\"china\" + 0.015*\"wang\" + 0.013*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"court\" + 0.009*\"chinese\" + 0.009*\"party\" + 0.008*\"government\" + 0.007*\"communist\" + 0.007*\"official\"\n", "05:28:33 INFO:topic #8 (0.050): 0.027*\"gold\" + 0.026*\"bre\" + 0.026*\"bre_x\" + 0.026*\"x\" + 0.019*\"Bre-X\" + 0.015*\"barrick\" + 0.012*\"analyst\" + 0.011*\"busang\" + 0.010*\"indonesian\" + 0.009*\"government\"\n", "05:28:33 INFO:topic #1 (0.050): 0.017*\"bank\" + 0.010*\"fund\" + 0.010*\"china\" + 0.009*\"billion\" + 0.008*\"hong_kong\" + 0.008*\"kong\" + 0.008*\"hong\" + 0.007*\"financial\" + 0.007*\"japan\" + 0.006*\"Hong Kong\"\n", "05:28:33 INFO:topic diff=0.658823, rho=0.377964\n", "05:28:33 INFO:PROGRESS: pass 6, at document #2500/2500\n", "05:28:33 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:35 DEBUG:2500/2500 documents converged within 50 iterations\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:28:35 DEBUG:updating topics\n", "05:28:35 INFO:topic #17 (0.050): 0.038*\"apple\" + 0.027*\"computer\" + 0.022*\"software\" + 0.021*\"quarter\" + 0.014*\"analyst\" + 0.013*\"microsoft\" + 0.010*\"sale\" + 0.010*\"share\" + 0.008*\"pc\" + 0.008*\"macintosh\"\n", "05:28:35 INFO:topic #9 (0.050): 0.015*\"drug\" + 0.012*\"colombia\" + 0.006*\"government\" + 0.005*\"united\" + 0.005*\"sale\" + 0.005*\"colombian\" + 0.005*\"guerrilla\" + 0.005*\"analyst\" + 0.004*\"force\" + 0.004*\"week\"\n", "05:28:35 INFO:topic #15 (0.050): 0.010*\"stock\" + 0.009*\"bank\" + 0.009*\"analyst\" + 0.008*\"billion\" + 0.008*\"share\" + 0.007*\"oil\" + 0.007*\"canada\" + 0.007*\"toronto\" + 0.006*\"russia\" + 0.006*\"tonne\"\n", "05:28:35 INFO:topic #13 (0.050): 0.018*\"china\" + 0.015*\"wang\" + 0.014*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"court\" + 0.009*\"chinese\" + 0.009*\"party\" + 0.008*\"government\" + 0.007*\"communist\" + 0.007*\"official\"\n", "05:28:35 INFO:topic #16 (0.050): 0.016*\"franc\" + 0.015*\"french\" + 0.015*\"air\" + 0.014*\"france\" + 0.011*\"thomson\" + 0.010*\"billion\" + 0.009*\"group\" + 0.007*\"government\" + 0.007*\"plan\" + 0.007*\"bid\"\n", "05:28:35 INFO:topic diff=0.568497, rho=0.353553\n", "05:28:35 INFO:PROGRESS: pass 7, at document #2500/2500\n", "05:28:35 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:36 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:36 DEBUG:updating topics\n", "05:28:37 INFO:topic #17 (0.050): 0.037*\"apple\" + 0.027*\"computer\" + 0.022*\"software\" + 0.021*\"quarter\" + 0.014*\"analyst\" + 0.013*\"microsoft\" + 0.010*\"sale\" + 0.010*\"share\" + 0.008*\"pc\" + 0.008*\"macintosh\"\n", "05:28:37 INFO:topic #2 (0.050): 0.011*\"share\" + 0.010*\"analyst\" + 0.007*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.005*\"business\"\n", "05:28:37 INFO:topic #3 (0.050): 0.027*\"bt\" + 0.017*\"telecom\" + 0.015*\"mci\" + 0.013*\"pound\" + 0.011*\"billion\" + 0.011*\"analyst\" + 0.011*\"deal\" + 0.010*\"british\" + 0.010*\"share\" + 0.010*\"group\"\n", "05:28:37 INFO:topic #13 (0.050): 0.018*\"china\" + 0.016*\"wang\" + 0.014*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"court\" + 0.009*\"chinese\" + 0.009*\"party\" + 0.008*\"government\" + 0.007*\"communist\" + 0.007*\"official\"\n", "05:28:37 INFO:topic #4 (0.050): 0.018*\"china\" + 0.011*\"official\" + 0.009*\"state\" + 0.008*\"beijing\" + 0.008*\"tibet\" + 0.007*\"chinese\" + 0.007*\"government\" + 0.007*\"wang\" + 0.006*\"people\" + 0.005*\"dissident\"\n", "05:28:37 INFO:topic diff=0.488932, rho=0.333333\n", "05:28:37 INFO:PROGRESS: pass 8, at document #2500/2500\n", "05:28:37 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:38 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:38 DEBUG:updating topics\n", "05:28:38 INFO:topic #17 (0.050): 0.037*\"apple\" + 0.027*\"computer\" + 0.022*\"software\" + 0.021*\"quarter\" + 0.014*\"analyst\" + 0.013*\"microsoft\" + 0.010*\"sale\" + 0.010*\"share\" + 0.008*\"pc\" + 0.008*\"macintosh\"\n", "05:28:38 INFO:topic #5 (0.050): 0.032*\"china\" + 0.016*\"chinese\" + 0.013*\"beijing\" + 0.012*\"official\" + 0.009*\"tonne\" + 0.007*\"hong\" + 0.007*\"hong_kong\" + 0.007*\"kong\" + 0.007*\"trade\" + 0.006*\"state\"\n", "05:28:38 INFO:topic #13 (0.050): 0.018*\"china\" + 0.016*\"wang\" + 0.014*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"chinese\" + 0.009*\"court\" + 0.009*\"party\" + 0.008*\"government\" + 0.007*\"communist\" + 0.007*\"official\"\n", "05:28:38 INFO:topic #14 (0.050): 0.012*\"pound\" + 0.011*\"profit\" + 0.010*\"share\" + 0.009*\"analyst\" + 0.009*\"group\" + 0.008*\"billion\" + 0.007*\"bank\" + 0.007*\"business\" + 0.006*\"million_pound\" + 0.005*\"british\"\n", "05:28:38 INFO:topic #6 (0.050): 0.019*\"share\" + 0.016*\"analyst\" + 0.012*\"shanghai\" + 0.011*\"bank\" + 0.009*\"stock\" + 0.007*\"b\" + 0.007*\"sale\" + 0.006*\"exchange\" + 0.006*\"base\" + 0.006*\"quarter\"\n", "05:28:38 INFO:topic diff=0.419457, rho=0.316228\n", "05:28:38 INFO:PROGRESS: pass 9, at document #2500/2500\n", "05:28:38 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:40 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:40 DEBUG:updating topics\n", "05:28:40 INFO:topic #3 (0.050): 0.027*\"bt\" + 0.017*\"telecom\" + 0.015*\"mci\" + 0.013*\"pound\" + 0.011*\"billion\" + 0.011*\"analyst\" + 0.011*\"deal\" + 0.010*\"british\" + 0.010*\"share\" + 0.010*\"group\"\n", "05:28:40 INFO:topic #1 (0.050): 0.018*\"bank\" + 0.011*\"fund\" + 0.009*\"billion\" + 0.008*\"china\" + 0.008*\"financial\" + 0.007*\"japan\" + 0.007*\"kong\" + 0.007*\"hong_kong\" + 0.007*\"hong\" + 0.006*\"analyst\"\n", "05:28:40 INFO:topic #15 (0.050): 0.010*\"bank\" + 0.009*\"stock\" + 0.008*\"analyst\" + 0.008*\"billion\" + 0.008*\"share\" + 0.008*\"oil\" + 0.007*\"canada\" + 0.007*\"toronto\" + 0.006*\"tonne\" + 0.006*\"russia\"\n", "05:28:40 INFO:topic #19 (0.050): 0.029*\"hong\" + 0.028*\"kong\" + 0.028*\"hong_kong\" + 0.019*\"Hong Kong\" + 0.019*\"china\" + 0.008*\"chinese\" + 0.007*\"tung\" + 0.007*\"Hong Kong's\" + 0.006*\"beijing\" + 0.006*\"airbus\"\n", "05:28:40 INFO:topic #8 (0.050): 0.028*\"gold\" + 0.026*\"bre\" + 0.026*\"bre_x\" + 0.026*\"x\" + 0.019*\"Bre-X\" + 0.015*\"barrick\" + 0.012*\"analyst\" + 0.011*\"busang\" + 0.010*\"indonesian\" + 0.009*\"government\"\n", "05:28:40 INFO:topic diff=0.359320, rho=0.301511\n", "05:28:40 INFO:PROGRESS: pass 10, at document #2500/2500\n", "05:28:40 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:41 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:41 DEBUG:updating topics\n", "05:28:41 INFO:topic #6 (0.050): 0.019*\"share\" + 0.016*\"analyst\" + 0.013*\"shanghai\" + 0.011*\"bank\" + 0.009*\"stock\" + 0.008*\"b\" + 0.007*\"sale\" + 0.007*\"exchange\" + 0.006*\"china\" + 0.006*\"base\"\n", "05:28:41 INFO:topic #11 (0.050): 0.042*\"gm\" + 0.028*\"plant\" + 0.016*\"uaw\" + 0.016*\"strike\" + 0.015*\"worker\" + 0.011*\"automaker\" + 0.010*\"local\" + 0.010*\"truck\" + 0.009*\"part\" + 0.008*\"ford\"\n", "05:28:41 INFO:topic #2 (0.050): 0.011*\"share\" + 0.010*\"analyst\" + 0.007*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.005*\"business\"\n", "05:28:41 INFO:topic #1 (0.050): 0.019*\"bank\" + 0.011*\"fund\" + 0.009*\"billion\" + 0.008*\"financial\" + 0.008*\"china\" + 0.008*\"japan\" + 0.007*\"kong\" + 0.007*\"hong_kong\" + 0.007*\"hong\" + 0.006*\"analyst\"\n", "05:28:41 INFO:topic #12 (0.050): 0.014*\"czech\" + 0.008*\"crown\" + 0.008*\"bank\" + 0.007*\"klaus\" + 0.007*\"government\" + 0.006*\"billion\" + 0.006*\"prague\" + 0.005*\"price\" + 0.005*\"foreign\" + 0.005*\"party\"\n", "05:28:41 INFO:topic diff=0.307661, rho=0.288675\n", "05:28:41 INFO:PROGRESS: pass 11, at document #2500/2500\n", "05:28:41 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:43 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:43 DEBUG:updating topics\n", "05:28:43 INFO:topic #15 (0.050): 0.011*\"bank\" + 0.009*\"stock\" + 0.008*\"billion\" + 0.008*\"analyst\" + 0.008*\"share\" + 0.008*\"oil\" + 0.007*\"canada\" + 0.007*\"toronto\" + 0.006*\"russia\" + 0.006*\"tonne\"\n", "05:28:43 INFO:topic #2 (0.050): 0.011*\"share\" + 0.010*\"analyst\" + 0.007*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.005*\"business\"\n", "05:28:43 INFO:topic #5 (0.050): 0.032*\"china\" + 0.016*\"chinese\" + 0.013*\"beijing\" + 0.012*\"official\" + 0.009*\"tonne\" + 0.007*\"hong\" + 0.007*\"hong_kong\" + 0.007*\"kong\" + 0.007*\"trade\" + 0.006*\"state\"\n", "05:28:43 INFO:topic #7 (0.050): 0.009*\"sale\" + 0.009*\"analyst\" + 0.007*\"share\" + 0.007*\"group\" + 0.006*\"profit\" + 0.006*\"business\" + 0.005*\"pound\" + 0.005*\"price\" + 0.005*\"billion\" + 0.005*\"executive\"\n", "05:28:43 INFO:topic #19 (0.050): 0.029*\"hong\" + 0.029*\"kong\" + 0.029*\"hong_kong\" + 0.019*\"Hong Kong\" + 0.019*\"china\" + 0.008*\"chinese\" + 0.008*\"tung\" + 0.007*\"Hong Kong's\" + 0.006*\"beijing\" + 0.006*\"airbus\"\n", "05:28:43 INFO:topic diff=0.263525, rho=0.277350\n", "05:28:43 INFO:PROGRESS: pass 12, at document #2500/2500\n", "05:28:43 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:44 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:44 DEBUG:updating topics\n", "05:28:45 INFO:topic #11 (0.050): 0.042*\"gm\" + 0.028*\"plant\" + 0.016*\"uaw\" + 0.016*\"strike\" + 0.015*\"worker\" + 0.011*\"automaker\" + 0.010*\"local\" + 0.010*\"truck\" + 0.009*\"part\" + 0.008*\"ford\"\n", "05:28:45 INFO:topic #13 (0.050): 0.018*\"china\" + 0.016*\"wang\" + 0.014*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"chinese\" + 0.009*\"court\" + 0.008*\"party\" + 0.008*\"government\" + 0.007*\"official\" + 0.007*\"communist\"\n", "05:28:45 INFO:topic #4 (0.050): 0.021*\"china\" + 0.012*\"official\" + 0.010*\"beijing\" + 0.009*\"chinese\" + 0.009*\"wang\" + 0.008*\"tibet\" + 0.007*\"state\" + 0.007*\"government\" + 0.006*\"people\" + 0.006*\"dissident\"\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:28:45 INFO:topic #16 (0.050): 0.020*\"franc\" + 0.018*\"french\" + 0.017*\"air\" + 0.017*\"france\" + 0.014*\"thomson\" + 0.012*\"billion\" + 0.010*\"group\" + 0.008*\"billion_franc\" + 0.008*\"telecom\" + 0.007*\"plan\"\n", "05:28:45 INFO:topic #18 (0.050): 0.014*\"analyst\" + 0.011*\"computer\" + 0.010*\"quarter\" + 0.010*\"internet\" + 0.008*\"share\" + 0.008*\"business\" + 0.008*\"service\" + 0.008*\"stock\" + 0.007*\"industry\" + 0.007*\"software\"\n", "05:28:45 INFO:topic diff=0.226015, rho=0.267261\n", "05:28:45 INFO:PROGRESS: pass 13, at document #2500/2500\n", "05:28:45 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:46 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:46 DEBUG:updating topics\n", "05:28:46 INFO:topic #4 (0.050): 0.021*\"china\" + 0.012*\"official\" + 0.010*\"beijing\" + 0.009*\"wang\" + 0.009*\"chinese\" + 0.008*\"tibet\" + 0.007*\"state\" + 0.007*\"government\" + 0.006*\"people\" + 0.006*\"dissident\"\n", "05:28:46 INFO:topic #3 (0.050): 0.027*\"bt\" + 0.017*\"telecom\" + 0.015*\"mci\" + 0.013*\"pound\" + 0.011*\"billion\" + 0.011*\"analyst\" + 0.011*\"deal\" + 0.010*\"british\" + 0.010*\"share\" + 0.010*\"group\"\n", "05:28:46 INFO:topic #12 (0.050): 0.015*\"czech\" + 0.009*\"crown\" + 0.008*\"bank\" + 0.007*\"klaus\" + 0.007*\"government\" + 0.006*\"prague\" + 0.006*\"billion\" + 0.005*\"foreign\" + 0.005*\"party\" + 0.005*\"price\"\n", "05:28:46 INFO:topic #19 (0.050): 0.030*\"hong\" + 0.030*\"kong\" + 0.030*\"hong_kong\" + 0.020*\"Hong Kong\" + 0.020*\"china\" + 0.008*\"chinese\" + 0.008*\"tung\" + 0.007*\"Hong Kong's\" + 0.007*\"beijing\" + 0.006*\"airbus\"\n", "05:28:46 INFO:topic #5 (0.050): 0.032*\"china\" + 0.016*\"chinese\" + 0.013*\"beijing\" + 0.012*\"official\" + 0.010*\"tonne\" + 0.007*\"hong\" + 0.007*\"kong\" + 0.007*\"hong_kong\" + 0.007*\"trade\" + 0.006*\"state\"\n", "05:28:46 INFO:topic diff=0.194260, rho=0.258199\n", "05:28:46 INFO:PROGRESS: pass 14, at document #2500/2500\n", "05:28:46 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:48 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:48 DEBUG:updating topics\n", "05:28:48 INFO:topic #5 (0.050): 0.033*\"china\" + 0.016*\"chinese\" + 0.013*\"beijing\" + 0.012*\"official\" + 0.010*\"tonne\" + 0.008*\"hong\" + 0.007*\"kong\" + 0.007*\"hong_kong\" + 0.007*\"trade\" + 0.007*\"state\"\n", "05:28:48 INFO:topic #13 (0.050): 0.018*\"china\" + 0.016*\"wang\" + 0.014*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"chinese\" + 0.009*\"court\" + 0.008*\"party\" + 0.008*\"government\" + 0.007*\"official\" + 0.007*\"communist\"\n", "05:28:48 INFO:topic #2 (0.050): 0.011*\"share\" + 0.010*\"analyst\" + 0.007*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.006*\"business\"\n", "05:28:48 INFO:topic #0 (0.050): 0.011*\"bank\" + 0.009*\"internet\" + 0.009*\"fcc\" + 0.008*\"service\" + 0.008*\"phone\" + 0.007*\"rule\" + 0.006*\"local\" + 0.006*\"tv\" + 0.006*\"court\" + 0.006*\"law\"\n", "05:28:48 INFO:topic #16 (0.050): 0.020*\"franc\" + 0.019*\"french\" + 0.018*\"air\" + 0.017*\"france\" + 0.014*\"thomson\" + 0.013*\"billion\" + 0.010*\"group\" + 0.008*\"billion_franc\" + 0.008*\"telecom\" + 0.007*\"plan\"\n", "05:28:48 INFO:topic diff=0.167433, rho=0.250000\n", "05:28:48 INFO:PROGRESS: pass 15, at document #2500/2500\n", "05:28:48 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:49 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:49 DEBUG:updating topics\n", "05:28:49 INFO:topic #3 (0.050): 0.027*\"bt\" + 0.017*\"telecom\" + 0.015*\"mci\" + 0.013*\"pound\" + 0.011*\"analyst\" + 0.011*\"billion\" + 0.011*\"deal\" + 0.010*\"british\" + 0.010*\"share\" + 0.010*\"group\"\n", "05:28:49 INFO:topic #10 (0.050): 0.001*\"billion\" + 0.000*\"bank\" + 0.000*\"loan\" + 0.000*\"tonne\" + 0.000*\"yen\" + 0.000*\"price\" + 0.000*\"exporter\" + 0.000*\"real_estate\" + 0.000*\"analyst\" + 0.000*\"real\"\n", "05:28:49 INFO:topic #5 (0.050): 0.033*\"china\" + 0.017*\"chinese\" + 0.013*\"beijing\" + 0.012*\"official\" + 0.010*\"tonne\" + 0.008*\"hong\" + 0.008*\"kong\" + 0.007*\"hong_kong\" + 0.007*\"trade\" + 0.007*\"state\"\n", "05:28:49 INFO:topic #4 (0.050): 0.021*\"china\" + 0.012*\"official\" + 0.011*\"beijing\" + 0.009*\"wang\" + 0.009*\"chinese\" + 0.008*\"tibet\" + 0.007*\"state\" + 0.007*\"government\" + 0.006*\"people\" + 0.006*\"dissident\"\n", "05:28:49 INFO:topic #0 (0.050): 0.010*\"bank\" + 0.009*\"internet\" + 0.009*\"fcc\" + 0.008*\"service\" + 0.008*\"phone\" + 0.007*\"rule\" + 0.007*\"local\" + 0.007*\"tv\" + 0.006*\"court\" + 0.006*\"law\"\n", "05:28:49 INFO:topic diff=0.144777, rho=0.242536\n", "05:28:49 INFO:PROGRESS: pass 16, at document #2500/2500\n", "05:28:49 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:51 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:51 DEBUG:updating topics\n", "05:28:51 INFO:topic #2 (0.050): 0.011*\"share\" + 0.010*\"analyst\" + 0.007*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.006*\"business\"\n", "05:28:51 INFO:topic #9 (0.050): 0.016*\"drug\" + 0.013*\"colombia\" + 0.006*\"government\" + 0.006*\"united\" + 0.005*\"colombian\" + 0.005*\"guerrilla\" + 0.005*\"force\" + 0.004*\"oil\" + 0.004*\"country\" + 0.004*\"police\"\n", "05:28:51 INFO:topic #7 (0.050): 0.009*\"sale\" + 0.008*\"analyst\" + 0.007*\"share\" + 0.007*\"group\" + 0.007*\"profit\" + 0.006*\"business\" + 0.005*\"pound\" + 0.005*\"price\" + 0.005*\"billion\" + 0.005*\"executive\"\n", "05:28:51 INFO:topic #4 (0.050): 0.021*\"china\" + 0.012*\"official\" + 0.011*\"beijing\" + 0.009*\"wang\" + 0.009*\"chinese\" + 0.008*\"tibet\" + 0.007*\"state\" + 0.007*\"government\" + 0.006*\"people\" + 0.006*\"dissident\"\n", "05:28:51 INFO:topic #13 (0.050): 0.018*\"china\" + 0.016*\"wang\" + 0.014*\"beijing\" + 0.012*\"taiwan\" + 0.009*\"chinese\" + 0.009*\"court\" + 0.008*\"party\" + 0.008*\"government\" + 0.007*\"official\" + 0.007*\"communist\"\n", "05:28:51 INFO:topic diff=0.125646, rho=0.235702\n", "05:28:51 INFO:PROGRESS: pass 17, at document #2500/2500\n", "05:28:51 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:52 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:52 DEBUG:updating topics\n", "05:28:52 INFO:topic #6 (0.050): 0.019*\"share\" + 0.016*\"analyst\" + 0.013*\"shanghai\" + 0.012*\"bank\" + 0.009*\"stock\" + 0.008*\"china\" + 0.007*\"b\" + 0.007*\"sale\" + 0.007*\"exchange\" + 0.006*\"base\"\n", "05:28:52 INFO:topic #14 (0.050): 0.011*\"pound\" + 0.011*\"profit\" + 0.010*\"share\" + 0.009*\"analyst\" + 0.009*\"group\" + 0.008*\"billion\" + 0.007*\"bank\" + 0.007*\"business\" + 0.006*\"million_pound\" + 0.005*\"british\"\n", "05:28:52 INFO:topic #17 (0.050): 0.036*\"apple\" + 0.026*\"computer\" + 0.021*\"software\" + 0.021*\"quarter\" + 0.014*\"analyst\" + 0.013*\"microsoft\" + 0.010*\"sale\" + 0.010*\"share\" + 0.008*\"pc\" + 0.008*\"technology\"\n", "05:28:52 INFO:topic #7 (0.050): 0.009*\"sale\" + 0.008*\"analyst\" + 0.007*\"share\" + 0.007*\"group\" + 0.007*\"profit\" + 0.006*\"business\" + 0.005*\"pound\" + 0.005*\"price\" + 0.005*\"billion\" + 0.005*\"executive\"\n", "05:28:52 INFO:topic #8 (0.050): 0.028*\"gold\" + 0.026*\"bre\" + 0.026*\"bre_x\" + 0.026*\"x\" + 0.019*\"Bre-X\" + 0.016*\"barrick\" + 0.012*\"analyst\" + 0.011*\"busang\" + 0.010*\"indonesian\" + 0.009*\"government\"\n", "05:28:52 INFO:topic diff=0.109484, rho=0.229416\n", "05:28:52 INFO:PROGRESS: pass 18, at document #2500/2500\n", "05:28:52 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:54 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:28:54 DEBUG:updating topics\n", "05:28:54 INFO:topic #2 (0.050): 0.011*\"share\" + 0.010*\"analyst\" + 0.007*\"service\" + 0.007*\"billion\" + 0.007*\"deal\" + 0.006*\"offer\" + 0.006*\"stock\" + 0.006*\"corp\" + 0.006*\"industry\" + 0.006*\"business\"\n", "05:28:54 INFO:topic #15 (0.050): 0.012*\"bank\" + 0.009*\"stock\" + 0.008*\"billion\" + 0.008*\"analyst\" + 0.008*\"oil\" + 0.007*\"canada\" + 0.007*\"share\" + 0.007*\"toronto\" + 0.007*\"russia\" + 0.006*\"tonne\"\n", "05:28:54 INFO:topic #0 (0.050): 0.010*\"bank\" + 0.009*\"internet\" + 0.009*\"fcc\" + 0.009*\"service\" + 0.008*\"phone\" + 0.007*\"rule\" + 0.007*\"local\" + 0.007*\"tv\" + 0.007*\"court\" + 0.006*\"law\"\n", "05:28:54 INFO:topic #7 (0.050): 0.009*\"sale\" + 0.008*\"analyst\" + 0.007*\"share\" + 0.007*\"group\" + 0.007*\"profit\" + 0.006*\"business\" + 0.005*\"pound\" + 0.005*\"price\" + 0.005*\"billion\" + 0.005*\"executive\"\n", "05:28:54 INFO:topic #18 (0.050): 0.014*\"analyst\" + 0.011*\"computer\" + 0.010*\"quarter\" + 0.010*\"internet\" + 0.008*\"share\" + 0.008*\"business\" + 0.008*\"stock\" + 0.008*\"service\" + 0.007*\"industry\" + 0.007*\"software\"\n", "05:28:54 INFO:topic diff=0.095805, rho=0.223607\n", "05:28:54 INFO:PROGRESS: pass 19, at document #2500/2500\n", "05:28:54 DEBUG:performing inference on a chunk of 2500 documents\n", "05:28:55 DEBUG:2500/2500 documents converged within 50 iterations\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:28:55 DEBUG:updating topics\n", "05:28:55 INFO:topic #7 (0.050): 0.009*\"sale\" + 0.008*\"analyst\" + 0.007*\"share\" + 0.007*\"group\" + 0.007*\"profit\" + 0.006*\"business\" + 0.005*\"pound\" + 0.005*\"price\" + 0.005*\"billion\" + 0.005*\"executive\"\n", "05:28:55 INFO:topic #4 (0.050): 0.022*\"china\" + 0.012*\"official\" + 0.011*\"beijing\" + 0.010*\"wang\" + 0.009*\"chinese\" + 0.008*\"tibet\" + 0.007*\"state\" + 0.007*\"government\" + 0.007*\"people\" + 0.006*\"dissident\"\n", "05:28:55 INFO:topic #19 (0.050): 0.032*\"hong\" + 0.031*\"kong\" + 0.031*\"hong_kong\" + 0.021*\"Hong Kong\" + 0.021*\"china\" + 0.009*\"chinese\" + 0.008*\"tung\" + 0.008*\"Hong Kong's\" + 0.007*\"beijing\" + 0.007*\"airbus\"\n", "05:28:55 INFO:topic #3 (0.050): 0.027*\"bt\" + 0.018*\"telecom\" + 0.015*\"mci\" + 0.013*\"pound\" + 0.011*\"deal\" + 0.011*\"analyst\" + 0.011*\"billion\" + 0.011*\"british\" + 0.010*\"share\" + 0.010*\"group\"\n", "05:28:55 INFO:topic #8 (0.050): 0.028*\"gold\" + 0.026*\"bre\" + 0.026*\"bre_x\" + 0.026*\"x\" + 0.019*\"Bre-X\" + 0.016*\"barrick\" + 0.012*\"analyst\" + 0.011*\"busang\" + 0.010*\"indonesian\" + 0.009*\"government\"\n", "05:28:55 INFO:topic diff=0.084200, rho=0.218218\n", "05:28:55 DEBUG:Setting topics to those of the model: AuthorTopicModel(num_terms=3914, num_topics=20, num_authors=50, decay=0.5, chunksize=2500)\n", "05:28:55 INFO:CorpusAccumulator accumulated stats from 1000 documents\n", "05:28:55 INFO:CorpusAccumulator accumulated stats from 2000 documents\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-1.50354141347\n" ] } ], "source": [ "atmodel_standard = train_model(train_corpus_50_20, train_author2doc, train_dictionary_50_20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We run our first training and observe that the **passes** and **iterations** parameters are set high enough, so that the model converges.\n", "\n", "07:47:24 INFO:PROGRESS: pass 15, at document #2500/2500\n", "\n", "07:47:24 DEBUG:performing inference on a chunk of 2500 documents \n", "\n", "07:47:27 DEBUG:2500/2500 documents converged within 50 iterations \n", "\n", "Tells us that the model indeed conveges well." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision@k: top_n=1\n", "Prediction accuracy: 0.3548\n", "Precision@k: top_n=2\n", "Prediction accuracy: 0.5228\n", "Precision@k: top_n=3\n", "Prediction accuracy: 0.6456\n", "Precision@k: top_n=4\n", "Prediction accuracy: 0.7208\n", "Precision@k: top_n=5\n", "Prediction accuracy: 0.7748\n", "Precision@k: top_n=6\n", "Prediction accuracy: 0.8188\n", "Precision@k: top_n=8\n", "Prediction accuracy: 0.8576\n", "Precision@k: top_n=10\n", "Prediction accuracy: 0.8936\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "accuracy_scores_20topic={}\n", "for i in [1,2,3,4,5,6,8,10]:\n", " accuracy, k = prediction_accuracy(test_author2doc, test_corpus_50_20, atmodel_standard, k=i)\n", " accuracy_scores_20topic[k] = accuracy\n", " \n", "plot_accuracy(scores1=accuracy_scores_20topic, label1=\"20 topics\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a rather poor accuracy performace. We increase the number of topic to 100." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "05:31:51 INFO:Vocabulary consists of 3914 words.\n", "05:31:51 INFO:using symmetric alpha at 0.01\n", "05:31:51 INFO:using symmetric eta at 0.01\n", "05:31:53 INFO:running online author-topic training, 100 topics, 50 authors, 10 passes over the supplied corpus of 2500 documents, updating model once every 2500 documents, evaluating perplexity every 0 documents, iterating 50x with a convergence threshold of 0.001000\n", "05:31:53 INFO:PROGRESS: pass 0, at document #2500/2500\n", "05:31:53 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:05 DEBUG:5/2500 documents converged within 50 iterations\n", "05:32:05 DEBUG:updating topics\n", "05:32:05 INFO:topic #18 (0.010): 0.007*\"analyst\" + 0.007*\"business\" + 0.005*\"billion\" + 0.005*\"stock\" + 0.005*\"boeing\" + 0.004*\"quarter\" + 0.004*\"industry\" + 0.004*\"share\" + 0.004*\"shareholder\" + 0.004*\"sale\"\n", "05:32:05 INFO:topic #71 (0.010): 0.015*\"fcc\" + 0.015*\"phone\" + 0.011*\"local\" + 0.011*\"carrier\" + 0.010*\"service\" + 0.009*\"rule\" + 0.008*\"court\" + 0.008*\"distance\" + 0.008*\"long\" + 0.007*\"tv\"\n", "05:32:05 INFO:topic #79 (0.010): 0.011*\"china\" + 0.010*\"beijing\" + 0.007*\"official\" + 0.006*\"chinese\" + 0.006*\"lama\" + 0.006*\"tibet\" + 0.006*\"share\" + 0.005*\"analyst\" + 0.005*\"region\" + 0.005*\"billion\"\n", "05:32:05 INFO:topic #93 (0.010): 0.015*\"ibm\" + 0.011*\"analyst\" + 0.011*\"computer\" + 0.010*\"pc\" + 0.009*\"sale\" + 0.009*\"quarter\" + 0.008*\"industry\" + 0.008*\"price\" + 0.007*\"consumer\" + 0.007*\"service\"\n", "05:32:05 INFO:topic #99 (0.010): 0.008*\"world\" + 0.008*\"czech\" + 0.007*\"analyst\" + 0.006*\"stock\" + 0.006*\"win\" + 0.005*\"billion\" + 0.005*\"team\" + 0.005*\"game\" + 0.005*\"bank\" + 0.005*\"second\"\n", "05:32:05 INFO:topic diff=25.070898, rho=1.000000\n", "05:32:05 INFO:PROGRESS: pass 1, at document #2500/2500\n", "05:32:05 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:12 DEBUG:2492/2500 documents converged within 50 iterations\n", "05:32:12 DEBUG:updating topics\n", "05:32:12 INFO:topic #70 (0.010): 0.019*\"shanghai\" + 0.018*\"share\" + 0.017*\"china\" + 0.011*\"stock\" + 0.011*\"beijing\" + 0.010*\"b\" + 0.010*\"foreign\" + 0.010*\"exchange\" + 0.009*\"analyst\" + 0.008*\"investor\"\n", "05:32:12 INFO:topic #2 (0.010): 0.020*\"mci\" + 0.012*\"long\" + 0.012*\"service\" + 0.010*\"distance\" + 0.010*\"analyst\" + 0.010*\"sprint\" + 0.010*\"billion\" + 0.010*\"corp\" + 0.008*\"local\" + 0.008*\"deal\"\n", "05:32:12 INFO:topic #57 (0.010): 0.024*\"china\" + 0.013*\"beijing\" + 0.011*\"chinese\" + 0.010*\"wang\" + 0.010*\"hong_kong\" + 0.009*\"hong\" + 0.008*\"kong\" + 0.008*\"official\" + 0.007*\"Hong Kong\" + 0.006*\"people\"\n", "05:32:12 INFO:topic #45 (0.010): 0.021*\"time\" + 0.016*\"executive\" + 0.013*\"cable\" + 0.011*\"rise\" + 0.011*\"sale\" + 0.010*\"billion\" + 0.009*\"quarter\" + 0.008*\"share\" + 0.008*\"group\" + 0.007*\"analyst\"\n", "05:32:12 INFO:topic #18 (0.010): 0.007*\"analyst\" + 0.006*\"business\" + 0.005*\"billion\" + 0.004*\"stock\" + 0.004*\"boeing\" + 0.004*\"quarter\" + 0.004*\"industry\" + 0.004*\"share\" + 0.004*\"shareholder\" + 0.003*\"sale\"\n", "05:32:12 INFO:topic diff=7.998665, rho=0.577350\n", "05:32:12 INFO:PROGRESS: pass 2, at document #2500/2500\n", "05:32:12 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:19 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:19 DEBUG:updating topics\n", "05:32:19 INFO:topic #70 (0.010): 0.021*\"share\" + 0.021*\"shanghai\" + 0.019*\"china\" + 0.012*\"b\" + 0.011*\"foreign\" + 0.011*\"stock\" + 0.011*\"bank\" + 0.011*\"analyst\" + 0.010*\"beijing\" + 0.010*\"exchange\"\n", "05:32:19 INFO:topic #71 (0.010): 0.020*\"fcc\" + 0.015*\"phone\" + 0.013*\"carrier\" + 0.013*\"tv\" + 0.012*\"local\" + 0.010*\"service\" + 0.010*\"rule\" + 0.010*\"long\" + 0.009*\"distance\" + 0.008*\"long_distance\"\n", "05:32:19 INFO:topic #22 (0.010): 0.033*\"bank\" + 0.010*\"rate\" + 0.010*\"cut\" + 0.009*\"analyst\" + 0.008*\"day\" + 0.008*\"merger\" + 0.007*\"profit\" + 0.007*\"australia\" + 0.007*\"financial\" + 0.006*\"ltd\"\n", "05:32:19 INFO:topic #18 (0.010): 0.006*\"analyst\" + 0.005*\"business\" + 0.004*\"billion\" + 0.004*\"stock\" + 0.004*\"boeing\" + 0.003*\"quarter\" + 0.003*\"industry\" + 0.003*\"share\" + 0.003*\"shareholder\" + 0.003*\"sale\"\n", "05:32:19 INFO:topic #5 (0.010): 0.018*\"china\" + 0.009*\"beijing\" + 0.008*\"tonne\" + 0.007*\"chinese\" + 0.006*\"official\" + 0.005*\"trade\" + 0.005*\"price\" + 0.005*\"chen\" + 0.005*\"trader\" + 0.004*\"million_tonne\"\n", "05:32:19 INFO:topic diff=7.090922, rho=0.500000\n", "05:32:19 INFO:PROGRESS: pass 3, at document #2500/2500\n", "05:32:19 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:25 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:25 DEBUG:updating topics\n", "05:32:26 INFO:topic #9 (0.010): 0.004*\"analyst\" + 0.003*\"government\" + 0.002*\"share\" + 0.002*\"china\" + 0.002*\"cost\" + 0.002*\"sale\" + 0.002*\"right\" + 0.002*\"stock\" + 0.002*\"big\" + 0.002*\"end\"\n", "05:32:26 INFO:topic #20 (0.010): 0.016*\"gold\" + 0.016*\"bre\" + 0.015*\"x\" + 0.015*\"bre_x\" + 0.010*\"barrick\" + 0.009*\"Bre-X\" + 0.008*\"gm\" + 0.008*\"price\" + 0.008*\"analyst\" + 0.008*\"plant\"\n", "05:32:26 INFO:topic #4 (0.010): 0.015*\"franc\" + 0.015*\"thomson\" + 0.014*\"french\" + 0.009*\"group\" + 0.009*\"share\" + 0.008*\"france\" + 0.008*\"government\" + 0.008*\"plan\" + 0.008*\"lagardere\" + 0.007*\"billion\"\n", "05:32:26 INFO:topic #87 (0.010): 0.017*\"analyst\" + 0.011*\"sale\" + 0.010*\"share\" + 0.009*\"business\" + 0.008*\"quarter\" + 0.008*\"price\" + 0.007*\"add\" + 0.007*\"chemical\" + 0.006*\"stock\" + 0.006*\"earning\"\n", "05:32:26 INFO:topic #62 (0.010): 0.022*\"profit\" + 0.014*\"pound\" + 0.011*\"sale\" + 0.011*\"rise\" + 0.010*\"analyst\" + 0.010*\"stg\" + 0.010*\"group\" + 0.009*\"business\" + 0.009*\"half\" + 0.009*\"million_stg\"\n", "05:32:26 INFO:topic diff=6.178695, rho=0.447214\n", "05:32:26 INFO:PROGRESS: pass 4, at document #2500/2500\n", "05:32:26 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:31 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:31 DEBUG:updating topics\n", "05:32:32 INFO:topic #47 (0.010): 0.012*\"gold\" + 0.008*\"oil\" + 0.008*\"share\" + 0.007*\"stock\" + 0.006*\"analyst\" + 0.006*\"government\" + 0.006*\"price\" + 0.006*\"colombia\" + 0.005*\"rise\" + 0.005*\"issue\"\n", "05:32:32 INFO:topic #86 (0.010): 0.014*\"cargo\" + 0.010*\"service\" + 0.010*\"kong\" + 0.009*\"hong\" + 0.009*\"air\" + 0.009*\"airline\" + 0.008*\"hong_kong\" + 0.007*\"Hong Kong\" + 0.007*\"route\" + 0.006*\"rate\"\n", "05:32:32 INFO:topic #25 (0.010): 0.010*\"boeing\" + 0.009*\"share\" + 0.009*\"analyst\" + 0.007*\"billion\" + 0.006*\"service\" + 0.006*\"mci\" + 0.006*\"business\" + 0.005*\"stock\" + 0.005*\"jet\" + 0.005*\"growth\"\n", "05:32:32 INFO:topic #74 (0.010): 0.043*\"china\" + 0.020*\"chinese\" + 0.014*\"official\" + 0.014*\"beijing\" + 0.010*\"trade\" + 0.009*\"state\" + 0.007*\"states\" + 0.006*\"united\" + 0.006*\"united_states\" + 0.006*\"import\"\n", "05:32:32 INFO:topic #53 (0.010): 0.032*\"fund\" + 0.012*\"investment\" + 0.011*\"hong_kong\" + 0.011*\"hong\" + 0.010*\"stock\" + 0.010*\"management\" + 0.010*\"week\" + 0.009*\"manager\" + 0.009*\"billion\" + 0.009*\"kong\"\n", "05:32:32 INFO:topic diff=5.327576, rho=0.408248\n", "05:32:32 INFO:PROGRESS: pass 5, at document #2500/2500\n", "05:32:32 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:36 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:36 DEBUG:updating topics\n", "05:32:37 INFO:topic #60 (0.010): 0.002*\"financial\" + 0.002*\"official\" + 0.002*\"stock\" + 0.002*\"policy\" + 0.002*\"group\" + 0.002*\"share\" + 0.002*\"china\" + 0.001*\"chinese\" + 0.001*\"beijing\" + 0.001*\"bank\"\n", "05:32:37 INFO:topic #77 (0.010): 0.006*\"computer\" + 0.005*\"internet\" + 0.005*\"quarter\" + 0.005*\"analyst\" + 0.004*\"business\" + 0.004*\"share\" + 0.004*\"service\" + 0.003*\"profit\" + 0.003*\"industry\" + 0.003*\"system\"\n", "05:32:37 INFO:topic #43 (0.010): 0.003*\"bre_x\" + 0.003*\"bre\" + 0.002*\"analyst\" + 0.002*\"gold\" + 0.002*\"barrick\" + 0.002*\"government\" + 0.002*\"Bre-X\" + 0.002*\"x\" + 0.002*\"share\" + 0.002*\"stock\"\n", "05:32:37 INFO:topic #10 (0.010): 0.002*\"billion\" + 0.001*\"investment\" + 0.001*\"tonne\" + 0.001*\"quarter\" + 0.001*\"venture\" + 0.001*\"industry\" + 0.001*\"price\" + 0.001*\"cocoa\" + 0.001*\"coast\" + 0.001*\"month\"\n", "05:32:37 INFO:topic #99 (0.010): 0.005*\"world\" + 0.005*\"czech\" + 0.004*\"analyst\" + 0.004*\"stock\" + 0.004*\"win\" + 0.003*\"billion\" + 0.003*\"team\" + 0.003*\"game\" + 0.003*\"bank\" + 0.003*\"second\"\n", "05:32:37 INFO:topic diff=4.560862, rho=0.377964\n", "05:32:37 INFO:PROGRESS: pass 6, at document #2500/2500\n", "05:32:37 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:41 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:41 DEBUG:updating topics\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:32:41 INFO:topic #38 (0.010): 0.015*\"analyst\" + 0.014*\"australian\" + 0.013*\"ltd\" + 0.012*\"share\" + 0.011*\"australia\" + 0.011*\"profit\" + 0.010*\"sydney\" + 0.009*\"group\" + 0.009*\"news\" + 0.008*\"corp\"\n", "05:32:41 INFO:topic #46 (0.010): 0.004*\"hong\" + 0.004*\"kong\" + 0.003*\"china\" + 0.002*\"Hong Kong\" + 0.002*\"official\" + 0.002*\"hong_kong\" + 0.002*\"chinese\" + 0.002*\"united\" + 0.002*\"singapore\" + 0.001*\"month\"\n", "05:32:41 INFO:topic #97 (0.010): 0.021*\"internet\" + 0.017*\"bank\" + 0.008*\"law\" + 0.008*\"court\" + 0.008*\"congress\" + 0.007*\"service\" + 0.007*\"credit\" + 0.007*\"allow\" + 0.007*\"bill\" + 0.006*\"policy\"\n", "05:32:41 INFO:topic #75 (0.010): 0.028*\"bank\" + 0.016*\"japan\" + 0.015*\"billion\" + 0.014*\"yen\" + 0.014*\"financial\" + 0.012*\"loan\" + 0.011*\"japanese\" + 0.010*\"problem\" + 0.010*\"analyst\" + 0.009*\"firm\"\n", "05:32:41 INFO:topic #11 (0.010): 0.063*\"gm\" + 0.032*\"plant\" + 0.024*\"strike\" + 0.021*\"automaker\" + 0.021*\"worker\" + 0.017*\"uaw\" + 0.013*\"truck\" + 0.013*\"local\" + 0.013*\"union\" + 0.012*\"chrysler\"\n", "05:32:41 INFO:topic diff=3.882969, rho=0.353553\n", "05:32:41 INFO:PROGRESS: pass 7, at document #2500/2500\n", "05:32:41 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:46 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:46 DEBUG:updating topics\n", "05:32:46 INFO:topic #82 (0.010): 0.003*\"quarter\" + 0.003*\"executive\" + 0.003*\"internet\" + 0.003*\"high\" + 0.003*\"share\" + 0.002*\"loss\" + 0.002*\"technology\" + 0.002*\"high_tech\" + 0.002*\"stock\" + 0.002*\"software\"\n", "05:32:46 INFO:topic #38 (0.010): 0.015*\"analyst\" + 0.014*\"australian\" + 0.013*\"ltd\" + 0.012*\"share\" + 0.011*\"australia\" + 0.011*\"profit\" + 0.010*\"sydney\" + 0.009*\"group\" + 0.009*\"news\" + 0.008*\"corp\"\n", "05:32:46 INFO:topic #9 (0.010): 0.001*\"analyst\" + 0.001*\"government\" + 0.001*\"share\" + 0.001*\"china\" + 0.001*\"cost\" + 0.001*\"sale\" + 0.001*\"right\" + 0.001*\"stock\" + 0.001*\"big\" + 0.001*\"end\"\n", "05:32:46 INFO:topic #13 (0.010): 0.001*\"china\" + 0.001*\"share\" + 0.001*\"official\" + 0.001*\"analyst\" + 0.001*\"group\" + 0.001*\"sale\" + 0.001*\"beijing\" + 0.001*\"party\" + 0.001*\"month\" + 0.001*\"billion\"\n", "05:32:46 INFO:topic #76 (0.010): 0.024*\"cocoa\" + 0.019*\"exporter\" + 0.019*\"tonne\" + 0.012*\"ivory\" + 0.012*\"coast\" + 0.012*\"ivory_coast\" + 0.011*\"crop\" + 0.011*\"price\" + 0.010*\"buyer\" + 0.009*\"export\"\n", "05:32:46 INFO:topic diff=3.291750, rho=0.333333\n", "05:32:46 INFO:PROGRESS: pass 8, at document #2500/2500\n", "05:32:46 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:50 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:50 DEBUG:updating topics\n", "05:32:50 INFO:topic #18 (0.010): 0.001*\"analyst\" + 0.001*\"business\" + 0.001*\"billion\" + 0.001*\"stock\" + 0.001*\"boeing\" + 0.001*\"quarter\" + 0.001*\"industry\" + 0.001*\"share\" + 0.001*\"shareholder\" + 0.001*\"sale\"\n", "05:32:50 INFO:topic #61 (0.010): 0.014*\"analyst\" + 0.014*\"microsoft\" + 0.010*\"share\" + 0.009*\"software\" + 0.009*\"quarter\" + 0.009*\"boeing\" + 0.009*\"office\" + 0.008*\"computer\" + 0.008*\"worker\" + 0.008*\"fiscal\"\n", "05:32:50 INFO:topic #2 (0.010): 0.019*\"mci\" + 0.013*\"analyst\" + 0.011*\"long\" + 0.011*\"share\" + 0.011*\"service\" + 0.010*\"distance\" + 0.010*\"long_distance\" + 0.010*\"billion\" + 0.010*\"corp\" + 0.008*\"local\"\n", "05:32:50 INFO:topic #98 (0.010): 0.031*\"tonne\" + 0.030*\"china\" + 0.019*\"trader\" + 0.018*\"chinese\" + 0.018*\"price\" + 0.016*\"hong_kong\" + 0.016*\"hong\" + 0.016*\"kong\" + 0.013*\"source\" + 0.013*\"import\"\n", "05:32:50 INFO:topic #71 (0.010): 0.019*\"fcc\" + 0.014*\"tv\" + 0.014*\"phone\" + 0.013*\"carrier\" + 0.011*\"local\" + 0.010*\"service\" + 0.010*\"long\" + 0.009*\"rule\" + 0.009*\"distance\" + 0.009*\"long_distance\"\n", "05:32:50 INFO:topic diff=2.781235, rho=0.316228\n", "05:32:50 INFO:PROGRESS: pass 9, at document #2500/2500\n", "05:32:50 DEBUG:performing inference on a chunk of 2500 documents\n", "05:32:54 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:32:54 DEBUG:updating topics\n", "05:32:55 INFO:topic #99 (0.010): 0.002*\"world\" + 0.002*\"czech\" + 0.002*\"analyst\" + 0.002*\"stock\" + 0.002*\"win\" + 0.001*\"billion\" + 0.001*\"team\" + 0.001*\"game\" + 0.001*\"bank\" + 0.001*\"second\"\n", "05:32:55 INFO:topic #26 (0.010): 0.003*\"business\" + 0.002*\"analyst\" + 0.002*\"gm\" + 0.001*\"share\" + 0.001*\"internet\" + 0.001*\"billion\" + 0.001*\"stock\" + 0.001*\"access\" + 0.001*\"chemical\" + 0.001*\"service\"\n", "05:32:55 INFO:topic #80 (0.010): 0.012*\"analyst\" + 0.012*\"computer\" + 0.009*\"stock\" + 0.009*\"internet\" + 0.008*\"quarter\" + 0.008*\"technology\" + 0.008*\"service\" + 0.007*\"software\" + 0.007*\"share\" + 0.007*\"business\"\n", "05:32:55 INFO:topic #67 (0.010): 0.045*\"gm\" + 0.033*\"plant\" + 0.021*\"uaw\" + 0.017*\"strike\" + 0.017*\"worker\" + 0.012*\"part\" + 0.011*\"local\" + 0.010*\"truck\" + 0.010*\"automaker\" + 0.010*\"contract\"\n", "05:32:55 INFO:topic #97 (0.010): 0.021*\"internet\" + 0.017*\"bank\" + 0.008*\"law\" + 0.008*\"court\" + 0.008*\"congress\" + 0.007*\"service\" + 0.007*\"credit\" + 0.007*\"allow\" + 0.007*\"bill\" + 0.006*\"policy\"\n", "05:32:55 INFO:topic diff=2.344407, rho=0.301511\n", "05:32:55 DEBUG:Setting topics to those of the model: AuthorTopicModel(num_terms=3914, num_topics=100, num_authors=50, decay=0.5, chunksize=2500)\n", "05:32:55 INFO:CorpusAccumulator accumulated stats from 1000 documents\n", "05:32:55 INFO:CorpusAccumulator accumulated stats from 2000 documents\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-1.89056657258\n" ] } ], "source": [ "atmodel_100topics = train_model(train_corpus_50_20, train_author2doc, train_dictionary_50_20, num_topics=100, eval_every=0, iterations=50, passes=10)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision@k: top_n=1\n", "Prediction accuracy: 0.5808\n", "Precision@k: top_n=2\n", "Prediction accuracy: 0.7472\n", "Precision@k: top_n=3\n", "Prediction accuracy: 0.8252\n", "Precision@k: top_n=4\n", "Prediction accuracy: 0.8732\n", "Precision@k: top_n=5\n", "Prediction accuracy: 0.8956\n", "Precision@k: top_n=6\n", "Prediction accuracy: 0.9072\n", "Precision@k: top_n=8\n", "Prediction accuracy: 0.9276\n", "Precision@k: top_n=10\n", "Prediction accuracy: 0.9412\n" ] }, { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "accuracy_scores_100topic={}\n", "for i in [1,2,3,4,5,6,8,10]:\n", " accuracy, k = prediction_accuracy(test_author2doc, test_corpus_50_20, atmodel_100topics, k=i)\n", " accuracy_scores_100topic[k] = accuracy\n", " \n", "plot_accuracy(scores1=accuracy_scores_20topic, label1=\"20 topics\", scores2=accuracy_scores_100topic, label2=\"100 topics\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 100-topic model is much more accurate than the 20-topic model. We continue to increase the topic until convergence." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "05:36:37 INFO:Vocabulary consists of 3914 words.\n", "05:36:37 INFO:using symmetric alpha at 0.006666666666666667\n", "05:36:37 INFO:using symmetric eta at 0.006666666666666667\n", "05:36:40 INFO:running online author-topic training, 150 topics, 50 authors, 15 passes over the supplied corpus of 2500 documents, updating model once every 2500 documents, evaluating perplexity every 0 documents, iterating 50x with a convergence threshold of 0.001000\n", "05:36:40 INFO:PROGRESS: pass 0, at document #2500/2500\n", "05:36:40 DEBUG:performing inference on a chunk of 2500 documents\n", "05:36:55 DEBUG:15/2500 documents converged within 50 iterations\n", "05:36:55 DEBUG:updating topics\n", "05:36:56 INFO:topic #51 (0.007): 0.015*\"profit\" + 0.012*\"price\" + 0.012*\"group\" + 0.012*\"analyst\" + 0.009*\"share\" + 0.009*\"steel\" + 0.008*\"tell\" + 0.008*\"australian\" + 0.007*\"month\" + 0.007*\"forecast\"\n", "05:36:56 INFO:topic #86 (0.007): 0.011*\"china\" + 0.008*\"kong\" + 0.007*\"hong\" + 0.007*\"cargo\" + 0.006*\"hong_kong\" + 0.006*\"service\" + 0.006*\"Hong Kong\" + 0.005*\"profit\" + 0.005*\"analyst\" + 0.005*\"month\"\n", "05:36:56 INFO:topic #125 (0.007): 0.009*\"analyst\" + 0.007*\"share\" + 0.007*\"bank\" + 0.005*\"problem\" + 0.004*\"billion\" + 0.004*\"sale\" + 0.004*\"loan\" + 0.004*\"plant\" + 0.004*\"gm\" + 0.004*\"corp\"\n", "05:36:56 INFO:topic #4 (0.007): 0.020*\"franc\" + 0.018*\"thomson\" + 0.016*\"french\" + 0.011*\"group\" + 0.011*\"share\" + 0.010*\"government\" + 0.009*\"plan\" + 0.009*\"france\" + 0.009*\"lagardere\" + 0.009*\"billion\"\n", "05:36:56 INFO:topic #114 (0.007): 0.006*\"analyst\" + 0.006*\"sale\" + 0.005*\"chairman\" + 0.005*\"business\" + 0.004*\"social\" + 0.004*\"party\" + 0.004*\"month\" + 0.004*\"industry\" + 0.003*\"share\" + 0.003*\"government\"\n", "05:36:56 INFO:topic diff=43.566047, rho=1.000000\n", "05:36:56 INFO:PROGRESS: pass 1, at document #2500/2500\n", "05:36:56 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:04 DEBUG:2493/2500 documents converged within 50 iterations\n", "05:37:04 DEBUG:updating topics\n", "05:37:04 INFO:topic #72 (0.007): 0.024*\"gold\" + 0.024*\"bre_x\" + 0.023*\"x\" + 0.023*\"bre\" + 0.020*\"Bre-X\" + 0.013*\"barrick\" + 0.010*\"government\" + 0.010*\"indonesian\" + 0.010*\"busang\" + 0.010*\"analyst\"\n", "05:37:04 INFO:topic #133 (0.007): 0.013*\"group\" + 0.012*\"pound\" + 0.011*\"share\" + 0.009*\"billion\" + 0.006*\"bt\" + 0.006*\"business\" + 0.006*\"analyst\" + 0.005*\"british\" + 0.005*\"profit\" + 0.005*\"britain\"\n", "05:37:04 INFO:topic #19 (0.007): 0.007*\"billion\" + 0.006*\"group\" + 0.006*\"airbus\" + 0.005*\"state\" + 0.005*\"profit\" + 0.005*\"industry\" + 0.005*\"tobacco\" + 0.005*\"tell\" + 0.004*\"price\" + 0.004*\"cost\"\n", "05:37:04 INFO:topic #90 (0.007): 0.029*\"bank\" + 0.017*\"canadian\" + 0.016*\"billion\" + 0.014*\"canada\" + 0.010*\"toronto\" + 0.009*\"analyst\" + 0.008*\"stock\" + 0.008*\"fund\" + 0.008*\"share\" + 0.007*\"high\"\n", "05:37:04 INFO:topic #91 (0.007): 0.008*\"analyst\" + 0.007*\"bre\" + 0.005*\"bre_x\" + 0.005*\"x\" + 0.005*\"gm\" + 0.005*\"billion\" + 0.005*\"Bre-X\" + 0.005*\"stock\" + 0.004*\"sale\" + 0.004*\"share\"\n", "05:37:04 INFO:topic diff=12.489199, rho=0.577350\n", "05:37:04 INFO:PROGRESS: pass 2, at document #2500/2500\n", "05:37:04 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:12 DEBUG:2497/2500 documents converged within 50 iterations\n", "05:37:12 DEBUG:updating topics\n", "05:37:12 INFO:topic #58 (0.007): 0.011*\"shanghai\" + 0.010*\"china\" + 0.005*\"bank\" + 0.005*\"chinese\" + 0.004*\"city\" + 0.004*\"stock\" + 0.004*\"chen\" + 0.003*\"beijing\" + 0.003*\"analyst\" + 0.003*\"modern\"\n", "05:37:12 INFO:topic #26 (0.007): 0.010*\"business\" + 0.005*\"analyst\" + 0.005*\"share\" + 0.004*\"billion\" + 0.004*\"stock\" + 0.004*\"continue\" + 0.003*\"states\" + 0.003*\"chemical\" + 0.003*\"united\" + 0.003*\"internet\"\n", "05:37:12 INFO:topic #61 (0.007): 0.027*\"boeing\" + 0.014*\"analyst\" + 0.013*\"billion\" + 0.012*\"microsoft\" + 0.012*\"jet\" + 0.010*\"airbus\" + 0.009*\"share\" + 0.009*\"order\" + 0.008*\"mcdonnell\" + 0.007*\"revenue\"\n", "05:37:12 INFO:topic #149 (0.007): 0.018*\"china\" + 0.010*\"official\" + 0.010*\"chinese\" + 0.008*\"beijing\" + 0.006*\"trade\" + 0.006*\"world\" + 0.005*\"foreign\" + 0.005*\"united_states\" + 0.005*\"drug\" + 0.005*\"metre\"\n", "05:37:12 INFO:topic #74 (0.007): 0.044*\"china\" + 0.022*\"chinese\" + 0.012*\"official\" + 0.012*\"tonne\" + 0.011*\"beijing\" + 0.008*\"trade\" + 0.008*\"import\" + 0.008*\"trader\" + 0.007*\"price\" + 0.007*\"state\"\n", "05:37:12 INFO:topic diff=10.945011, rho=0.500000\n", "05:37:12 INFO:PROGRESS: pass 3, at document #2500/2500\n", "05:37:12 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:19 DEBUG:2499/2500 documents converged within 50 iterations\n", "05:37:19 DEBUG:updating topics\n", "05:37:19 INFO:topic #125 (0.007): 0.004*\"analyst\" + 0.003*\"share\" + 0.003*\"bank\" + 0.002*\"problem\" + 0.002*\"billion\" + 0.002*\"sale\" + 0.002*\"loan\" + 0.002*\"plant\" + 0.002*\"gm\" + 0.002*\"corp\"\n", "05:37:19 INFO:topic #95 (0.007): 0.038*\"bank\" + 0.018*\"billion\" + 0.016*\"society\" + 0.010*\"analyst\" + 0.009*\"debt\" + 0.009*\"eurotunnel\" + 0.008*\"banking\" + 0.008*\"pound\" + 0.008*\"member\" + 0.007*\"convert\"\n", "05:37:19 INFO:topic #19 (0.007): 0.007*\"billion\" + 0.006*\"state\" + 0.005*\"group\" + 0.005*\"airbus\" + 0.005*\"loss\" + 0.005*\"cost\" + 0.005*\"profit\" + 0.005*\"industry\" + 0.005*\"sale\" + 0.004*\"executive\"\n", "05:37:19 INFO:topic #115 (0.007): 0.003*\"share\" + 0.002*\"stock\" + 0.002*\"billion\" + 0.002*\"analyst\" + 0.002*\"china\" + 0.002*\"industry\" + 0.001*\"month\" + 0.001*\"rise\" + 0.001*\"big\" + 0.001*\"deal\"\n", "05:37:20 INFO:topic #29 (0.007): 0.018*\"czech\" + 0.008*\"klaus\" + 0.007*\"government\" + 0.007*\"crown\" + 0.007*\"party\" + 0.007*\"bank\" + 0.007*\"prague\" + 0.005*\"country\" + 0.005*\"foreign\" + 0.005*\"election\"\n", "05:37:20 INFO:topic diff=9.415271, rho=0.447214\n", "05:37:20 INFO:PROGRESS: pass 4, at document #2500/2500\n", "05:37:20 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:26 DEBUG:2499/2500 documents converged within 50 iterations\n", "05:37:26 DEBUG:updating topics\n", "05:37:27 INFO:topic #31 (0.007): 0.010*\"franc\" + 0.009*\"french\" + 0.008*\"china\" + 0.008*\"billion\" + 0.006*\"shanghai\" + 0.006*\"analyst\" + 0.006*\"share\" + 0.005*\"government\" + 0.005*\"plan\" + 0.005*\"exchange\"\n", "05:37:27 INFO:topic #76 (0.007): 0.007*\"china\" + 0.006*\"hong_kong\" + 0.006*\"price\" + 0.005*\"kong\" + 0.005*\"hong\" + 0.004*\"tonne\" + 0.004*\"world\" + 0.004*\"analyst\" + 0.003*\"chinese\" + 0.003*\"Hong Kong\"\n", "05:37:27 INFO:topic #36 (0.007): 0.024*\"bid\" + 0.021*\"penny\" + 0.020*\"analyst\" + 0.017*\"share\" + 0.015*\"electric\" + 0.013*\"electricity\" + 0.012*\"offer\" + 0.012*\"price\" + 0.011*\"northern\" + 0.010*\"water\"\n", "05:37:27 INFO:topic #144 (0.007): 0.008*\"computer\" + 0.007*\"software\" + 0.006*\"technology\" + 0.006*\"internet\" + 0.005*\"web\" + 0.004*\"site\" + 0.004*\"people\" + 0.004*\"quarter\" + 0.004*\"industry\" + 0.004*\"base\"\n", "05:37:27 INFO:topic #96 (0.007): 0.013*\"tv\" + 0.011*\"industry\" + 0.010*\"group\" + 0.010*\"system\" + 0.008*\"television\" + 0.008*\"plan\" + 0.008*\"service\" + 0.007*\"rating\" + 0.006*\"american\" + 0.006*\"long\"\n", "05:37:27 INFO:topic diff=8.020445, rho=0.408248\n", "05:37:27 INFO:PROGRESS: pass 5, at document #2500/2500\n", "05:37:27 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:33 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:37:33 DEBUG:updating topics\n", "05:37:33 INFO:topic #128 (0.007): 0.019*\"ford\" + 0.017*\"gm\" + 0.015*\"sale\" + 0.015*\"plant\" + 0.011*\"car\" + 0.011*\"vehicle\" + 0.008*\"chrysler\" + 0.008*\"worker\" + 0.008*\"automaker\" + 0.007*\"truck\"\n", "05:37:33 INFO:topic #82 (0.007): 0.006*\"china\" + 0.004*\"tonne\" + 0.004*\"chinese\" + 0.003*\"trader\" + 0.003*\"copper\" + 0.002*\"price\" + 0.002*\"source\" + 0.002*\"kong\" + 0.002*\"shanghai\" + 0.002*\"metal\"\n", "05:37:33 INFO:topic #96 (0.007): 0.013*\"tv\" + 0.011*\"industry\" + 0.010*\"group\" + 0.010*\"system\" + 0.008*\"plan\" + 0.008*\"television\" + 0.008*\"service\" + 0.007*\"rating\" + 0.007*\"american\" + 0.006*\"long\"\n", "05:37:33 INFO:topic #41 (0.007): 0.016*\"australian\" + 0.014*\"bank\" + 0.013*\"profit\" + 0.013*\"share\" + 0.013*\"news\" + 0.013*\"sydney\" + 0.013*\"australia\" + 0.011*\"ltd\" + 0.011*\"analyst\" + 0.011*\"corp\"\n", "05:37:33 INFO:topic #79 (0.007): 0.006*\"china\" + 0.006*\"beijing\" + 0.004*\"official\" + 0.004*\"lama\" + 0.004*\"tibet\" + 0.004*\"chinese\" + 0.003*\"region\" + 0.003*\"dalai_lama\" + 0.003*\"share\" + 0.003*\"analyst\"\n", "05:37:33 INFO:topic diff=6.797042, rho=0.377964\n", "05:37:33 INFO:PROGRESS: pass 6, at document #2500/2500\n", "05:37:33 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:40 DEBUG:2500/2500 documents converged within 50 iterations\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:37:40 DEBUG:updating topics\n", "05:37:40 INFO:topic #76 (0.007): 0.005*\"china\" + 0.004*\"hong_kong\" + 0.004*\"price\" + 0.003*\"kong\" + 0.003*\"hong\" + 0.003*\"tonne\" + 0.003*\"world\" + 0.003*\"analyst\" + 0.002*\"chinese\" + 0.002*\"Hong Kong\"\n", "05:37:40 INFO:topic #31 (0.007): 0.008*\"franc\" + 0.007*\"french\" + 0.006*\"china\" + 0.006*\"billion\" + 0.005*\"shanghai\" + 0.005*\"analyst\" + 0.004*\"share\" + 0.004*\"government\" + 0.004*\"plan\" + 0.004*\"exchange\"\n", "05:37:40 INFO:topic #140 (0.007): 0.026*\"china\" + 0.020*\"beijing\" + 0.016*\"chinese\" + 0.013*\"official\" + 0.010*\"wang\" + 0.006*\"foreign\" + 0.005*\"right\" + 0.005*\"human\" + 0.005*\"washington\" + 0.005*\"state\"\n", "05:37:40 INFO:topic #46 (0.007): 0.004*\"hong\" + 0.004*\"kong\" + 0.003*\"china\" + 0.003*\"Hong Kong\" + 0.002*\"official\" + 0.002*\"hong_kong\" + 0.002*\"chinese\" + 0.002*\"singapore\" + 0.002*\"united\" + 0.002*\"plan\"\n", "05:37:40 INFO:topic #148 (0.007): 0.001*\"network\" + 0.001*\"analyst\" + 0.001*\"stock\" + 0.001*\"share\" + 0.001*\"price\" + 0.001*\"remote\" + 0.001*\"recent\" + 0.001*\"industry\" + 0.001*\"chinese\" + 0.001*\"billion\"\n", "05:37:40 INFO:topic diff=5.743502, rho=0.353553\n", "05:37:40 INFO:PROGRESS: pass 7, at document #2500/2500\n", "05:37:40 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:46 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:37:46 DEBUG:updating topics\n", "05:37:47 INFO:topic #99 (0.007): 0.003*\"czech\" + 0.003*\"world\" + 0.003*\"team\" + 0.002*\"win\" + 0.002*\"game\" + 0.002*\"play\" + 0.002*\"second\" + 0.002*\"stock\" + 0.002*\"billion\" + 0.002*\"end\"\n", "05:37:47 INFO:topic #81 (0.007): 0.003*\"pound\" + 0.002*\"share\" + 0.002*\"profit\" + 0.002*\"million_pound\" + 0.002*\"sale\" + 0.001*\"business\" + 0.001*\"analyst\" + 0.001*\"rise\" + 0.001*\"group\" + 0.001*\"fall\"\n", "05:37:47 INFO:topic #97 (0.007): 0.001*\"analyst\" + 0.001*\"business\" + 0.001*\"china\" + 0.001*\"internet\" + 0.001*\"stock\" + 0.001*\"sale\" + 0.001*\"service\" + 0.001*\"chairman\" + 0.001*\"continue\" + 0.001*\"base\"\n", "05:37:47 INFO:topic #28 (0.007): 0.000*\"large\" + 0.000*\"share\" + 0.000*\"stock\" + 0.000*\"property\" + 0.000*\"analyst\" + 0.000*\"taiwan\" + 0.000*\"china\" + 0.000*\"bank\" + 0.000*\"news\" + 0.000*\"billion\"\n", "05:37:47 INFO:topic #93 (0.007): 0.020*\"ibm\" + 0.018*\"internet\" + 0.016*\"computer\" + 0.013*\"pc\" + 0.012*\"service\" + 0.011*\"analyst\" + 0.009*\"industry\" + 0.009*\"software\" + 0.009*\"quarter\" + 0.009*\"consumer\"\n", "05:37:47 INFO:topic diff=4.844379, rho=0.333333\n", "05:37:47 INFO:PROGRESS: pass 8, at document #2500/2500\n", "05:37:47 DEBUG:performing inference on a chunk of 2500 documents\n", "05:37:53 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:37:53 DEBUG:updating topics\n", "05:37:54 INFO:topic #97 (0.007): 0.001*\"analyst\" + 0.001*\"business\" + 0.001*\"china\" + 0.001*\"internet\" + 0.001*\"stock\" + 0.001*\"sale\" + 0.001*\"service\" + 0.001*\"chairman\" + 0.001*\"continue\" + 0.001*\"base\"\n", "05:37:54 INFO:topic #77 (0.007): 0.002*\"computer\" + 0.002*\"internet\" + 0.002*\"quarter\" + 0.002*\"business\" + 0.002*\"service\" + 0.002*\"analyst\" + 0.001*\"share\" + 0.001*\"system\" + 0.001*\"cost\" + 0.001*\"industry\"\n", "05:37:54 INFO:topic #70 (0.007): 0.024*\"share\" + 0.023*\"shanghai\" + 0.021*\"china\" + 0.015*\"bank\" + 0.013*\"b\" + 0.013*\"analyst\" + 0.012*\"foreign\" + 0.010*\"exchange\" + 0.010*\"investor\" + 0.010*\"stock\"\n", "05:37:54 INFO:topic #26 (0.007): 0.003*\"business\" + 0.002*\"analyst\" + 0.001*\"share\" + 0.001*\"billion\" + 0.001*\"stock\" + 0.001*\"continue\" + 0.001*\"states\" + 0.001*\"chemical\" + 0.001*\"united\" + 0.001*\"internet\"\n", "05:37:54 INFO:topic #145 (0.007): 0.019*\"analyst\" + 0.015*\"sale\" + 0.013*\"share\" + 0.012*\"quarter\" + 0.009*\"business\" + 0.008*\"base\" + 0.007*\"earning\" + 0.007*\"stock\" + 0.007*\"drug\" + 0.006*\"amp\"\n", "05:37:54 INFO:topic diff=4.081138, rho=0.316228\n", "05:37:54 INFO:PROGRESS: pass 9, at document #2500/2500\n", "05:37:54 DEBUG:performing inference on a chunk of 2500 documents\n", "05:38:00 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:38:00 DEBUG:updating topics\n", "05:38:00 INFO:topic #116 (0.007): 0.003*\"x\" + 0.002*\"bre\" + 0.002*\"analyst\" + 0.002*\"Bre-X\" + 0.002*\"bre_x\" + 0.001*\"government\" + 0.001*\"barrick\" + 0.001*\"gold\" + 0.001*\"mining\" + 0.001*\"indonesian\"\n", "05:38:00 INFO:topic #67 (0.007): 0.002*\"hong\" + 0.002*\"china\" + 0.002*\"kong\" + 0.001*\"hong_kong\" + 0.001*\"Hong Kong\" + 0.001*\"beijing\" + 0.001*\"legislature\" + 0.001*\"rule\" + 0.001*\"chinese\" + 0.001*\"plan\"\n", "05:38:00 INFO:topic #69 (0.007): 0.001*\"tibet\" + 0.001*\"chen\" + 0.001*\"dalai_lama\" + 0.001*\"china\" + 0.001*\"beijing\" + 0.001*\"group\" + 0.001*\"dalai\" + 0.000*\"lama\" + 0.000*\"billion\" + 0.000*\"region\"\n", "05:38:00 INFO:topic #146 (0.007): 0.001*\"hong_kong\" + 0.001*\"analyst\" + 0.000*\"share\" + 0.000*\"hong\" + 0.000*\"kong\" + 0.000*\"china\" + 0.000*\"news\" + 0.000*\"Hong Kong\" + 0.000*\"billion\" + 0.000*\"price\"\n", "05:38:00 INFO:topic #66 (0.007): 0.001*\"bank\" + 0.001*\"china\" + 0.000*\"hong\" + 0.000*\"government\" + 0.000*\"hong_kong\" + 0.000*\"plan\" + 0.000*\"bre\" + 0.000*\"x\" + 0.000*\"kong\" + 0.000*\"financial\"\n", "05:38:00 INFO:topic diff=3.435844, rho=0.301511\n", "05:38:00 INFO:PROGRESS: pass 10, at document #2500/2500\n", "05:38:00 DEBUG:performing inference on a chunk of 2500 documents\n", "05:38:06 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:38:06 DEBUG:updating topics\n", "05:38:06 INFO:topic #80 (0.007): 0.019*\"analyst\" + 0.015*\"microsoft\" + 0.013*\"quarter\" + 0.011*\"business\" + 0.010*\"computer\" + 0.009*\"sale\" + 0.008*\"revenue\" + 0.008*\"windows\" + 0.008*\"share\" + 0.008*\"system\"\n", "05:38:06 INFO:topic #44 (0.007): 0.001*\"sale\" + 0.001*\"china\" + 0.001*\"analyst\" + 0.001*\"share\" + 0.001*\"service\" + 0.000*\"plan\" + 0.000*\"bank\" + 0.000*\"deal\" + 0.000*\"billion\" + 0.000*\"world\"\n", "05:38:06 INFO:topic #58 (0.007): 0.001*\"shanghai\" + 0.001*\"china\" + 0.001*\"bank\" + 0.001*\"chinese\" + 0.000*\"city\" + 0.000*\"stock\" + 0.000*\"chen\" + 0.000*\"beijing\" + 0.000*\"analyst\" + 0.000*\"modern\"\n", "05:38:06 INFO:topic #36 (0.007): 0.022*\"penny\" + 0.022*\"bid\" + 0.021*\"analyst\" + 0.018*\"share\" + 0.014*\"electric\" + 0.012*\"price\" + 0.012*\"electricity\" + 0.012*\"offer\" + 0.012*\"pound\" + 0.011*\"northern\"\n", "05:38:06 INFO:topic #143 (0.007): 0.018*\"mci\" + 0.012*\"analyst\" + 0.012*\"allen\" + 0.011*\"long\" + 0.011*\"billion\" + 0.011*\"distance\" + 0.010*\"long_distance\" + 0.009*\"stock\" + 0.009*\"share\" + 0.009*\"executive\"\n", "05:38:06 INFO:topic diff=2.892181, rho=0.288675\n", "05:38:06 INFO:PROGRESS: pass 11, at document #2500/2500\n", "05:38:06 DEBUG:performing inference on a chunk of 2500 documents\n", "05:38:12 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:38:12 DEBUG:updating topics\n", "05:38:13 INFO:topic #141 (0.007): 0.006*\"internet\" + 0.005*\"bank\" + 0.003*\"law\" + 0.003*\"congress\" + 0.003*\"court\" + 0.002*\"service\" + 0.002*\"export\" + 0.002*\"security\" + 0.002*\"member\" + 0.002*\"credit\"\n", "05:38:13 INFO:topic #33 (0.007): 0.000*\"billion\" + 0.000*\"service\" + 0.000*\"plan\" + 0.000*\"industry\" + 0.000*\"china\" + 0.000*\"internet\" + 0.000*\"tonne\" + 0.000*\"price\" + 0.000*\"chinese\" + 0.000*\"share\"\n", "05:38:13 INFO:topic #49 (0.007): 0.001*\"eurotunnel\" + 0.001*\"service\" + 0.000*\"billion\" + 0.000*\"share\" + 0.000*\"fire\" + 0.000*\"pound\" + 0.000*\"tunnel\" + 0.000*\"debt\" + 0.000*\"group\" + 0.000*\"financial\"\n", "05:38:13 INFO:topic #116 (0.007): 0.002*\"x\" + 0.001*\"bre\" + 0.001*\"analyst\" + 0.001*\"Bre-X\" + 0.001*\"bre_x\" + 0.001*\"government\" + 0.001*\"barrick\" + 0.001*\"gold\" + 0.001*\"mining\" + 0.001*\"indonesian\"\n", "05:38:13 INFO:topic #83 (0.007): 0.001*\"beijing\" + 0.001*\"chinese\" + 0.001*\"billion\" + 0.001*\"profit\" + 0.001*\"tell\" + 0.001*\"china\" + 0.001*\"bank\" + 0.001*\"analyst\" + 0.001*\"australian\" + 0.001*\"share\"\n", "05:38:13 INFO:topic diff=2.435570, rho=0.277350\n", "05:38:13 INFO:PROGRESS: pass 12, at document #2500/2500\n", "05:38:13 DEBUG:performing inference on a chunk of 2500 documents\n", "05:38:19 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:38:19 DEBUG:updating topics\n", "05:38:19 INFO:topic #138 (0.007): 0.000*\"china\" + 0.000*\"beijing\" + 0.000*\"share\" + 0.000*\"states\" + 0.000*\"news\" + 0.000*\"analyst\" + 0.000*\"long\" + 0.000*\"chinese\" + 0.000*\"trade\" + 0.000*\"the United States\"\n", "05:38:19 INFO:topic #125 (0.007): 0.000*\"analyst\" + 0.000*\"share\" + 0.000*\"bank\" + 0.000*\"problem\" + 0.000*\"billion\" + 0.000*\"sale\" + 0.000*\"loan\" + 0.000*\"plant\" + 0.000*\"gm\" + 0.000*\"corp\"\n", "05:38:19 INFO:topic #21 (0.007): 0.024*\"stock\" + 0.021*\"toronto\" + 0.018*\"share\" + 0.017*\"bank\" + 0.016*\"canada\" + 0.013*\"gold\" + 0.012*\"billion\" + 0.012*\"index\" + 0.011*\"close\" + 0.010*\"point\"\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:38:19 INFO:topic #5 (0.007): 0.002*\"china\" + 0.001*\"beijing\" + 0.001*\"chen\" + 0.001*\"official\" + 0.001*\"trade\" + 0.001*\"economic\" + 0.001*\"chinese\" + 0.001*\"party\" + 0.001*\"survey\" + 0.001*\"month\"\n", "05:38:19 INFO:topic #31 (0.007): 0.002*\"franc\" + 0.002*\"french\" + 0.002*\"china\" + 0.002*\"billion\" + 0.001*\"shanghai\" + 0.001*\"analyst\" + 0.001*\"share\" + 0.001*\"government\" + 0.001*\"plan\" + 0.001*\"exchange\"\n", "05:38:19 INFO:topic diff=2.053082, rho=0.267261\n", "05:38:19 INFO:PROGRESS: pass 13, at document #2500/2500\n", "05:38:19 DEBUG:performing inference on a chunk of 2500 documents\n", "05:38:26 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:38:26 DEBUG:updating topics\n", "05:38:26 INFO:topic #3 (0.007): 0.000*\"pound\" + 0.000*\"billion\" + 0.000*\"share\" + 0.000*\"group\" + 0.000*\"british\" + 0.000*\"deal\" + 0.000*\"bank\" + 0.000*\"sale\" + 0.000*\"mci\" + 0.000*\"service\"\n", "05:38:26 INFO:topic #42 (0.007): 0.000*\"technology\" + 0.000*\"russia\" + 0.000*\"computer\" + 0.000*\"industry\" + 0.000*\"russian\" + 0.000*\"internet\" + 0.000*\"analyst\" + 0.000*\"world\" + 0.000*\"price\" + 0.000*\"software\"\n", "05:38:26 INFO:topic #104 (0.007): 0.044*\"cent\" + 0.043*\"bank\" + 0.028*\"cent_share\" + 0.022*\"league\" + 0.019*\"football\" + 0.016*\"share\" + 0.014*\"card\" + 0.013*\"earning\" + 0.012*\"cos\" + 0.011*\"canada\"\n", "05:38:26 INFO:topic #69 (0.007): 0.000*\"tibet\" + 0.000*\"chen\" + 0.000*\"dalai_lama\" + 0.000*\"china\" + 0.000*\"beijing\" + 0.000*\"group\" + 0.000*\"dalai\" + 0.000*\"lama\" + 0.000*\"billion\" + 0.000*\"region\"\n", "05:38:26 INFO:topic #115 (0.007): 0.000*\"share\" + 0.000*\"stock\" + 0.000*\"billion\" + 0.000*\"analyst\" + 0.000*\"china\" + 0.000*\"industry\" + 0.000*\"month\" + 0.000*\"rise\" + 0.000*\"big\" + 0.000*\"deal\"\n", "05:38:26 INFO:topic diff=1.733322, rho=0.258199\n", "05:38:26 INFO:PROGRESS: pass 14, at document #2500/2500\n", "05:38:26 DEBUG:performing inference on a chunk of 2500 documents\n", "05:38:32 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:38:32 DEBUG:updating topics\n", "05:38:33 INFO:topic #82 (0.007): 0.001*\"china\" + 0.000*\"tonne\" + 0.000*\"chinese\" + 0.000*\"trader\" + 0.000*\"copper\" + 0.000*\"price\" + 0.000*\"source\" + 0.000*\"kong\" + 0.000*\"shanghai\" + 0.000*\"metal\"\n", "05:38:33 INFO:topic #122 (0.007): 0.000*\"share\" + 0.000*\"analyst\" + 0.000*\"quarter\" + 0.000*\"pc\" + 0.000*\"computer\" + 0.000*\"ibm\" + 0.000*\"profit\" + 0.000*\"service\" + 0.000*\"industry\" + 0.000*\"compaq\"\n", "05:38:33 INFO:topic #126 (0.007): 0.000*\"group\" + 0.000*\"europe\" + 0.000*\"plan\" + 0.000*\"air\" + 0.000*\"model\" + 0.000*\"pound\" + 0.000*\"hong\" + 0.000*\"month\" + 0.000*\"japan\" + 0.000*\"Hong Kong\"\n", "05:38:33 INFO:topic #1 (0.007): 0.005*\"bank\" + 0.004*\"stock\" + 0.004*\"billion\" + 0.004*\"japan\" + 0.003*\"analyst\" + 0.003*\"financial\" + 0.003*\"asset\" + 0.003*\"japanese\" + 0.002*\"big\" + 0.002*\"yen\"\n", "05:38:33 INFO:topic #120 (0.007): 0.022*\"stiff\" + 0.019*\"court\" + 0.018*\"rating\" + 0.018*\"frequently\" + 0.012*\"mercury\" + 0.012*\"williams\" + 0.012*\"remove\" + 0.011*\"judge\" + 0.011*\"armed\" + 0.009*\"ford\"\n", "05:38:33 INFO:topic diff=1.466340, rho=0.250000\n", "05:38:33 DEBUG:Setting topics to those of the model: AuthorTopicModel(num_terms=3914, num_topics=150, num_authors=50, decay=0.5, chunksize=2500)\n", "05:38:33 INFO:CorpusAccumulator accumulated stats from 1000 documents\n", "05:38:33 INFO:CorpusAccumulator accumulated stats from 2000 documents\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-1.90810257282\n" ] } ], "source": [ "atmodel_150topics = train_model(train_corpus_50_20, train_author2doc, train_dictionary_50_20, num_topics=150, eval_every=0, iterations=50, passes=15)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision@k: top_n=1\n", "Prediction accuracy: 0.6004\n", "Precision@k: top_n=2\n", "Prediction accuracy: 0.7632\n", "Precision@k: top_n=3\n", "Prediction accuracy: 0.8452\n", "Precision@k: top_n=4\n", "Prediction accuracy: 0.8796\n", "Precision@k: top_n=5\n", "Prediction accuracy: 0.8988\n", "Precision@k: top_n=6\n", "Prediction accuracy: 0.914\n", "Precision@k: top_n=8\n", "Prediction accuracy: 0.9324\n", "Precision@k: top_n=10\n", "Prediction accuracy: 0.9464\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "accuracy_scores_150topic={}\n", "for i in [1,2,3,4,5,6,8,10]:\n", " accuracy, k = prediction_accuracy(test_author2doc, test_corpus_50_20, atmodel_150topics, k=i)\n", " accuracy_scores_150topic[k] = accuracy\n", " \n", "plot_accuracy(scores1=accuracy_scores_100topic, label1=\"100 topics\", scores2=accuracy_scores_150topic, label2=\"150 topics\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 150-topic model is also slightly better, especially in the lower end of k. But we clearly see convergence. We try with 200 topic to be sure." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "05:43:01 INFO:Vocabulary consists of 3914 words.\n", "05:43:01 INFO:using symmetric alpha at 0.005\n", "05:43:01 INFO:using symmetric eta at 0.005\n", "05:43:05 INFO:running online author-topic training, 200 topics, 50 authors, 15 passes over the supplied corpus of 2500 documents, updating model once every 2500 documents, evaluating perplexity every 0 documents, iterating 50x with a convergence threshold of 0.001000\n", "05:43:05 INFO:PROGRESS: pass 0, at document #2500/2500\n", "05:43:05 DEBUG:performing inference on a chunk of 2500 documents\n", "05:43:25 DEBUG:2/2500 documents converged within 50 iterations\n", "05:43:25 DEBUG:updating topics\n", "05:43:26 INFO:topic #198 (0.005): 0.006*\"plant\" + 0.006*\"analyst\" + 0.006*\"gm\" + 0.005*\"sale\" + 0.005*\"group\" + 0.005*\"service\" + 0.004*\"share\" + 0.004*\"internet\" + 0.004*\"plan\" + 0.004*\"uaw\"\n", "05:43:26 INFO:topic #186 (0.005): 0.009*\"pound\" + 0.007*\"quarter\" + 0.007*\"analyst\" + 0.007*\"share\" + 0.006*\"group\" + 0.006*\"business\" + 0.005*\"million_pound\" + 0.005*\"software\" + 0.005*\"sale\" + 0.005*\"industry\"\n", "05:43:26 INFO:topic #188 (0.005): 0.011*\"share\" + 0.010*\"analyst\" + 0.008*\"billion\" + 0.007*\"sale\" + 0.007*\"stock\" + 0.006*\"mci\" + 0.006*\"business\" + 0.005*\"british\" + 0.005*\"quarter\" + 0.005*\"deal\"\n", "05:43:26 INFO:topic #162 (0.005): 0.012*\"analyst\" + 0.008*\"business\" + 0.007*\"quarter\" + 0.006*\"share\" + 0.006*\"industry\" + 0.006*\"sale\" + 0.005*\"base\" + 0.005*\"billion\" + 0.005*\"high\" + 0.005*\"price\"\n", "05:43:26 INFO:topic #22 (0.005): 0.039*\"bank\" + 0.011*\"rate\" + 0.011*\"day\" + 0.011*\"cut\" + 0.010*\"analyst\" + 0.008*\"australia\" + 0.008*\"profit\" + 0.008*\"financial\" + 0.007*\"ltd\" + 0.007*\"merger\"\n", "05:43:26 INFO:topic diff=65.500588, rho=1.000000\n", "05:43:26 INFO:PROGRESS: pass 1, at document #2500/2500\n", "05:43:26 DEBUG:performing inference on a chunk of 2500 documents\n", "05:43:36 DEBUG:2494/2500 documents converged within 50 iterations\n", "05:43:36 DEBUG:updating topics\n", "05:43:37 INFO:topic #77 (0.005): 0.013*\"internet\" + 0.011*\"computer\" + 0.009*\"business\" + 0.009*\"quarter\" + 0.009*\"service\" + 0.008*\"revenue\" + 0.007*\"analyst\" + 0.007*\"cost\" + 0.007*\"industry\" + 0.006*\"compaq\"\n", "05:43:37 INFO:topic #25 (0.005): 0.010*\"share\" + 0.007*\"analyst\" + 0.007*\"service\" + 0.007*\"business\" + 0.006*\"growth\" + 0.006*\"mci\" + 0.006*\"billion\" + 0.006*\"long\" + 0.005*\"distance\" + 0.005*\"stock\"\n", "05:43:37 INFO:topic #133 (0.005): 0.011*\"group\" + 0.011*\"share\" + 0.010*\"pound\" + 0.009*\"billion\" + 0.007*\"profit\" + 0.007*\"business\" + 0.006*\"sale\" + 0.005*\"good\" + 0.005*\"bank\" + 0.005*\"analyst\"\n", "05:43:37 INFO:topic #180 (0.005): 0.011*\"billion\" + 0.006*\"venture\" + 0.006*\"quarter\" + 0.005*\"investment\" + 0.005*\"industry\" + 0.005*\"analyst\" + 0.004*\"price\" + 0.003*\"group\" + 0.003*\"high\" + 0.003*\"rise\"\n", "05:43:37 INFO:topic #1 (0.005): 0.018*\"japan\" + 0.014*\"japanese\" + 0.013*\"billion\" + 0.011*\"yen\" + 0.011*\"stock\" + 0.011*\"bank\" + 0.010*\"life\" + 0.010*\"financial\" + 0.010*\"big\" + 0.008*\"profit\"\n", "05:43:37 INFO:topic diff=17.080447, rho=0.577350\n", "05:43:37 INFO:PROGRESS: pass 2, at document #2500/2500\n", "05:43:37 DEBUG:performing inference on a chunk of 2500 documents\n", "05:43:46 DEBUG:2499/2500 documents converged within 50 iterations\n", "05:43:46 DEBUG:updating topics\n", "05:43:47 INFO:topic #92 (0.005): 0.013*\"analyst\" + 0.011*\"share\" + 0.007*\"sale\" + 0.006*\"profit\" + 0.005*\"pound\" + 0.004*\"high\" + 0.004*\"revenue\" + 0.004*\"quarter\" + 0.004*\"billion\" + 0.004*\"cent\"\n", "05:43:47 INFO:topic #117 (0.005): 0.015*\"access\" + 0.012*\"local\" + 0.011*\"internet\" + 0.011*\"fee\" + 0.010*\"distance\" + 0.010*\"long\" + 0.008*\"long_distance\" + 0.008*\"service\" + 0.007*\"issue\" + 0.006*\"provider\"\n", "05:43:47 INFO:topic #81 (0.005): 0.011*\"pound\" + 0.010*\"profit\" + 0.009*\"share\" + 0.008*\"sale\" + 0.007*\"million_pound\" + 0.006*\"analyst\" + 0.006*\"business\" + 0.006*\"rise\" + 0.005*\"group\" + 0.005*\"fall\"\n", "05:43:47 INFO:topic #97 (0.005): 0.025*\"internet\" + 0.018*\"bill\" + 0.014*\"administration\" + 0.014*\"product\" + 0.012*\"key\" + 0.011*\"policy\" + 0.011*\"export\" + 0.010*\"law\" + 0.008*\"access\" + 0.008*\"bank\"\n", "05:43:47 INFO:topic #24 (0.005): 0.005*\"crop\" + 0.005*\"price\" + 0.005*\"share\" + 0.004*\"tonne\" + 0.004*\"analyst\" + 0.004*\"exporter\" + 0.004*\"cocoa\" + 0.003*\"ivory_coast\" + 0.003*\"government\" + 0.003*\"reuters\"\n", "05:43:47 INFO:topic diff=14.773285, rho=0.500000\n", "05:43:47 INFO:PROGRESS: pass 3, at document #2500/2500\n", "05:43:47 DEBUG:performing inference on a chunk of 2500 documents\n", "05:43:56 DEBUG:2499/2500 documents converged within 50 iterations\n", "05:43:56 DEBUG:updating topics\n", "05:43:56 INFO:topic #16 (0.005): 0.003*\"group\" + 0.003*\"billion\" + 0.002*\"gm\" + 0.002*\"hong_kong\" + 0.002*\"pound\" + 0.002*\"kong\" + 0.002*\"china\" + 0.002*\"bid\" + 0.002*\"analyst\" + 0.002*\"hong\"\n", "05:43:56 INFO:topic #133 (0.005): 0.012*\"group\" + 0.011*\"pound\" + 0.010*\"share\" + 0.008*\"billion\" + 0.007*\"business\" + 0.006*\"profit\" + 0.005*\"good\" + 0.005*\"sale\" + 0.005*\"add\" + 0.005*\"cost\"\n", "05:43:56 INFO:topic #23 (0.005): 0.017*\"boeing\" + 0.010*\"billion\" + 0.009*\"analyst\" + 0.006*\"share\" + 0.006*\"microsoft\" + 0.006*\"industry\" + 0.005*\"quarter\" + 0.005*\"jet\" + 0.005*\"windows\" + 0.005*\"mcdonnell\"\n", "05:43:56 INFO:topic #156 (0.005): 0.005*\"analyst\" + 0.004*\"bank\" + 0.003*\"share\" + 0.003*\"service\" + 0.003*\"internet\" + 0.002*\"china\" + 0.002*\"plan\" + 0.002*\"profit\" + 0.002*\"billion\" + 0.002*\"cost\"\n", "05:43:56 INFO:topic #131 (0.005): 0.024*\"analyst\" + 0.017*\"share\" + 0.013*\"price\" + 0.011*\"business\" + 0.011*\"penny\" + 0.009*\"bid\" + 0.007*\"electric\" + 0.006*\"offer\" + 0.006*\"add\" + 0.006*\"northern\"\n", "05:43:56 INFO:topic diff=12.542799, rho=0.447214\n", "05:43:56 INFO:PROGRESS: pass 4, at document #2500/2500\n", "05:43:56 DEBUG:performing inference on a chunk of 2500 documents\n", "05:44:05 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:44:05 DEBUG:updating topics\n", "05:44:05 INFO:topic #92 (0.005): 0.009*\"analyst\" + 0.008*\"share\" + 0.005*\"sale\" + 0.004*\"profit\" + 0.003*\"pound\" + 0.003*\"high\" + 0.003*\"revenue\" + 0.003*\"quarter\" + 0.003*\"billion\" + 0.003*\"cent\"\n", "05:44:05 INFO:topic #86 (0.005): 0.029*\"cargo\" + 0.021*\"kong\" + 0.020*\"hong\" + 0.020*\"hong_kong\" + 0.016*\"air\" + 0.015*\"Hong Kong\" + 0.015*\"airline\" + 0.009*\"service\" + 0.009*\"route\" + 0.009*\"airport\"\n", "05:44:05 INFO:topic #80 (0.005): 0.017*\"analyst\" + 0.014*\"microsoft\" + 0.013*\"quarter\" + 0.010*\"computer\" + 0.010*\"business\" + 0.009*\"windows\" + 0.008*\"revenue\" + 0.008*\"internet\" + 0.007*\"system\" + 0.007*\"sale\"\n", "05:44:05 INFO:topic #23 (0.005): 0.015*\"boeing\" + 0.009*\"billion\" + 0.008*\"analyst\" + 0.006*\"share\" + 0.005*\"microsoft\" + 0.005*\"industry\" + 0.005*\"quarter\" + 0.005*\"jet\" + 0.004*\"windows\" + 0.004*\"mcdonnell\"\n", "05:44:05 INFO:topic #177 (0.005): 0.011*\"investment\" + 0.010*\"pound\" + 0.010*\"group\" + 0.008*\"cable\" + 0.008*\"british\" + 0.007*\"fleming\" + 0.007*\"management\" + 0.006*\"fund\" + 0.006*\"share\" + 0.006*\"merger\"\n", "05:44:05 INFO:topic diff=10.561281, rho=0.408248\n", "05:44:05 INFO:PROGRESS: pass 5, at document #2500/2500\n", "05:44:05 DEBUG:performing inference on a chunk of 2500 documents\n", "05:44:14 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:44:14 DEBUG:updating topics\n", "05:44:15 INFO:topic #61 (0.005): 0.038*\"boeing\" + 0.017*\"billion\" + 0.016*\"jet\" + 0.013*\"analyst\" + 0.012*\"mcdonnell\" + 0.011*\"microsoft\" + 0.010*\"airbus\" + 0.010*\"order\" + 0.010*\"douglas\" + 0.009*\"share\"\n", "05:44:15 INFO:topic #73 (0.005): 0.001*\"bank\" + 0.001*\"china\" + 0.001*\"group\" + 0.001*\"big\" + 0.001*\"analyst\" + 0.001*\"sale\" + 0.001*\"shanghai\" + 0.001*\"deal\" + 0.001*\"gm\" + 0.001*\"pound\"\n", "05:44:15 INFO:topic #147 (0.005): 0.012*\"czech\" + 0.011*\"crown\" + 0.010*\"week\" + 0.009*\"analyst\" + 0.009*\"point\" + 0.008*\"investor\" + 0.007*\"round\" + 0.007*\"prague\" + 0.007*\"billion\" + 0.006*\"second\"\n", "05:44:15 INFO:topic #50 (0.005): 0.006*\"british\" + 0.006*\"telecom\" + 0.006*\"deal\" + 0.005*\"analyst\" + 0.005*\"drug\" + 0.004*\"share\" + 0.004*\"mci\" + 0.004*\"billion\" + 0.004*\"group\" + 0.003*\"sale\"\n", "05:44:15 INFO:topic #99 (0.005): 0.003*\"stock\" + 0.002*\"business\" + 0.002*\"share\" + 0.002*\"analyst\" + 0.002*\"end\" + 0.002*\"day\" + 0.002*\"sale\" + 0.002*\"world\" + 0.002*\"billion\" + 0.001*\"quarter\"\n", "05:44:15 INFO:topic diff=8.863923, rho=0.377964\n", "05:44:15 INFO:PROGRESS: pass 6, at document #2500/2500\n", "05:44:15 DEBUG:performing inference on a chunk of 2500 documents\n", "05:44:23 DEBUG:2500/2500 documents converged within 50 iterations\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:44:23 DEBUG:updating topics\n", "05:44:24 INFO:topic #70 (0.005): 0.011*\"stock\" + 0.010*\"shanghai\" + 0.008*\"share\" + 0.008*\"exchange\" + 0.007*\"trading\" + 0.007*\"china\" + 0.007*\"bank\" + 0.006*\"future\" + 0.006*\"beijing\" + 0.005*\"index\"\n", "05:44:24 INFO:topic #177 (0.005): 0.011*\"investment\" + 0.010*\"pound\" + 0.010*\"group\" + 0.008*\"cable\" + 0.008*\"british\" + 0.007*\"fleming\" + 0.007*\"management\" + 0.007*\"share\" + 0.006*\"fund\" + 0.006*\"merger\"\n", "05:44:24 INFO:topic #37 (0.005): 0.015*\"bank\" + 0.012*\"czech\" + 0.008*\"crown\" + 0.006*\"prague\" + 0.005*\"foreign\" + 0.005*\"billion\" + 0.004*\"state\" + 0.004*\"deficit\" + 0.004*\"communist\" + 0.004*\"central\"\n", "05:44:24 INFO:topic #56 (0.005): 0.032*\"kong\" + 0.031*\"hong\" + 0.031*\"hong_kong\" + 0.022*\"Hong Kong\" + 0.016*\"china\" + 0.007*\"fund\" + 0.007*\"Hong Kong's\" + 0.006*\"chinese\" + 0.005*\"tung\" + 0.005*\"british\"\n", "05:44:24 INFO:topic #32 (0.005): 0.004*\"china\" + 0.003*\"beijing\" + 0.002*\"taiwan\" + 0.002*\"bre\" + 0.002*\"bre_x\" + 0.002*\"share\" + 0.002*\"x\" + 0.002*\"chinese\" + 0.002*\"analyst\" + 0.002*\"party\"\n", "05:44:24 INFO:topic diff=7.433677, rho=0.353553\n", "05:44:24 INFO:PROGRESS: pass 7, at document #2500/2500\n", "05:44:24 DEBUG:performing inference on a chunk of 2500 documents\n", "05:44:32 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:44:32 DEBUG:updating topics\n", "05:44:33 INFO:topic #194 (0.005): 0.024*\"cocoa\" + 0.020*\"tonne\" + 0.019*\"exporter\" + 0.012*\"ivory\" + 0.012*\"ivory_coast\" + 0.012*\"coast\" + 0.011*\"crop\" + 0.011*\"price\" + 0.010*\"buyer\" + 0.009*\"export\"\n", "05:44:33 INFO:topic #116 (0.005): 0.004*\"x\" + 0.003*\"analyst\" + 0.003*\"bre\" + 0.003*\"Bre-X\" + 0.002*\"bre_x\" + 0.002*\"share\" + 0.002*\"government\" + 0.002*\"bank\" + 0.002*\"billion\" + 0.002*\"sale\"\n", "05:44:33 INFO:topic #174 (0.005): 0.001*\"quarter\" + 0.001*\"venture\" + 0.001*\"china\" + 0.001*\"billion\" + 0.001*\"beijing\" + 0.000*\"investment\" + 0.000*\"share\" + 0.000*\"level\" + 0.000*\"chinese\" + 0.000*\"official\"\n", "05:44:33 INFO:topic #169 (0.005): 0.001*\"china\" + 0.001*\"tell\" + 0.001*\"service\" + 0.001*\"hong_kong\" + 0.001*\"billion\" + 0.001*\"share\" + 0.001*\"beijing\" + 0.001*\"group\" + 0.001*\"kong\" + 0.001*\"analyst\"\n", "05:44:33 INFO:topic #88 (0.005): 0.024*\"franc\" + 0.023*\"french\" + 0.022*\"air\" + 0.021*\"france\" + 0.017*\"thomson\" + 0.014*\"billion\" + 0.011*\"group\" + 0.010*\"telecom\" + 0.010*\"billion_franc\" + 0.009*\"government\"\n", "05:44:33 INFO:topic diff=6.234229, rho=0.333333\n", "05:44:33 INFO:PROGRESS: pass 8, at document #2500/2500\n", "05:44:33 DEBUG:performing inference on a chunk of 2500 documents\n", "05:44:41 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:44:41 DEBUG:updating topics\n", "05:44:42 INFO:topic #149 (0.005): 0.010*\"china\" + 0.005*\"chinese\" + 0.005*\"official\" + 0.004*\"beijing\" + 0.004*\"metre\" + 0.003*\"world\" + 0.003*\"trade\" + 0.003*\"foreign\" + 0.003*\"united_states\" + 0.003*\"united\"\n", "05:44:42 INFO:topic #62 (0.005): 0.002*\"property\" + 0.002*\"increase\" + 0.002*\"month\" + 0.002*\"klaus\" + 0.001*\"social\" + 0.001*\"commission\" + 0.001*\"pound\" + 0.001*\"analyst\" + 0.001*\"large\" + 0.001*\"party\"\n", "05:44:42 INFO:topic #38 (0.005): 0.016*\"analyst\" + 0.014*\"australian\" + 0.014*\"ltd\" + 0.013*\"share\" + 0.012*\"australia\" + 0.011*\"profit\" + 0.011*\"sydney\" + 0.009*\"news\" + 0.009*\"group\" + 0.009*\"corp\"\n", "05:44:42 INFO:topic #155 (0.005): 0.002*\"china\" + 0.001*\"fund\" + 0.001*\"stock\" + 0.001*\"billion\" + 0.001*\"economic\" + 0.001*\"hong\" + 0.001*\"bank\" + 0.001*\"group\" + 0.001*\"kong\" + 0.001*\"canada\"\n", "05:44:42 INFO:topic #130 (0.005): 0.019*\"mci\" + 0.012*\"analyst\" + 0.011*\"service\" + 0.011*\"share\" + 0.011*\"long\" + 0.010*\"billion\" + 0.009*\"long_distance\" + 0.009*\"distance\" + 0.009*\"corp\" + 0.008*\"deal\"\n", "05:44:42 INFO:topic diff=5.231049, rho=0.316228\n", "05:44:42 INFO:PROGRESS: pass 9, at document #2500/2500\n", "05:44:42 DEBUG:performing inference on a chunk of 2500 documents\n", "05:44:50 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:44:51 DEBUG:updating topics\n", "05:44:51 INFO:topic #166 (0.005): 0.001*\"oil\" + 0.001*\"russian\" + 0.001*\"russia\" + 0.001*\"internet\" + 0.001*\"export\" + 0.001*\"world\" + 0.001*\"service\" + 0.001*\"tonne\" + 0.001*\"analyst\" + 0.001*\"output\"\n", "05:44:51 INFO:topic #187 (0.005): 0.033*\"china\" + 0.011*\"beijing\" + 0.011*\"official\" + 0.010*\"chinese\" + 0.008*\"state\" + 0.008*\"foreign\" + 0.008*\"trade\" + 0.006*\"united\" + 0.005*\"united_states\" + 0.005*\"states\"\n", "05:44:51 INFO:topic #139 (0.005): 0.013*\"drug\" + 0.012*\"group\" + 0.010*\"pound\" + 0.010*\"sale\" + 0.009*\"plc\" + 0.009*\"british\" + 0.009*\"share\" + 0.008*\"product\" + 0.008*\"profit\" + 0.008*\"analyst\"\n", "05:44:51 INFO:topic #43 (0.005): 0.001*\"tonne\" + 0.001*\"cocoa\" + 0.001*\"china\" + 0.000*\"share\" + 0.000*\"bank\" + 0.000*\"government\" + 0.000*\"exporter\" + 0.000*\"stock\" + 0.000*\"plan\" + 0.000*\"close\"\n", "05:44:51 INFO:topic #71 (0.005): 0.025*\"fcc\" + 0.018*\"phone\" + 0.016*\"carrier\" + 0.015*\"local\" + 0.012*\"rule\" + 0.011*\"long\" + 0.011*\"service\" + 0.011*\"distance\" + 0.010*\"tv\" + 0.010*\"long_distance\"\n", "05:44:51 INFO:topic diff=4.391602, rho=0.301511\n", "05:44:51 INFO:PROGRESS: pass 10, at document #2500/2500\n", "05:44:51 DEBUG:performing inference on a chunk of 2500 documents\n", "05:44:59 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:44:59 DEBUG:updating topics\n", "05:45:00 INFO:topic #156 (0.005): 0.001*\"analyst\" + 0.001*\"bank\" + 0.001*\"share\" + 0.001*\"service\" + 0.000*\"internet\" + 0.000*\"china\" + 0.000*\"plan\" + 0.000*\"profit\" + 0.000*\"billion\" + 0.000*\"cost\"\n", "05:45:00 INFO:topic #63 (0.005): 0.037*\"oil\" + 0.029*\"russia\" + 0.026*\"russian\" + 0.016*\"tonne\" + 0.016*\"aluminium\" + 0.015*\"smelter\" + 0.014*\"output\" + 0.012*\"world\" + 0.012*\"export\" + 0.010*\"western\"\n", "05:45:00 INFO:topic #83 (0.005): 0.001*\"profit\" + 0.001*\"bank\" + 0.001*\"australian\" + 0.001*\"analyst\" + 0.001*\"billion\" + 0.001*\"australia\" + 0.001*\"share\" + 0.001*\"tell\" + 0.001*\"ltd\" + 0.001*\"beijing\"\n", "05:45:00 INFO:topic #144 (0.005): 0.001*\"computer\" + 0.001*\"software\" + 0.001*\"site\" + 0.001*\"quarter\" + 0.001*\"technology\" + 0.001*\"internet\" + 0.001*\"industry\" + 0.001*\"web\" + 0.001*\"product\" + 0.001*\"high\"\n", "05:45:00 INFO:topic #84 (0.005): 0.015*\"klaus\" + 0.014*\"czech\" + 0.014*\"bank\" + 0.011*\"billion\" + 0.011*\"crown\" + 0.009*\"state\" + 0.009*\"price\" + 0.008*\"minister\" + 0.007*\"tell\" + 0.007*\"low\"\n", "05:45:00 INFO:topic diff=3.689287, rho=0.288675\n", "05:45:00 INFO:PROGRESS: pass 11, at document #2500/2500\n", "05:45:00 DEBUG:performing inference on a chunk of 2500 documents\n", "05:45:08 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:45:08 DEBUG:updating topics\n", "05:45:09 INFO:topic #50 (0.005): 0.001*\"british\" + 0.001*\"telecom\" + 0.001*\"deal\" + 0.001*\"analyst\" + 0.001*\"drug\" + 0.001*\"share\" + 0.001*\"mci\" + 0.001*\"billion\" + 0.001*\"group\" + 0.001*\"sale\"\n", "05:45:09 INFO:topic #194 (0.005): 0.024*\"cocoa\" + 0.020*\"tonne\" + 0.020*\"exporter\" + 0.012*\"ivory\" + 0.012*\"coast\" + 0.012*\"ivory_coast\" + 0.011*\"crop\" + 0.011*\"price\" + 0.010*\"buyer\" + 0.009*\"export\"\n", "05:45:09 INFO:topic #138 (0.005): 0.001*\"china\" + 0.000*\"beijing\" + 0.000*\"share\" + 0.000*\"news\" + 0.000*\"states\" + 0.000*\"chinese\" + 0.000*\"analyst\" + 0.000*\"month\" + 0.000*\"long\" + 0.000*\"the United States\"\n", "05:45:09 INFO:topic #100 (0.005): 0.001*\"chinese\" + 0.001*\"china\" + 0.001*\"beijing\" + 0.000*\"hong\" + 0.000*\"hong_kong\" + 0.000*\"official\" + 0.000*\"tibet\" + 0.000*\"magazine\" + 0.000*\"kong\" + 0.000*\"lama\"\n", "05:45:09 INFO:topic #94 (0.005): 0.000*\"share\" + 0.000*\"stock\" + 0.000*\"election\" + 0.000*\"analyst\" + 0.000*\"low\" + 0.000*\"bank\" + 0.000*\"havel\" + 0.000*\"government\" + 0.000*\"high\" + 0.000*\"large\"\n", "05:45:09 INFO:topic diff=3.102101, rho=0.277350\n", "05:45:09 INFO:PROGRESS: pass 12, at document #2500/2500\n", "05:45:09 DEBUG:performing inference on a chunk of 2500 documents\n", "05:45:17 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:45:17 DEBUG:updating topics\n", "05:45:18 INFO:topic #122 (0.005): 0.000*\"share\" + 0.000*\"analyst\" + 0.000*\"plant\" + 0.000*\"gm\" + 0.000*\"industry\" + 0.000*\"quarter\" + 0.000*\"service\" + 0.000*\"law\" + 0.000*\"month\" + 0.000*\"large\"\n", "05:45:18 INFO:topic #20 (0.005): 0.029*\"gold\" + 0.019*\"bre\" + 0.019*\"x\" + 0.018*\"bre_x\" + 0.014*\"price\" + 0.014*\"analyst\" + 0.011*\"Bre-X\" + 0.010*\"busang\" + 0.010*\"barrick\" + 0.010*\"toronto\"\n", "05:45:18 INFO:topic #107 (0.005): 0.031*\"russia\" + 0.027*\"oil\" + 0.016*\"russian\" + 0.014*\"export\" + 0.012*\"output\" + 0.010*\"moscow\" + 0.009*\"tonne\" + 0.009*\"domestic\" + 0.009*\"world\" + 0.008*\"western\"\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "05:45:18 INFO:topic #130 (0.005): 0.019*\"mci\" + 0.012*\"analyst\" + 0.011*\"service\" + 0.011*\"share\" + 0.010*\"long\" + 0.010*\"billion\" + 0.009*\"long_distance\" + 0.009*\"distance\" + 0.009*\"corp\" + 0.008*\"deal\"\n", "05:45:18 INFO:topic #151 (0.005): 0.012*\"billion\" + 0.008*\"sale\" + 0.007*\"computer\" + 0.007*\"industry\" + 0.006*\"good\" + 0.006*\"analyst\" + 0.006*\"product\" + 0.006*\"quarter\" + 0.005*\"forecast\" + 0.005*\"internet\"\n", "05:45:18 INFO:topic diff=2.611657, rho=0.267261\n", "05:45:18 INFO:PROGRESS: pass 13, at document #2500/2500\n", "05:45:18 DEBUG:performing inference on a chunk of 2500 documents\n", "05:45:28 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:45:28 DEBUG:updating topics\n", "05:45:28 INFO:topic #74 (0.005): 0.036*\"china\" + 0.029*\"tonne\" + 0.021*\"chinese\" + 0.021*\"trader\" + 0.018*\"price\" + 0.014*\"import\" + 0.013*\"source\" + 0.011*\"copper\" + 0.010*\"official\" + 0.010*\"million_tonne\"\n", "05:45:28 INFO:topic #138 (0.005): 0.000*\"china\" + 0.000*\"beijing\" + 0.000*\"share\" + 0.000*\"news\" + 0.000*\"states\" + 0.000*\"chinese\" + 0.000*\"analyst\" + 0.000*\"month\" + 0.000*\"long\" + 0.000*\"the United States\"\n", "05:45:28 INFO:topic #60 (0.005): 0.000*\"half\" + 0.000*\"financial\" + 0.000*\"northern\" + 0.000*\"policy\" + 0.000*\"official\" + 0.000*\"group\" + 0.000*\"product\" + 0.000*\"draft\" + 0.000*\"administration\" + 0.000*\"stock\"\n", "05:45:28 INFO:topic #42 (0.005): 0.000*\"russia\" + 0.000*\"russian\" + 0.000*\"industry\" + 0.000*\"technology\" + 0.000*\"oil\" + 0.000*\"world\" + 0.000*\"export\" + 0.000*\"price\" + 0.000*\"diamond\" + 0.000*\"analyst\"\n", "05:45:28 INFO:topic #36 (0.005): 0.026*\"bid\" + 0.025*\"penny\" + 0.016*\"analyst\" + 0.015*\"electric\" + 0.015*\"share\" + 0.014*\"electricity\" + 0.013*\"pound\" + 0.013*\"offer\" + 0.011*\"northern\" + 0.011*\"british\"\n", "05:45:28 INFO:topic diff=2.202422, rho=0.258199\n", "05:45:28 INFO:PROGRESS: pass 14, at document #2500/2500\n", "05:45:28 DEBUG:performing inference on a chunk of 2500 documents\n", "05:45:36 DEBUG:2500/2500 documents converged within 50 iterations\n", "05:45:36 DEBUG:updating topics\n", "05:45:36 INFO:topic #89 (0.005): 0.001*\"bre_x\" + 0.001*\"x\" + 0.001*\"bre\" + 0.001*\"analyst\" + 0.001*\"barrick\" + 0.001*\"Bre-X\" + 0.001*\"government\" + 0.001*\"gold\" + 0.001*\"indonesian\" + 0.001*\"billion\"\n", "05:45:36 INFO:topic #121 (0.005): 0.000*\"time\" + 0.000*\"share\" + 0.000*\"second\" + 0.000*\"tobacco\" + 0.000*\"group\" + 0.000*\"industry\" + 0.000*\"action\" + 0.000*\"month\" + 0.000*\"plan\" + 0.000*\"hand\"\n", "05:45:36 INFO:topic #188 (0.005): 0.015*\"sale\" + 0.013*\"analyst\" + 0.011*\"share\" + 0.008*\"mercury\" + 0.008*\"bank\" + 0.007*\"stock\" + 0.007*\"billion\" + 0.006*\"amp\" + 0.006*\"think\" + 0.006*\"base\"\n", "05:45:36 INFO:topic #80 (0.005): 0.016*\"microsoft\" + 0.015*\"analyst\" + 0.013*\"quarter\" + 0.010*\"windows\" + 0.010*\"computer\" + 0.009*\"business\" + 0.009*\"revenue\" + 0.009*\"sale\" + 0.008*\"system\" + 0.008*\"software\"\n", "05:45:36 INFO:topic #56 (0.005): 0.033*\"hong\" + 0.033*\"kong\" + 0.032*\"hong_kong\" + 0.023*\"Hong Kong\" + 0.017*\"china\" + 0.007*\"Hong Kong's\" + 0.006*\"chinese\" + 0.006*\"tung\" + 0.006*\"british\" + 0.004*\"government\"\n", "05:45:36 INFO:topic diff=1.861192, rho=0.250000\n", "05:45:36 DEBUG:Setting topics to those of the model: AuthorTopicModel(num_terms=3914, num_topics=200, num_authors=50, decay=0.5, chunksize=2500)\n", "05:45:37 INFO:CorpusAccumulator accumulated stats from 1000 documents\n", "05:45:37 INFO:CorpusAccumulator accumulated stats from 2000 documents\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-1.93149366596\n" ] } ], "source": [ "atmodel_200topics = train_model(train_corpus_50_20, train_author2doc, train_dictionary_50_20, num_topics=200, eval_every=0, iterations=50, passes=15)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision@k: top_n=1\n", "Prediction accuracy: 0.6232\n", "Precision@k: top_n=2\n", "Prediction accuracy: 0.7664\n", "Precision@k: top_n=3\n", "Prediction accuracy: 0.8456\n", "Precision@k: top_n=4\n", "Prediction accuracy: 0.8816\n", "Precision@k: top_n=5\n", "Prediction accuracy: 0.9032\n", "Precision@k: top_n=6\n", "Prediction accuracy: 0.9164\n", "Precision@k: top_n=8\n", "Prediction accuracy: 0.9368\n", "Precision@k: top_n=10\n", "Prediction accuracy: 0.9464\n" ] }, { "data": { "image/png": "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\n+G7s2LHMnj0bgNmzZ3PppZcWrX/zzTdRVb7++msiIyOJjo4use3x02YXn/r68OHDJaa+/vbbb9mx\nYwc+n4958+aVmu77vPPOY8GCBUUJoPh030OHDmXatGm0bdu2RNIy5ePpXEyqugxY5n7+GQh8UnRj\nTLX58ssveeutt+jbty9xcXEAPPHEE1x00UU8/PDDjBs3jtdff50uXbowf/58wLn99KOPPqJ79+40\nbtyYN954o9R+W7duzdlnn01sbCwXXnghTz75JCtXrqR///6oatHU11u2bGHIkCHceeedbNu2jVGj\nRnH55ZeX2FefPn344x//yLnnnktoaCgDBgxg1qxZPPDAA2zduhVVZfTo0fTv37/6f7A6yibrM8aU\ncs455+DMCl1a69atWbp0aan1IsKMGTPK3Pfbb79dYvmpp57iqaeeKtVp27x5cz788MNS2xd/bsL4\n8eMZP358ie//85//lBmDCUxNamIyxhhTg9gVhDGmxhk5cqRntxibY+wKwhhjjF+WIIwxxvhlCcIY\nY4xfliCMMcb4ZQnCmLpg/Xx4LhamtnDe18+v1O7q03TfEyZMYOHChSctM2vWLBITE6usTn9WrVrF\nXXfdddIyVfH7lYclCGNqu/Xz4YO7IHUPoM77B3dVKknYdN8lBSNBDB48mBdffPGkZSxBGGPKZ+k0\nyMsuuS4v21lfQdHR0QwcOBBwpsc4/fTT2bvXmT9z0aJFRYPTxo8fz3vvvVe0/oYbbkBEGDZsGCkp\nKUVzNhV6+OGH2b59O3FxcTzwwAOoKg888ACxsbEMGzaMefPmAc5MuiNGjODiiy+mZ8+e3Hbbbfh8\nPgC6du3K4cOHAXjzzTfp168f/fv35/rrrwdgwYIFxMbG0r9/f0aMGFHq2FSVO++8k549e3L++edz\n8ODBou+mTZvGkCFDiI2NZdKkSagqCxcuZNWqVVx77bXExcWRnZ3tt9zxJkyYwG233cbgwYM57bTT\nigb95eTkcOONNzJs2DAGDBhAfHx80TFfcsklAEydOpWbbrqJkSNHcsoppxQljuN/v3379jFixAji\n4uKIjY1l+fLl5fsPXRZVrbWvQYMGqVfi4+Ot3jpet5fHvGbNmsALT4lUndLczyuySmLZsWOHdurU\nSVNTU1VVNTLy2H59Pl/R8sUXX6zLly8v+u68887T7777rtS++vTpU7S8cOFCPf/88zU/P1+3bdum\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "accuracy_scores_200topic={}\n", "for i in [1,2,3,4,5,6,8,10]:\n", " accuracy, k = prediction_accuracy(test_author2doc, test_corpus_50_20, atmodel_200topics, k=i)\n", " accuracy_scores_200topic[k] = accuracy\n", " \n", "plot_accuracy(scores1=accuracy_scores_150topic, label1=\"150 topics\", scores2=accuracy_scores_200topic, label2=\"200 topics\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "The 200-topic seems to be performing a bit better for lower k, might be due to a slight overrepresentation with high topic number. So let us stop here with the topic number increase and focus some more on the dictionary. We choose either one of the models.\n", "Currently we are filtering out tokens, that appear in more 50% of all documents and no more than 20 times overall, which drastically decreaces the size of our dictionary. \n", "We know about this dataset, that the underlying topic are not so diverse and are structed around corporate/industrial topic class. Thus it makes sense to increase the dictionary by filtering less tokens." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We set the parameters set max_freq=25%, min_wordcount=10" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "06:18:50 INFO:adding document #0 to Dictionary(0 unique tokens: [])\n", "06:18:51 INFO:built Dictionary(46905 unique tokens: ['$83.4 million', 'boarder', '$2.72 billion', 'checking', 'suzuki']...) from 2500 documents (total 786032 corpus positions)\n", "06:18:51 INFO:discarding 40690 tokens: [('$15', 3), ('$17.25', 1), ('$380 million', 2), ('12.5 cents', 7), ('Big B', 3), ('Big B Inc.', 2), (\"Big B's\", 3), ('Big B. I', 1), ('Dwayne Hoven', 1), ('Eckerd Corp.', 1)]...\n", "06:18:51 INFO:keeping 6215 tokens which were in no less than 10 and no more than 625 (=25.0%) documents\n", "06:18:51 DEBUG:rebuilding dictionary, shrinking gaps\n", "06:18:51 INFO:resulting dictionary: Dictionary(6215 unique tokens: ['offshoot', 'shore', 'loss', 'merger', 'disappointing']...)\n" ] } ], "source": [ "train_corpus_25_10, train_dictionary_25_10 = create_corpus_dictionary(train_docs, 0.25, 10)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true }, "outputs": [], "source": [ "test_corpus_25_10 = create_test_corpus(train_dictionary_25_10, test_docs)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of unique tokens: 6215\n" ] } ], "source": [ "print('Number of unique tokens: %d' % len(train_dictionary_25_10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now have now nearly doubled the tokens. Let's train and evaluate." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "06:18:53 INFO:Vocabulary consists of 6215 words.\n", "06:18:53 INFO:using symmetric alpha at 0.006666666666666667\n", "06:18:53 INFO:using symmetric eta at 0.006666666666666667\n", "06:18:57 INFO:running online author-topic training, 150 topics, 50 authors, 15 passes over the supplied corpus of 2500 documents, updating model once every 2500 documents, evaluating perplexity every 0 documents, iterating 50x with a convergence threshold of 0.001000\n", "06:18:57 INFO:PROGRESS: pass 0, at document #2500/2500\n", "06:18:57 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:11 DEBUG:17/2500 documents converged within 50 iterations\n", "06:19:11 DEBUG:updating topics\n", "06:19:12 INFO:topic #141 (0.007): 0.031*\"gm\" + 0.016*\"plant\" + 0.011*\"worker\" + 0.010*\"uaw\" + 0.009*\"strike\" + 0.009*\"truck\" + 0.008*\"local\" + 0.007*\"automaker\" + 0.006*\"part\" + 0.005*\"contract\"\n", "06:19:12 INFO:topic #105 (0.007): 0.013*\"china\" + 0.010*\"tonne\" + 0.009*\"chinese\" + 0.008*\"trader\" + 0.007*\"copper\" + 0.007*\"product\" + 0.005*\"drug\" + 0.005*\"hong_kong\" + 0.004*\"soybean\" + 0.004*\"hong\"\n", "06:19:12 INFO:topic #15 (0.007): 0.006*\"china\" + 0.004*\"network\" + 0.003*\"drug\" + 0.003*\"trade\" + 0.003*\"united\" + 0.003*\"states\" + 0.003*\"boeing\" + 0.003*\"chinese\" + 0.003*\"beijing\" + 0.002*\"product\"\n", "06:19:12 INFO:topic #30 (0.007): 0.010*\"amp\" + 0.009*\"bank\" + 0.005*\"ernst\" + 0.005*\"claim\" + 0.005*\"bre\" + 0.004*\"bre_x\" + 0.004*\"gold\" + 0.003*\"rate\" + 0.003*\"x\" + 0.003*\"pay\"\n", "06:19:12 INFO:topic #114 (0.007): 0.019*\"bank\" + 0.010*\"japan\" + 0.009*\"pound\" + 0.008*\"problem\" + 0.008*\"loan\" + 0.007*\"financial\" + 0.006*\"yen\" + 0.005*\"bt\" + 0.005*\"million_pound\" + 0.005*\"japanese\"\n", "06:19:12 INFO:topic diff=61.971494, rho=1.000000\n", "06:19:12 INFO:PROGRESS: pass 1, at document #2500/2500\n", "06:19:12 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:19 DEBUG:2491/2500 documents converged within 50 iterations\n", "06:19:19 DEBUG:updating topics\n", "06:19:19 INFO:topic #45 (0.007): 0.006*\"property\" + 0.004*\"china\" + 0.003*\"holding\" + 0.003*\"survey\" + 0.003*\"sector\" + 0.002*\"bank\" + 0.002*\"gold\" + 0.002*\"fall\" + 0.002*\"debt\" + 0.002*\"air\"\n", "06:19:19 INFO:topic #139 (0.007): 0.024*\"colombia\" + 0.021*\"drug\" + 0.008*\"guerrilla\" + 0.008*\"colombian\" + 0.007*\"police\" + 0.006*\"extradition\" + 0.005*\"late\" + 0.005*\"anti\" + 0.005*\"congress\" + 0.005*\"contract\"\n", "06:19:19 INFO:topic #15 (0.007): 0.005*\"china\" + 0.003*\"network\" + 0.002*\"drug\" + 0.002*\"trade\" + 0.002*\"united\" + 0.002*\"states\" + 0.002*\"boeing\" + 0.002*\"chinese\" + 0.002*\"beijing\" + 0.002*\"product\"\n", "06:19:19 INFO:topic #2 (0.007): 0.004*\"bre_x\" + 0.004*\"x\" + 0.003*\"bid\" + 0.003*\"bre\" + 0.003*\"product\" + 0.003*\"Bre-X\" + 0.003*\"drug\" + 0.003*\"gold\" + 0.002*\"mining\" + 0.002*\"pound\"\n", "06:19:19 INFO:topic #116 (0.007): 0.007*\"china\" + 0.006*\"bank\" + 0.004*\"tonne\" + 0.004*\"problem\" + 0.004*\"hong_kong\" + 0.003*\"trader\" + 0.003*\"chinese\" + 0.003*\"loan\" + 0.003*\"kong\" + 0.003*\"hong\"\n", "06:19:19 INFO:topic diff=11.411593, rho=0.577350\n", "06:19:19 INFO:PROGRESS: pass 2, at document #2500/2500\n", "06:19:19 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:26 DEBUG:2499/2500 documents converged within 50 iterations\n", "06:19:26 DEBUG:updating topics\n", "06:19:26 INFO:topic #116 (0.007): 0.005*\"china\" + 0.005*\"bank\" + 0.003*\"tonne\" + 0.003*\"problem\" + 0.003*\"hong_kong\" + 0.002*\"trader\" + 0.002*\"chinese\" + 0.002*\"loan\" + 0.002*\"kong\" + 0.002*\"hong\"\n", "06:19:26 INFO:topic #79 (0.007): 0.030*\"china\" + 0.020*\"beijing\" + 0.014*\"chinese\" + 0.009*\"taiwan\" + 0.008*\"trade\" + 0.008*\"wang\" + 0.007*\"foreign\" + 0.006*\"united\" + 0.006*\"washington\" + 0.006*\"states\"\n", "06:19:26 INFO:topic #58 (0.007): 0.006*\"pound\" + 0.004*\"million_pound\" + 0.003*\"hong_kong\" + 0.002*\"hong\" + 0.002*\"kong\" + 0.002*\"pay\" + 0.002*\"china\" + 0.002*\"Hong Kong\" + 0.002*\"shareholder\" + 0.002*\"service\"\n", "06:19:26 INFO:topic #19 (0.007): 0.036*\"bre\" + 0.035*\"x\" + 0.033*\"bre_x\" + 0.031*\"gold\" + 0.026*\"Bre-X\" + 0.019*\"barrick\" + 0.015*\"busang\" + 0.013*\"indonesian\" + 0.011*\"mining\" + 0.009*\"deposit\"\n", "06:19:26 INFO:topic #112 (0.007): 0.005*\"bank\" + 0.003*\"russia\" + 0.002*\"x\" + 0.002*\"diamond\" + 0.002*\"bre\" + 0.002*\"bre_x\" + 0.002*\"canada\" + 0.002*\"export\" + 0.002*\"canadian\" + 0.002*\"Bre-X\"\n", "06:19:26 INFO:topic diff=9.522079, rho=0.500000\n", "06:19:26 INFO:PROGRESS: pass 3, at document #2500/2500\n", "06:19:26 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:32 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:19:32 DEBUG:updating topics\n", "06:19:33 INFO:topic #38 (0.007): 0.003*\"block\" + 0.002*\"quarter\" + 0.002*\"service\" + 0.002*\"compuserve\" + 0.002*\"china\" + 0.002*\"pound\" + 0.002*\"loss\" + 0.001*\"chinese\" + 0.001*\"time_warner\" + 0.001*\"cent\"\n", "06:19:33 INFO:topic #148 (0.007): 0.018*\"franc\" + 0.015*\"french\" + 0.014*\"airbus\" + 0.014*\"france\" + 0.013*\"thomson\" + 0.009*\"air\" + 0.009*\"billion_franc\" + 0.007*\"boeing\" + 0.007*\"state\" + 0.007*\"air_france\"\n", "06:19:33 INFO:topic #9 (0.007): 0.023*\"shanghai\" + 0.021*\"china\" + 0.018*\"bank\" + 0.014*\"b\" + 0.014*\"foreign\" + 0.011*\"investor\" + 0.011*\"exchange\" + 0.011*\"b_share\" + 0.010*\"beijing\" + 0.010*\"shenzhen\"\n", "06:19:33 INFO:topic #11 (0.007): 0.013*\"tobacco\" + 0.010*\"florida\" + 0.009*\"quick\" + 0.008*\"state\" + 0.007*\"car\" + 0.007*\"amp\" + 0.007*\"trial\" + 0.006*\"cigarette\" + 0.006*\"television\" + 0.006*\"maker\"\n", "06:19:33 INFO:topic #116 (0.007): 0.004*\"china\" + 0.003*\"bank\" + 0.002*\"tonne\" + 0.002*\"problem\" + 0.002*\"hong_kong\" + 0.002*\"trader\" + 0.002*\"chinese\" + 0.002*\"loan\" + 0.001*\"kong\" + 0.001*\"hong\"\n", "06:19:33 INFO:topic diff=7.935955, rho=0.447214\n", "06:19:33 INFO:PROGRESS: pass 4, at document #2500/2500\n", "06:19:33 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:39 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:19:39 DEBUG:updating topics\n", "06:19:39 INFO:topic #118 (0.007): 0.003*\"tonne\" + 0.002*\"cocoa\" + 0.002*\"exporter\" + 0.001*\"chad\" + 0.001*\"bank\" + 0.001*\"coast\" + 0.001*\"ivory\" + 0.001*\"crop\" + 0.001*\"ivory_coast\" + 0.001*\"cable\"\n", "06:19:39 INFO:topic #134 (0.007): 0.038*\"bank\" + 0.020*\"canada\" + 0.017*\"canadian\" + 0.011*\"toronto\" + 0.009*\"fund\" + 0.008*\"cent\" + 0.007*\"molson\" + 0.006*\"earning\" + 0.005*\"royal_bank\" + 0.005*\"royal\"\n", "06:19:39 INFO:topic #7 (0.007): 0.002*\"soybean\" + 0.002*\"china\" + 0.002*\"monsanto\" + 0.002*\"director\" + 0.002*\"adm\" + 0.002*\"hong\" + 0.002*\"crop\" + 0.001*\"hong_kong\" + 0.001*\"united\" + 0.001*\"equipment\"\n", "06:19:39 INFO:topic #93 (0.007): 0.005*\"earning\" + 0.005*\"point\" + 0.004*\"quarter\" + 0.004*\"investor\" + 0.004*\"fund\" + 0.004*\"growth\" + 0.003*\"exchange\" + 0.003*\"investment\" + 0.003*\"strong\" + 0.003*\"trade\"\n", "06:19:39 INFO:topic #26 (0.007): 0.012*\"bank\" + 0.010*\"yen\" + 0.008*\"billion_yen\" + 0.005*\"financial\" + 0.005*\"affiliate\" + 0.004*\"daiwa\" + 0.004*\"non\" + 0.004*\"non_bank\" + 0.004*\"half\" + 0.004*\"post\"\n", "06:19:39 INFO:topic diff=6.627219, rho=0.408248\n", "06:19:39 INFO:PROGRESS: pass 5, at document #2500/2500\n", "06:19:39 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:45 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:19:45 DEBUG:updating topics\n", "06:19:46 INFO:topic #16 (0.007): 0.030*\"toronto\" + 0.020*\"index\" + 0.019*\"bank\" + 0.018*\"canada\" + 0.016*\"point\" + 0.015*\"gold\" + 0.012*\"canadian\" + 0.011*\"toronto_stock\" + 0.011*\"fall\" + 0.010*\"gain\"\n", "06:19:46 INFO:topic #114 (0.007): 0.010*\"bank\" + 0.005*\"japan\" + 0.005*\"pound\" + 0.004*\"problem\" + 0.004*\"loan\" + 0.003*\"financial\" + 0.003*\"yen\" + 0.003*\"bt\" + 0.003*\"million_pound\" + 0.003*\"japanese\"\n", "06:19:46 INFO:topic #52 (0.007): 0.019*\"bank\" + 0.017*\"airbus\" + 0.008*\"canada\" + 0.006*\"fund\" + 0.006*\"canadian\" + 0.006*\"service\" + 0.005*\"boeing\" + 0.004*\"aircraft\" + 0.004*\"aerospace\" + 0.004*\"office\"\n", "06:19:46 INFO:topic #146 (0.007): 0.007*\"china\" + 0.005*\"party\" + 0.004*\"pound\" + 0.003*\"british\" + 0.003*\"plc\" + 0.003*\"stg\" + 0.003*\"drug\" + 0.002*\"million_pound\" + 0.002*\"country\" + 0.002*\"technology\"\n", "06:19:46 INFO:topic #47 (0.007): 0.009*\"tonne\" + 0.008*\"smelter\" + 0.007*\"oil\" + 0.007*\"aluminium\" + 0.006*\"state\" + 0.006*\"plant\" + 0.006*\"russia\" + 0.006*\"trader\" + 0.006*\"source\" + 0.005*\"metal\"\n", "06:19:46 INFO:topic diff=5.554374, rho=0.377964\n", "06:19:46 INFO:PROGRESS: pass 6, at document #2500/2500\n", "06:19:46 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:51 DEBUG:2500/2500 documents converged within 50 iterations\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "06:19:51 DEBUG:updating topics\n", "06:19:52 INFO:topic #44 (0.007): 0.007*\"internet\" + 0.004*\"committee\" + 0.003*\"proposal\" + 0.003*\"address\" + 0.003*\"trade\" + 0.003*\"china\" + 0.003*\"congress\" + 0.002*\"member\" + 0.002*\"financial\" + 0.002*\"name\"\n", "06:19:52 INFO:topic #131 (0.007): 0.009*\"bank\" + 0.008*\"internet\" + 0.007*\"court\" + 0.005*\"exchange\" + 0.004*\"foreign\" + 0.004*\"currency\" + 0.004*\"trading\" + 0.004*\"policy\" + 0.003*\"law\" + 0.003*\"security\"\n", "06:19:52 INFO:topic #112 (0.007): 0.001*\"bank\" + 0.001*\"russia\" + 0.001*\"x\" + 0.001*\"diamond\" + 0.001*\"bre\" + 0.001*\"bre_x\" + 0.001*\"canada\" + 0.001*\"export\" + 0.001*\"canadian\" + 0.001*\"Bre-X\"\n", "06:19:52 INFO:topic #49 (0.007): 0.008*\"bid\" + 0.008*\"penny\" + 0.005*\"pound\" + 0.004*\"northern\" + 0.004*\"electric\" + 0.003*\"midlands\" + 0.003*\"offer\" + 0.003*\"sector\" + 0.003*\"electricity\" + 0.003*\"east\"\n", "06:19:52 INFO:topic #61 (0.007): 0.008*\"china\" + 0.008*\"tibet\" + 0.005*\"chinese\" + 0.005*\"beijing\" + 0.005*\"foreign\" + 0.004*\"wang\" + 0.004*\"hong_kong\" + 0.004*\"kong\" + 0.003*\"hong\" + 0.003*\"region\"\n", "06:19:52 INFO:topic diff=4.666072, rho=0.353553\n", "06:19:52 INFO:PROGRESS: pass 7, at document #2500/2500\n", "06:19:52 DEBUG:performing inference on a chunk of 2500 documents\n", "06:19:58 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:19:58 DEBUG:updating topics\n", "06:19:58 INFO:topic #8 (0.007): 0.001*\"french\" + 0.001*\"bank\" + 0.001*\"service\" + 0.001*\"financial\" + 0.001*\"internet\" + 0.001*\"china\" + 0.000*\"mfs\" + 0.000*\"sell\" + 0.000*\"state\" + 0.000*\"product\"\n", "06:19:58 INFO:topic #45 (0.007): 0.001*\"property\" + 0.000*\"china\" + 0.000*\"holding\" + 0.000*\"survey\" + 0.000*\"sector\" + 0.000*\"bank\" + 0.000*\"gold\" + 0.000*\"fall\" + 0.000*\"debt\" + 0.000*\"air\"\n", "06:19:58 INFO:topic #22 (0.007): 0.016*\"pound\" + 0.012*\"drug\" + 0.011*\"plc\" + 0.011*\"british\" + 0.011*\"million_pound\" + 0.008*\"product\" + 0.007*\"penny\" + 0.006*\"cancer\" + 0.006*\"stg\" + 0.005*\"biotech\"\n", "06:19:58 INFO:topic #10 (0.007): 0.023*\"bank\" + 0.015*\"pound\" + 0.008*\"society\" + 0.006*\"banking\" + 0.006*\"fund\" + 0.006*\"shareholder\" + 0.005*\"investment\" + 0.005*\"eurotunnel\" + 0.005*\"lloyds\" + 0.005*\"debt\"\n", "06:19:58 INFO:topic #11 (0.007): 0.013*\"tobacco\" + 0.012*\"florida\" + 0.009*\"quick\" + 0.009*\"state\" + 0.008*\"car\" + 0.007*\"amp\" + 0.007*\"trial\" + 0.007*\"television\" + 0.006*\"news\" + 0.006*\"maker\"\n", "06:19:58 INFO:topic diff=3.925478, rho=0.333333\n", "06:19:58 INFO:PROGRESS: pass 8, at document #2500/2500\n", "06:19:58 DEBUG:performing inference on a chunk of 2500 documents\n", "06:20:04 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:20:04 DEBUG:updating topics\n", "06:20:04 INFO:topic #9 (0.007): 0.024*\"shanghai\" + 0.022*\"china\" + 0.018*\"bank\" + 0.014*\"b\" + 0.014*\"foreign\" + 0.011*\"investor\" + 0.011*\"exchange\" + 0.011*\"b_share\" + 0.010*\"beijing\" + 0.010*\"shenzhen\"\n", "06:20:04 INFO:topic #42 (0.007): 0.001*\"news\" + 0.000*\"china\" + 0.000*\"corp\" + 0.000*\"net\" + 0.000*\"property\" + 0.000*\"news_corp\" + 0.000*\"value\" + 0.000*\"shareholder\" + 0.000*\"bre_x\" + 0.000*\"x\"\n", "06:20:04 INFO:topic #131 (0.007): 0.006*\"bank\" + 0.005*\"internet\" + 0.004*\"court\" + 0.003*\"exchange\" + 0.003*\"foreign\" + 0.003*\"currency\" + 0.002*\"trading\" + 0.002*\"policy\" + 0.002*\"law\" + 0.002*\"security\"\n", "06:20:04 INFO:topic #99 (0.007): 0.011*\"mci\" + 0.007*\"digital\" + 0.007*\"camera\" + 0.006*\"rockwell\" + 0.005*\"technology\" + 0.005*\"kong\" + 0.005*\"hand\" + 0.005*\"hong_kong\" + 0.005*\"system\" + 0.004*\"trade\"\n", "06:20:04 INFO:topic #5 (0.007): 0.018*\"bt\" + 0.013*\"telecom\" + 0.011*\"pound\" + 0.010*\"british\" + 0.008*\"mci\" + 0.007*\"service\" + 0.006*\"merger\" + 0.005*\"penny\" + 0.005*\"britain\" + 0.005*\"ntt\"\n", "06:20:04 INFO:topic diff=3.304076, rho=0.316228\n", "06:20:04 INFO:PROGRESS: pass 9, at document #2500/2500\n", "06:20:04 DEBUG:performing inference on a chunk of 2500 documents\n", "06:20:10 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:20:10 DEBUG:updating topics\n", "06:20:10 INFO:topic #108 (0.007): 0.005*\"gm\" + 0.004*\"computer\" + 0.004*\"quarter\" + 0.004*\"ibm\" + 0.004*\"car\" + 0.004*\"technology\" + 0.004*\"france\" + 0.003*\"thomson\" + 0.003*\"plant\" + 0.003*\"service\"\n", "06:20:11 INFO:topic #111 (0.007): 0.008*\"computer\" + 0.006*\"software\" + 0.005*\"apple\" + 0.005*\"quarter\" + 0.004*\"microsoft\" + 0.003*\"technology\" + 0.003*\"design\" + 0.003*\"pc\" + 0.002*\"oracle\" + 0.002*\"financial\"\n", "06:20:11 INFO:topic #82 (0.007): 0.003*\"china\" + 0.002*\"shanghai\" + 0.002*\"future\" + 0.002*\"exchange\" + 0.001*\"b\" + 0.001*\"index\" + 0.001*\"authority\" + 0.001*\"investor\" + 0.001*\"trading\" + 0.001*\"foreign\"\n", "06:20:11 INFO:topic #89 (0.007): 0.016*\"internet\" + 0.015*\"computer\" + 0.014*\"technology\" + 0.010*\"quarter\" + 0.010*\"software\" + 0.009*\"product\" + 0.008*\"microsoft\" + 0.008*\"sun\" + 0.007*\"netscape\" + 0.007*\"web\"\n", "06:20:11 INFO:topic #101 (0.007): 0.001*\"china\" + 0.001*\"kong\" + 0.001*\"hong\" + 0.001*\"hong_kong\" + 0.000*\"Hong Kong\" + 0.000*\"macau\" + 0.000*\"tung\" + 0.000*\"chinese\" + 0.000*\"formula\" + 0.000*\"beijing\"\n", "06:20:11 INFO:topic diff=2.781140, rho=0.301511\n", "06:20:11 INFO:PROGRESS: pass 10, at document #2500/2500\n", "06:20:11 DEBUG:performing inference on a chunk of 2500 documents\n", "06:20:16 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:20:16 DEBUG:updating topics\n", "06:20:17 INFO:topic #60 (0.007): 0.011*\"oil\" + 0.009*\"colombia\" + 0.008*\"colombian\" + 0.008*\"paramilitary\" + 0.008*\"country\" + 0.008*\"drug\" + 0.008*\"police\" + 0.007*\"attack\" + 0.007*\"force\" + 0.007*\"medellin\"\n", "06:20:17 INFO:topic #99 (0.007): 0.010*\"mci\" + 0.008*\"digital\" + 0.007*\"camera\" + 0.007*\"rockwell\" + 0.005*\"technology\" + 0.005*\"hand\" + 0.005*\"system\" + 0.005*\"agreement\" + 0.005*\"personal\" + 0.005*\"trade\"\n", "06:20:17 INFO:topic #109 (0.007): 0.025*\"pound\" + 0.016*\"million_pound\" + 0.012*\"life\" + 0.011*\"insurance\" + 0.011*\"scotam\" + 0.009*\"offer\" + 0.009*\"abbey\" + 0.007*\"policyholder\" + 0.007*\"british\" + 0.006*\"scottish\"\n", "06:20:17 INFO:topic #55 (0.007): 0.028*\"internet\" + 0.027*\"court\" + 0.019*\"foreign\" + 0.017*\"exchange\" + 0.017*\"currency\" + 0.014*\"case\" + 0.014*\"foreign_currency\" + 0.014*\"trading\" + 0.012*\"amendment\" + 0.012*\"address\"\n", "06:20:17 INFO:topic #9 (0.007): 0.024*\"shanghai\" + 0.022*\"china\" + 0.018*\"bank\" + 0.014*\"b\" + 0.014*\"foreign\" + 0.011*\"investor\" + 0.011*\"exchange\" + 0.011*\"b_share\" + 0.010*\"beijing\" + 0.010*\"shenzhen\"\n", "06:20:17 INFO:topic diff=2.340896, rho=0.288675\n", "06:20:17 INFO:PROGRESS: pass 11, at document #2500/2500\n", "06:20:17 DEBUG:performing inference on a chunk of 2500 documents\n", "06:20:22 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:20:22 DEBUG:updating topics\n", "06:20:23 INFO:topic #20 (0.007): 0.000*\"china\" + 0.000*\"de\" + 0.000*\"russia\" + 0.000*\"chinese\" + 0.000*\"beijing\" + 0.000*\"diamond\" + 0.000*\"kong\" + 0.000*\"export\" + 0.000*\"oil\" + 0.000*\"service\"\n", "06:20:23 INFO:topic #7 (0.007): 0.000*\"soybean\" + 0.000*\"china\" + 0.000*\"monsanto\" + 0.000*\"director\" + 0.000*\"adm\" + 0.000*\"hong\" + 0.000*\"crop\" + 0.000*\"hong_kong\" + 0.000*\"united\" + 0.000*\"equipment\"\n", "06:20:23 INFO:topic #24 (0.007): 0.024*\"czech\" + 0.011*\"crown\" + 0.011*\"bank\" + 0.010*\"prague\" + 0.010*\"klaus\" + 0.008*\"party\" + 0.006*\"havel\" + 0.006*\"foreign\" + 0.006*\"country\" + 0.006*\"election\"\n", "06:20:23 INFO:topic #80 (0.007): 0.025*\"king\" + 0.021*\"silver\" + 0.013*\"network\" + 0.012*\"station\" + 0.012*\"shopping\" + 0.012*\"home_shopping\" + 0.012*\"television\" + 0.009*\"latin\" + 0.009*\"news\" + 0.009*\"home\"\n", "06:20:23 INFO:topic #82 (0.007): 0.001*\"china\" + 0.001*\"shanghai\" + 0.001*\"future\" + 0.001*\"exchange\" + 0.001*\"b\" + 0.001*\"index\" + 0.001*\"authority\" + 0.001*\"investor\" + 0.001*\"trading\" + 0.001*\"foreign\"\n", "06:20:23 INFO:topic diff=1.970765, rho=0.277350\n", "06:20:23 INFO:PROGRESS: pass 12, at document #2500/2500\n", "06:20:23 DEBUG:performing inference on a chunk of 2500 documents\n", "06:20:29 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:20:29 DEBUG:updating topics\n", "06:20:30 INFO:topic #123 (0.007): 0.021*\"china\" + 0.013*\"wang\" + 0.011*\"beijing\" + 0.010*\"chinese\" + 0.007*\"tibet\" + 0.006*\"dissident\" + 0.006*\"state\" + 0.006*\"party\" + 0.005*\"communist\" + 0.005*\"court\"\n", "06:20:30 INFO:topic #86 (0.007): 0.015*\"internet\" + 0.014*\"computer\" + 0.014*\"ibm\" + 0.012*\"quarter\" + 0.011*\"service\" + 0.009*\"pc\" + 0.008*\"software\" + 0.007*\"system\" + 0.007*\"consumer\" + 0.006*\"network\"\n", "06:20:30 INFO:topic #50 (0.007): 0.034*\"hong_kong\" + 0.033*\"kong\" + 0.033*\"hong\" + 0.029*\"china\" + 0.021*\"Hong Kong\" + 0.018*\"tung\" + 0.013*\"beijing\" + 0.012*\"chinese\" + 0.012*\"Hong Kong's\" + 0.010*\"britain\"\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "06:20:30 INFO:topic #9 (0.007): 0.025*\"shanghai\" + 0.022*\"china\" + 0.018*\"bank\" + 0.014*\"b\" + 0.014*\"foreign\" + 0.011*\"investor\" + 0.011*\"exchange\" + 0.011*\"b_share\" + 0.010*\"beijing\" + 0.010*\"shenzhen\"\n", "06:20:30 INFO:topic #24 (0.007): 0.024*\"czech\" + 0.011*\"crown\" + 0.011*\"bank\" + 0.010*\"prague\" + 0.009*\"klaus\" + 0.008*\"party\" + 0.006*\"havel\" + 0.006*\"foreign\" + 0.006*\"country\" + 0.006*\"election\"\n", "06:20:30 INFO:topic diff=1.660230, rho=0.267261\n", "06:20:30 INFO:PROGRESS: pass 13, at document #2500/2500\n", "06:20:30 DEBUG:performing inference on a chunk of 2500 documents\n", "06:20:37 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:20:37 DEBUG:updating topics\n", "06:20:38 INFO:topic #108 (0.007): 0.003*\"gm\" + 0.002*\"computer\" + 0.002*\"quarter\" + 0.002*\"ibm\" + 0.002*\"car\" + 0.002*\"technology\" + 0.002*\"france\" + 0.002*\"thomson\" + 0.002*\"plant\" + 0.002*\"service\"\n", "06:20:38 INFO:topic #116 (0.007): 0.000*\"china\" + 0.000*\"bank\" + 0.000*\"tonne\" + 0.000*\"problem\" + 0.000*\"hong_kong\" + 0.000*\"trader\" + 0.000*\"chinese\" + 0.000*\"loan\" + 0.000*\"kong\" + 0.000*\"hong\"\n", "06:20:38 INFO:topic #59 (0.007): 0.000*\"pound\" + 0.000*\"lloyds\" + 0.000*\"bank\" + 0.000*\"pension\" + 0.000*\"insurance\" + 0.000*\"amp\" + 0.000*\"bhp\" + 0.000*\"claim\" + 0.000*\"million_pound\" + 0.000*\"scottish\"\n", "06:20:38 INFO:topic #19 (0.007): 0.034*\"bre\" + 0.033*\"x\" + 0.032*\"bre_x\" + 0.031*\"gold\" + 0.025*\"Bre-X\" + 0.018*\"barrick\" + 0.015*\"busang\" + 0.013*\"indonesian\" + 0.011*\"mining\" + 0.008*\"exploration\"\n", "06:20:38 INFO:topic #112 (0.007): 0.000*\"bank\" + 0.000*\"russia\" + 0.000*\"x\" + 0.000*\"diamond\" + 0.000*\"bre\" + 0.000*\"bre_x\" + 0.000*\"canada\" + 0.000*\"export\" + 0.000*\"canadian\" + 0.000*\"Bre-X\"\n", "06:20:38 INFO:topic diff=1.400248, rho=0.258199\n", "06:20:38 INFO:PROGRESS: pass 14, at document #2500/2500\n", "06:20:38 DEBUG:performing inference on a chunk of 2500 documents\n", "06:20:47 DEBUG:2500/2500 documents converged within 50 iterations\n", "06:20:47 DEBUG:updating topics\n", "06:20:47 INFO:topic #43 (0.007): 0.001*\"czech\" + 0.001*\"party\" + 0.001*\"klaus\" + 0.001*\"coalition\" + 0.001*\"election\" + 0.001*\"havel\" + 0.000*\"house\" + 0.000*\"crown\" + 0.000*\"prague\" + 0.000*\"parliament\"\n", "06:20:47 INFO:topic #49 (0.007): 0.001*\"bid\" + 0.001*\"penny\" + 0.001*\"pound\" + 0.001*\"northern\" + 0.001*\"electric\" + 0.000*\"midlands\" + 0.000*\"offer\" + 0.000*\"sector\" + 0.000*\"electricity\" + 0.000*\"east\"\n", "06:20:47 INFO:topic #122 (0.007): 0.000*\"wang\" + 0.000*\"china\" + 0.000*\"beijing\" + 0.000*\"law\" + 0.000*\"trial\" + 0.000*\"death\" + 0.000*\"dissident\" + 0.000*\"pound\" + 0.000*\"hong\" + 0.000*\"sentence\"\n", "06:20:47 INFO:topic #132 (0.007): 0.001*\"bank\" + 0.000*\"crown\" + 0.000*\"klaus\" + 0.000*\"czech\" + 0.000*\"social\" + 0.000*\"banka\" + 0.000*\"party\" + 0.000*\"minister\" + 0.000*\"state\" + 0.000*\"billion_crown\"\n", "06:20:47 INFO:topic #16 (0.007): 0.030*\"toronto\" + 0.020*\"index\" + 0.019*\"bank\" + 0.019*\"canada\" + 0.017*\"gold\" + 0.016*\"point\" + 0.012*\"canadian\" + 0.011*\"toronto_stock\" + 0.011*\"fall\" + 0.010*\"gain\"\n", "06:20:47 INFO:topic diff=1.182972, rho=0.250000\n", "06:20:47 DEBUG:Setting topics to those of the model: AuthorTopicModel(num_terms=6215, num_topics=150, num_authors=50, decay=0.5, chunksize=2500)\n", "06:20:47 INFO:CorpusAccumulator accumulated stats from 1000 documents\n", "06:20:48 INFO:CorpusAccumulator accumulated stats from 2000 documents\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "-2.83261288295\n" ] } ], "source": [ "atmodel_150topics_25_10 = train_model(train_corpus_25_10, train_author2doc, train_dictionary_25_10, num_topics=150, eval_every=0, iterations=50, passes=15)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precision@k: top_n=1\n", "Prediction accuracy: 0.6176\n", "Precision@k: top_n=2\n", "Prediction accuracy: 0.7712\n", "Precision@k: top_n=3\n", "Prediction accuracy: 0.8268\n", "Precision@k: top_n=4\n", "Prediction accuracy: 0.8656\n", "Precision@k: top_n=5\n", "Prediction accuracy: 0.8916\n", "Precision@k: top_n=6\n", "Prediction accuracy: 0.9112\n", "Precision@k: top_n=8\n", "Prediction accuracy: 0.9308\n", "Precision@k: top_n=10\n", "Prediction accuracy: 0.9408\n" ] }, { "data": { "image/png": "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\n55lnnvHsv6ry8MMPk5yczMyZM6muro4+59XnkpISysrKPMd2xx13NBpbQ/n5+TzwwANkZ2czZswY\nNm/eDDhlSAoKCkhLSyMzM5PS0lIA3nnnnei1J4WFhSxatIjp06czatSoaOJYvnw5hw8fJiMjgyee\neIJTp06Rk5NDRkYGoVAo+l4a4xtV7RS38vLyY6pa1vBWWVmpnlb0VV1xs8etr3f7Vjh69KimpqZq\nTU3N5XArVmhSUpKmpaVpQUGBfvHFF6qq+tBDD+lLL70Ubbdo0SItLi6+ap29evWKPi4rK9NQKKQX\nLlzQ8+fP67hx43Tv3r169OhRBXTbtm2qqlpQUKCrVq1SVdVp06bp7t27tbq6WocOHapHjhxRVdWz\nZ8+qqmpeXp7u2rVLVVXPnz+vly5dijm+srIynTlzZvTvL7/8UlVV77zzTt29e3d0eWTdqqoLFizQ\nTZs2Rfvy2GOPqarqli1bNDc3V1VVn376aS0oKFBV1YqKCk1ISIiuL7Ku2tpanTZtmlZUVKiqalJS\nkq5cuTL6XqelpemOHTtUVXXp0qWampp6Vf9ff/11nTlzptbW1urJkye1b9++0fe8qT57ja2mpqZR\nu4YWLlyod911l9bV1emhQ4d0yJAhGg6HdfXq1dFxVlVV6bBhwzQcDmtpaanOmjVLVZ3Py+TJk/Xi\nxYt65swZ7devn37zzTfRz1Yk9urVq/Wpp56KvjcNP3NdUVcf35X8Gu+BAweuWgaUaQu+d7vmFkTf\nGOWsYy2/TkuWLOHw4cOUl5czaNAgHn/88WteV8Ny3717946W+wauKvcdKVwX0Vy573Xr1nHu3LmY\nc0FA43LfW7du5eabb/ZsF5n4KC0tje3bt1NZWRl9Lla57wULFgDe5b6zsrLIzMyksrKy0fGUpsp9\ne9m5cyf33HMPCQkJDB48mBkzZrSoz15jmzRpUpPt5s6dyw033MDtt9/OqFGjOHjwILt27YqOMyUl\nhaSkJA4dOnTVa2fNmkWPHj3o378/t912G5999tlVbSZMmMCGDRsoLCxk//79cVWGwnQMXTNB5P4E\nuvdsvKx7T2d5O7By3x2/3HdzffZq9/7778dsB9f+7wGX3yOI/T7l5OSwc+dOhgwZQn5+Pi+++GKL\n129MW+iaCeI7c+HuddB3GCDO/d3rnOXtwMp9d5xy3zk5OWzcuJG6ujpOnToVPQbQVJ/79OlzTWMr\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "accuracy_scores_150topic_25_10={}\n", "for i in [1,2,3,4,5,6,8,10]:\n", " accuracy, k = prediction_accuracy(test_author2doc, test_corpus_25_10, atmodel_150topics_25_10, k=i)\n", " accuracy_scores_150topic_25_10[k] = accuracy\n", " \n", "plot_accuracy(scores1=accuracy_scores_150topic_25_10, label1=\"150 topics, max_freq=25%, min_wordcount=10\", scores2=accuracy_scores_150topic, label2=\"150 topics, standard\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results seem rather ambigious and do not show a clear trend. Which is why we would stop here for the iterations." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }