aanbeveling voor Microsoft Nieuws

Microsoft News Dataset (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 tekstrijke inhoud, waaronder titel, abstract, hoofdtekst, categorie en entiteiten. Elk weergavelogboek bevat de klikgebeurtenissen, niet-geklikt gebeurtenissen en historisch 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. Voor meer gedetailleerde informatie over de MIND-gegevensset kunt u de paper MIND raadplegen: een grootschalige gegevensset voor nieuwsaanbeveling.

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 behaviors.tsv-bestand bevat de indruklogboeken en de geschiedenis van nieuwsklikken van gebruikers. Het bevat vijf kolommen gedeeld door het tabbladsymbool:

  • Weergave-id. De id van een weergave.
  • Gebruikers-id. De anonieme id van een gebruiker.
  • Tijd. De weergavetijd met de notatie "MM/DD/JJJJ UU:MM:SS AM/PM".
  • Historie. De nieuwsklikgeschiedenis (id-lijst van nieuws waarop is geklikt) van deze gebruiker vóór deze weergave.
  • Weergaven. Lijst met nieuws dat in deze indruk wordt weergegeven en het klikgedrag van de gebruiker (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
Historie N11 N21 N103
Weergaven N4-1 N34-1 N156-0 N207-0 N198-0

news.tsv

Het bestand news.tsv bevat de gedetailleerde informatie over nieuwsartikelen die betrokken zijn bij het bestand behaviors.tsv. Het bevat 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 inhoudsteksten van MSN-nieuwsartikelen worden niet beschikbaar gesteld voor downloaden, 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
Subcategorie 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
Etiket 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 insluitingen van de entiteiten en relaties die zijn geleerd uit de subgraaf (uit WikiData Knowledge Graph) door 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 insluiten van inhoud uit de subgraaf, hebben een paar entiteiten mogelijk geen insluitingen in het bestand entity_embedding.vec.

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/'.

In de container worden de trainings- en validatieset gecomprimeerd in 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 op mind@microsoft.com 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 het openen van 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/vs - 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'

Functies

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 extraheren

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

shutil.rmtree(temp_dir)

Voorbeelden

Zie de volgende voorbeelden van het gebruik van de gegevensset Microsoft Nieuws Aanbevelingsfunctie:

Volgende stappen

Bekijk verschillende basislijnnieuwsaanbevelingsmodellen die zijn ontwikkeld op MIND vanuit microsoft Recommenders Repository

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