Microsoft News Recommendation
MIcrosoft News Dataset (MIND) est un jeu de données à grande échelle pour la recherche d’actualités suggérées. Il a été constitué à partir de journaux de comportement anonymisés du site web Microsoft News. La vocation de MIND est de faire office de jeu de données de référence pour les suggestions d’actualités, et de faciliter la recherche dans les systèmes de recommandation et les suggestions d’actualités.
MIND contient environ 160 000 articles d'actualités en anglais et plus de 15 millions de journaux d'impression générés par 1 million d'utilisateurs. Chaque article d’actualité comprend un contenu textuel riche composé d’un titre, d’un résumé, d’un corps, d’une catégorie et d’entités. Chaque journal d’impression contient les événements sur lesquels un utilisateur a cliqué, ceux sur lesquels il n’a pas cliqué et l’historique des comportements de clic sur des actualités de l’utilisateur avant l’impression. Afin de protéger la vie privée de l’utilisateur, celui-ci a été déconnecté du système de production après un hachage sécurisé dans un identifiant anonymisé. Pour des informations plus détaillées sur le jeu de données MIND, vous pouvez vous consulter le document MIND : jeu de données à grande échelle pour des suggestions d’actualités.
Volume
Les données relatives à l’apprentissage et à la validation figurent dans un dossier compressé au format zip, qui contient quatre fichiers différents :
NOM DU FICHIER | Description |
---|---|
behaviors.tsv | Historique des clics et les journaux d'impression des utilisateurs |
news.tsv | Informations des articles d’actualités |
entity_embedding.vec | Incorporations d’entités dans les actualités extraites du graphe de connaissances |
relation_embedding.vec | Incorporations des relations entre les entités extraites du graphe de connaissances |
behaviors.tsv
Le fichier behaviors.tsv contient les journaux d’impression et les historiques de clic sur des actualités des utilisateurs. Il comporte 5 colonnes séparées par le symbole de tabulation :
- ID d’impression. ID d’une impression.
- ID d'utilisateur. ID anonyme d’un utilisateur.
- Heure. Heure d’impression au format « MM/JJ/AAAA HH:MM:SS ».
- History. L'historique des clics sur des actualités (liste d’ID des actualités consultées) de cet utilisateur avant cette impression.
- Impressions. Liste des actualités affichées dans cette impression et des comportements de clic de l’utilisateur sur celles-ci (1 pour un clic, 0 pour zéro clic).
Un exemple est présenté dans le tableau ci-dessous :
COLUMN | CONTENT |
---|---|
ID d’impression | 123 |
ID d'utilisateur | U131 |
Temps | 13/11/2019 8:36:57 |
Historique | N11 N21 N103 |
Impressions | N4-1 N34-1 N156-0 N207-0 N198-0 |
news.tsv
Le fichier news.tsv contient les informations détaillées des articles d’actualités inclus dans le fichier behaviors.tsv. Il comporte 7 colonnes séparées par le symbole de tabulation :
- ID d’actualités
- Category
- Sous-catégorie
- Titre
- Résumé
- URL
- Entités de titre (entités contenues dans le titre de cette actualité)
- Entités de résumé (entités contenues dans le résumé de cette actualité)
Le corps du contenu complet des articles d’actualités de MSN n’est pas disponible pour téléchargement en raison de la structure des licences. Toutefois, pour votre commodité, nous avons fourni un script utilitaire pour vous aider à analyser les pages web d'actualités des URL de MSN dans le jeu de données. En raison de la limitation dans le temps, certaines URL ont expiré et il n’est plus possible de les consulter. Actuellement, nous faisons de notre mieux pour résoudre ce problème.
Un exemple est présenté dans le tableau suivant :
COLUMN | CONTENT |
---|---|
ID d’actualités | N37378 |
Category | sports |
SubCategory | golf |
Titre | PGA Tour winners |
Résumé | A gallery of recent winners on the PGA Tour. |
URL | https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata |
Entités de titre | [{“Label”: “PGA Tour”, “Type”: “O”, “WikidataId”: “Q910409”, “Confidence”: 1.0, “OccurrenceOffsets”: [0], “SurfaceForms”: [“PGA Tour”]}] |
Entités de résumé | [{“Label”: “PGA Tour”, “Type”: “O”, “WikidataId”: “Q910409”, “Confidence”: 1.0, “OccurrenceOffsets”: [35], “SurfaceForms”: [“PGA Tour”]}] |
Les descriptions des clés du dictionnaire dans la colonne « Entités » sont répertoriées comme suit :
CLÉS | Description |
---|---|
Étiquette | Nom de l’entité dans le graphe de connaissances de Wikidata |
Type | Type de cette entité dans Wikidata |
WikidataId | ID de l’entité dans Wikidata |
Confiance | Confiance de la liaison d'entités |
OccurrenceOffsets | Décalage de l'entité au niveau caractère dans le texte du titre ou du résumé |
SurfaceForms | Noms des entités brutes dans le texte original |
entity_embedding.vec & relation_embedding.vec
Les fichiers entity_embedding.vec et relation_embedding.vec contiennent des incorporations à 100 dimensions des entités et des relations apprises du sous-graphe (du graphe de connaissances de WikiData) par la méthode TransE. Dans les deux fichiers, la première colonne est l'ID de l'entité ou de la relation, et les autres colonnes sont les valeurs des vecteurs d'incorporation. Nous espérons que ces données pourront faciliter la recherche de suggestions d’actualités tenant compte des connaissances. Un exemple se présente comme suit :
ID | INCORPORATION DE VALEURS |
---|---|
Q42306013 | 0.014516 -0.106958 0.024590 … -0.080382 |
Pour certaines raisons, dans l’incorporation d’apprentissage à partir du sous-graphe, il se peut que quelques entités n’aient pas d’incorporations dans le fichier entity_embedding.vec.
Emplacement de stockage
Les données sont stockées dans des blobs situés dans le centre de données USA Ouest/Est, dans le conteneur de blobs suivant : « https://mind201910small.blob.core.windows.net/release/ ».
Au sein du conteneur, les jeux d’apprentissage et de validation sont comprimés respectivement dans les fichiers MINDlarge_train.zip and MINDlarge_dev.zip.
Informations supplémentaires
Le jeu de données MIND est téléchargeable gratuitement à des fins de recherche sous Termes du contrat de licence Microsoft Research. Si vous avez des questions sur le jeu de données, contactez mind@microsoft.com.
Accès aux données
Azure Notebooks
Notebook de démonstration pour l’accès aux données MIND sur Azure
Ce notebook fournit un exemple d’accès aux données MIND à partir d’un stockage d’objets blob sur Azure.
Les données MIND étant stockées dans le centre de données USA Ouest ou USA Est, ce notebook s’exécutera plus efficacement sur les services de calcul Azure situés dans les régions USA Ouest ou USA Est.
Importations et environnement
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'
Fonctions
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
Télécharger et extraire les fichiers
# 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)
Lire les fichiers avec 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
Nettoyer les fichiers temporaires
shutil.rmtree(temp_dir)
Exemples
Consultez les exemples suivants montrant comment utiliser le jeu de données Microsoft News Recommender :
Étapes suivantes
Découvrez plusieurs modèles de suggestion d’actualités de référence développés sur MIND dans Microsoft Recommenders Repository
Affichez les autres jeux de données dans le catalogue Open Datasets.