Microsoft News - javaslat
A Microsoft News Dataset (MIND) egy nagy méretű adatkészlet a hírjavaslatok kutatásához. 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 kattintási eseményeket, a nem kattintott eseményeket és a felhasználó korábbi hírkattintás-viselkedését a megjeleníté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-adatkészletről részletesebben a MIND: A Large-scale Dataset for News Recommendation című tanulmányban olvashat.
Térfogat
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írkattintás-előzményeket. Öt oszlopa van a tabulátor szimbólummal osztva:
- 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ítési idő "MM/DD/YYYY HH: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ő 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ói 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 érintett hírcikkek részletes adatait tartalmazza. Hét oszlopból áll, amelyek a tabulátor szimbólummal 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 tartalomtestületei a licencelési struktúra miatt nem érhetők el letöltésre. Azonban a kényelmes használat érdekében mellékeltünk egy szkriptet, 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" oszlop szótárkulcsainak leírásai a következők:
KULCSOK | LEÍRÁS |
---|---|
Címke | Az entitás neve a Wikidata tudásgráfban |
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 és relation_embedding.vec
A entity_embedding.vec és relation_embedding.vec fájlok tartalmazzák 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 (Azonosító) | ÉRTÉKEK BEÁGYAZÁSA |
---|---|
Q42306013 | 0.014516 -0.106958 0.024590 … -0.080382 |
Az algráfból való beágyazás tanulá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ájlba.
Tárolási hely
Az adatok az USA nyugati/keleti adatközpontjában lévő blobokban vannak tárolva, 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 csoport MINDlarge_train.zip és MINDlarge_dev.zip lesz tömörítve.
További információk
A MIND adatkészlete díjmentesen letölthető kutatási célokra a Microsoft Research licencfeltételei szerint. Lépjen kapcsolatba mind@microsoft.com , ha kérdése van az adathalmazról.
Az adatok elérése
Azure Notebooks
Bemutató jegyzetfüzet a MIND-adatok Azure-ban való eléréséhez
Ez a jegyzetfüzet példaként szolgál a MIND-adatok azure-beli blobtárolóból való elérésére.
A MIND-adatok az USA nyugati/keleti adatközpontjában vannak tárolva, í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
Fájlok letöltése és kinyerése
# 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)
A fájlok olvasása 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 törlése
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írjavaslat-modelleket
Tekintse meg a többi adathalmazt az Open Datasets katalógusban.