Raccomandazione di Microsoft News

Microsoft News Dataset (MIND) è un set di dati su larga scala per la ricerca di raccomandazioni di notizie. I dati sono stati raccolti da log di comportamento anonimizzati del sito Web Microsoft News. La missione di MIND consiste nell'offrire un set di dati benchmark per raccomandazioni sulle notizie e nell'agevolare la ricerca nell'area delle raccomandazioni sulle notizie e dei sistemi recommender.

MIND contiene circa 160.000 articoli delle notizie in inglese e più di 15 milioni di log di impression generati da 1 miliardo di utenti. Ogni articolo contiene un ricco contenuto testuale che comprende titolo, abstract, corpo, categoria ed entità. Ogni registro delle impressioni contiene gli eventi di clic, gli eventi non cliccati e i comportamenti cronologici di clic sulle notizie di questo utente prima di questa impressione. Per proteggere la privacy degli utenti, ogni utente è stato scollegato dal sistema di produzione durante l'applicazione sicura di un hash per la creazione di un ID anonimizzato. Per informazioni più dettagliate sul set di dati MIND, è possibile consultare il documento MIND: Un set di dati su larga scala per la raccomandazione di notizie..

Volume

I dati di training e di convalida sono costituiti da una cartella compressa che contiene quattro file diversi:

NOME FILE DESCRIZIONE
behaviors.tsv Cronologie di selezione e log di impression degli utenti
news.tsv Informazioni degli articoli delle notizie
entity_embedding.vec Incorporamenti delle entità nelle notizie estratte dal grafico delle conoscenze
relation_embedding.vec Incorporamenti delle relazioni tra le entità estratte dal grafico delle conoscenze

behaviors.tsv

Il file behaviors.tsv contiene i log delle impressioni e la cronologia dei clic sulle notizie degli utenti. Ha cinque colonne divise per il simbolo della scheda:

  • ID impression. ID di un'impression.
  • ID utente. ID anonimo di un utente.
  • Tempo. L'ora di impressione con il formato " GG/MM/AAAAA HH:MM:SS".
  • Cronologia. Cronologia di selezione delle notizie (elenco di ID delle notizie selezionate) di questo utente prima dell'impression.
  • Impression. Elenco delle notizie visualizzate in questa impressione e dei comportamenti di clic dell'utente su di esse (1 per clic e 0 per nessun clic).

Un esempio è riportato nella tabella seguente:

COLUMN CONTENUTO
ID impression 123
ID utente U131
Ora 11/13/2019 8:36:57 AM
Cronologia N11 N21 N103
Impression N4-1 N34-1 N156-0 N207-0 N198-0

news.tsv

Il file news.tsv contiene le informazioni dettagliate degli articoli di notizie coinvolti nel file behaviors.tsv. Contiene sette colonne, che sono divise per il simbolo della scheda:

  • ID notizie
  • Categoria
  • Sottocategoria
  • Title
  • Classi astratte
  • URL
  • Entità titolo (entità contenute nel titolo della notizia)
  • Entità sunto (entità contenute nel sunto della notizia)

I contenuti completi degli articoli sulle notizie di MSN non sono disponibili per il download, a causa della struttura delle licenze. Per motivi di praticità, abbiamo tuttavia fornito uno script di utilità per contribuire all'analisi di pagine Web di notizie dagli URL MSN nel set di dati. A causa della limitazione oraria, alcuni URL sono scaduti e non è possibile accedervi. Ci stiamo attualmente impegnando per risolvere il problema.

Un esempio è disponibile nella tabella seguente:

