Microsoft 新聞建議

Mi crosoft N EWS D ataset (主意) 是新聞建議研究的大規模資料集。 該資料集從 Microsoft News 網站收集匿名的行為記錄。 MIND 旨在為新聞推薦的資料集樹立典範,推動新聞推薦與推薦系統領域的研究。

MIND 提供約 160,000 篇英文新聞文章,以及超過 1,500 萬個由 100 萬名使用者所產生的曝光記錄。 每篇新聞文章都包含豐富的文字內容,包括標題、摘要、主體、類別及實體。 每個印象記錄檔都包含 click 事件、未按下的事件,以及此使用者在此印象之前的歷程記錄新聞點擊行為。 為了保護使用者隱私權,每位使用者在經過安全雜湊處理成匿名識別碼之後,即會與生產系統取消連結。 如需 MIND 資料集的詳細資訊,您可以參閱 MIND:新聞推薦的大型資料集 (英文) 論文。

磁碟區

訓練和驗證資料是壓縮資料夾,其中包含四個不同的檔案:

檔案名稱 DESCRIPTION
behaviors.tsv 使用者的點選歷程記錄和曝光記錄
news.tsv 新聞文章的資訊
entity_embedding.vec 新聞中的實體內嵌,擷取自知識圖表
relation_embedding.vec 實體之間的關係內嵌,擷取自知識圖表

behaviors.tsv

行為 tsv 檔案包含印象記錄,以及使用者的新聞按一下歷程記錄。 它有五個數據行除以 tab 符號:

  • 曝光識別碼。 曝光的識別碼。
  • 使用者識別碼。 使用者的匿名識別碼。
  • 時間。 格式為 "MM/DD/YYYY HH: MM: SS AM/PM" 的印象時間。
  • [歷程記錄]。 此使用者在此曝光之前的新聞點選歷程記錄 (所點選新聞的識別碼清單)。
  • 曝光。 顯示在此印象中的新聞清單以及使用者在其上的按一下行為 (1 表示按一下,而0表示未按下的) 。

下表顯示範例:

COLUMN CONTENT
曝光識別碼 123
使用者識別碼 U131
時間 2019/11/13 上午 8:36:57
記錄 N11 N21 N103
曝光數 N4-1 N34-1 N156-0 N207-0 N198-0

news.tsv

新的 tsv 檔案包含了「行為 tsv」檔案中相關新聞文章的詳細資訊。 它有七個數據行,這些資料行會除以 tab 符號:

  • 新聞識別碼
  • 類別
  • 子類別
  • 標題
  • 摘要
  • URL
  • 標題實體 (包含在此新聞標題中的實體)
  • 摘要實體 (包含在此新聞摘要中的實體)

由於授權結構的緣故,MSN 新聞文章的完整內容主體未提供下載。 不過,為了方便起見,我們提供了公用程式指令碼,以協助剖析資料集中來自 MSN URL 的新網頁。 由於時間限制,某些 URL 已過期而無法成功評定。 目前,我們正在盡最大努力來解決此問題。

下表顯示範例:

COLUMN CONTENT
新聞識別碼 N37378
類別 運動
SubCategory 高爾夫球
標題 PGA 巡迴賽優勝者
摘要 PGA 巡迴賽最新優勝者圖庫。
URL https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata
標題實體 [{"Label": "PGA 導覽","Type": "O","WikidataId": "Q910409","信賴":1.0,"OccurrenceOffsets": [0],"SurfaceForms": ["PGA 導覽"]}]
摘要實體 [{"Label": "PGA 導覽","Type": "O","WikidataId": "Q910409","信賴":1.0,"OccurrenceOffsets": [35],"SurfaceForms": ["PGA 導覽"]}]

[實體] 資料行中的字典索引鍵描述如下所示:

索引鍵 DESCRIPTION
標籤 Wikidata 知識圖表中的機構名稱
類型 維基百科中的實體類型
WikidataId 維基百科中的實體識別碼
信賴度 實體連結的信賴度
OccurrenceOffsets 標題或摘要文字中的字元層級實體位移
SurfaceForms 原始文字中未經處理的實體名稱

entity_embedding. vec & relation_embedding. vec

Vec 和 relation_embedding. vec 檔案包含從性子圖形 ((從 WikiData 知識圖表) by TransE 方法)學習的實體和關聯的100維度內嵌。 entity_embedding 在這兩個檔案中,第一個資料行是實體/關係識別碼,而其他資料行則是內嵌向量值。 我們希望此資料可以推動知識自覺的新聞推薦研究。 以下顯示範例:

識別碼 內嵌值
Q42306013 0.014516-0.106958 0.024590 .。。 -0.080382

由於從性子圖形學習內嵌有一些原因,因此少數實體在 entity_embedding. vec 檔案中可能沒有內嵌。

儲存位置

資料會儲存在美國西部/美國東部資料中心的 blob 中,位於下列 blob 容器中: ' https://mind201910small.blob.core.windows.net/release/ '。

在容器內,定型和驗證集會分別壓縮成 MINDlarge_train.zip 和 MINDlarge_dev.zip。

其他資訊

根據 Microsoft Research 授權條款,MIND 資料集可供研究目的免費下載。 mind@microsoft.com如果您有任何關於資料集的問題,請聯絡。

資料存取

Azure Notebooks

提示

改為下載筆記本

用來在 Azure 上存取想法資料的示範筆記本

此筆記本提供從 Azure 上的 blob 儲存體存取構思資料的範例。

請記住,資料會儲存在美國西部/美國東部資料中心,因此此筆記本可在位於 West/美國東部的 Azure 計算上更有效率地執行。

匯入和環境

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'

函式

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

下載並解壓縮檔案

# 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 讀取檔案

# 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

清除暫存檔案

shutil.rmtree(temp_dir)

範例

請參閱下列有關如何使用 Microsoft 新聞推薦資料集的範例:

下一步

查看Microsoft recommender 存放庫所開發的數個基準新聞建議模型

開啟的資料集目錄中,查看資料集的其餘部分。