我们如何提取有关主题的部分文本? 1数据准备 2主题分类

问题描述

我想进行主题建模,但就我而言:一篇文章可能包含许多主题我有一篇文章(word文件),其中包含几个主题,每个主题都与一家公司相关联(请参见下面的示例)

我有一个输入文字

“ IBM是一家专门从事IT领域的国际公司,另一方面,Facebook是社交网络,而Google是搜索引擎。IBM发明了非常强大的计算机。”

知道我们已经标记了以下主题:“产品和服务”,“通信”,“产品和服务” ...

我想要作为输出

IBM : Products and services
Facebook : Communications
Google : Products and services

因此,我认为我们可以通过拆分文本来做到这一点:例如,将涉及公司的文本部分关联起来:

IBM : ['IBM is an international company specializing in all that is IT','IBM invented a very powerful computer.']
Facebook : ['Facebook is a social network']
Google : ['Google is a search engine']
然后,对于每个公司,根据每个公司的文本部分执行主题建模... 输出
IBM : Products and services
Facebook : Communications
Google : Products and services

您能帮我如何将文本的各个部分拆分和匹配到各个公司,如何确定在其中谈论Facebook的各个部分

解决方法

您似乎有两个不同的问题:(1)数据准备/清理,即将文本拆分为正确的单位进行分析; (2)将不同的文本单元分类为“主题”。

1。数据准备

一种“简便”的方法是将文本分为句子,然后将句子用作分析单位。例如,Spacy对此很有用(例如,请参见此answer here)。由于您想进一步拆分句子,因此示例更加困难,因此您必须想出一种自定义逻辑来根据特定模式拆分文本,例如使用正则表达式。我认为没有标准的方法可以做到这一点,并且很大程度上取决于您的数据。

2。主题分类

如果我的理解正确,那么您已经具有要归因于不同文本的标签(“主题”,例如[“产品和服务”,“通讯”)。 在这种情况下,主题建模可能不是正确的工具,因为当您要发现新主题并且尚不知道主题/标签时,通常会使用主题建模。无论如何,主题模型将仅返回与主题相关的最频繁/排他的单词,而不返回整洁的抽象主题标签(如“产品和服务”)。您还需要足够的文本来使主题模型产生有意义的输出。

一个更优雅的解决方案是零镜头分类。这基本上意味着您采用了一种通用的机器学习模型,该模型已经以非常通用的方式由其他人进行了预训练,以进行文本分类,并且您只需将其应用于特定的用例进行“主题分类”即可,而无需进行训练/优化-调整它。 Transformers库具有非常易于使用的实现。

# pip install transformers==3.1.0  # pip install in terminal
from transformers import pipeline

classifier = pipeline("zero-shot-classification")

sequence1 = "IBM is an international company specializing in all that is IT"
sequence2 = "Facebook is a social network."
sequence3 = "Google is a search engine. "
candidate_labels = ["Products and services","Communications"]

classifier(sequence1,candidate_labels)
# output: {'labels': ['Products and services','Communications'],'scores': [0.8678683042526245,0.1321316659450531]}
classifier(sequence2,candidate_labels)
# output: {'labels': ['Communications','Products and services'],'scores': [0.525628387928009,0.47437164187431335]}
classifier(sequence3,'scores': [0.5514479279518127,0.44855210185050964]}

=>它会根据您的示例和标签正确分类所有文本。得分最高的标签(“主题”)是模型认为最适合您的文本的标签。请注意,您必须认真考虑哪些标签最合适。在您的示例中,作为一个人,我什至不能确定哪个人更合适,并且模型也不是很确定。使用这种零镜头分类方法,您可以选择最合适的主题标签。

这里是一个interactive web application,用于查看不进行编码的情况。这是Jupyter notebook,演示了如何在Python中使用它。您只需从笔记本中复制粘贴代码即可。