Microsoft News aanbeveling

Mi crosoft N ews D ataset (MIND) is een grootschalige gegevensset voor onderzoek naar nieuwsaanbevelingen. Deze is verzameld uit geanonimiseerde gedragslogboeken van de Microsoft-nieuwswebsite. De missie van MIND is om te fungeren als een benchmarkgegevensset voor nieuwsaanbevelingen en om het onderzoek op het gebied van nieuwsaanbevelingen en aanbevelingssystemen mogelijk te maken.

MIND bevat ongeveer 160.000 Engelse nieuwsartikelen en meer dan 15 miljoen weergavelogboeken die zijn gegenereerd door 1 miljoen gebruikers. Elk nieuwsartikel bevat uitgebreide tekstuele inhoud, waaronder titel, abstract, body, categorie en entiteiten. Elk indruklogboek bevat de klikgebeurtenissen, niet-geklikte gebeurtenissen en historische nieuwsklikgedrag van deze gebruiker vóór deze indruk. Om de privacy van de gebruiker te beschermen, is elke gebruiker ontkoppeld van het productiesysteem toen de gegevens veilig in een geanonimiseerde id werden gehasht. Zie het document MIND: Een grootschalige gegevensset voor nieuwsaanbevelingen voor meer gedetailleerde informatie over de MIND-gegevensset.

Volume

Zowel de trainings- als validatiegegevens zijn beschikbaar als ZIP-bestand, dat vier verschillende bestanden bevat:

BESTANDSNAAM BESCHRIJVING
behaviors.tsv De klikgeschiedenissen en weergavelogboeken van gebruikers
news.tsv De informatie van nieuwsartikelen
entity_embedding.vec De insluitingen van entiteiten in nieuws uit de kennisgrafiek gehaald
relation_embedding.vec De insluitingen van relaties tussen entiteiten uit de kennisgrafiek

behaviors.tsv

Het bestand behaviors.tsv bevat de afdruklogboeken en de geschiedenis van nieuwsklikgeschiedenissen van gebruikers. Het heeft vijf kolommen gedeeld door het tabbladsymbool:

  • Weergave-id. De id van een weergave.
  • Gebruikers-id. De anonieme id van een gebruiker.
  • Tijd. De indruktijd met de notatie MM/DD/YYYY HH:MM:SS AM/PM.
  • Geschiedenis. De nieuwsklikgeschiedenis (id-lijst van nieuws waarop is geklikt) van deze gebruiker vóór deze weergave.
  • Weergaven. Lijst met nieuws dat in deze weergave wordt weergegeven en het klikgedrag van de gebruiker erop (1 voor klikken en 0 voor niet-klikken).

In de onderstaande tabel ziet u een voorbeeld:

Kolom Inhoud
Weergave-id 123
Gebruikers-id U131
Tijd 11/13/2019 8:36:57 AM
Geschiedenis N11 N21 N103
Weergaven N4-1 N34-1 N156-0 N207-0 N198-0

news.tsv

Het bestand news.tsv bevat gedetailleerde informatie over nieuwsartikelen die betrokken zijn bij het bestand behaviors.tsv. Het heeft zeven kolommen, die worden gedeeld door het tabbladsymbool:

  • Nieuws-id
  • Categorie
  • Subcategorie
  • Titel
  • Abstract
  • URL
  • Titelentiteiten (entiteiten in de titel van dit nieuws)
  • Samenvattingsentiteiten (entiteiten in de samenvatting van dit nieuws)

De volledige inhoud van MSN-nieuwsartikelen kan niet worden gedownload vanwege de licentiestructuur. Voor uw gemak hebben we echter een hulpprogrammascript beschikbaar gesteld om de nieuwspagina van de MSN-URL's in de gegevensset te helpen parseren. Vanwege de tijdslimiet zijn sommige URL's verlopen en kunnen ze niet worden geopend. We doen momenteel ons best om dit probleem op te lossen.

In de volgende tabel ziet u een voorbeeld:

Kolom Inhoud
Nieuws-id N37378
Categorie sport
SubCategory golf
Titel PGA Tour-winnaars
Abstract Een galerij van recente winnaars op de PGA Tour.
URL https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata
Titelentiteiten [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}]
Abstracte entiteiten [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}]

De beschrijvingen van de woordenlijstsleutels in de kolom Entiteiten worden als volgt weergegeven:

Sleutels BESCHRIJVING
Label De naam van de entiteit in de Wikidata-kennisgrafiek
Type Het type van deze entiteit in Wikidata
WikidataId De entiteits-id in Wikidata
Betrouwbaarheid De betrouwbaarheid van entiteitskoppeling
OccurrenceOffsets De entiteitsoffset op tekenniveau in de tekst van de titel of de samenvatting
SurfaceForms De namen van de onbewerkte entiteiten in de oorspronkelijke tekst

entity_embedding.vec & relation_embedding.vec

De bestanden entity_embedding.vec en relation_embedding.vec bevatten de 100-dimensionale insluiten van de entiteiten en relaties die zijn geleerd uit de subgraaf (van WikiData-kennisgrafiek) met de TransE-methode. In beide bestanden is de eerste kolom de id van de entiteit/relatie en zijn de andere kolommen de insluiting van de vectorwaarden. We hopen dat deze gegevens het onderzoek naar kennisbewuste nieuwsaanbevelingen mogelijk maken. Hieronder kunt u een voorbeeld bekijken:

Id WAARDEN INSLUITEN
Q42306013 0.014516 -0.106958 0.024590 ... -0.080382

Vanwege een aantal redenen bij het leren insluiten van insluiten uit de subgrafiek, hebben enkele entiteiten mogelijk geen insluiten in het entity_embedding.vec-bestand.

Opslaglocatie

De gegevens worden opgeslagen in blobs in het datacenter vs - west/VS - oost, in de volgende blobcontainer: ' https://mind201910small.blob.core.windows.net/release/ '' .

Binnen de container worden de trainings- en validatieset gecomprimeerd tot respectievelijk MINDlarge_train.zip en MINDlarge_dev.zip.

Aanvullende informatie

De MIND-gegevensset is gratis te downloaden voor onderzoeksdoeleinden onder de onderzoekslicentievoorwaarden van Microsoft. Neem contact mind@microsoft.com op met als u vragen hebt over de gegevensset.

Toegang tot gegevens

Azure Notebooks

Demo-notebook voor toegang tot MIND-gegevens in Azure

Dit notebook biedt een voorbeeld van toegang tot MIND-gegevens vanuit blobopslag in Azure.

MIND-gegevens worden opgeslagen in het datacenter vs - west/VS - oost, zodat dit notebook efficiënter wordt uitgevoerd op de Azure-rekenkracht in VS - west/Oost.

Import en omgeving

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'

Functions

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

De bestanden downloaden en uitpakken

# 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)

De bestanden lezen met 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

Tijdelijke bestanden ops schonen

shutil.rmtree(temp_dir)

Voorbeelden

Zie de volgende voorbeelden van het gebruik van de Microsoft News Recommender:

Volgende stappen

Bekijk verschillende basislijnmodellen voor nieuwsaanbevelingen die zijn ontwikkeld op MIND vanuit de Opslagplaats voor Microsoft Recommenders

Bekijk de rest van de gegevenssets in de Open Datasets catalogus.