Microsoft Haber Önerisi
Microsoft News Dataset (MIND), haber önerisi araştırması için büyük ölçekli bir veri kümesidir. Microsoft News web sitesinin anonimleştirilmiş davranış günlüklerinden derlenmiştir. MIND'ın misyonu, haber önerileri için bir karşılaştırma veri kümesi olarak hizmet sunmak, haber önerileri ve öneri sistemleri alanında aramayı kolaylaştırmaktır.
MIND, 1 milyon kullanıcı tarafından oluşturulan yaklaşık 160 bin İngilizce haber makalesi ve 15 milyondan fazla gösterim günlüğü içerir. Her haber makalesi başlık, soyut, gövde, kategori ve varlıklar gibi zengin metin içeriği içerir. Her gösterim günlüğü, tıklama olaylarını, tıklanmayan olayları ve bu izlenimden önce bu kullanıcının geçmiş haber tıklama davranışlarını içerir. Kullanıcı gizliliğini korumak için, anonimleştirilmiş bir kimliğe güvenli olarak karma değerleri oluşturulduğunda kullanıcıların üretim sistemi ile bağları kesilmiştir. MIND veri kümesi hakkında daha ayrıntılı bilgi için MIND: A Large-scale Dataset for News Recommendation makalesine bakabilirsiniz.
Hacim
Gerek eğitim gerekse doğrulama verileri ZIP ile sıkıştırılmış, dört farklı dosya içeren bir klasördedir:
DOSYA ADı | AÇIKLAMA |
---|---|
behaviors.tsv | Kullanıcıların tıklama geçmişleri ve gösterim günlükleri |
news.tsv | Haber makalelerinin bilgileri |
entity_embedding.vec | Bilgi grafından ayıklanmış varlıkların haberlerdeki eklemeleri |
relation_embedding.vec | Bilgi grafından ayıklanmış varlıklar arasındaki ilişkilerin eklemeleri |
behaviors.tsv
behaviors.tsv dosyası gösterim günlüklerini ve kullanıcıların haber tıklama geçmişlerini içerir. Sekme simgesine bölünmüş beş sütunu vardır:
- Gösterim Kimliği. Gösterimin kimliği.
- Kullanıcı kimliği. Kullanıcının anonim kimliği.
- Zaman. "AA/GG/YYYY HH:MM:SS/PM" biçimindeki gösterim süresi.
- Geçmiş. Bu kullanıcının bu gösterimden önceki haber tıklama geçmişi (tıklanan haberlerin kimlik listesi).
- Gösterimler. Bu gösterimde görüntülenen haberlerin listesi ve kullanıcının bu gösterimlerdeki tıklama davranışları (tıklama için 1 ve tıklama dışı için 0).
Aşağıdaki tabloda bir örnek gösterilmiştir:
SÜTUN | İÇERİK |
---|---|
Gösterim Kimliği | 123 |
Kullanıcı kimliği | U131 |
Saat | 11/13/2019 8:36:57 ÖÖ |
Geçmiş | N11 N21 N103 |
Gösterimler | N4-1 N34-1 N156-0 N207-0 N198-0 |
news.tsv
news.tsv dosyası, behaviors.tsv dosyasında yer alan haber makalelerinin ayrıntılı bilgilerini içerir. Sekme simgesine bölünmüş yedi sütunu vardır:
- Haber Kimliği
- Kategori
- Alt kategori
- Başlık
- Abstract
- URL
- Başlık Varlıkları (bu haberin başlığında bulunan varlıklar)
- Özet Varlıkları (bu haberin özetinde bulunan varlıklar)
MSN haber makalelerinin tam içerik gövdeleri, lisanslama yapısı nedeniyle indirilemez. Ancak size kolaylık sağlamak amacıyla, veri kümesindeki MSN URL'lerinden haber web sayfasını ayrıştırmaya yardımcı olması için bir yardımcı betik sağladık. Zaman sınırlaması nedeniyle bazı URL'lerin süresi dolar ve bunlara başarılı olarak erişilemez. Şu anda bu sorunu çözmek için yoğun bir şekilde çalışıyoruz.
Aşağıdaki tabloda bir örnek gösterilmektedir:
SÜTUN | İÇERİK |
---|---|
Haber Kimliği | N37378 |
Kategori | spor |
Alt Kategori | golf |
Başlık | PGA Turnuvasını kazananlar |
Abstract | PGA Turnuvası'nı son kazananları gösteren galeri. |
URL | https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata |
Başlık Varlıkları | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}] |
Özet Varlıkları | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}] |
"Varlıklar" sütunundaki sözlük anahtarlarının açıklamaları aşağıdaki gibi listelenir:
ANAHTAR | AÇIKLAMA |
---|---|
Etiket | Wikidata bilgi grafiğindeki varlık adı |
Tür | Bu varlığın Wikidata'daki türü |
WikidataId | Wikidata'daki varlık kimliği |
Güven | Varlık bağlamanın güvenilirliği |
OccurrenceOffsets | Varlığın başlık veya özetin metninde karakter olarak uzaklığı |
SurfaceForms | Özgün metindeki ham varlık adları |
entity_embedding.vec ve relation_embedding.vec
entity_embedding.vec ve relation_embedding.vec dosyaları, TransE yöntemiyle alt yazıdan (WikiData bilgi grafından) öğrenilen varlıkların ve ilişkilerin 100 boyutlu eklemelerini içerir. Her iki dosyada da ilk sütun varlığın/ilişkinin kimliği, diğer sütunlar ise ekleme vektörü değerleridir. Bu verilerin bilgiye duyarlı haber önerilerinin araştırılmasını kolaylaştırmasını umuyoruz. Aşağıda bir örnek gösterilmiştir:
Kimlik | DEĞER EKLEME |
---|---|
Q42306013 | 0.014516 -0.106958 0.024590 … -0.080382 |
Alt yazıdan ekleme öğrenmenin bazı nedenlerinden dolayı, birkaç varlık entity_embedding.vec dosyasında eklemeler olmayabilir.
Depolama konumu
Veriler, Batı/Doğu ABD veri merkezindeki bloblarda, şu blob kapsayıcısında depolanır: 'https://mind201910small.blob.core.windows.net/release/'.
Kapsayıcı içinde eğitim ve doğrulama kümesi sırasıyla MINDlarge_train.zip ve MINDlarge_dev.zip olarak sıkıştırılır.
Ek bilgi
MIND veri kümesi, Microsoft Research Lisans Koşulları uyarınca araştırma amacıyla ücretsiz olarak indirilebilir. Veri kümesiyle ilgili sorularınız varsa iletişime geçin mind@microsoft.com .
Veri erişimi
Azure Notebooks
Azure'da MIND verilerine erişmek için tanıtım not defteri
Bu not defteri, Azure'da blob depolamadan MIND verilerine erişme örneği sağlar.
MIND verileri Batı/Doğu ABD veri merkezinde depolandığından, bu not defteri Batı/Doğu ABD'de bulunan Azure işlem üzerinde daha verimli çalışır.
İçeri aktarmalar ve ortam
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'
İşlevler
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
Dosyaları indirme ve ayıklama
# 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)
Pandas ile dosyaları okuma
# 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
Geçici dosyaları temizleme
shutil.rmtree(temp_dir)
Örnekler
Microsoft Haber Recommender veri kümesinin nasıl kullanılacağına ilişkin aşağıdaki örneklere bakın:
Sonraki adımlar
Microsoft Recommenders Repository'den MIND üzerinde geliştirilen çeşitli temel haber öneri modellerine göz atın
Açık Veri Kümeleri kataloğundaki diğer veri kümelerini görüntüleyin.