COLUMN CONTENUTO
ID notizie N37378
Categoria sport
Sottocategoria golf
Title Vincitori di PGA Tour
Classi astratte Raccolta dei vincitori recenti di PGA Tour.
URL https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata
Entità titolo [{“Etichetta”: “PGA Tour”, “Tipo”: “O”, “WikidataId”: “Q910409”, “Attendibilità”: 1.0, “OccurrenceOffsets”: [0], “SurfaceForms”: [“PGA Tour”]}]
Entità astratte [{“Etichetta”: “PGA Tour”, “Tipo”: “O”, “WikidataId”: “Q910409”, “Attendibilità”: 1.0, “OccurrenceOffsets”: [35], “SurfaceForms”: [“PGA Tour”]}]

Le descrizioni delle chiavi del dizionario nella colonna "Entità" sono elencate di seguito:

CHIAVI DESCRIZIONE
Etichetta Nome dell'entità nel grafico delle conoscenze di Wikidata
Type Tipo di questa entità in Wikidata
WikidataId ID entità in Wikidata
Attendibilità Attendibilità del collegamento delle entità
OccurrenceOffsets Scostamento delle entità a livello di carattere nel testo del titolo o del sunto
SurfaceForms Nomi di entità non elaborati nel testo originale

entity_embedding.vec & relation_embedding.vec

I file entity_embedding.vec e relation_embedding.vec contengono gli incorporamenti 100-dimensionali delle entità e delle relazioni apprese dal sottografo (dal grafo della conoscenza di WikiData) con il metodo TransE. In entrambi i file la prima colonna è l'ID dell'entità/relazione e le altre colonne corrispondono ai valori dei vettori di incorporamento. Ci auguriamo che questi dati possano agevolare la ricerca di raccomandazioni sulle notizie con riconoscimento delle conoscenze. Di seguito è riportato un esempio:

ID INCORPORAMENTO DEI VALORI
Q42306013 0.014516 -0.106958 0.024590 … -0.080382

A causa di alcuni motivi legati all'apprendimento degli incorporamenti dal sottografo, alcune entità potrebbero non avere incorporamenti nel file entity_embedding.vec.

Posizione di archiviazione

I dati sono archiviati in BLOB nel data center degli Stati Uniti occidentali/orientali, nel seguente contenitore BLOB: 'https://mind201910small.blob.core.windows.net/release/'.

All'interno del contenitore, il set di training e convalida viene compresso rispettivamente in MINDlarge_train.zip e MINDlarge_dev.zip.

Informazioni aggiuntive

Il set di dati MIND è gratuito per il download per finalità di ricerca nelle Condizioni di licenza di Microsoft Research. Per eventuali domande sul set di dati, contattare mind@microsoft.com.

Accesso ai dati

Azure Notebooks

Notebook dimostrativo per l'accesso ai dati MIND in Azure

Questo notebook offre un esempio di accesso ai dati MIND dall'archiviazione BLOB in Azure.

I dati MIND vengono archiviati nel data center degli Stati Uniti occidentali/orientali, quindi questo notebook verrà eseguito in modo più efficiente nell'ambiente di calcolo di Azure che si trova negli Stati Uniti occidentali/orientali.

Importazioni e ambiente

import os
import tempfile
import shutil
import urllib
import zipfile
import pandas as pd

# Temporary folder for data we need during execution of this notebook (we'll clean up
# at the end, we promise)
temp_dir = os.path.join(tempfile.gettempdir(), 'mind')
os.makedirs(temp_dir, exist_ok=True)

# The dataset is split into training and validation set, each with a large and small version.
# The format of the four files are the same.
# For demonstration purpose, we will use small version validation set only.
base_url = 'https://mind201910small.blob.core.windows.net/release'
training_small_url = f'{base_url}/MINDsmall_train.zip'
validation_small_url = f'{base_url}/MINDsmall_dev.zip'
training_large_url = f'{base_url}/MINDlarge_train.zip'
validation_large_url = f'{base_url}/MINDlarge_dev.zip'

Funzioni

