Raccomandazione Microsoft News
Microsoft News Dataset (MIND) è un set di dati su larga scala per la ricerca delle notizie consigliate. 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 di notizie contiene contenuti testuali avanzati, tra cui titolo, astrazione, corpo, categoria ed entità. Ogni log delle impressioni contiene gli eventi di clic, gli eventi non cliccati e i comportamenti cronologici 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, vedi il documento MIND: A Large-scale Dataset for News Recommendation.
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 le notizie degli utenti fare clic su cronologie. Contiene cinque colonne suddivise dal simbolo della scheda:
- ID impression. ID di un'impression.
- ID utente. ID anonimo di un utente.
- Ora. Ora di impressione con formato "MM/DD/AAAA HH:MM:SS AM/PM".
- History. Cronologia di selezione delle notizie (elenco di ID delle notizie selezionate) di questo utente prima dell'impression.
- Impression. Elenco di notizie visualizzate in questa impressione e i comportamenti di clic dell'utente su di essi (1 per fare clic e 0 per non fare 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. Ha sette colonne, che sono suddivise dal simbolo della scheda:
- ID notizie
- Category
- Subcategory
- Titolo
- Contenuto
- URL
- Entità titolo (entità contenute nel titolo della notizia)
- Entità sunto (entità contenute nel sunto della notizia)
I contenuti completi degli articoli di notizie MSN non sono resi 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 |
Category | sport |
Sottocategoria | golf |
Titolo | Vincitori di PGA Tour |
Contenuto | 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 | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}] |
Entità astratte | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}] |
Le descrizioni delle chiavi del dizionario nella colonna "Entità" sono elencate come segue:
CHIAVI | DESCRIZIONE |
---|---|
Etichetta | Nome dell'entità nel grafico delle conoscenze wikidata |
Tipo | 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 grafico della conoscenza WikiData) dal 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 DI VALORI |
---|---|
Q42306013 | 0.014516 -0.106958 0.024590 ... -0.080382 |
A causa di alcuni motivi nell'apprendimento dell'incorporamento dal sottografo, alcune entità potrebbero non avere incorporamenti nel file entity_embedding.vec.
Posizione di archiviazione
I dati vengono archiviati in BLOB nel data center Stati Uniti occidentali/orientali, nel contenitore BLOB seguente: 'https://mind201910small.blob.core.windows.net/release/'.
All'interno del contenitore, il set di training e di 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 mind@microsoft.com eventuali domande sul set di dati, contattare .
Accesso ai dati
Azure Notebooks
Suggerimento
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 Stati Uniti occidentali/orientali, quindi questo notebook verrà eseguito in modo più efficiente nell'ambiente di calcolo di Azure situato 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)
Esempio
Vedere gli esempi seguenti di come usare il set di dati Microsoft News Recommender:
- MIND News Recommendation Challenge
- Microsoft Recommenders Repository
- MIND: set di dati Microsoft News
Passaggi successivi
Vedere diversi modelli di raccomandazione sulle notizie di base sviluppati su MIND da Microsoft Recommenders Repository
Visualizzare il resto dei set di dati nel catalogo Open Datasets.