处理多类分类问题但没有标签

数据挖掘 机器学习 深度学习 nlp 机器学习模型
2021-10-15 06:20:47

我正在处理一个业务问题,我有一个电影描述数据集。在这个数据集中,我的列是 - 电影标题、电影情节摘要、发行日期。现在基于这些信息并使用机器学习,我想预测电影属于哪个类别。例如 The Conjuring 应该属于 Horror 和 Thriller 即多类分类问题。现在的问题是除了电影描述和其他信息之外,我没有标签列。现在我希望我的模型能够预测一部电影(未见模型)应该属于哪些类别。我已经决定了我想考虑的 5 个标签——恐怖、惊悚、喜剧、浪漫和情感。所以,我希望数据集看起来像这样 -


魔术| 说明 | 标题 | 恐怖、惊悚


笔记本| 说明| 标题 | 浪漫、感性


我相信如果我想把这个问题作为一个分类问题来处理,那么我必须想办法通过一些脚本和逻辑为现​​有数据集创建标签。如果没有监督,那么如果我可以先进行聚类,然后根据数据点所在的位置,我可以稍后进行分类。

我试过什么?

一旦我决定了我的 5 个标签应该是什么,我为每个标签制作了 50 个同义词,然后迭代电影的描述,并根据单词的出现次数我设定频率,并根据大多数出现的频率,我决定一部电影应该属于哪个类别掉进。这种方法的结果非常糟糕。

我使用 K 表示数据中的集群,并尝试从集群中提取信息。虽然无法获得非常有意义的信息。

老实说,我很无知,只是想知道如何解决这个问题。

2个回答

您的具体问题可以通过谷歌搜索来解决。

这是一个解决方案

  1. 在 Google 中搜索“imdb [年份] [电影名称]”,
  2. 找到它的 IMDb 地址并获取 IMDb 页面,然后
  3. 在 IMDb 页面中搜索流派。

我将“浪漫”改为“浪漫”,将“情感”改为“戏剧”,以匹配 IMDb 词汇。

from requests import get
import re

titles=["2013+Conjuring", "2004+The+notebook"]
genres = ['horror', 'thriller', 'comedy', 'romance', 'drama']
matched_genres = {}
for title in titles:
  query = "https://www.google.com/search?q=imdb+" + title
  print(query)
  search_result = get(query).text.lower()
  imdb_id = re.findall("https://www.imdb.com/title/(tt\d+)/", search_result)[0]
  imdb_address = "https://www.imdb.com/title/%s/" % imdb_id
  print(imdb_address)
  imdb_result = get(imdb_address).text.lower()
  matched_genres[title] = []
  for genre in genres:
    # find ">genre<" inside tags
    if imdb_result.find(">%s<" % genre) > -1:  
      matched_genres[title].append(genre)

print(matched_genres)

输出

https://www.google.com/search?q=imdb+2013+Conjuring
https://www.imdb.com/title/tt1457767/
https://www.google.com/search?q=imdb+2004+The+notebook
https://www.imdb.com/title/tt0332280/
{'2013+Conjuring': ['horror', 'thriller'], '2004+The+notebook': ['romance', 'drama']}

该解决方案可以通过以下方式改进

  1. 并行查询电影片名,
  2. 直接查询IMDb API
  3. 处理边缘情况(例如,当第一个 IMDb url 不相关或没有找到 IMDb 页面时等),

等等。

由于您的问题不正是您所问的(看到您所做的评论),我可能会建议您的问题与多标签分类无关,而与摘要提取有关(摘要可以是单个关键字,例如“科幻小说”。您可以寻找主题建模算法开始。无论如何,您需要一些特定于任务的启发式来实现您想要的,因为您的问题没有很好地形式化为机器学习任务。