def download_url(url,
                 destination_filename=None,
                 progress_updater=None,
                 force_download=False,
                 verbose=True):
    """
    Download a URL to a temporary file
    """
    if not verbose:
        progress_updater = None
    # This is not intended to guarantee uniqueness, we just know it happens to guarantee
    # uniqueness for this application.
    if destination_filename is None:
        url_as_filename = url.replace('://', '_').replace('/', '_')
        destination_filename = \
            os.path.join(temp_dir,url_as_filename)
    if (not force_download) and (os.path.isfile(destination_filename)):
        if verbose:
            print('Bypassing download of already-downloaded file {}'.format(
                os.path.basename(url)))
        return destination_filename
    if verbose:
        print('Downloading file {} to {}'.format(os.path.basename(url),
                                                 destination_filename),
              end='')
    urllib.request.urlretrieve(url, destination_filename, progress_updater)
    assert (os.path.isfile(destination_filename))
    nBytes = os.path.getsize(destination_filename)
    if verbose:
        print('...done, {} bytes.'.format(nBytes))
    return destination_filename

Scaricare ed estrarre i file

# For demonstration purpose, we will use small version validation set only.
# This file is about 30MB.
zip_path = download_url(validation_small_url, verbose=True)
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
    zip_ref.extractall(temp_dir)

os.listdir(temp_dir)

Leggere i file con pandas

# The behaviors.tsv file contains the impression logs and users' news click histories. 
# It has 5 columns divided by the tab symbol:
# - Impression ID. The ID of an impression.
# - User ID. The anonymous ID of a user.
# - Time. The impression time with format "MM/DD/YYYY HH:MM:SS AM/PM".
# - History. The news click history (ID list of clicked news) of this user before this impression.
# - Impressions. List of news displayed in this impression and user's click behaviors on them (1 for click and 0 for non-click).
behaviors_path = os.path.join(temp_dir, 'behaviors.tsv')
pd.read_table(
    behaviors_path,
    header=None,
    names=['impression_id', 'user_id', 'time', 'history', 'impressions'])
# The news.tsv file contains the detailed information of news articles involved in the behaviors.tsv file.
# It has 7 columns, which are divided by the tab symbol:
# - News ID
# - Category
# - Subcategory
# - Title
# - Abstract
# - URL
# - Title Entities (entities contained in the title of this news)
# - Abstract Entities (entities contained in the abstract of this news)
news_path = os.path.join(temp_dir, 'news.tsv')
pd.read_table(news_path,
              header=None,
              names=[
                  'id', 'category', 'subcategory', 'title', 'abstract', 'url',
                  'title_entities', 'abstract_entities'
              ])
# The entity_embedding.vec file contains the 100-dimensional embeddings
# of the entities learned from the subgraph by TransE method.
# The first column is the ID of entity, and the other columns are the embedding vector values.
entity_embedding_path = os.path.join(temp_dir, 'entity_embedding.vec')
entity_embedding = pd.read_table(entity_embedding_path, header=None)
entity_embedding['vector'] = entity_embedding.iloc[:, 1:101].values.tolist()
entity_embedding = entity_embedding[[0,
                                     'vector']].rename(columns={0: "entity"})
entity_embedding
# The relation_embedding.vec file contains the 100-dimensional embeddings
# of the relations learned from the subgraph by TransE method.
# The first column is the ID of relation, and the other columns are the embedding vector values.
relation_embedding_path = os.path.join(temp_dir, 'relation_embedding.vec')
relation_embedding = pd.read_table(relation_embedding_path, header=None)
relation_embedding['vector'] = relation_embedding.iloc[:,
                                                       1:101].values.tolist()
relation_embedding = relation_embedding[[0, 'vector'
                                         ]].rename(columns={0: "relation"})
relation_embedding

Pulire i file temporanei

shutil.rmtree(temp_dir)

Esempi

Vedere gli esempi seguenti di come usare il set di dati Microsoft News Recommender:

Passaggi successivi

Vedere diversi modelli di raccomandazione per le notizie di base sviluppati su MIND dal Repository delle raccomandazioni di Microsoft

Visualizzare il resto dei set di dati nel catalogo dei set di dati aperti.