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:
- Sfida di raccomandazione delle notizie MIND
- Repository delle raccomandazioni di Microsoft
- MIND: Set di dati di Microsoft News
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.