趋近智
基于内容的过滤,其核心在于理解并量化 (quantization)一个物品的本质。在推荐与《阿凡达》(Avatar)相似的电影之前,我们首先需要一种结构化的方式来描述《阿凡达》的特征。这就是物品画像的作用:将物品的属性(或元数据)转化为机器学习 (machine learning)模型可以处理的一致格式。物品画像是物品的数字指纹,捕获了其最主要的特征。
大多数数据集都包含丰富的元数据,可用于构建这些画像。对于电影数据集,这些信息可能包括类型、导演、演员和剧情摘要等列。对于电子商务产品,可能是品牌、类别、颜色和技术规格。我们的首要任务是选择最相关的元数据片段,并将它们合并为每个物品的统一表示。
考虑一个简化的电影数据集:
| 电影 ID | 标题 | 类型 | 导演 | 关键词 |
|---|---|---|---|---|
| 1 | 阿凡达 | 动作, 冒险, 科幻 | 詹姆斯·卡梅隆 | 外星人, 行星, 陆战队 |
| 2 | 泰坦尼克号 | 剧情, 爱情 | 詹姆斯·卡梅隆 | 轮船, 冰山, 艺术家 |
| 3 | 黑暗骑士 | 动作, 剧情, 惊悚 | 克里斯托弗·诺兰 | 哥谭, 小丑, 蝙蝠侠 |
Genres(类型)、Director(导演)和 Keywords(关键词)等列中的原始元数据是我们的起点。然而,就目前的形式而言,它们并不适合直接比较。例如,我们如何防止系统将导演 “James Cameron” 与另一位名为 “James Gunn” 的导演混淆?一个常见的预处理步骤是将多词姓名合并为单个标记 (token)(例如,“James Cameron” 变为 “JamesCameron”)。同样,我们应该将所有文本转换为一致的大小写(通常是小写),以确保 “Action” 和 “action” 被视为同一个特征。
构建物品画像的一种简单有效的方法是将所有处理后的文本和类别特征合并为一个字符串,有时被称为“元数据汤”(metadata soup)。这个字符串作为对该物品的全面描述。
让我们将此应用于电影数据。我们将提取 Genres、Director 和 Keywords 列中的值,对其进行清理(小写、删除空格),然后将它们拼接起来。
import pandas as pd
# 示例电影数据
data = {
'movie_id': [1, 2, 3],
'title': ['Avatar', 'Titanic', 'The Dark Knight'],
'genres': ['Action, Adventure, Sci-Fi', 'Drama, Romance', 'Action, Drama, Thriller'],
'director': ['James Cameron', 'James Cameron', 'Christopher Nolan'],
'keywords': ['alien, planet, marine', 'ship, iceberg, artist', 'gotham, joker, batman']
}
movies_df = pd.DataFrame(data)
# 清理并合并特征的函数
def create_feature_soup(row):
# 将所有需要的特征合并为一个字符串
# 我们通过转换为小写并删除空格来清理数据
genres = ' '.join(row['genres'].replace(', ', ' ').lower().split())
director = row['director'].replace(' ', '').lower()
keywords = ' '.join(row['keywords'].replace(', ', ' ').lower().split())
return f"{genres} {director} {keywords}"
# 应用该函数创建一个包含合并特征的新列
movies_df['profile_features'] = movies_df.apply(create_feature_soup, axis=1)
print(movies_df[['title', 'profile_features']])
得到的 DataFrame 如下所示:
| title | profile_features |
|---|---|
| Avatar | action adventure sci-fi jamescameron alien planet marine |
| Titanic | drama romance jamescameron ship iceberg artist |
| The Dark Knight | action drama thriller christophernolan gotham joker batman |
现在,profile_features 列中的每个条目都是一个标准化且具有描述性的电影画像。下图展示了这一过程。
将原始的、分散的元数据转化为每个物品统一、整洁的特征字符串的过程。
通过创建这些统一的画像,我们已经成功地以一致的文本格式表示了每个物品的特征。我们为比较奠定了坚实的基础。然而,一串单词仍然无法直接用于余弦相似度等数学公式中。接下来的步骤是将这些文本画像转换为数值向量 (vector),这项任务非常适合 TF-IDF 技术,我们将在下一节中讲解。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•