Microsoft News – javaslat

A MicrosoftNewsDataset (MIND) egy nagy méretű adatkészlet a hírajánlási kutatásokhoz. Az adatkészlet a Microsoft News webhely anonimizált viselkedési naplóinak gyűjteménye. A MIND küldetése referencia-adatkészletként szolgálni a hírajánlási kutatások esetében, és elősegíteni a hírajánlásokra és ajánlási rendszerekre vonatkozó kutatásokat.

A MIND közel 160 000 angol nyelvű cikket, illetve egymillió felhasználó látogatásai által generált több mint 15 millió megjelenési naplót tartalmaz. Minden hírcikk részletes szöveges tartalmat tartalmaz, beleértve a címet, az absztraktot, a törzset, a kategóriát és az entitásokat. Minden megjelenítési napló tartalmazza a felhasználó kattintási eseményeit, nem kattintott eseményeit és korábbi hírkattintásos viselkedését a megjelenés előtt. A felhasználói adatvédelem érdekében a felhasználókat leválasztottuk az éles rendszerről, amikor az anonimizált azonosítóba kivonatoltuk az adatokat. A MIND-del kapcsolatban további, részletesebb információkat aMIND: A Large-scale Dataset for News Recommendation című tanulmányban talál.

Kötet

Mind a betanítási, mind az érvényesítési adatok egy négy különböző fájlt tartalmazó zip-csomagban találhatók:

FÁJLNÉV LEÍRÁS
behaviors.tsv A felhasználók kattintási előzményei és megjelenési naplói
news.tsv A cikkekkel kapcsolatos információk
entity_embedding.vec A tudásdiagramból kinyert hírek entitásbeágyazásai
relation_embedding.vec A tudásdiagramból kinyert kapcsolatbeágyazások

behaviors.tsv

A behaviors.tsv fájl tartalmazza a megjelenítési naplókat és a felhasználók híreinek kattintási előzményeket. Öt oszlopa van a tabulátorjellel elosztva:

  • Megjelenési azonosító. A megjelenéshez tartozó azonosító.
  • Felhasználóazonosító. A felhasználó anonimizált azonosítója.
  • Idő. A megjelenés ideje "HH/NN/ÉÉÉÉ ÓÓ:MM:SS AM/PM" formátumban.
  • Előzmények. Az adott felhasználó korábbi, hírekkel kapcsolatos kattintási előzményei (a kattintott cikkek azonosítóinak listája).
  • Megjelenések. Az ebben a megjelenítésben megjelenített hírek listája és a felhasználó kattintási viselkedése rajtuk (1 kattintásra, 0 nem kattintás esetén).

Az alábbi táblázatban látható erre egy példa:

OSZLOP TARTALOM
Megjelenési azonosító 123
Felhasználóazonosító U131
Idő 11/13/2019 8:36:57 AM
Előzmények N11 N21 N103
Megjelenések N4-1 N34-1 N156-0 N207-0 N198-0

news.tsv

A news.tsv fájl a behaviors.tsv fájlban található hírcikkek részletes adatait tartalmazza. Hét oszlopa van, amelyek a tabulátorjellel vannak elosztva:

  • Hírazonosító
  • Kategória
  • Alkategória
  • Cím
  • Kivonat
  • URL-cím
  • Címentitások (a cikk címében található entitások)
  • Kivonatentitások (a cikk kivonatában található entitások)

Az MSN-hírcikkek teljes tartalomtörzsei a licencelési struktúra miatt nem tölthetők le. Azonban a kényelmes használat érdekében mellékeltünk egy segédparancsprogramot, amellyel elemezheti az adatkészletben található MSN URL-ek alatt található híreket. Az időkorlátok miatt néhány URL már lejárt és nem érhető el. Jelenleg dolgozunk a probléma megoldásán.

A következő táblázatban látható erre egy példa:

OSZLOP TARTALOM
Hírazonosító N37378
Kategória sport
AlKategória golf
Cím A PGA Tour nyertesei
Kivonat A PGA Tour legutóbbi nyerteseinek gyűjteménye.
URL-cím https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata
Címentitások [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}]
Kivonatentitások [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}]

Az "Entitások" oszlopban található szótárkulcsok leírása a következő:

KULCSOK LEÍRÁS
Címke Az entitás neve a Wikidata tudásgráfjában
Típus A Wikidata entitásának típusa
WikidataId A Wikidata entitásának azonosítója
Megbízhatóság Az entitás-összekapcsolás megbízhatósága
OccurrenceOffsets A karakterszintű entitáseltolás mértéke a cím vagy a kivonat szövegében
SurfaceForms Az eredeti szövegben található nyers entitásnevek

entity_embedding.vec & relation_embedding.vec

A entity_embedding.vec és a relation_embedding.vec fájl tartalmazza a TransE metódus által az algráfból (WikiData tudásgráfból) tanult entitások és kapcsolatok 100 dimenziós beágyazását. Mindkét fájl első oszlopa az entitás/kapcsolat azonosítóját, a többi oszlop pedig a beágyazások vektoros értékét tartalmazza. Reményeink szerint az adatok elősegítik majd az ismeretalapú hírajánlási kutatásokat. Erre alább láthat egy példát:

ID ÉRTÉKEK BEÁGYAZÁSA
Q42306013 0.014516 -0.106958 0.024590 ... -0.080382

Az algráfból való beágyazás elsajátításának néhány oka miatt előfordulhat, hogy néhány entitás nem rendelkezik beágyazással a entity_embedding.vec fájlban.

Tárolási hely

Az adatok tárolása az USA nyugati/keleti adatközpontjában található blobokban történik, a következő blobtárolóban: "."https://mind201910small.blob.core.windows.net/release/

A tárolón belül a betanítási és érvényesítési készlet MINDlarge_train.zip, illetve MINDlarge_dev.zip lesz tömörítve.

További információ

A MIND adatkészlete díjmentesen letölthető kutatási célokra a Microsoft Research licencfeltételei szerint. Ha kérdése van az adathalmazzal kapcsolatban, lépjen kapcsolatba a következővel mind@microsoft.com :

Az adatok elérése

Azure Notebooks

Bemutató jegyzetfüzet a MIND-adatok azure-ra való eléréséhez

Ez a jegyzetfüzet egy példát mutat be a MIND-adatok azure-beli blobtárolóból való elérésére.

A MIND-adatok tárolása az USA nyugati/keleti adatközpontjában történik, így ez a jegyzetfüzet hatékonyabban fog futni az USA nyugati/keleti régiójában található Azure-számításon.

Importálás és környezet

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'

Függvények

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

A fájlok letöltése és kibontása

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

Fájlok olvasása a pandas használatával

# 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

Ideiglenes fájlok eltávolítása

shutil.rmtree(temp_dir)

Példák

Tekintse meg az alábbi példákat a Microsoft News Recommender adatkészlet használatára:

Következő lépések

Tekintse meg a Microsoft Recommenders-adattárban a MIND-ben kifejlesztett alapkonfigurációs hírajánlási modelleket

Tekintse meg a többi adathalmazt az Open Datasets katalógusban.